From bdf366cc70639b0e16b8f84eebe612a48a8b8b06 Mon Sep 17 00:00:00 2001 From: Igor Murashkin Date: Fri, 25 Jul 2014 16:54:20 -0700 Subject: [PATCH] camera2: Api change (#getFrameNumber -> long; @hide REQUEST_FRAME_COUNT) Change-Id: I164011c97a57fb9fb9c504ae4c5f394dcb36a4bc --- api/current.txt | 3 +-- .../camera2/CameraCharacteristics.java | 2 +- .../hardware/camera2/CameraMetadata.java | 3 ++- .../hardware/camera2/CaptureResult.java | 26 ++++++++++++++----- .../hardware/camera2/TotalCaptureResult.java | 6 +++-- .../camera2/impl/CameraDeviceImpl.java | 21 ++++++++++----- 6 files changed, 42 insertions(+), 19 deletions(-) diff --git a/api/current.txt b/api/current.txt index 63f546a833010..7dc9ca23b6ea0 100644 --- a/api/current.txt +++ b/api/current.txt @@ -13031,7 +13031,7 @@ package android.hardware.camera2 { public class CaptureResult extends android.hardware.camera2.CameraMetadata { method public T get(android.hardware.camera2.CaptureResult.Key); - method public int getFrameNumber(); + method public long getFrameNumber(); method public android.hardware.camera2.CaptureRequest getRequest(); method public int getSequenceId(); field public static final android.hardware.camera2.CaptureResult.Key BLACK_LEVEL_LOCK; @@ -13077,7 +13077,6 @@ package android.hardware.camera2 { field public static final android.hardware.camera2.CaptureResult.Key LENS_OPTICAL_STABILIZATION_MODE; field public static final android.hardware.camera2.CaptureResult.Key LENS_STATE; field public static final android.hardware.camera2.CaptureResult.Key NOISE_REDUCTION_MODE; - field public static final android.hardware.camera2.CaptureResult.Key REQUEST_FRAME_COUNT; field public static final android.hardware.camera2.CaptureResult.Key REQUEST_PIPELINE_DEPTH; field public static final android.hardware.camera2.CaptureResult.Key SCALER_CROP_REGION; field public static final android.hardware.camera2.CaptureResult.Key SENSOR_EXPOSURE_TIME; diff --git a/core/java/android/hardware/camera2/CameraCharacteristics.java b/core/java/android/hardware/camera2/CameraCharacteristics.java index 6cb6a24f387c5..dd16f6f333cbc 100644 --- a/core/java/android/hardware/camera2/CameraCharacteristics.java +++ b/core/java/android/hardware/camera2/CameraCharacteristics.java @@ -1934,7 +1934,7 @@ public final class CameraCharacteristics extends CameraMetadata *

This defines the maximum distance (in number of metadata results), * between android.sync.frameNumber and the equivalent - * android.request.frameCount.

+ * frame number for that result.

*

In other words this acts as an upper boundary for how many frames * must occur before the camera device knows for a fact that the new * submitted camera settings have been applied in outgoing frames.

diff --git a/core/java/android/hardware/camera2/CameraMetadata.java b/core/java/android/hardware/camera2/CameraMetadata.java index ebbfc632b0c4f..9f7ae60dc3f16 100644 --- a/core/java/android/hardware/camera2/CameraMetadata.java +++ b/core/java/android/hardware/camera2/CameraMetadata.java @@ -664,7 +664,7 @@ public abstract class CameraMetadata { /** *

Every frame has the requests immediately applied.

*

Furthermore for all results, - * android.sync.frameNumber == android.request.frameCount

+ * android.sync.frameNumber == CaptureResult#getFrameNumber()

*

Changing controls over multiple requests one after another will * produce results that have those controls applied atomically * each frame.

@@ -679,6 +679,7 @@ public abstract class CameraMetadata { *

By submitting a series of identical requests, the camera device * will eventually have the camera settings applied, but it is * unknown when that exact point will be.

+ *

All LEGACY capability devices will have this as their maxLatency.

* @see CameraCharacteristics#SYNC_MAX_LATENCY */ public static final int SYNC_MAX_LATENCY_UNKNOWN = -1; diff --git a/core/java/android/hardware/camera2/CaptureResult.java b/core/java/android/hardware/camera2/CaptureResult.java index 20a04f01a6387..4f80bc43e6425 100644 --- a/core/java/android/hardware/camera2/CaptureResult.java +++ b/core/java/android/hardware/camera2/CaptureResult.java @@ -17,6 +17,7 @@ package android.hardware.camera2; import android.hardware.camera2.impl.CameraMetadataNative; +import android.hardware.camera2.impl.CaptureResultExtras; import android.hardware.camera2.impl.PublicKey; import android.hardware.camera2.impl.SyntheticKey; import android.hardware.camera2.utils.TypeReference; @@ -142,12 +143,16 @@ public class CaptureResult extends CameraMetadata> { private final CameraMetadataNative mResults; private final CaptureRequest mRequest; private final int mSequenceId; + private final long mFrameNumber; /** * Takes ownership of the passed-in properties object + * + *

For internal use only

* @hide */ - public CaptureResult(CameraMetadataNative results, CaptureRequest parent, int sequenceId) { + public CaptureResult(CameraMetadataNative results, CaptureRequest parent, + CaptureResultExtras extras) { if (results == null) { throw new IllegalArgumentException("results was null"); } @@ -156,12 +161,17 @@ public class CaptureResult extends CameraMetadata> { throw new IllegalArgumentException("parent was null"); } + if (extras == null) { + throw new IllegalArgumentException("extras was null"); + } + mResults = CameraMetadataNative.move(results); if (mResults.isEmpty()) { throw new AssertionError("Results must not be empty"); } mRequest = parent; - mSequenceId = sequenceId; + mSequenceId = extras.getRequestId(); + mFrameNumber = extras.getFrameNumber(); } /** @@ -190,6 +200,7 @@ public class CaptureResult extends CameraMetadata> { mRequest = null; mSequenceId = sequenceId; + mFrameNumber = -1; } /** @@ -288,11 +299,10 @@ public class CaptureResult extends CameraMetadata> { * for every new result or failure; and the scope is the lifetime of the * {@link CameraDevice}.

* - * @return int frame number + * @return The frame number */ - public int getFrameNumber() { - // TODO: @hide REQUEST_FRAME_COUNT - return get(REQUEST_FRAME_COUNT); + public long getFrameNumber() { + return mFrameNumber; } /** @@ -2026,8 +2036,10 @@ public class CaptureResult extends CameraMetadata> { * increases with every new result (that is, each new result has a unique * frameCount value).

*

Reset on release()

+ * @deprecated + * @hide */ - @PublicKey + @Deprecated public static final Key REQUEST_FRAME_COUNT = new Key("android.request.frameCount", int.class); diff --git a/core/java/android/hardware/camera2/TotalCaptureResult.java b/core/java/android/hardware/camera2/TotalCaptureResult.java index 226f09d3ec70e..ec4bc7dc9e673 100644 --- a/core/java/android/hardware/camera2/TotalCaptureResult.java +++ b/core/java/android/hardware/camera2/TotalCaptureResult.java @@ -17,6 +17,7 @@ package android.hardware.camera2; import android.hardware.camera2.impl.CameraMetadataNative; +import android.hardware.camera2.impl.CaptureResultExtras; import java.util.Collections; import java.util.List; @@ -51,8 +52,9 @@ public final class TotalCaptureResult extends CaptureResult { * Takes ownership of the passed-in properties object * @hide */ - public TotalCaptureResult(CameraMetadataNative results, CaptureRequest parent, int sequenceId) { - super(results, parent, sequenceId); + public TotalCaptureResult(CameraMetadataNative results, CaptureRequest parent, + CaptureResultExtras extras) { + super(results, parent, extras); } /** diff --git a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java index ed4e457859aa5..18b12022ab35a 100644 --- a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java +++ b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java @@ -313,6 +313,7 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice { return mCameraId; } + @Override public void configureOutputs(List outputs) throws CameraAccessException { // Treat a null input the same an empty list if (outputs == null) { @@ -448,6 +449,7 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice { } } + @Override public int capture(CaptureRequest request, CaptureListener listener, Handler handler) throws CameraAccessException { if (DEBUG) { @@ -458,6 +460,7 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice { return submitCaptureRequest(requestList, listener, handler, /*streaming*/false); } + @Override public int captureBurst(List requests, CaptureListener listener, Handler handler) throws CameraAccessException { if (requests == null || requests.isEmpty()) { @@ -610,6 +613,7 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice { } } + @Override public int setRepeatingRequest(CaptureRequest request, CaptureListener listener, Handler handler) throws CameraAccessException { List requestList = new ArrayList(); @@ -617,6 +621,7 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice { return submitCaptureRequest(requestList, listener, handler, /*streaming*/true); } + @Override public int setRepeatingBurst(List requests, CaptureListener listener, Handler handler) throws CameraAccessException { if (requests == null || requests.isEmpty()) { @@ -625,6 +630,7 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice { return submitCaptureRequest(requests, listener, handler, /*streaming*/true); } + @Override public void stopRepeating() throws CameraAccessException { synchronized(mInterfaceLock) { @@ -675,6 +681,7 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice { } } + @Override public void flush() throws CameraAccessException { synchronized(mInterfaceLock) { checkIfCameraClosedOrInError(); @@ -1031,8 +1038,10 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice { CaptureResultExtras resultExtras) throws RemoteException { int requestId = resultExtras.getRequestId(); + long frameNumber = resultExtras.getFrameNumber(); + if (DEBUG) { - Log.v(TAG, "Received result frame " + resultExtras.getFrameNumber() + " for id " + Log.v(TAG, "Received result frame " + frameNumber + " for id " + requestId); } @@ -1051,7 +1060,7 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice { // Update tracker (increment counter) when it's not a partial result. if (!isPartialResult) { - mFrameNumberTracker.updateTracker(resultExtras.getFrameNumber(), + mFrameNumberTracker.updateTracker(frameNumber, /*error*/false); } @@ -1060,7 +1069,7 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice { if (DEBUG) { Log.d(TAG, "holder is null, early return at frame " - + resultExtras.getFrameNumber()); + + frameNumber); } return; } @@ -1069,7 +1078,7 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice { if (DEBUG) { Log.d(TAG, "camera is closed, early return at frame " - + resultExtras.getFrameNumber()); + + frameNumber); } return; } @@ -1082,7 +1091,7 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice { // Either send a partial result or the final capture completed result if (isPartialResult) { final CaptureResult resultAsCapture = - new CaptureResult(result, request, requestId); + new CaptureResult(result, request, resultExtras); // Partial result resultDispatch = new Runnable() { @@ -1098,7 +1107,7 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice { }; } else { final TotalCaptureResult resultAsCapture = - new TotalCaptureResult(result, request, requestId); + new TotalCaptureResult(result, request, resultExtras); // Final capture result resultDispatch = new Runnable() {