diff options
16 files changed, 135 insertions, 98 deletions
diff --git a/camera2/Android.mk b/camera2/Android.mk index 9ac4a8a..3719578 100644 --- a/camera2/Android.mk +++ b/camera2/Android.mk @@ -12,4 +12,5 @@ # See the License for the specific language governing permissions and # limitations under the License. +# Build all subprojects include $(call all-subdir-makefiles) 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 3e74536..ce9a8b8 100644 --- a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2AgentImpl.java +++ b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2AgentImpl.java @@ -160,7 +160,7 @@ class AndroidCamera2AgentImpl extends CameraAgent { } private static abstract class CaptureAvailableListener - extends CameraCaptureSession.CaptureListener + extends CameraCaptureSession.CaptureCallback implements ImageReader.OnImageAvailableListener {}; private class Camera2Handler extends HistoryHandler { @@ -233,7 +233,7 @@ class AndroidCamera2AgentImpl extends CameraAgent { mOpenCallback.onCameraDisabled(msg.arg1); break; } - mCameraManager.openCamera(mCameraId, mCameraDeviceStateListener, this); + mCameraManager.openCamera(mCameraId, mCameraDeviceStateCallback, this); break; } @@ -299,7 +299,7 @@ class AndroidCamera2AgentImpl extends CameraAgent { mSession.setRepeatingRequest( mPersistentSettings.createRequest(mCamera, CameraDevice.TEMPLATE_PREVIEW, mPreviewSurface), - /*listener*/mCameraResultStateListener, /*handler*/this); + /*listener*/mCameraResultStateCallback, /*handler*/this); } catch(CameraAccessException ex) { Log.w(TAG, "Unable to start preview", ex); changeState(AndroidCamera2StateHolder.CAMERA_PREVIEW_READY); @@ -386,8 +386,8 @@ class AndroidCamera2AgentImpl extends CameraAgent { // However, it will probably take longer than that, so once that happens, // just start checking the repeating preview requests as they complete. final CameraAFCallback callback = (CameraAFCallback) msg.obj; - CameraCaptureSession.CaptureListener deferredCallbackSetter = - new CameraCaptureSession.CaptureListener() { + CameraCaptureSession.CaptureCallback deferredCallbackSetter = + new CameraCaptureSession.CaptureCallback() { private boolean mAlreadyDispatched = false; @Override @@ -407,13 +407,13 @@ class AndroidCamera2AgentImpl extends CameraAgent { private void checkAfState(CaptureResult result) { if (result.get(CaptureResult.CONTROL_AF_STATE) != null && !mAlreadyDispatched) { - // Now our mCameraResultStateListener will invoke the callback + // Now our mCameraResultStateCallback will invoke the callback // the first time it finds the focus motor to be locked. mAlreadyDispatched = true; mOneshotAfCallback = callback; // This is an optimization: check the AF state of this frame // instead of simply waiting for the next. - mCameraResultStateListener.monitorControlStates(result); + mCameraResultStateCallback.monitorControlStates(result); } } @@ -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) { @@ -559,8 +565,8 @@ class AndroidCamera2AgentImpl extends CameraAgent { // trigger capture has made it into the pipeline, we'll start checking // for the completion of that convergence, capturing when that happens. Log.i(TAG, "Forcing pre-capture autoexposure convergence"); - CameraCaptureSession.CaptureListener deferredCallbackSetter = - new CameraCaptureSession.CaptureListener() { + CameraCaptureSession.CaptureCallback deferredCallbackSetter = + new CameraCaptureSession.CaptureCallback() { private boolean mAlreadyDispatched = false; @Override @@ -580,13 +586,13 @@ class AndroidCamera2AgentImpl extends CameraAgent { private void checkAeState(CaptureResult result) { if (result.get(CaptureResult.CONTROL_AE_STATE) != null && !mAlreadyDispatched) { - // Now our mCameraResultStateListener will invoke the + // Now our mCameraResultStateCallback will invoke the // callback once the autoexposure routine has converged. mAlreadyDispatched = true; mOneshotCaptureCallback = listener; // This is an optimization: check the AE state of this frame // instead of simply waiting for the next. - mCameraResultStateListener.monitorControlStates(result); + mCameraResultStateCallback.monitorControlStates(result); } } @@ -682,7 +688,7 @@ class AndroidCamera2AgentImpl extends CameraAgent { mSession.setRepeatingRequest( mPersistentSettings.createRequest(mCamera, CameraDevice.TEMPLATE_PREVIEW, mPreviewSurface), - /*listener*/mCameraResultStateListener, /*handler*/this); + /*listener*/mCameraResultStateCallback, /*handler*/this); } catch (CameraAccessException ex) { Log.e(TAG, "Failed to apply updated request settings", ex); } @@ -729,7 +735,7 @@ class AndroidCamera2AgentImpl extends CameraAgent { try { mCamera.createCaptureSession( Arrays.asList(mPreviewSurface, mCaptureReader.getSurface()), - mCameraPreviewStateListener, this); + mCameraPreviewStateCallback, this); } catch (CameraAccessException ex) { Log.e(TAG, "Failed to create camera capture session", ex); } @@ -750,14 +756,14 @@ class AndroidCamera2AgentImpl extends CameraAgent { mCameraState.setState(newState); if (newState < AndroidCamera2StateHolder.CAMERA_PREVIEW_ACTIVE) { mCurrentAeState = CaptureResult.CONTROL_AE_STATE_INACTIVE; - mCameraResultStateListener.resetState(); + mCameraResultStateCallback.resetState(); } } } - // This listener monitors our connection to and disconnection from camera devices. - private CameraDevice.StateListener mCameraDeviceStateListener = - new CameraDevice.StateListener() { + // This callback monitors our connection to and disconnection from camera devices. + private CameraDevice.StateCallback mCameraDeviceStateCallback = + new CameraDevice.StateCallback() { @Override public void onOpened(CameraDevice camera) { mCamera = camera; @@ -797,9 +803,9 @@ class AndroidCamera2AgentImpl extends CameraAgent { } }}; - // This listener monitors our camera session (i.e. our transition into and out of preview). - private CameraCaptureSession.StateListener mCameraPreviewStateListener = - new CameraCaptureSession.StateListener() { + // This callback monitors our camera session (i.e. our transition into and out of preview). + private CameraCaptureSession.StateCallback mCameraPreviewStateCallback = + new CameraCaptureSession.StateCallback() { @Override public void onConfigured(CameraCaptureSession session) { mSession = session; @@ -821,16 +827,16 @@ class AndroidCamera2AgentImpl extends CameraAgent { } }}; - private abstract class CameraResultStateListener - extends CameraCaptureSession.CaptureListener { + private abstract class CameraResultStateCallback + extends CameraCaptureSession.CaptureCallback { public abstract void monitorControlStates(CaptureResult result); public abstract void resetState(); } - // This listener monitors requested captures and notifies any relevant callbacks. - private CameraResultStateListener mCameraResultStateListener = - new CameraResultStateListener() { + // This callback monitors requested captures and notifies any relevant callbacks. + private CameraResultStateCallback mCameraResultStateCallback = + new CameraResultStateCallback() { private int mLastAfState = -1; private long mLastAfFrameNumber = -1; private long mLastAeFrameNumber = -1; @@ -924,7 +930,7 @@ class AndroidCamera2AgentImpl extends CameraAgent { mPersistentSettings.createRequest(mCamera, CameraDevice.TEMPLATE_STILL_CAPTURE, mCaptureReader.getSurface()), - /*listener*/mOneshotCaptureCallback, + /*callback*/mOneshotCaptureCallback, /*handler*/Camera2Handler.this); } catch (CameraAccessException ex) { Log.e(TAG, "Unable to initiate capture", ex); diff --git a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2Settings.java b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2Settings.java index d668f85..540d8df 100644 --- a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2Settings.java +++ b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2Settings.java @@ -206,7 +206,7 @@ public class AndroidCamera2Settings extends CameraSettings { } else if (setting == CONTROL_AF_REGIONS) { return mFocusAreas.size() == 0; } else if (setting == CONTROL_AE_TARGET_FPS_RANGE) { - Range defaultFpsRange = mTemplateSettings.get(CONTROL_AE_TARGET_FPS_RANGE); + Range<Integer> defaultFpsRange = mTemplateSettings.get(CONTROL_AE_TARGET_FPS_RANGE); return (mPreviewFpsRangeMin == 0 && mPreviewFpsRangeMax == 0) || (defaultFpsRange != null && mPreviewFpsRangeMin == defaultFpsRange.getLower() && mPreviewFpsRangeMax == defaultFpsRange.getUpper()); 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 2edd7e4..1aac446 100644 --- a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java +++ b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java @@ -225,6 +225,10 @@ class AndroidCameraAgentImpl extends CameraAgent { public synchronized Parameters getBlocking() { if (mParameters == null) { mParameters = mCamera.getParameters(); + if (mParameters == null) { + Log.e(TAG, "Camera object returned null parameters!"); + throw new IllegalStateException("camera.getParameters returned null"); + } } return mParameters; } @@ -485,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; } @@ -930,9 +944,8 @@ class AndroidCameraAgentImpl extends CameraAgent { mDispatchThread.runJobSync(new Runnable() { @Override public void run() { - Message getParametersMessage = mCameraHandler.obtainMessage( - CameraActions.GET_PARAMETERS, parametersHolder); - mCameraHandler.sendMessage(getParametersMessage); + mCameraHandler.obtainMessage( + CameraActions.GET_PARAMETERS, parametersHolder).sendToTarget(); mCameraHandler.post(bundle.mUnlockRunnable); } }, bundle.mWaitLock, CAMERA_OPERATION_TIMEOUT_MS, "get parameters"); 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/portability/src/com/android/ex/camera2/portability/LegacyVendorTags.java b/camera2/portability/src/com/android/ex/camera2/portability/LegacyVendorTags.java index e55748d..7eb5c33 100644 --- a/camera2/portability/src/com/android/ex/camera2/portability/LegacyVendorTags.java +++ b/camera2/portability/src/com/android/ex/camera2/portability/LegacyVendorTags.java @@ -17,6 +17,7 @@ package com.android.ex.camera2.portability; import android.hardware.camera2.CameraCharacteristics; +import android.util.Log; import java.lang.ExceptionInInitializerError; import java.lang.reflect.Field; @@ -27,19 +28,24 @@ import java.lang.reflect.Method; */ public class LegacyVendorTags { + private static final String TAG = "LegacyVendorTags"; + /** * Hidden enum for scene modes supported only by the Camera1 API. */ public static final int CONTROL_SCENE_MODE_HDR; static { + int tempSceneMode = -1; try { - CONTROL_SCENE_MODE_HDR = + tempSceneMode = Class.forName("android.hardware.camera2.CameraCharacteristics"). getField("CONTROL_SCENE_MODE_HDR").getInt(null); } catch (Exception e) { - throw new ExceptionInInitializerError( - "Error while reflecting on LegacyVendorTags: " + e); + Log.e(TAG, "Error while reflecting on SCENE_MODE_HDR enum, HDR will not be available: " + + e); + } finally { + CONTROL_SCENE_MODE_HDR = tempSceneMode; } } diff --git a/camera2/public/src/com/android/ex/camera2/blocking/BlockingCameraManager.java b/camera2/public/src/com/android/ex/camera2/blocking/BlockingCameraManager.java index 02dbbba..407a08a 100644 --- a/camera2/public/src/com/android/ex/camera2/blocking/BlockingCameraManager.java +++ b/camera2/public/src/com/android/ex/camera2/blocking/BlockingCameraManager.java @@ -66,7 +66,7 @@ public class BlockingCameraManager { /** * Returns the error code {@link ERROR_DISCONNECTED} if disconnected, or one of - * {@code CameraDevice.StateListener#ERROR_*} if there was another error. + * {@code CameraDevice.StateCallback#ERROR_*} if there was another error. * * @return int Disconnect/error code */ @@ -81,7 +81,7 @@ public class BlockingCameraManager { * @param errorCode * @param message * - * @see {@link CameraDevice.StateListener#ERROR_CAMERA_DEVICE} + * @see {@link CameraDevice.StateCallback#ERROR_CAMERA_DEVICE} */ public BlockingOpenException(int errorCode, String message) { super(message); @@ -117,8 +117,8 @@ public class BlockingCameraManager { * does.</p> * * <p>Throws {@link BlockingOpenException} when the open fails asynchronously (due to - * {@link CameraDevice.StateListener#onDisconnected(CameraDevice)} or - * ({@link CameraDevice.StateListener#onError(CameraDevice)}.</p> + * {@link CameraDevice.StateCallback#onDisconnected(CameraDevice)} or + * ({@link CameraDevice.StateCallback#onError(CameraDevice)}.</p> * * <p>Throws {@link TimeoutRuntimeException} if opening times out. This is usually * highly unrecoverable, and all future calls to opening that camera will fail since the @@ -142,7 +142,7 @@ public class BlockingCameraManager { * @throws TimeoutRuntimeException * If opening times out. Typically unrecoverable. */ - public CameraDevice openCamera(String cameraId, CameraDevice.StateListener listener, + public CameraDevice openCamera(String cameraId, CameraDevice.StateCallback listener, Handler handler) throws CameraAccessException, BlockingOpenException { if (handler == null) { @@ -163,17 +163,17 @@ public class BlockingCameraManager { /** * Block until CameraManager#openCamera finishes with onOpened/onError/onDisconnected * - * <p>Pass-through all StateListener changes to the proxy.</p> + * <p>Pass-through all StateCallback changes to the proxy.</p> * * <p>Time out after {@link #OPEN_TIME_OUT} and unblock. Clean up camera if it arrives * later.</p> */ - private class OpenListener extends CameraDevice.StateListener { + private class OpenListener extends CameraDevice.StateCallback { private static final int ERROR_UNINITIALIZED = -1; private final String mCameraId; - private final CameraDevice.StateListener mProxy; + private final CameraDevice.StateCallback mProxy; private final Object mLock = new Object(); private final ConditionVariable mDeviceReady = new ConditionVariable(); @@ -187,7 +187,7 @@ public class BlockingCameraManager { private boolean mTimedOut = false; OpenListener(CameraManager manager, String cameraId, - CameraDevice.StateListener listener, Handler handler) + CameraDevice.StateCallback listener, Handler handler) throws CameraAccessException { mCameraId = cameraId; mProxy = listener; diff --git a/camera2/public/src/com/android/ex/camera2/blocking/BlockingCaptureListener.java b/camera2/public/src/com/android/ex/camera2/blocking/BlockingCaptureCallback.java index eae85d1..4fb2c43 100644 --- a/camera2/public/src/com/android/ex/camera2/blocking/BlockingCaptureListener.java +++ b/camera2/public/src/com/android/ex/camera2/blocking/BlockingCaptureCallback.java @@ -36,7 +36,7 @@ import com.android.ex.camera2.utils.StateWaiter; * * @see #getStateWaiter */ -public class BlockingCaptureListener extends CameraCaptureSession.CaptureListener { +public class BlockingCaptureCallback extends CameraCaptureSession.CaptureCallback { /** * {@link #onCaptureStarted} has been called. @@ -80,10 +80,10 @@ public class BlockingCaptureListener extends CameraCaptureSession.CaptureListene "CAPTURE_SEQUENCE_ABORTED" }; - private static final String TAG = "BlockingCaptureListener"; + private static final String TAG = "BlockingCaptureCallback"; private static final boolean VERBOSE = Log.isLoggable(TAG, Log.VERBOSE); - private final CameraCaptureSession.CaptureListener mProxy; + private final CameraCaptureSession.CaptureCallback mProxy; private final StateWaiter mStateWaiter = new StateWaiter(sStateNames); private final StateChangeListener mStateChangeListener = mStateWaiter.getListener(); @@ -92,7 +92,7 @@ public class BlockingCaptureListener extends CameraCaptureSession.CaptureListene * Create a blocking capture listener without forwarding the capture listener invocations * to another capture listener. */ - public BlockingCaptureListener() { + public BlockingCaptureCallback() { mProxy = null; } @@ -104,7 +104,7 @@ public class BlockingCaptureListener extends CameraCaptureSession.CaptureListene * * @throws NullPointerException if {@code listener} was {@code null} */ - public BlockingCaptureListener(CameraCaptureSession.CaptureListener listener) { + public BlockingCaptureCallback(CameraCaptureSession.CaptureCallback listener) { if (listener == null) { throw new NullPointerException("listener must not be null"); } diff --git a/camera2/public/src/com/android/ex/camera2/blocking/BlockingSessionListener.java b/camera2/public/src/com/android/ex/camera2/blocking/BlockingSessionCallback.java index 26bb652..e041d27 100644 --- a/camera2/public/src/com/android/ex/camera2/blocking/BlockingSessionListener.java +++ b/camera2/public/src/com/android/ex/camera2/blocking/BlockingSessionCallback.java @@ -36,11 +36,11 @@ import java.util.concurrent.TimeoutException; * <p>Provides a waiter that can be used to block until the next unobserved state of the * requested type arrives.</p> * - * <p>Pass-through all StateListener changes to the proxy.</p> + * <p>Pass-through all StateCallback changes to the proxy.</p> * * @see #getStateWaiter */ -public class BlockingSessionListener extends CameraCaptureSession.StateListener { +public class BlockingSessionCallback extends CameraCaptureSession.StateCallback { /** * Session is configured, ready for captures */ @@ -71,10 +71,10 @@ public class BlockingSessionListener extends CameraCaptureSession.StateListener /* * Private fields */ - private static final String TAG = "BlockingSessionListener"; + private static final String TAG = "BlockingSessionCallback"; private static final boolean VERBOSE = Log.isLoggable(TAG, Log.VERBOSE); - private final CameraCaptureSession.StateListener mProxy; + private final CameraCaptureSession.StateCallback mProxy; private final SessionFuture mSessionFuture = new SessionFuture(); private final StateWaiter mStateWaiter = new StateWaiter(sStateNames); @@ -92,7 +92,7 @@ public class BlockingSessionListener extends CameraCaptureSession.StateListener * Create a blocking session listener without forwarding the session listener invocations * to another session listener. */ - public BlockingSessionListener() { + public BlockingSessionCallback() { mProxy = null; } @@ -104,7 +104,7 @@ public class BlockingSessionListener extends CameraCaptureSession.StateListener * * @throws NullPointerException if {@code listener} was {@code null} */ - public BlockingSessionListener(CameraCaptureSession.StateListener listener) { + public BlockingSessionCallback(CameraCaptureSession.StateCallback listener) { if (listener == null) { throw new NullPointerException("listener must not be null"); } @@ -142,7 +142,7 @@ public class BlockingSessionListener extends CameraCaptureSession.StateListener } /* - * CameraCaptureSession.StateListener implementation + * CameraCaptureSession.StateCallback implementation */ @Override diff --git a/camera2/public/src/com/android/ex/camera2/blocking/BlockingStateListener.java b/camera2/public/src/com/android/ex/camera2/blocking/BlockingStateCallback.java index 02c2ba3..5f93fbc 100644 --- a/camera2/public/src/com/android/ex/camera2/blocking/BlockingStateListener.java +++ b/camera2/public/src/com/android/ex/camera2/blocking/BlockingStateCallback.java @@ -36,14 +36,14 @@ import java.util.concurrent.TimeUnit; * the last wait, or that will be received from the camera device in the * future.</p> * - * <p>Pass-through all StateListener changes to the proxy.</p> + * <p>Pass-through all StateCallback changes to the proxy.</p> * */ -public class BlockingStateListener extends CameraDevice.StateListener { - private static final String TAG = "BlockingStateListener"; +public class BlockingStateCallback extends CameraDevice.StateCallback { + private static final String TAG = "BlockingStateCallback"; private static final boolean VERBOSE = Log.isLoggable(TAG, Log.VERBOSE); - private final CameraDevice.StateListener mProxy; + private final CameraDevice.StateCallback mProxy; // Guards mWaiting private final Object mLock = new Object(); @@ -99,11 +99,11 @@ public class BlockingStateListener extends CameraDevice.StateListener { */ private static int NUM_STATES = 4; - public BlockingStateListener() { + public BlockingStateCallback() { mProxy = null; } - public BlockingStateListener(CameraDevice.StateListener listener) { + public BlockingStateCallback(CameraDevice.StateCallback listener) { mProxy = listener; } diff --git a/camera2/public/src/com/android/ex/camera2/pos/AutoFocusStateMachine.java b/camera2/public/src/com/android/ex/camera2/pos/AutoFocusStateMachine.java index 9fa2af2..e8a3ab6 100644 --- a/camera2/public/src/com/android/ex/camera2/pos/AutoFocusStateMachine.java +++ b/camera2/public/src/com/android/ex/camera2/pos/AutoFocusStateMachine.java @@ -91,7 +91,7 @@ public class AutoFocusStateMachine { /** * Invoke every time we get a new CaptureResult via - * {@link CameraDevice.CaptureListener#onCaptureCompleted}. + * {@link CameraDevice.CaptureCallback#onCaptureCompleted}. * * <p>This function is responsible for dispatching updates via the * {@link AutoFocusStateListener} so without calling this on a regular basis, no diff --git a/camera2/utils/src/com/android/ex/camera2/utils/Camera2CaptureListenerForwarder.java b/camera2/utils/src/com/android/ex/camera2/utils/Camera2CaptureCallbackForwarder.java index 35b1c6d..97b5b6e 100644 --- a/camera2/utils/src/com/android/ex/camera2/utils/Camera2CaptureListenerForwarder.java +++ b/camera2/utils/src/com/android/ex/camera2/utils/Camera2CaptureCallbackForwarder.java @@ -17,7 +17,7 @@ package com.android.ex.camera2.utils; import android.hardware.camera2.CameraCaptureSession; -import android.hardware.camera2.CameraCaptureSession.CaptureListener; +import android.hardware.camera2.CameraCaptureSession.CaptureCallback; import android.hardware.camera2.CaptureFailure; import android.hardware.camera2.CaptureRequest; import android.hardware.camera2.CaptureResult; @@ -25,14 +25,14 @@ import android.hardware.camera2.TotalCaptureResult; import android.os.Handler; /** - * Proxy that forwards all updates to another {@link CaptureListener}, invoking + * Proxy that forwards all updates to another {@link CaptureCallback}, invoking * its callbacks on a separate {@link Handler}. */ -public class Camera2CaptureListenerForwarder extends CaptureListener { - private CaptureListener mListener; +public class Camera2CaptureCallbackForwarder extends CaptureCallback { + private CaptureCallback mListener; private Handler mHandler; - public Camera2CaptureListenerForwarder(CaptureListener listener, Handler handler) { + public Camera2CaptureCallbackForwarder(CaptureCallback listener, Handler handler) { mListener = listener; mHandler = handler; } diff --git a/camera2/utils/src/com/android/ex/camera2/utils/Camera2CaptureListenerSplitter.java b/camera2/utils/src/com/android/ex/camera2/utils/Camera2CaptureCallbackSplitter.java index a13dc04..f813076 100644 --- a/camera2/utils/src/com/android/ex/camera2/utils/Camera2CaptureListenerSplitter.java +++ b/camera2/utils/src/com/android/ex/camera2/utils/Camera2CaptureCallbackSplitter.java @@ -17,7 +17,7 @@ package com.android.ex.camera2.utils; import android.hardware.camera2.CameraCaptureSession; -import android.hardware.camera2.CameraCaptureSession.CaptureListener; +import android.hardware.camera2.CameraCaptureSession.CaptureCallback; import android.hardware.camera2.CaptureFailure; import android.hardware.camera2.CaptureRequest; import android.hardware.camera2.CaptureResult; @@ -28,18 +28,18 @@ import java.util.LinkedList; import java.util.List; /** - * Junction that allows notifying multiple {@link CaptureListener}s whenever + * Junction that allows notifying multiple {@link CaptureCallback}s whenever * the {@link CameraCaptureSession} posts a capture-related update. */ -public class Camera2CaptureListenerSplitter extends CaptureListener { - private final List<CaptureListener> mRecipients = new LinkedList<>(); +public class Camera2CaptureCallbackSplitter extends CaptureCallback { + private final List<CaptureCallback> mRecipients = new LinkedList<>(); /** * @param recipients The listeners to notify. Any {@code null} passed here * will be completely ignored. */ - public Camera2CaptureListenerSplitter(CaptureListener... recipients) { - for (CaptureListener listener : recipients) { + public Camera2CaptureCallbackSplitter(CaptureCallback... recipients) { + for (CaptureCallback listener : recipients) { if (listener != null) { mRecipients.add(listener); } @@ -49,7 +49,7 @@ public class Camera2CaptureListenerSplitter extends CaptureListener { @Override public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result) { - for (CaptureListener target : mRecipients) { + for (CaptureCallback target : mRecipients) { target.onCaptureCompleted(session, request, result); } } @@ -57,7 +57,7 @@ public class Camera2CaptureListenerSplitter extends CaptureListener { @Override public void onCaptureFailed(CameraCaptureSession session, CaptureRequest request, CaptureFailure failure) { - for (CaptureListener target : mRecipients) { + for (CaptureCallback target : mRecipients) { target.onCaptureFailed(session, request, failure); } } @@ -65,14 +65,14 @@ public class Camera2CaptureListenerSplitter extends CaptureListener { @Override public void onCaptureProgressed(CameraCaptureSession session, CaptureRequest request, CaptureResult partialResult) { - for (CaptureListener target : mRecipients) { + for (CaptureCallback target : mRecipients) { target.onCaptureProgressed(session, request, partialResult); } } @Override public void onCaptureSequenceAborted(CameraCaptureSession session, int sequenceId) { - for (CaptureListener target : mRecipients) { + for (CaptureCallback target : mRecipients) { target.onCaptureSequenceAborted(session, sequenceId); } } @@ -80,7 +80,7 @@ public class Camera2CaptureListenerSplitter extends CaptureListener { @Override public void onCaptureSequenceCompleted(CameraCaptureSession session, int sequenceId, long frameNumber) { - for (CaptureListener target : mRecipients) { + for (CaptureCallback target : mRecipients) { target.onCaptureSequenceCompleted(session, sequenceId, frameNumber); } } @@ -88,7 +88,7 @@ public class Camera2CaptureListenerSplitter extends CaptureListener { @Override public void onCaptureStarted(CameraCaptureSession session, CaptureRequest request, long timestamp) { - for (CaptureListener target : mRecipients) { + for (CaptureCallback target : mRecipients) { target.onCaptureStarted(session, request, timestamp); } } diff --git a/camera2/utils/tests/src/com/android/ex/camera2/utils/Camera2DeviceTester.java b/camera2/utils/tests/src/com/android/ex/camera2/utils/Camera2DeviceTester.java index 4db6dfb..e8639ba 100644 --- a/camera2/utils/tests/src/com/android/ex/camera2/utils/Camera2DeviceTester.java +++ b/camera2/utils/tests/src/com/android/ex/camera2/utils/Camera2DeviceTester.java @@ -52,7 +52,7 @@ public class Camera2DeviceTester { @InjectContext public Context mContext; - private class DeviceCapturer extends CameraDevice.StateListener { + private class DeviceCapturer extends CameraDevice.StateCallback { private CameraDevice mCamera; public CameraDevice captureCameraDevice() throws Exception { 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 7847526..3156cf7 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 @@ -24,7 +24,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import android.graphics.Rect; -import android.hardware.camera2.CameraCaptureSession.CaptureListener; +import android.hardware.camera2.CameraCaptureSession.CaptureCallback; import android.hardware.camera2.CameraDevice; import android.hardware.camera2.CaptureRequest; import android.hardware.camera2.CaptureRequest.Key; @@ -33,65 +33,65 @@ import android.view.Surface; import org.junit.Test; public class Camera2UtilsTest extends Camera2DeviceTester { - private void captureListenerSplitterAllCallbacksReceived(CaptureListener splitter, - CaptureListener... terminals) { + private void captureListenerSplitterAllCallbacksReceived(CaptureCallback splitter, + CaptureCallback... terminals) { splitter.onCaptureCompleted(null, null, null); - for (CaptureListener each : terminals) { + for (CaptureCallback each : terminals) { verify(each).onCaptureCompleted(null, null, null); } splitter.onCaptureFailed(null, null, null); - for (CaptureListener each : terminals) { + for (CaptureCallback each : terminals) { verify(each).onCaptureFailed(null, null, null); } splitter.onCaptureProgressed(null, null, null); - for (CaptureListener each : terminals) { + for (CaptureCallback each : terminals) { verify(each).onCaptureProgressed(null, null, null); } splitter.onCaptureSequenceAborted(null, 0); - for (CaptureListener each : terminals) { + for (CaptureCallback each : terminals) { verify(each).onCaptureSequenceAborted(null, 0); } splitter.onCaptureSequenceCompleted(null, 0, 0L); - for (CaptureListener each : terminals) { + for (CaptureCallback each : terminals) { verify(each).onCaptureSequenceCompleted(null, 0, 0L); } splitter.onCaptureStarted(null, null, 0L); - for (CaptureListener each : terminals) { + for (CaptureCallback each : terminals) { verify(each).onCaptureStarted(null, null, 0L); } } @Test public void captureListenerSplitter() { - CaptureListener firstBackingListener = mock(CaptureListener.class); - CaptureListener secondBackingListener = mock(CaptureListener.class); + CaptureCallback firstBackingListener = mock(CaptureCallback.class); + CaptureCallback secondBackingListener = mock(CaptureCallback.class); captureListenerSplitterAllCallbacksReceived( - new Camera2CaptureListenerSplitter(firstBackingListener, secondBackingListener), + new Camera2CaptureCallbackSplitter(firstBackingListener, secondBackingListener), firstBackingListener, secondBackingListener); } @Test public void captureListenerSplitterEmpty() { - captureListenerSplitterAllCallbacksReceived(new Camera2CaptureListenerSplitter()); + captureListenerSplitterAllCallbacksReceived(new Camera2CaptureCallbackSplitter()); } @Test public void captureListenerSplitterNoNpe() { captureListenerSplitterAllCallbacksReceived( - new Camera2CaptureListenerSplitter((CaptureListener) null)); + new Camera2CaptureCallbackSplitter((CaptureCallback) null)); } @Test public void captureListenerSplitterMultipleNulls() { captureListenerSplitterAllCallbacksReceived( - new Camera2CaptureListenerSplitter(null, null, null)); + new Camera2CaptureCallbackSplitter(null, null, null)); } @Test public void captureListenerSplitterValidAndNull() { - CaptureListener onlyRealBackingListener = mock(CaptureListener.class); + CaptureCallback onlyRealBackingListener = mock(CaptureCallback.class); captureListenerSplitterAllCallbacksReceived( - new Camera2CaptureListenerSplitter(null, onlyRealBackingListener), + new Camera2CaptureCallbackSplitter(null, onlyRealBackingListener), onlyRealBackingListener); } |