Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 575f3d7e authored by Eino-Ville Talvala's avatar Eino-Ville Talvala
Browse files

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
parent 92b3adcb
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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();
+18 −1
Original line number Diff line number Diff line
@@ -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.
     *
+5 −5
Original line number Diff line number Diff line
@@ -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);
+7 −7
Original line number Diff line number Diff line
@@ -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,8 +2038,8 @@ 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(),
                                                getId(), resultLocal, holder.getRequest(i),
                                                resultExtras, partialResults, holder.getSessionId(),
                                                new PhysicalCaptureResultInfo[0]);

                                        holder.getCallback().onCaptureCompleted(
+8 −7
Original line number Diff line number Diff line
@@ -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,8 +394,8 @@ 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(),
                                                mCameraId, resultLocal, holder.getRequest(i),
                                                resultExtras, partialResults, holder.getSessionId(),
                                                new PhysicalCaptureResultInfo[0]);

                                        final CaptureRequest cbRequest = holder.getRequest(i);
Loading