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

Commit 2cc87ff6 authored by Shuzhen Wang's avatar Shuzhen Wang Committed by Android (Google) Code Review
Browse files

Merge "Camera: Handle interaction between ZoomRatioMapper and zoom override"

parents d6a28e0b 3c00b093
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -587,6 +587,7 @@ std::unordered_set<uint32_t> ACameraMetadata::sSystemTags ({
    ANDROID_CONTROL_SCENE_MODE_OVERRIDES,
    ANDROID_CONTROL_AE_PRECAPTURE_ID,
    ANDROID_CONTROL_AF_TRIGGER_ID,
    ANDROID_CONTROL_SETTINGS_OVERRIDING_FRAME_NUMBER,
    ANDROID_DEMOSAIC_MODE,
    ANDROID_EDGE_STRENGTH,
    ANDROID_FLASH_FIRING_POWER,
+3 −3
Original line number Diff line number Diff line
@@ -2169,7 +2169,7 @@ typedef enum acamera_metadata_tag {
     * @see ACAMERA_SCALER_CROP_REGION
     */
    ACAMERA_CONTROL_AUTOFRAMING =                               // byte (acamera_metadata_enum_android_control_autoframing_t)
            ACAMERA_CONTROL_START + 51,
            ACAMERA_CONTROL_START + 52,
    /**
     * <p>Whether the camera device supports ACAMERA_CONTROL_AUTOFRAMING.</p>
     *
@@ -2185,7 +2185,7 @@ typedef enum acamera_metadata_tag {
     * <p>Will be <code>false</code> if auto-framing is not available.</p>
     */
    ACAMERA_CONTROL_AUTOFRAMING_AVAILABLE =                     // byte (acamera_metadata_enum_android_control_autoframing_available_t)
            ACAMERA_CONTROL_START + 52,
            ACAMERA_CONTROL_START + 53,
    /**
     * <p>Current state of auto-framing.</p>
     *
@@ -2212,7 +2212,7 @@ typedef enum acamera_metadata_tag {
     * @see ACAMERA_CONTROL_AUTOFRAMING_AVAILABLE
     */
    ACAMERA_CONTROL_AUTOFRAMING_STATE =                         // byte (acamera_metadata_enum_android_control_autoframing_state_t)
            ACAMERA_CONTROL_START + 53,
            ACAMERA_CONTROL_START + 54,
    ACAMERA_CONTROL_END,
    /**
+32 −2
Original line number Diff line number Diff line
@@ -494,6 +494,32 @@ bool erasePhysicalCameraIdSet(
    return found;
}

const std::set<std::string>& getCameraIdsWithZoomLocked(
        const InFlightRequestMap& inflightMap, const CameraMetadata& metadata,
        const std::set<std::string>& cameraIdsWithZoom) {
    camera_metadata_ro_entry overrideEntry =
            metadata.find(ANDROID_CONTROL_SETTINGS_OVERRIDE);
    camera_metadata_ro_entry frameNumberEntry =
            metadata.find(ANDROID_CONTROL_SETTINGS_OVERRIDING_FRAME_NUMBER);
    if (overrideEntry.count != 1
            || overrideEntry.data.i32[0] != ANDROID_CONTROL_SETTINGS_OVERRIDE_ZOOM
            || frameNumberEntry.count != 1) {
        // No valid overriding frame number, skip
        return cameraIdsWithZoom;
    }

    uint32_t overridingFrameNumber = frameNumberEntry.data.i32[0];
    ssize_t idx = inflightMap.indexOfKey(overridingFrameNumber);
    if (idx < 0) {
        ALOGE("%s: Failed to find pending request #%d in inflight map",
                __FUNCTION__, overridingFrameNumber);
        return cameraIdsWithZoom;
    }

    const InFlightRequest &r = inflightMap.valueFor(overridingFrameNumber);
    return r.cameraIdsWithZoom;
}

void processCaptureResult(CaptureOutputStates& states, const camera_capture_result *result) {
    ATRACE_CALL();

@@ -682,10 +708,12 @@ void processCaptureResult(CaptureOutputStates& states, const camera_capture_resu
            } else if (request.hasCallback) {
                CameraMetadata metadata;
                metadata = result->result;
                auto cameraIdsWithZoom = getCameraIdsWithZoomLocked(
                        states.inflightMap, metadata, request.cameraIdsWithZoom);
                sendCaptureResult(states, metadata, request.resultExtras,
                    collectedPartialResult, frameNumber,
                    hasInputBufferInRequest, request.zslCapture && request.stillCapture,
                    request.rotateAndCropAuto, request.cameraIdsWithZoom,
                    request.rotateAndCropAuto, cameraIdsWithZoom,
                    request.physicalMetadatas);
            }
        }
@@ -912,11 +940,13 @@ void notifyShutter(CaptureOutputStates& states, const camera_shutter_msg_t &msg)
                    states.listener->notifyShutter(r.resultExtras, msg.timestamp);
                }
                // send pending result and buffers
                const auto& cameraIdsWithZoom = getCameraIdsWithZoomLocked(
                        inflightMap, r.pendingMetadata, r.cameraIdsWithZoom);
                sendCaptureResult(states,
                    r.pendingMetadata, r.resultExtras,
                    r.collectedPartialResult, msg.frame_number,
                    r.hasInputBuffer, r.zslCapture && r.stillCapture,
                    r.rotateAndCropAuto, r.cameraIdsWithZoom, r.physicalMetadatas);
                    r.rotateAndCropAuto, cameraIdsWithZoom, r.physicalMetadatas);
            }
            returnAndRemovePendingOutputBuffers(
                    states.useHalBufManager, states.listener, r, states.sessionStatsBuilder);
+1 −0
Original line number Diff line number Diff line
@@ -98,5 +98,6 @@ std::map<int, std::vector<camera_metadata_tag>> dynamic_api_level_to_keys{
          ANDROID_CONTROL_AUTOFRAMING,
          ANDROID_CONTROL_AUTOFRAMING_STATE,
          ANDROID_CONTROL_SETTINGS_OVERRIDE,
          ANDROID_CONTROL_SETTINGS_OVERRIDING_FRAME_NUMBER,
        }  },
};