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

Commit 35642f2f authored by Jayant Chowdhary's avatar Jayant Chowdhary
Browse files

Implement AidlCamera3Device implementation.



Bug: 196432585

Test: Camera CTS with AIDL provider

Change-Id: I67a6558a7d97b07b551c4614edca2e53770a955f
Signed-off-by: default avatarJayant Chowdhary <jchowdhary@google.com>
parent a04055f5
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -85,6 +85,9 @@ cc_library_shared {
        "device3/hidl/HidlCamera3Device.cpp",
        "device3/hidl/HidlCamera3OfflineSession.cpp",
        "device3/hidl/HidlCamera3OutputUtils.cpp",
        "device3/aidl/AidlCamera3Device.cpp",
        "device3/aidl/AidlCamera3OutputUtils.cpp",
        "device3/aidl/AidlCamera3OfflineSession.cpp",
        "gui/RingBufferConsumer.cpp",
        "hidl/AidlCameraDeviceCallbacks.cpp",
        "hidl/AidlCameraServiceListener.cpp",
@@ -158,6 +161,7 @@ cc_library_shared {
        "android.hardware.camera.device@3.6",
        "android.hardware.camera.device@3.7",
        "android.hardware.camera.device@3.8",
        "android.hardware.camera.device-V1-ndk",
        "media_permission-aidl-cpp",
    ],

+5 −2
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@
#include "api2/CameraDeviceClient.h"

#include "device3/Camera3Device.h"
#include "device3/aidl/AidlCamera3Device.h"
#include "device3/hidl/HidlCamera3Device.h"
#include "utils/CameraThreadState.h"
#include "utils/CameraServiceProxyWrapper.h"
@@ -118,8 +119,10 @@ status_t Camera2ClientBase<TClientBase>::initializeImpl(TProviderPtr providerPtr
                            mLegacyClient);
            break;
        case IPCTransport::AIDL:
            ALOGE("%s: AIDL camera3Devices not available yet", __FUNCTION__);
            return NO_INIT;
            mDevice =
                    new AidlCamera3Device(TClientBase::mCameraIdStr, mOverrideForPerfClass,
                            mLegacyClient);
             break;
        default:
            ALOGE("%s Invalid transport for camera id %s", __FUNCTION__,
                    TClientBase::mCameraIdStr.string());
+41 −0
Original line number Diff line number Diff line
@@ -647,6 +647,47 @@ status_t CameraProviderManager::openAidlSession(const std::string &id,
    return OK;
}

status_t CameraProviderManager::openAidlInjectionSession(const std::string &id,
        const std::shared_ptr<
                aidl::android::hardware::camera::device::ICameraDeviceCallback>& callback,
        /*out*/
        std::shared_ptr<
                aidl::android::hardware::camera::device::ICameraInjectionSession> *session) {

    std::lock_guard<std::mutex> lock(mInterfaceMutex);

    auto deviceInfo = findDeviceInfoLocked(id);
    if (deviceInfo == nullptr) return NAME_NOT_FOUND;

    auto *aidlDeviceInfo3 = static_cast<AidlProviderInfo::AidlDeviceInfo3*>(deviceInfo);
    sp<ProviderInfo> parentProvider = deviceInfo->mParentProvider.promote();
    if (parentProvider == nullptr) {
        return DEAD_OBJECT;
    }
    auto provider =
            static_cast<AidlProviderInfo *>(parentProvider.get())->startProviderInterface();
    if (provider == nullptr) {
        return DEAD_OBJECT;
    }
    std::shared_ptr<HalCameraProvider> halCameraProvider =
            std::make_shared<AidlHalCameraProvider>(provider, provider->descriptor);
    saveRef(DeviceMode::CAMERA, id, halCameraProvider);

    auto interface = aidlDeviceInfo3->startDeviceInterface();
    if (interface == nullptr) {
        return DEAD_OBJECT;
    }

    auto ret = interface->openInjectionSession(callback, session);
    if (!ret.isOk()) {
        removeRef(DeviceMode::CAMERA, id);
        ALOGE("%s: Transaction error opening a session for camera device %s: %s",
                __FUNCTION__, id.c_str(), ret.getMessage());
        return DEAD_OBJECT;
    }
    return OK;
}

status_t CameraProviderManager::openHidlSession(const std::string &id,
        const sp<device::V3_2::ICameraDeviceCallback>& callback,
        /*out*/
+5 −0
Original line number Diff line number Diff line
@@ -344,6 +344,11 @@ public:
        /*out*/
        std::shared_ptr<aidl::android::hardware::camera::device::ICameraDeviceSession> *session);

    status_t openAidlInjectionSession(const std::string &id,
        const std::shared_ptr<
                aidl::android::hardware::camera::device::ICameraDeviceCallback>& callback,
        /*out*/
        std::shared_ptr<aidl::android::hardware::camera::device::ICameraInjectionSession> *session);

    /**
     * Open an active session to a camera device.
+5 −7
Original line number Diff line number Diff line
@@ -65,8 +65,6 @@
#include "utils/TraceHFR.h"
#include "utils/CameraServiceProxyWrapper.h"

#include "../common/hidl/HidlProviderInfo.h"

#include <algorithm>
#include <tuple>

@@ -2728,11 +2726,7 @@ void Camera3Device::monitorMetadata(TagMonitor::eventSource source,
            physicalMetadata, outputBuffers, numOutputBuffers, inputStreamId);
}

/**
 * HalInterface inner class methods
 */

void Camera3Device::HalInterface::cleanupNativeHandles(
void Camera3Device::cleanupNativeHandles(
        std::vector<native_handle_t*> *handles, bool closeFd) {
    if (handles == nullptr) {
        return;
@@ -2749,6 +2743,10 @@ void Camera3Device::HalInterface::cleanupNativeHandles(
    return;
}

/**
 * HalInterface inner class methods
 */

void Camera3Device::HalInterface::getInflightBufferKeys(
        std::vector<std::pair<int32_t, int32_t>>* out) {
    mBufferRecords.getInflightBufferKeys(out);
Loading