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

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

Camera: Revise MOTION_TRACKING capability

Simplify the API for the P release.

Test: Revised Camera CTS passes
Bug: 63629224

Change-Id: Icf19d25f841a9e3bede77c39ea5f98c933d72871
parent e54461ae
Loading
Loading
Loading
Loading
+0 −29
Original line number Diff line number Diff line
@@ -252,35 +252,6 @@ typedef enum {
     */
    TEMPLATE_MANUAL = 6,

    /**
     * A template for selecting camera parameters that match TEMPLATE_PREVIEW as closely as
     * possible while improving the camera output for motion tracking use cases.
     *
     * <p>This template is best used by applications that are frequently switching between motion
     * tracking use cases and regular still capture use cases, to minimize the IQ changes
     * when swapping use cases.</p>
     *
     * <p>This template is guaranteed to be supported on camera devices that support the
     * {@link ACAMERA_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING} capability.</p>
     *
     * @see ACameraDevice_createCaptureRequest
     */
    TEMPLATE_MOTION_TRACKING_PREVIEW = 7,

    /**
     * A template for selecting camera parameters that maximize the quality of camera output for
     * motion tracking use cases.
     *
     * <p>This template is best used by applications dedicated to motion tracking applications,
     * which aren't concerned about fast switches between motion tracking and other use cases.</p>
     *
     * <p>This template is guaranteed to be supported on camera devices that support the
     * {@link ACAMERA_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING} capability.</p>
     *
     * @see ACameraDevice_createCaptureRequest
     */
    TEMPLATE_MOTION_TRACKING_BEST = 8,

} ACameraDevice_request_template;

/**
+7 −45
Original line number Diff line number Diff line
@@ -2453,9 +2453,6 @@ typedef enum acamera_metadata_tag {
     *
     * <p>Different calibration methods and use cases can produce better or worse results
     * depending on the selected coordinate origin.</p>
     * <p>For devices designed to support the MOTION_TRACKING capability, the GYROSCOPE origin
     * makes device calibration and later usage by applications combining camera and gyroscope
     * information together simpler.</p>
     */
    ACAMERA_LENS_POSE_REFERENCE =                               // byte (acamera_metadata_enum_android_lens_pose_reference_t)
            ACAMERA_LENS_START + 12,
