Camera: Add CaptureResult#getCameraId()
To simplify tracking of capture results from multi-camera clusters, add a method to get the camera ID that produced the capture result. Test: atest CtsCameraTestCases Bug: 171709658 Change-Id: I1109fd000ce9fbb57bb5b7ae281d0f42a5218cf7
This commit is contained in:
@@ -17864,6 +17864,7 @@ package android.hardware.camera2 {
|
||||
|
||||
public class CaptureResult extends android.hardware.camera2.CameraMetadata<android.hardware.camera2.CaptureResult.Key<?>> {
|
||||
method @Nullable public <T> T get(android.hardware.camera2.CaptureResult.Key<T>);
|
||||
method @NonNull public String getCameraId();
|
||||
method public long getFrameNumber();
|
||||
method @NonNull public java.util.List<android.hardware.camera2.CaptureResult.Key<?>> getKeys();
|
||||
method @NonNull public android.hardware.camera2.CaptureRequest getRequest();
|
||||
|
||||
@@ -190,6 +190,7 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
|
||||
}
|
||||
}
|
||||
|
||||
private final String mCameraId;
|
||||
@UnsupportedAppUsage
|
||||
private final CameraMetadataNative mResults;
|
||||
private final CaptureRequest mRequest;
|
||||
@@ -202,7 +203,7 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
|
||||
* <p>For internal use only</p>
|
||||
* @hide
|
||||
*/
|
||||
public CaptureResult(CameraMetadataNative results, CaptureRequest parent,
|
||||
public CaptureResult(String cameraId, CameraMetadataNative results, CaptureRequest parent,
|
||||
CaptureResultExtras extras) {
|
||||
if (results == null) {
|
||||
throw new IllegalArgumentException("results was null");
|
||||
@@ -221,6 +222,7 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
|
||||
throw new AssertionError("Results must not be empty");
|
||||
}
|
||||
setNativeInstance(mResults);
|
||||
mCameraId = cameraId;
|
||||
mRequest = parent;
|
||||
mSequenceId = extras.getRequestId();
|
||||
mFrameNumber = extras.getFrameNumber();
|
||||
@@ -251,11 +253,26 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
|
||||
}
|
||||
|
||||
setNativeInstance(mResults);
|
||||
mCameraId = "none";
|
||||
mRequest = null;
|
||||
mSequenceId = sequenceId;
|
||||
mFrameNumber = -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the camera ID of the camera that produced this capture result.
|
||||
*
|
||||
* For a logical multi-camera, the ID may be the logical or the physical camera ID, depending on
|
||||
* whether the capture result was obtained from
|
||||
* {@link TotalCaptureResult#getPhysicalCameraResults} or not.
|
||||
*
|
||||
* @return The camera ID for the camera that produced this capture result.
|
||||
*/
|
||||
@NonNull
|
||||
public String getCameraId() {
|
||||
return mCameraId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a capture result field value.
|
||||
*
|
||||
|
||||
@@ -70,10 +70,10 @@ public final class TotalCaptureResult extends CaptureResult {
|
||||
* @param partials a list of partial results; {@code null} will be substituted for an empty list
|
||||
* @hide
|
||||
*/
|
||||
public TotalCaptureResult(CameraMetadataNative results, CaptureRequest parent,
|
||||
CaptureResultExtras extras, List<CaptureResult> partials, int sessionId,
|
||||
PhysicalCaptureResultInfo physicalResults[]) {
|
||||
super(results, parent, extras);
|
||||
public TotalCaptureResult(String logicalCameraId, CameraMetadataNative results,
|
||||
CaptureRequest parent, CaptureResultExtras extras, List<CaptureResult> partials,
|
||||
int sessionId, PhysicalCaptureResultInfo[] physicalResults) {
|
||||
super(logicalCameraId, results, parent, extras);
|
||||
|
||||
if (partials == null) {
|
||||
mPartialResults = new ArrayList<>();
|
||||
@@ -85,7 +85,7 @@ public final class TotalCaptureResult extends CaptureResult {
|
||||
|
||||
mPhysicalCaptureResults = new HashMap<String, CaptureResult>();
|
||||
for (PhysicalCaptureResultInfo onePhysicalResult : physicalResults) {
|
||||
CaptureResult physicalResult = new CaptureResult(
|
||||
CaptureResult physicalResult = new CaptureResult(onePhysicalResult.getCameraId(),
|
||||
onePhysicalResult.getCameraMetadata(), parent, extras);
|
||||
mPhysicalCaptureResults.put(onePhysicalResult.getCameraId(),
|
||||
physicalResult);
|
||||
|
||||
@@ -1980,7 +1980,7 @@ public class CameraDeviceImpl extends CameraDevice
|
||||
// Either send a partial result or the final capture completed result
|
||||
if (isPartialResult) {
|
||||
final CaptureResult resultAsCapture =
|
||||
new CaptureResult(result, request, resultExtras);
|
||||
new CaptureResult(getId(), result, request, resultExtras);
|
||||
// Partial result
|
||||
resultDispatch = new Runnable() {
|
||||
@Override
|
||||
@@ -1992,7 +1992,7 @@ public class CameraDeviceImpl extends CameraDevice
|
||||
for (int i = 0; i < holder.getRequestCount(); i++) {
|
||||
CameraMetadataNative resultLocal =
|
||||
new CameraMetadataNative(resultCopy);
|
||||
CaptureResult resultInBatch = new CaptureResult(
|
||||
CaptureResult resultInBatch = new CaptureResult(getId(),
|
||||
resultLocal, holder.getRequest(i), resultExtras);
|
||||
|
||||
holder.getCallback().onCaptureProgressed(
|
||||
@@ -2019,8 +2019,8 @@ public class CameraDeviceImpl extends CameraDevice
|
||||
final Range<Integer> fpsRange =
|
||||
request.get(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE);
|
||||
final int subsequenceId = resultExtras.getSubsequenceId();
|
||||
final TotalCaptureResult resultAsCapture = new TotalCaptureResult(result,
|
||||
request, resultExtras, partialResults, holder.getSessionId(),
|
||||
final TotalCaptureResult resultAsCapture = new TotalCaptureResult(getId(),
|
||||
result, request, resultExtras, partialResults, holder.getSessionId(),
|
||||
physicalResults);
|
||||
// Final capture result
|
||||
resultDispatch = new Runnable() {
|
||||
@@ -2038,9 +2038,9 @@ public class CameraDeviceImpl extends CameraDevice
|
||||
new CameraMetadataNative(resultCopy);
|
||||
// No logical multi-camera support for batched output mode.
|
||||
TotalCaptureResult resultInBatch = new TotalCaptureResult(
|
||||
resultLocal, holder.getRequest(i), resultExtras,
|
||||
partialResults, holder.getSessionId(),
|
||||
new PhysicalCaptureResultInfo[0]);
|
||||
getId(), resultLocal, holder.getRequest(i),
|
||||
resultExtras, partialResults, holder.getSessionId(),
|
||||
new PhysicalCaptureResultInfo[0]);
|
||||
|
||||
holder.getCallback().onCaptureCompleted(
|
||||
CameraDeviceImpl.this,
|
||||
|
||||
@@ -334,7 +334,7 @@ public class CameraOfflineSessionImpl extends CameraOfflineSession
|
||||
// Either send a partial result or the final capture completed result
|
||||
if (isPartialResult) {
|
||||
final CaptureResult resultAsCapture =
|
||||
new CaptureResult(result, request, resultExtras);
|
||||
new CaptureResult(mCameraId, result, request, resultExtras);
|
||||
// Partial result
|
||||
resultDispatch = new Runnable() {
|
||||
@Override
|
||||
@@ -349,7 +349,8 @@ public class CameraOfflineSessionImpl extends CameraOfflineSession
|
||||
CameraMetadataNative resultLocal =
|
||||
new CameraMetadataNative(resultCopy);
|
||||
final CaptureResult resultInBatch = new CaptureResult(
|
||||
resultLocal, holder.getRequest(i), resultExtras);
|
||||
mCameraId, resultLocal, holder.getRequest(i),
|
||||
resultExtras);
|
||||
|
||||
final CaptureRequest cbRequest = holder.getRequest(i);
|
||||
callback.onCaptureProgressed(CameraOfflineSessionImpl.this,
|
||||
@@ -372,8 +373,8 @@ public class CameraOfflineSessionImpl extends CameraOfflineSession
|
||||
final Range<Integer> fpsRange =
|
||||
request.get(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE);
|
||||
final int subsequenceId = resultExtras.getSubsequenceId();
|
||||
final TotalCaptureResult resultAsCapture = new TotalCaptureResult(result,
|
||||
request, resultExtras, partialResults, holder.getSessionId(),
|
||||
final TotalCaptureResult resultAsCapture = new TotalCaptureResult(mCameraId,
|
||||
result, request, resultExtras, partialResults, holder.getSessionId(),
|
||||
physicalResults);
|
||||
// Final capture result
|
||||
resultDispatch = new Runnable() {
|
||||
@@ -393,9 +394,9 @@ public class CameraOfflineSessionImpl extends CameraOfflineSession
|
||||
new CameraMetadataNative(resultCopy);
|
||||
// No logical multi-camera support for batched output mode.
|
||||
TotalCaptureResult resultInBatch = new TotalCaptureResult(
|
||||
resultLocal, holder.getRequest(i), resultExtras,
|
||||
partialResults, holder.getSessionId(),
|
||||
new PhysicalCaptureResultInfo[0]);
|
||||
mCameraId, resultLocal, holder.getRequest(i),
|
||||
resultExtras, partialResults, holder.getSessionId(),
|
||||
new PhysicalCaptureResultInfo[0]);
|
||||
|
||||
final CaptureRequest cbRequest = holder.getRequest(i);
|
||||
callback.onCaptureCompleted(CameraOfflineSessionImpl.this,
|
||||
|
||||
@@ -17846,6 +17846,7 @@ package android.hardware.camera2 {
|
||||
|
||||
public class CaptureResult extends android.hardware.camera2.CameraMetadata<android.hardware.camera2.CaptureResult.Key<?>> {
|
||||
method @Nullable public <T> T get(android.hardware.camera2.CaptureResult.Key<T>);
|
||||
method @NonNull public String getCameraId();
|
||||
method public long getFrameNumber();
|
||||
method @NonNull public java.util.List<android.hardware.camera2.CaptureResult.Key<?>> getKeys();
|
||||
method @NonNull public android.hardware.camera2.CaptureRequest getRequest();
|
||||
|
||||
Reference in New Issue
Block a user