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

Commit 141c64a2 authored by Shuzhen Wang's avatar Shuzhen Wang
Browse files

Camera: Handle public physical camera for feature combination query

In case a logical camera contains a physical camera that's publicly
available, we need to make sure that physical camera's characteristics
can be fetched.

The current implementation only stores the hidden physical cameras'
characteristics within the logical camera's DeviceInfo. Querying
a public physical camera's characteristics will fail.

Test: test_multi_camera_alignment on vendor devices
Bug: 331891597
Bug: 331591275
Change-Id: I273ad49b4dba27431eeb4a5240a350051effd343
parent 50a5b0b1
Loading
Loading
Loading
Loading
+8 −15
Original line number Diff line number Diff line
@@ -421,8 +421,15 @@ status_t CameraProviderManager::isSessionConfigurationSupported(const std::strin
        return NAME_NOT_FOUND;
    }

    metadataGetter getMetadata = [this](const std::string &id,
            bool overrideForPerfClass) {
        CameraMetadata metadata;
        this->getCameraCharacteristicsLocked(id, overrideForPerfClass,
                                             &metadata, /*overrideToPortrait*/false);
        return metadata;
    };
    return deviceInfo->isSessionConfigurationSupported(configuration,
            overrideForPerfClass, checkSessionParams, status);
            overrideForPerfClass, getMetadata, checkSessionParams, status);
}

status_t  CameraProviderManager::createDefaultRequest(const std::string& cameraId,
@@ -1087,20 +1094,6 @@ void CameraProviderManager::ProviderInfo::DeviceInfo3::queryPhysicalCameraIds()
    }
}

CameraMetadata CameraProviderManager::ProviderInfo::DeviceInfo3::deviceInfo(
        const std::string &id) {
    if (id.empty()) {
        return mCameraCharacteristics;
    } else {
        if (mPhysicalCameraCharacteristics.find(id) != mPhysicalCameraCharacteristics.end()) {
            return mPhysicalCameraCharacteristics.at(id);
        } else {
            ALOGE("%s: Invalid physical camera id %s", __FUNCTION__, id.c_str());
            return mCameraCharacteristics;
        }
    }
}

SystemCameraKind CameraProviderManager::ProviderInfo::DeviceInfo3::getSystemCameraKind() {
    camera_metadata_entry_t entryCap;
    entryCap = mCameraCharacteristics.find(ANDROID_REQUEST_AVAILABLE_CAPABILITIES);
+1 −2
Original line number Diff line number Diff line
@@ -646,6 +646,7 @@ private:
            virtual status_t isSessionConfigurationSupported(
                    const SessionConfiguration &/*configuration*/,
                    bool /*overrideForPerfClass*/,
                    camera3::metadataGetter /*getMetadata*/,
                    bool /*checkSessionParams*/,
                    bool * /*status*/) {
                return INVALID_OPERATION;
@@ -777,8 +778,6 @@ private:
                    std::vector<int64_t>* stallDurations,
                    const camera_metadata_entry& halStreamConfigs,
                    const camera_metadata_entry& halStreamDurations);

            CameraMetadata deviceInfo(const std::string &id);
        };
    protected:
        std::string mType;
+1 −3
Original line number Diff line number Diff line
@@ -800,7 +800,7 @@ status_t AidlProviderInfo::AidlDeviceInfo3::dumpState(int fd) {

status_t AidlProviderInfo::AidlDeviceInfo3::isSessionConfigurationSupported(
        const SessionConfiguration &configuration, bool overrideForPerfClass,
        bool checkSessionParams, bool *status) {
        camera3::metadataGetter getMetadata, bool checkSessionParams, bool *status) {

    auto operatingMode = configuration.getOperatingMode();

@@ -812,8 +812,6 @@ status_t AidlProviderInfo::AidlDeviceInfo3::isSessionConfigurationSupported(

    camera::device::StreamConfiguration streamConfiguration;
    bool earlyExit = false;
    camera3::metadataGetter getMetadata = [this](const std::string &id,
            bool /*overrideForPerfClass*/) {return this->deviceInfo(id);};
    auto bRes = SessionConfigurationUtils::convertToHALStreamCombination(configuration,
            mId, mCameraCharacteristics, mCompositeJpegRDisabled, getMetadata,
            mPhysicalIds, streamConfiguration, overrideForPerfClass, mProviderTagid,
+2 −2
Original line number Diff line number Diff line
@@ -127,8 +127,8 @@ struct AidlProviderInfo : public CameraProviderManager::ProviderInfo {

        virtual status_t isSessionConfigurationSupported(
                const SessionConfiguration &/*configuration*/,
                bool overrideForPerfClass, bool checkSessionParams,
                bool *status/*status*/);
                bool overrideForPerfClass, camera3::metadataGetter getMetadata,
                bool checkSessionParams, bool *status/*status*/);

        virtual status_t createDefaultRequest(
                    camera3::camera_request_template_t templateId,
+1 −3
Original line number Diff line number Diff line
@@ -861,7 +861,7 @@ status_t HidlProviderInfo::HidlDeviceInfo3::dumpState(int fd) {

status_t HidlProviderInfo::HidlDeviceInfo3::isSessionConfigurationSupported(
        const SessionConfiguration &configuration, bool overrideForPerfClass,
        bool checkSessionParams, bool *status) {
        camera3::metadataGetter getMetadata, bool checkSessionParams, bool *status) {

    if (checkSessionParams) {
        // HIDL device doesn't support checking session parameters
@@ -870,8 +870,6 @@ status_t HidlProviderInfo::HidlDeviceInfo3::isSessionConfigurationSupported(

    hardware::camera::device::V3_7::StreamConfiguration configuration_3_7;
    bool earlyExit = false;
    camera3::metadataGetter getMetadata = [this](const std::string &id,
            bool /*overrideForPerfClass*/) {return this->deviceInfo(id);};
    auto bRes = SessionConfigurationUtils::convertToHALStreamCombination(configuration,
            mId, mCameraCharacteristics, getMetadata, mPhysicalIds,
            configuration_3_7, overrideForPerfClass, mProviderTagid,
Loading