@@ -4565,7 +4562,7 @@ typedef enum acamera_metadata_tag {
    ACAMERA_STATISTICS_LENS_SHADING_MAP_MODE =                  // byte (acamera_metadata_enum_android_statistics_lens_shading_map_mode_t)
            ACAMERA_STATISTICS_START + 16,
    /**
     * <p>Whether the camera device outputs the OIS data in output
     * <p>A control for selecting whether OIS position information is included in output
     * result metadata.</p>
     *
     * <p>Type: byte (acamera_metadata_enum_android_statistics_ois_data_mode_t)</p>
@@ -4578,7 +4575,7 @@ typedef enum acamera_metadata_tag {
     *
     * <p>When set to ON,
     * ACAMERA_STATISTICS_OIS_TIMESTAMPS, android.statistics.oisShiftPixelX,
     * android.statistics.oisShiftPixelY will provide OIS data in the output result metadata.</p>
     * and android.statistics.oisShiftPixelY provide OIS data in the output result metadata.</p>
     *
     * @see ACAMERA_STATISTICS_OIS_TIMESTAMPS
     */
@@ -6601,7 +6598,7 @@ typedef enum acamera_metadata_enum_acamera_lens_pose_reference {
    /**
     * <p>The value of ACAMERA_LENS_POSE_TRANSLATION is relative to the optical center of
     * the largest camera device facing the same direction as this camera.</p>
     * <p>This default value for API levels before Android P.</p>
     * <p>This is the default value for API levels before Android P.</p>
     *
     * @see ACAMERA_LENS_POSE_TRANSLATION
     */
@@ -6610,7 +6607,6 @@ typedef enum acamera_metadata_enum_acamera_lens_pose_reference {
    /**
     * <p>The value of ACAMERA_LENS_POSE_TRANSLATION is relative to the position of the
     * primary gyroscope of this Android device.</p>
     * <p>This is the value reported by all devices that support the MOTION_TRACKING capability.</p>
     *
     * @see ACAMERA_LENS_POSE_TRANSLATION
     */
@@ -6974,46 +6970,12 @@ typedef enum acamera_metadata_enum_acamera_request_available_capabilities {
    ACAMERA_REQUEST_AVAILABLE_CAPABILITIES_DEPTH_OUTPUT              = 8,

    /**
     * <p>The device supports controls and metadata required for accurate motion tracking for
     * use cases such as augmented reality, electronic image stabilization, and so on.</p>
     * <p>This means this camera device has accurate optical calibration and timestamps relative
     * to the inertial sensors.</p>
     * <p>This capability requires the camera device to support the following:</p>
     * <ul>
     * <li>Capture request templates <a href="https://developer.android.com/reference/android/hardware/camera2/CameraDevice.html#TEMPLATE_MOTION_TRACKING_PREVIEW">CameraDevice#TEMPLATE_MOTION_TRACKING_PREVIEW</a> and <a href="https://developer.android.com/reference/android/hardware/camera2/CameraDevice.html#TEMPLATE_MOTION_TRACKING_BEST">CameraDevice#TEMPLATE_MOTION_TRACKING_BEST</a> are defined.</li>
     * <li>The stream configurations listed in <a href="https://developer.android.com/reference/android/hardware/camera2/CameraDevice.html#createCaptureSession">CameraDevice#createCaptureSession</a> for MOTION_TRACKING are
     *   supported, either at 30 or 60fps maximum frame rate.</li>
     * <li>The following camera characteristics and capture result metadata are provided:<ul>
     * <li>ACAMERA_LENS_INTRINSIC_CALIBRATION</li>
     * <li>ACAMERA_LENS_RADIAL_DISTORTION</li>
     * <li>ACAMERA_LENS_POSE_ROTATION</li>
     * <li>ACAMERA_LENS_POSE_TRANSLATION</li>
     * <li>ACAMERA_LENS_POSE_REFERENCE with value GYROSCOPE</li>
     * </ul>
     * </li>
     * <li>The ACAMERA_SENSOR_INFO_TIMESTAMP_SOURCE field has value <code>REALTIME</code>. When compared to
     *   timestamps from the device's gyroscopes, the clock difference for events occuring at
     *   the same actual time instant will be less than 1 ms.</li>
     * <li>The value of the ACAMERA_SENSOR_ROLLING_SHUTTER_SKEW field is accurate to within 1 ms.</li>
     * <li>The value of ACAMERA_SENSOR_EXPOSURE_TIME is guaranteed to be available in the
     *   capture result.</li>
     * <li>The ACAMERA_CONTROL_CAPTURE_INTENT control supports MOTION_TRACKING to limit maximum
     *   exposure to 20 milliseconds.</li>
     * <li>The stream configurations required for MOTION_TRACKING (listed at <a href="https://developer.android.com/reference/android/hardware/camera2/CameraDevice.html#createCaptureSession">CameraDevice#createCaptureSession</a>) can operate at least at
     *   30fps; optionally, they can operate at 60fps, and '[60, 60]' is listed in
     *   ACAMERA_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES.</li>
     * </ul>
     * <p>The camera device supports the MOTION_TRACKING value for
     * ACAMERA_CONTROL_CAPTURE_INTENT, which limits maximum exposure time to 20 ms.</p>
     * <p>This limits the motion blur of capture images, resulting in better image tracking
     * results for use cases such as image stabilization or augmented reality.</p>
     *
     * @see ACAMERA_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES
     * @see ACAMERA_CONTROL_CAPTURE_INTENT
     * @see ACAMERA_LENS_INTRINSIC_CALIBRATION
     * @see ACAMERA_LENS_POSE_REFERENCE
     * @see ACAMERA_LENS_POSE_ROTATION
     * @see ACAMERA_LENS_POSE_TRANSLATION
     * @see ACAMERA_LENS_RADIAL_DISTORTION
     * @see ACAMERA_SENSOR_EXPOSURE_TIME
     * @see ACAMERA_SENSOR_INFO_TIMESTAMP_SOURCE
     * @see ACAMERA_SENSOR_ROLLING_SHUTTER_SKEW
     */
    ACAMERA_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING           = 10,

+24 −60
Original line number Diff line number Diff line
@@ -676,8 +676,6 @@ status_t Camera3Device::dump(int fd, const Vector<String16> &args) {
            "TEMPLATE_VIDEO_SNAPSHOT",
            "TEMPLATE_ZERO_SHUTTER_LAG",
            "TEMPLATE_MANUAL",
            "TEMPLATE_MOTION_TRACKING_PREVIEW",
            "TEMPALTE_MOTION_TRACKING_BEST"
        };

        for (int i = 1; i < CAMERA3_TEMPLATE_COUNT; i++) {
@@ -3435,39 +3433,6 @@ status_t Camera3Device::HalInterface::constructDefaultRequestSettings(
            }
        };
    hardware::Return<void> err;
    if (mHidlSession_3_4 != nullptr) {
        device::V3_4::RequestTemplate id;
        switch (templateId) {
            case CAMERA3_TEMPLATE_PREVIEW:
                id = device::V3_4::RequestTemplate::PREVIEW;
                break;
            case CAMERA3_TEMPLATE_STILL_CAPTURE:
                id = device::V3_4::RequestTemplate::STILL_CAPTURE;
                break;
            case CAMERA3_TEMPLATE_VIDEO_RECORD:
                id = device::V3_4::RequestTemplate::VIDEO_RECORD;
                break;
            case CAMERA3_TEMPLATE_VIDEO_SNAPSHOT:
                id = device::V3_4::RequestTemplate::VIDEO_SNAPSHOT;
                break;
            case CAMERA3_TEMPLATE_ZERO_SHUTTER_LAG:
                id = device::V3_4::RequestTemplate::ZERO_SHUTTER_LAG;
                break;
            case CAMERA3_TEMPLATE_MANUAL:
                id = device::V3_4::RequestTemplate::MANUAL;
                break;
            case CAMERA3_TEMPLATE_MOTION_TRACKING_PREVIEW:
                id = device::V3_4::RequestTemplate::MOTION_TRACKING_PREVIEW;
                break;
            case CAMERA3_TEMPLATE_MOTION_TRACKING_BEST:
                id = device::V3_4::RequestTemplate::MOTION_TRACKING_BEST;
                break;
            default:
                // Unknown template ID
                return BAD_VALUE;
        }
        err = mHidlSession_3_4->constructDefaultRequestSettings_3_4(id, requestCallback);
    } else {
    RequestTemplate id;
    switch (templateId) {
        case CAMERA3_TEMPLATE_PREVIEW:
@@ -3493,7 +3458,6 @@ status_t Camera3Device::HalInterface::constructDefaultRequestSettings(
            return BAD_VALUE;
    }
    err = mHidlSession->constructDefaultRequestSettings(id, requestCallback);
    }

    if (!err.isOk()) {
        ALOGE("%s: Transaction error: %s", __FUNCTION__, err.description().c_str());