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

Commit 8fe571f5 authored by Shuzhen Wang's avatar Shuzhen Wang Committed by Android (Google) Code Review
Browse files

Merge "Camera: fix feature combination query implementation" into main

parents 8c205d17 33c84cd8
Loading
Loading
Loading
Loading
+1 −5
Original line number Diff line number Diff line
@@ -439,9 +439,8 @@ status_t CameraProviderManager::createDefaultRequest(const std::string& cameraI
        return NAME_NOT_FOUND;
    }

    camera_metadata_t *rawRequest;
    status_t res = deviceInfo->createDefaultRequest(templateId,
            &rawRequest);
            metadata);

    if (res == BAD_VALUE) {
        ALOGI("%s: template %d is not supported on this camera device",
@@ -453,9 +452,6 @@ status_t CameraProviderManager::createDefaultRequest(const std::string& cameraI
        return res;
    }

    set_camera_metadata_vendor_id(rawRequest, deviceInfo->mProviderTagid);
    metadata->acquire(rawRequest);

    return OK;
}

+1 −1
Original line number Diff line number Diff line
@@ -663,7 +663,7 @@ private:
            virtual void notifyDeviceStateChange(int64_t /*newState*/) {}
            virtual status_t createDefaultRequest(
                    camera3::camera_request_template_t /*templateId*/,
                    camera_metadata_t** /*metadata*/) {
                    CameraMetadata* /*metadata*/) {
                return INVALID_OPERATION;
            }

+28 −6
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@
#include <android/hardware/ICameraService.h>
#include <camera_metadata_hidden.h>

#include "device3/DistortionMapper.h"
#include "device3/ZoomRatioMapper.h"
#include <utils/SessionConfigurationUtils.h>
#include <utils/Trace.h>
@@ -44,6 +45,7 @@ using namespace aidl::android::hardware;
using namespace hardware::camera;
using hardware::camera2::utils::CameraIdAndSessionConfiguration;
using hardware::ICameraService;
using SessionConfigurationUtils::overrideDefaultRequestKeys;

using HalDeviceStatusType = aidl::android::hardware::camera::common::CameraDeviceStatus;
using ICameraProvider = aidl::android::hardware::camera::provider::ICameraProvider;
@@ -690,6 +692,14 @@ AidlProviderInfo::AidlDeviceInfo3::AidlDeviceInfo3(
        }
    }

    int deviceVersion = HARDWARE_DEVICE_API_VERSION(mVersion.get_major(), mVersion.get_minor());
    if (deviceVersion >= CAMERA_DEVICE_API_VERSION_1_3) {
        // This additional set of request keys must match the ones specified
        // in ICameraDevice.isSessionConfigurationWithSettingsSupported.
        mAdditionalKeysForFeatureQuery.insert(mAdditionalKeysForFeatureQuery.end(),
                {ANDROID_CONTROL_VIDEO_STABILIZATION_MODE, ANDROID_CONTROL_AE_TARGET_FPS_RANGE});
    }

    if (!kEnableLazyHal) {
        // Save HAL reference indefinitely
        mSavedInterface = interface;
@@ -804,7 +814,7 @@ status_t AidlProviderInfo::AidlDeviceInfo3::isSessionConfigurationSupported(
    auto bRes = SessionConfigurationUtils::convertToHALStreamCombination(configuration,
            mId, mCameraCharacteristics, mCompositeJpegRDisabled, getMetadata,
            mPhysicalIds, streamConfiguration, overrideForPerfClass, mProviderTagid,
            checkSessionParams, &earlyExit);
            checkSessionParams, mAdditionalKeysForFeatureQuery, &earlyExit);

    if (!bRes.isOk()) {
        return UNKNOWN_ERROR;
@@ -851,7 +861,7 @@ status_t AidlProviderInfo::AidlDeviceInfo3::isSessionConfigurationSupported(
}

status_t AidlProviderInfo::AidlDeviceInfo3::createDefaultRequest(
        camera3::camera_request_template_t templateId, camera_metadata_t** metadata) {
        camera3::camera_request_template_t templateId, CameraMetadata* metadata) {
    const std::shared_ptr<camera::device::ICameraDevice> interface =
            startDeviceInterface();

@@ -887,11 +897,12 @@ status_t AidlProviderInfo::AidlDeviceInfo3::createDefaultRequest(
    }
    const camera_metadata *r =
            reinterpret_cast<const camera_metadata_t*>(request.metadata.data());
    camera_metadata *rawRequest  = nullptr;
    size_t expectedSize = request.metadata.size();
    int ret = validate_camera_metadata_structure(r, &expectedSize);
    if (ret == OK || ret == CAMERA_METADATA_VALIDATION_SHIFTED) {
        *metadata = clone_camera_metadata(r);
        if (*metadata == nullptr) {
        rawRequest = clone_camera_metadata(r);
        if (rawRequest == nullptr) {
            ALOGE("%s: Unable to clone camera metadata received from HAL",
                    __FUNCTION__);
            res = UNKNOWN_ERROR;
@@ -901,6 +912,16 @@ status_t AidlProviderInfo::AidlDeviceInfo3::createDefaultRequest(
        res = UNKNOWN_ERROR;
    }

    set_camera_metadata_vendor_id(rawRequest, mProviderTagid);
    metadata->acquire(rawRequest);

    res = overrideDefaultRequestKeys(metadata);
    if (res != OK) {
        ALOGE("Unabled to override default request keys: %s (%d)",
                strerror(-res), res);
        return res;
    }

    return res;
}

@@ -912,7 +933,7 @@ status_t AidlProviderInfo::AidlDeviceInfo3::getSessionCharacteristics(
    auto res = SessionConfigurationUtils::convertToHALStreamCombination(configuration,
            mId, mCameraCharacteristics, mCompositeJpegRDisabled, getMetadata,
            mPhysicalIds, streamConfiguration, overrideForPerfClass, mProviderTagid,
            /*checkSessionParams*/true, &earlyExit);
            /*checkSessionParams*/true, mAdditionalKeysForFeatureQuery, &earlyExit);

    if (!res.isOk()) {
        return UNKNOWN_ERROR;
@@ -992,7 +1013,8 @@ status_t AidlProviderInfo::convertToAidlHALStreamCombinationAndCameraIdsLocked(
                    mManager->isCompositeJpegRDisabledLocked(cameraId), getMetadata,
                    physicalCameraIds, streamConfiguration,
                    overrideForPerfClass, mProviderTagid,
                    /*checkSessionParams*/false, &shouldExit);
                    /*checkSessionParams*/false, /*additionalKeys*/{},
                    &shouldExit);
        if (!bStatus.isOk()) {
            ALOGE("%s: convertToHALStreamCombination failed", __FUNCTION__);
            return INVALID_OPERATION;
+2 −1
Original line number Diff line number Diff line
@@ -132,7 +132,7 @@ struct AidlProviderInfo : public CameraProviderManager::ProviderInfo {

        virtual status_t createDefaultRequest(
                    camera3::camera_request_template_t templateId,
                    camera_metadata_t** metadata) override;
                    CameraMetadata* metadata) override;

        virtual status_t getSessionCharacteristics(
                const SessionConfiguration &/*configuration*/,
@@ -141,6 +141,7 @@ struct AidlProviderInfo : public CameraProviderManager::ProviderInfo {

        std::shared_ptr<aidl::android::hardware::camera::device::ICameraDevice>
                startDeviceInterface();
        std::vector<int32_t> mAdditionalKeysForFeatureQuery;
    };

 private:
+4 −19
Original line number Diff line number Diff line
@@ -1366,7 +1366,8 @@ status_t Camera3Device::configureStreams(const CameraMetadata& sessionParams, in
status_t Camera3Device::filterParamsAndConfigureLocked(const CameraMetadata& params,
        int operatingMode) {
    CameraMetadata filteredParams;
    SessionConfigurationUtils::filterParameters(params, mDeviceInfo, mVendorTagId, filteredParams);
    SessionConfigurationUtils::filterParameters(params, mDeviceInfo,
            /*additionalKeys*/{}, mVendorTagId, filteredParams);

    camera_metadata_entry_t availableSessionKeys = mDeviceInfo.find(
            ANDROID_REQUEST_AVAILABLE_SESSION_KEYS);
@@ -1487,29 +1488,13 @@ status_t Camera3Device::createDefaultRequest(camera_request_template_t templateI
        set_camera_metadata_vendor_id(rawRequest, mVendorTagId);
        mRequestTemplateCache[templateId].acquire(rawRequest);

        // Override the template request with zoomRatioMapper
        res = mZoomRatioMappers[mId].initZoomRatioInTemplate(
                &mRequestTemplateCache[templateId]);
        res = overrideDefaultRequestKeys(&mRequestTemplateCache[templateId]);
        if (res != OK) {
            CLOGE("Failed to update zoom ratio for template %d: %s (%d)",
            CLOGE("Failed to overrideDefaultRequestKeys for template %d: %s (%d)",
                    templateId, strerror(-res), res);
            return res;
        }

        // Fill in JPEG_QUALITY if not available
        if (!mRequestTemplateCache[templateId].exists(ANDROID_JPEG_QUALITY)) {
            static const uint8_t kDefaultJpegQuality = 95;
            mRequestTemplateCache[templateId].update(ANDROID_JPEG_QUALITY,
                    &kDefaultJpegQuality, 1);
        }

        // Fill in AUTOFRAMING if not available
        if (!mRequestTemplateCache[templateId].exists(ANDROID_CONTROL_AUTOFRAMING)) {
            static const uint8_t kDefaultAutoframingMode = ANDROID_CONTROL_AUTOFRAMING_OFF;
            mRequestTemplateCache[templateId].update(ANDROID_CONTROL_AUTOFRAMING,
                    &kDefaultAutoframingMode, 1);
        }

        *request = mRequestTemplateCache[templateId];
        mLastTemplateId = templateId;
    }
Loading