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

Commit df612185 authored by Jayant Chowdhary's avatar Jayant Chowdhary Committed by Android (Google) Code Review
Browse files

Merge "Delete support for HIDL V3.8" into tm-dev

parents b857cde4 1f1b7aa4
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -47,7 +47,6 @@ cc_binary {
        "android.hardware.camera.device@1.0",
        "android.hardware.camera.device@3.2",
        "android.hardware.camera.device@3.4",
        "android.hardware.camera.device@3.8",
    ],
    compile_multilib: "first",
    cflags: [
+0 −1
Original line number Diff line number Diff line
@@ -163,7 +163,6 @@ cc_library_shared {
        "android.hardware.camera.device@3.5",
        "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",
    ],
+94 −80
Original line number Diff line number Diff line
@@ -887,29 +887,37 @@ void CameraService::clearCachedVariables() {
    BasicClient::BasicClient::sCameraService = nullptr;
}

int CameraService::getDeviceVersion(const String8& cameraId, int* facing, int* orientation) {
std::pair<int, IPCTransport> CameraService::getDeviceVersion(const String8& cameraId, int* facing,
        int* orientation) {
    ATRACE_CALL();

    int deviceVersion = 0;

    status_t res;
    hardware::hidl_version maxVersion{0,0};
    IPCTransport transport = IPCTransport::INVALID;
    res = mCameraProviderManager->getHighestSupportedVersion(cameraId.string(),
            &maxVersion);
    if (res != OK) return -1;
            &maxVersion, &transport);
    if (res != OK || transport == IPCTransport::INVALID) {
        ALOGE("%s: Unable to get highest supported version for camera id %s", __FUNCTION__,
                cameraId.string());
        return std::make_pair(-1, IPCTransport::INVALID) ;
    }
    deviceVersion = HARDWARE_DEVICE_API_VERSION(maxVersion.get_major(), maxVersion.get_minor());

    hardware::CameraInfo info;
    if (facing) {
        res = mCameraProviderManager->getCameraInfo(cameraId.string(), &info);
        if (res != OK) return -1;
        if (res != OK) {
            return std::make_pair(-1, IPCTransport::INVALID);
        }
        *facing = info.facing;
        if (orientation) {
            *orientation = info.orientation;
        }
    }

    return deviceVersion;
    return std::make_pair(deviceVersion, transport);
}

Status CameraService::filterGetInfoErrorCode(status_t err) {
@@ -933,10 +941,12 @@ Status CameraService::makeClient(const sp<CameraService>& cameraService,
        const sp<IInterface>& cameraCb, const String16& packageName, bool systemNativeClient,
        const std::optional<String16>& featureId,  const String8& cameraId,
        int api1CameraId, int facing, int sensorOrientation, int clientPid, uid_t clientUid,
        int servicePid, int deviceVersion, apiLevel effectiveApiLevel, bool overrideForPerfClass,
        /*out*/sp<BasicClient>* client) {

        int servicePid, std::pair<int, IPCTransport> deviceVersionAndTransport,
        apiLevel effectiveApiLevel, bool overrideForPerfClass, /*out*/sp<BasicClient>* client) {
    // For HIDL devices
    if (deviceVersionAndTransport.second == IPCTransport::HIDL) {
        // Create CameraClient based on device version reported by the HAL.
        int deviceVersion = deviceVersionAndTransport.first;
        switch(deviceVersion) {
            case CAMERA_DEVICE_API_VERSION_1_0:
                ALOGE("Camera using old HAL version: %d", deviceVersion);
@@ -952,7 +962,15 @@ Status CameraService::makeClient(const sp<CameraService>& cameraService,
            case CAMERA_DEVICE_API_VERSION_3_5:
            case CAMERA_DEVICE_API_VERSION_3_6:
            case CAMERA_DEVICE_API_VERSION_3_7:
        case CAMERA_DEVICE_API_VERSION_3_8:
                break;
            default:
                // Should not be reachable
                ALOGE("Unknown camera device HAL version: %d", deviceVersion);
                return STATUS_ERROR_FMT(ERROR_INVALID_OPERATION,
                        "Camera device \"%s\" has unknown HAL version %d",
                        cameraId.string(), deviceVersion);
        }
    }
    if (effectiveApiLevel == API_1) { // Camera1 API route
        sp<ICameraClient> tmp = static_cast<ICameraClient*>(cameraCb.get());
        *client = new Camera2Client(cameraService, tmp, packageName, featureId,
@@ -965,14 +983,6 @@ Status CameraService::makeClient(const sp<CameraService>& cameraService,
                systemNativeClient, featureId, cameraId, facing, sensorOrientation,
                clientPid, clientUid, servicePid, overrideForPerfClass);
    }
            break;
        default:
            // Should not be reachable
            ALOGE("Unknown camera device HAL version: %d", deviceVersion);
            return STATUS_ERROR_FMT(ERROR_INVALID_OPERATION,
                    "Camera device \"%s\" has unknown HAL version %d",
                    cameraId.string(), deviceVersion);
    }
    return Status::ok();
}

@@ -1822,7 +1832,8 @@ Status CameraService::connectHelper(const sp<CALLBACK>& cameraCb, const String8&
        // give flashlight a chance to close devices if necessary.
        mFlashlight->prepareDeviceOpen(cameraId);

        int deviceVersion = getDeviceVersion(cameraId, /*out*/&facing, /*out*/&orientation);
        auto deviceVersionAndTransport =
                getDeviceVersion(cameraId, /*out*/&facing, /*out*/&orientation);
        if (facing == -1) {
            ALOGE("%s: Unable to get camera device \"%s\"  facing", __FUNCTION__, cameraId.string());
            return STATUS_ERROR_FMT(ERROR_INVALID_OPERATION,
@@ -1835,7 +1846,7 @@ Status CameraService::connectHelper(const sp<CALLBACK>& cameraCb, const String8&
        if(!(ret = makeClient(this, cameraCb, clientPackageName, systemNativeClient,
                clientFeatureId, cameraId, api1CameraId, facing, orientation,
                clientPid, clientUid, getpid(),
                deviceVersion, effectiveApiLevel, overrideForPerfClass,
                deviceVersionAndTransport, effectiveApiLevel, overrideForPerfClass,
                /*out*/&tmp)).isOk()) {
            return ret;
        }
@@ -2708,18 +2719,25 @@ Status CameraService::supportsCameraApi(const String16& cameraId, int apiVersion
            return STATUS_ERROR(ERROR_ILLEGAL_ARGUMENT, msg.string());
    }

    int deviceVersion = getDeviceVersion(id);
    auto deviceVersionAndTransport = getDeviceVersion(id);
    if (deviceVersionAndTransport.first == -1) {
        String8 msg = String8::format("Unknown camera ID %s", id.string());
        ALOGE("%s: %s", __FUNCTION__, msg.string());
        return STATUS_ERROR(ERROR_ILLEGAL_ARGUMENT, msg.string());
    }
    if (deviceVersionAndTransport.second == IPCTransport::HIDL) {
        int deviceVersion = deviceVersionAndTransport.first;
        switch (deviceVersion) {
            case CAMERA_DEVICE_API_VERSION_1_0:
            case CAMERA_DEVICE_API_VERSION_3_0:
            case CAMERA_DEVICE_API_VERSION_3_1:
                if (apiVersion == API_VERSION_2) {
                ALOGV("%s: Camera id %s uses HAL version %d <3.2, doesn't support api2 without shim",
                        __FUNCTION__, id.string(), deviceVersion);
                    ALOGV("%s: Camera id %s uses HAL version %d <3.2, doesn't support api2 without "
                            "shim", __FUNCTION__, id.string(), deviceVersion);
                    *isSupported = false;
                } else { // if (apiVersion == API_VERSION_1) {
                ALOGV("%s: Camera id %s uses older HAL before 3.2, but api1 is always supported",
                        __FUNCTION__, id.string());
                    ALOGV("%s: Camera id %s uses older HAL before 3.2, but api1 is always "
                            "supported", __FUNCTION__, id.string());
                    *isSupported = true;
                }
                break;
@@ -2729,16 +2747,10 @@ Status CameraService::supportsCameraApi(const String16& cameraId, int apiVersion
            case CAMERA_DEVICE_API_VERSION_3_5:
            case CAMERA_DEVICE_API_VERSION_3_6:
            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",
                        __FUNCTION__, id.string());
                *isSupported = true;
                break;
        case -1: {
            String8 msg = String8::format("Unknown camera ID %s", id.string());
            ALOGE("%s: %s", __FUNCTION__, msg.string());
            return STATUS_ERROR(ERROR_ILLEGAL_ARGUMENT, msg.string());
        }
            default: {
                String8 msg = String8::format("Unknown device version %x for device %s",
                        deviceVersion, id.string());
@@ -2746,7 +2758,9 @@ Status CameraService::supportsCameraApi(const String16& cameraId, int apiVersion
                return STATUS_ERROR(ERROR_INVALID_OPERATION, msg.string());
            }
        }

    } else {
        *isSupported = true;
    }
    return Status::ok();
}

+5 −3
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@
#include "media/RingBuffer.h"
#include "utils/AutoConditionLock.h"
#include "utils/ClientManager.h"
#include "utils/IPCTransport.h"

#include <set>
#include <string>
@@ -242,7 +243,7 @@ public:

    /////////////////////////////////////////////////////////////////////
    // CameraDeviceFactory functionality
    int                 getDeviceVersion(const String8& cameraId, int* facing = nullptr,
    std::pair<int, IPCTransport>    getDeviceVersion(const String8& cameraId, int* facing = nullptr,
            int* orientation = nullptr);

    /////////////////////////////////////////////////////////////////////
@@ -1240,8 +1241,9 @@ private:
            const sp<IInterface>& cameraCb, const String16& packageName,
            bool systemNativeClient, const std::optional<String16>& featureId,
            const String8& cameraId, int api1CameraId, int facing, int sensorOrientation,
            int clientPid, uid_t clientUid, int servicePid, int deviceVersion,
            apiLevel effectiveApiLevel, bool overrideForPerfClass, /*out*/sp<BasicClient>* client);
            int clientPid, uid_t clientUid, int servicePid,
            std::pair<int, IPCTransport> deviceVersionAndIPCTransport, apiLevel effectiveApiLevel,
            bool overrideForPerfClass, /*out*/sp<BasicClient>* client);

    status_t checkCameraAccess(const String16& opPackageName);

+1 −1
Original line number Diff line number Diff line
@@ -112,7 +112,7 @@ status_t Camera2Client::initializeImpl(TProviderPtr providerPtr, const String8&
    {
        SharedParameters::Lock l(mParameters);

        res = l.mParameters.initialize(mDevice.get(), mDeviceVersion);
        res = l.mParameters.initialize(mDevice.get());
        if (res != OK) {
            ALOGE("%s: Camera %d: unable to build defaults: %s (%d)",
                    __FUNCTION__, mCameraId, strerror(-res), res);
Loading