diff options
8 files changed, 38 insertions, 11 deletions
diff --git a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2AgentImpl.java b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2AgentImpl.java index 88be114..a746634 100644 --- a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2AgentImpl.java +++ b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2AgentImpl.java @@ -510,12 +510,18 @@ class AndroidCamera2AgentImpl extends CameraAgent { case CameraActions.SET_DISPLAY_ORIENTATION: { // Only set the JPEG capture orientation if requested to do so; otherwise, - // capture in the sensor's physical orientation + // capture in the sensor's physical orientation. (e.g., JPEG rotation is + // necessary in auto-rotate mode. mPersistentSettings.set(CaptureRequest.JPEG_ORIENTATION, msg.arg2 > 0 ? mCameraProxy.getCharacteristics().getJpegOrientation(msg.arg1) : 0); break; } + case CameraActions.SET_JPEG_ORIENTATION: { + mPersistentSettings.set(CaptureRequest.JPEG_ORIENTATION, msg.arg1); + break; + } + case CameraActions.CAPTURE_PHOTO: { if (mCameraState.getState() < AndroidCamera2StateHolder.CAMERA_PREVIEW_ACTIVE) { @@ -1093,7 +1099,7 @@ class AndroidCamera2AgentImpl extends CameraAgent { new CaptureAvailableListener() { @Override public void onCaptureStarted(CameraCaptureSession session, CaptureRequest request, - long timestamp) { + long timestamp, long frameNumber) { if (shutter != null) { handler.post(new Runnable() { @Override diff --git a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java index 3704f59..1aac446 100644 --- a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java +++ b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java @@ -489,11 +489,21 @@ class AndroidCameraAgentImpl extends CameraAgent { mCamera.setDisplayOrientation( mCharacteristics.getPreviewOrientation(msg.arg1)); // Only set the JPEG capture orientation if requested to do so; otherwise, - // capture in the sensor's physical orientation + // capture in the sensor's physical orientation. (e.g., JPEG rotation is + // necessary in auto-rotate mode. Parameters parameters = mParameterCache.getBlocking(); parameters.setRotation( msg.arg2 > 0 ? mCharacteristics.getJpegOrientation(msg.arg1) : 0); mCamera.setParameters(parameters); + mParameterCache.invalidate(); + break; + } + + case CameraActions.SET_JPEG_ORIENTATION: { + Parameters parameters = mParameterCache.getBlocking(); + parameters.setRotation(msg.arg1); + mCamera.setParameters(parameters); + mParameterCache.invalidate(); break; } diff --git a/camera2/portability/src/com/android/ex/camera2/portability/CameraActions.java b/camera2/portability/src/com/android/ex/camera2/portability/CameraActions.java index 03bfc03..407fbb1 100644 --- a/camera2/portability/src/com/android/ex/camera2/portability/CameraActions.java +++ b/camera2/portability/src/com/android/ex/camera2/portability/CameraActions.java @@ -51,6 +51,7 @@ class CameraActions { // Presentation public static final int ENABLE_SHUTTER_SOUND = 501; public static final int SET_DISPLAY_ORIENTATION = 502; + public static final int SET_JPEG_ORIENTATION = 503; // Capture public static final int CAPTURE_PHOTO = 601; diff --git a/camera2/portability/src/com/android/ex/camera2/portability/CameraAgent.java b/camera2/portability/src/com/android/ex/camera2/portability/CameraAgent.java index 475523d..17cbc02 100644 --- a/camera2/portability/src/com/android/ex/camera2/portability/CameraAgent.java +++ b/camera2/portability/src/com/android/ex/camera2/portability/CameraAgent.java @@ -677,6 +677,16 @@ public abstract class CameraAgent { }}); } + public void setJpegOrientation(final int degrees) { + getDispatchThread().runJob(new Runnable() { + @Override + public void run() { + getCameraHandler() + .obtainMessage(CameraActions.SET_JPEG_ORIENTATION, degrees, 0) + .sendToTarget(); + }}); + } + /** * Sets the listener for zoom change. * diff --git a/camera2/public/src/com/android/ex/camera2/blocking/BlockingCaptureCallback.java b/camera2/public/src/com/android/ex/camera2/blocking/BlockingCaptureCallback.java index 4fb2c43..f55437f 100644 --- a/camera2/public/src/com/android/ex/camera2/blocking/BlockingCaptureCallback.java +++ b/camera2/public/src/com/android/ex/camera2/blocking/BlockingCaptureCallback.java @@ -123,8 +123,8 @@ public class BlockingCaptureCallback extends CameraCaptureSession.CaptureCallbac @Override public void onCaptureStarted(CameraCaptureSession session, CaptureRequest request, - long timestamp) { - if (mProxy != null) mProxy.onCaptureStarted(session, request, timestamp); + long timestamp, long frameNumber) { + if (mProxy != null) mProxy.onCaptureStarted(session, request, timestamp, frameNumber); mStateChangeListener.onStateChanged(CAPTURE_STARTED); } diff --git a/camera2/utils/src/com/android/ex/camera2/utils/Camera2CaptureCallbackForwarder.java b/camera2/utils/src/com/android/ex/camera2/utils/Camera2CaptureCallbackForwarder.java index 97b5b6e..e6988b5 100644 --- a/camera2/utils/src/com/android/ex/camera2/utils/Camera2CaptureCallbackForwarder.java +++ b/camera2/utils/src/com/android/ex/camera2/utils/Camera2CaptureCallbackForwarder.java @@ -89,11 +89,11 @@ public class Camera2CaptureCallbackForwarder extends CaptureCallback { @Override public void onCaptureStarted(final CameraCaptureSession session, final CaptureRequest request, - final long timestamp) { + final long timestamp, final long frameNumber) { mHandler.post(new Runnable() { @Override public void run() { - mListener.onCaptureStarted(session, request, timestamp); + mListener.onCaptureStarted(session, request, timestamp, frameNumber); }}); } } diff --git a/camera2/utils/src/com/android/ex/camera2/utils/Camera2CaptureCallbackSplitter.java b/camera2/utils/src/com/android/ex/camera2/utils/Camera2CaptureCallbackSplitter.java index f813076..86c6070 100644 --- a/camera2/utils/src/com/android/ex/camera2/utils/Camera2CaptureCallbackSplitter.java +++ b/camera2/utils/src/com/android/ex/camera2/utils/Camera2CaptureCallbackSplitter.java @@ -87,9 +87,9 @@ public class Camera2CaptureCallbackSplitter extends CaptureCallback { @Override public void onCaptureStarted(CameraCaptureSession session, CaptureRequest request, - long timestamp) { + long timestamp, long frameNumber) { for (CaptureCallback target : mRecipients) { - target.onCaptureStarted(session, request, timestamp); + target.onCaptureStarted(session, request, timestamp, frameNumber); } } } diff --git a/camera2/utils/tests/src/com/android/ex/camera2/utils/Camera2UtilsTest.java b/camera2/utils/tests/src/com/android/ex/camera2/utils/Camera2UtilsTest.java index 3156cf7..ea320a7 100644 --- a/camera2/utils/tests/src/com/android/ex/camera2/utils/Camera2UtilsTest.java +++ b/camera2/utils/tests/src/com/android/ex/camera2/utils/Camera2UtilsTest.java @@ -55,9 +55,9 @@ public class Camera2UtilsTest extends Camera2DeviceTester { for (CaptureCallback each : terminals) { verify(each).onCaptureSequenceCompleted(null, 0, 0L); } - splitter.onCaptureStarted(null, null, 0L); + splitter.onCaptureStarted(null, null, 0L, 1L); for (CaptureCallback each : terminals) { - verify(each).onCaptureStarted(null, null, 0L); + verify(each).onCaptureStarted(null, null, 0L, 1L); } } |