Android video app preview orientation
January 30, 2016 11:34 am
The android video app preview orientation tutorial describes how to adjust the TextureView width & height dimensions so that they can be compared against the values supplied from the camera sensor.
Get Code
The code to start this tutorial is on github here
https://github.com/mobapptuts/android_camera2_api_video_app.git Tag camera2-video-preview-orientation
or you can run this command
git clone https://github.com/mobapptuts/android_camera2_api_video_app.git –branch camera2-video-preview-orientation
Steps
Setup the ORIENTATIONS array
private static final SparseIntArray ORIENTATIONS = new SparseIntArray(); static { ORIENTATIONS.append(Surface.ROTATION_0, 0); ORIENTATIONS.append(Surface.ROTATION_90, 90); ORIENTATIONS.append(Surface.ROTATION_180, 180); ORIENTATIONS.append(Surface.ROTATION_270, 270); }
Calculate the camera sensor orientation in relation to the device orientation
private static int sensorToDeviceRotation(CameraCharacteristics c, int deviceOrientation) { int sensorOrientation = c.get(CameraCharacteristics.SENSOR_ORIENTATION); // Get device orientation in degrees deviceOrientation = ORIENTATIONS.get(deviceOrientation); // Calculate desired JPEG orientation relative to camera orientation to make // the image upright relative to the device orientation return (sensorOrientation + deviceOrientation + 360) % 360; }
Calculate the view dimensions required to match the preview & video output sizes
private void setupCamera(int width, int height) { CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); try { for(String cameraId : cameraManager.getCameraIdList()){ CameraCharacteristics cameraCharacteristics = cameraManager.getCameraCharacteristics(cameraId); if(cameraCharacteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT){ continue; } int deviceOrientation = getWindowManager().getDefaultDisplay().getRotation(); int totalRotation = sensorToDeviceRotation(cameraCharacteristics, deviceOrientation); boolean swapRotation = totalRotation == 90 || totalRotation == 270; int rotatedWidth = width; int rotatedHeight = height; if(swapRotation) { rotatedWidth = height; rotatedHeight = width; } mCameraId = cameraId; return; } } catch (CameraAccessException e) { e.printStackTrace(); } }
Android video app preview orientation summary
In the android video app TextureView dimensions summary tutorial we were learnt how to
- Find the orientation values for the device and camera sensor to calculate the correct orientation
- Work out the correct TextureView width & height to be used to match against the video & preview output sizes.
Category: Camera2 API Video, tutorials