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

Commit 90708ea0 authored by Shuzhen Wang's avatar Shuzhen Wang
Browse files

Add support for 3.8 version of ICameraDeviceCallback

The new version of ICameraDeviceCallback supports readout timestamp in
shutter notify.

Test: Camera CTS
Bug: 200306379
Change-Id: I993bd6ae5e1a1d30fe537ed3b90deee906204d21
parent 4ba4f224
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -156,6 +156,7 @@ cc_library_shared {
        "android.hardware.camera.device@3.5",
        "android.hardware.camera.device@3.5",
        "android.hardware.camera.device@3.6",
        "android.hardware.camera.device@3.6",
        "android.hardware.camera.device@3.7",
        "android.hardware.camera.device@3.7",
        "android.hardware.camera.device@3.8",
        "media_permission-aidl-cpp",
        "media_permission-aidl-cpp",
    ],
    ],


+2 −0
Original line number Original line Diff line number Diff line
@@ -910,6 +910,7 @@ Status CameraService::makeClient(const sp<CameraService>& cameraService,
        case CAMERA_DEVICE_API_VERSION_3_5:
        case CAMERA_DEVICE_API_VERSION_3_5:
        case CAMERA_DEVICE_API_VERSION_3_6:
        case CAMERA_DEVICE_API_VERSION_3_6:
        case CAMERA_DEVICE_API_VERSION_3_7:
        case CAMERA_DEVICE_API_VERSION_3_7:
        case CAMERA_DEVICE_API_VERSION_3_8:
            if (effectiveApiLevel == API_1) { // Camera1 API route
            if (effectiveApiLevel == API_1) { // Camera1 API route
                sp<ICameraClient> tmp = static_cast<ICameraClient*>(cameraCb.get());
                sp<ICameraClient> tmp = static_cast<ICameraClient*>(cameraCb.get());
                *client = new Camera2Client(cameraService, tmp, packageName, featureId,
                *client = new Camera2Client(cameraService, tmp, packageName, featureId,
@@ -2545,6 +2546,7 @@ Status CameraService::supportsCameraApi(const String16& cameraId, int apiVersion
        case CAMERA_DEVICE_API_VERSION_3_5:
        case CAMERA_DEVICE_API_VERSION_3_5:
        case CAMERA_DEVICE_API_VERSION_3_6:
        case CAMERA_DEVICE_API_VERSION_3_6:
        case CAMERA_DEVICE_API_VERSION_3_7:
        case CAMERA_DEVICE_API_VERSION_3_7:
        case CAMERA_DEVICE_API_VERSION_3_8:
            ALOGV("%s: Camera id %s uses HAL3.2 or newer, supports api1/api2 directly",
            ALOGV("%s: Camera id %s uses HAL3.2 or newer, supports api1/api2 directly",
                    __FUNCTION__, id.string());
                    __FUNCTION__, id.string());
            *isSupported = true;
            *isSupported = true;
+1 −0
Original line number Original line Diff line number Diff line
@@ -88,6 +88,7 @@ enum SystemCameraKind {
#define CAMERA_DEVICE_API_VERSION_3_5 HARDWARE_DEVICE_API_VERSION(3, 5)
#define CAMERA_DEVICE_API_VERSION_3_5 HARDWARE_DEVICE_API_VERSION(3, 5)
#define CAMERA_DEVICE_API_VERSION_3_6 HARDWARE_DEVICE_API_VERSION(3, 6)
#define CAMERA_DEVICE_API_VERSION_3_6 HARDWARE_DEVICE_API_VERSION(3, 6)
#define CAMERA_DEVICE_API_VERSION_3_7 HARDWARE_DEVICE_API_VERSION(3, 7)
#define CAMERA_DEVICE_API_VERSION_3_7 HARDWARE_DEVICE_API_VERSION(3, 7)
#define CAMERA_DEVICE_API_VERSION_3_8 HARDWARE_DEVICE_API_VERSION(3, 8)


/**
/**
 * A manager for all camera providers available on an Android device.
 * A manager for all camera providers available on an Android device.
+12 −1
Original line number Original line Diff line number Diff line
@@ -1176,6 +1176,16 @@ hardware::Return<void> Camera3Device::processCaptureResult(


hardware::Return<void> Camera3Device::notify(
hardware::Return<void> Camera3Device::notify(
        const hardware::hidl_vec<hardware::camera::device::V3_2::NotifyMsg>& msgs) {
        const hardware::hidl_vec<hardware::camera::device::V3_2::NotifyMsg>& msgs) {
    return notifyHelper<hardware::camera::device::V3_2::NotifyMsg>(msgs);
}

hardware::Return<void> Camera3Device::notify_3_8(
        const hardware::hidl_vec<hardware::camera::device::V3_8::NotifyMsg>& msgs) {
    return notifyHelper<hardware::camera::device::V3_8::NotifyMsg>(msgs);
}

template<typename NotifyMsgType>
hardware::Return<void> Camera3Device::notifyHelper(const hardware::hidl_vec<NotifyMsgType>& msgs) {
    // Ideally we should grab mLock, but that can lead to deadlock, and
    // Ideally we should grab mLock, but that can lead to deadlock, and
    // it's not super important to get up to date value of mStatus for this
    // it's not super important to get up to date value of mStatus for this
    // warning print, hence skipping the lock here
    // warning print, hence skipping the lock here
@@ -5469,7 +5479,8 @@ void Camera3Device::RequestThread::cleanUpFailedRequests(bool sendRequestError)
                    outputBuffers->editItemAt(i).acquire_fence = -1;
                    outputBuffers->editItemAt(i).acquire_fence = -1;
                }
                }
                outputBuffers->editItemAt(i).status = CAMERA_BUFFER_STATUS_ERROR;
                outputBuffers->editItemAt(i).status = CAMERA_BUFFER_STATUS_ERROR;
                captureRequest->mOutputStreams.editItemAt(i)->returnBuffer((*outputBuffers)[i], 0,
                captureRequest->mOutputStreams.editItemAt(i)->returnBuffer((*outputBuffers)[i],
                        /*timestamp*/0, /*readoutTimestamp*/0,
                        /*timestampIncreasing*/true, std::vector<size_t> (),
                        /*timestampIncreasing*/true, std::vector<size_t> (),
                        captureRequest->mResultExtras.frameNumber);
                        captureRequest->mResultExtras.frameNumber);
            }
            }
+10 −1
Original line number Original line Diff line number Diff line
@@ -39,6 +39,7 @@
#include <android/hardware/camera/device/3.2/ICameraDeviceCallback.h>
#include <android/hardware/camera/device/3.2/ICameraDeviceCallback.h>
#include <android/hardware/camera/device/3.4/ICameraDeviceCallback.h>
#include <android/hardware/camera/device/3.4/ICameraDeviceCallback.h>
#include <android/hardware/camera/device/3.5/ICameraDeviceCallback.h>
#include <android/hardware/camera/device/3.5/ICameraDeviceCallback.h>
#include <android/hardware/camera/device/3.8/ICameraDeviceCallback.h>
#include <fmq/MessageQueue.h>
#include <fmq/MessageQueue.h>


#include <camera/CaptureResult.h>
#include <camera/CaptureResult.h>
@@ -83,7 +84,7 @@ class Camera3StreamInterface;
 */
 */
class Camera3Device :
class Camera3Device :
            public CameraDeviceBase,
            public CameraDeviceBase,
            virtual public hardware::camera::device::V3_5::ICameraDeviceCallback,
            virtual public hardware::camera::device::V3_8::ICameraDeviceCallback,
            public camera3::SetErrorInterface,
            public camera3::SetErrorInterface,
            public camera3::InflightRequestUpdateInterface,
            public camera3::InflightRequestUpdateInterface,
            public camera3::RequestBufferInterface,
            public camera3::RequestBufferInterface,
@@ -642,6 +643,14 @@ class Camera3Device :
            const hardware::hidl_vec<
            const hardware::hidl_vec<
                    hardware::camera::device::V3_2::StreamBuffer>& buffers) override;
                    hardware::camera::device::V3_2::StreamBuffer>& buffers) override;


    hardware::Return<void> notify_3_8(
            const hardware::hidl_vec<
                    hardware::camera::device::V3_8::NotifyMsg>& msgs) override;

    template<typename NotifyMsgType>
    hardware::Return<void> notifyHelper(
            const hardware::hidl_vec<NotifyMsgType>& msgs);

    // Handle one notify message
    // Handle one notify message
    void notify(const hardware::camera::device::V3_2::NotifyMsg& msg);
    void notify(const hardware::camera::device::V3_2::NotifyMsg& msg);


Loading