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

Commit f0b7026f authored by Zhijun He's avatar Zhijun He
Browse files

Camera2 API: fix front facing camera flip issue

Camera stream transform calculation should take camera facing into account.
For example, front facing camera preview stream should be horizontally or
vertically flipped.

Bug: 12300670
Change-Id: Ib497f0b8c3e65974de05d4f0aca3c51e99717c3d
parent 8b07579b
Loading
Loading
Loading
Loading
+47 −17
Original line number Diff line number Diff line
@@ -635,9 +635,18 @@ status_t CameraDeviceClient::getRotationTransformLocked(int32_t* transform) {
        return INVALID_OPERATION;
    }

    camera_metadata_ro_entry_t entryFacing = staticInfo.find(ANDROID_LENS_FACING);
    if (entry.count == 0) {
        ALOGE("%s: Camera %d: Can't find android.lens.facing in "
                "static metadata!", __FUNCTION__, mCameraId);
        return INVALID_OPERATION;
    }

    int32_t& flags = *transform;

    bool mirror = (entryFacing.data.u8[0] == ANDROID_LENS_FACING_FRONT);
    int orientation = entry.data.i32[0];
    if (!mirror) {
        switch (orientation) {
            case 0:
                flags = 0;
@@ -656,6 +665,27 @@ status_t CameraDeviceClient::getRotationTransformLocked(int32_t* transform) {
                      __FUNCTION__, orientation);
                return INVALID_OPERATION;
        }
    } else {
        switch (orientation) {
            case 0:
                flags = HAL_TRANSFORM_FLIP_H;
                break;
            case 90:
                flags = HAL_TRANSFORM_FLIP_H | HAL_TRANSFORM_ROT_90;
                break;
            case 180:
                flags = HAL_TRANSFORM_FLIP_V;
                break;
            case 270:
                flags = HAL_TRANSFORM_FLIP_V | HAL_TRANSFORM_ROT_90;
                break;
            default:
                ALOGE("%s: Invalid HAL android.sensor.orientation value: %d",
                      __FUNCTION__, orientation);
                return INVALID_OPERATION;
        }

    }

    /**
     * This magic flag makes surfaceflinger un-rotate the buffers