Loading services/camera/libcameraservice/common/CameraProviderManager.cpp +1 −5 Original line number Diff line number Diff line Loading @@ -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", Loading @@ -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; } Loading services/camera/libcameraservice/common/CameraProviderManager.h +1 −1 Original line number Diff line number Diff line Loading @@ -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; } Loading services/camera/libcameraservice/common/aidl/AidlProviderInfo.cpp +28 −6 Original line number Diff line number Diff line Loading @@ -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> Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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(); Loading Loading @@ -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; Loading @@ -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; } Loading @@ -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; Loading Loading @@ -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; Loading services/camera/libcameraservice/common/aidl/AidlProviderInfo.h +2 −1 Original line number Diff line number Diff line Loading @@ -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*/, Loading @@ -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: Loading services/camera/libcameraservice/device3/Camera3Device.cpp +4 −19 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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 Loading
services/camera/libcameraservice/common/CameraProviderManager.cpp +1 −5 Original line number Diff line number Diff line Loading @@ -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", Loading @@ -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; } Loading
services/camera/libcameraservice/common/CameraProviderManager.h +1 −1 Original line number Diff line number Diff line Loading @@ -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; } Loading
services/camera/libcameraservice/common/aidl/AidlProviderInfo.cpp +28 −6 Original line number Diff line number Diff line Loading @@ -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> Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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(); Loading Loading @@ -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; Loading @@ -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; } Loading @@ -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; Loading Loading @@ -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; Loading
services/camera/libcameraservice/common/aidl/AidlProviderInfo.h +2 −1 Original line number Diff line number Diff line Loading @@ -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*/, Loading @@ -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: Loading
services/camera/libcameraservice/device3/Camera3Device.cpp +4 −19 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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