Loading services/camera/libcameraservice/device3/Camera3Device.cpp +32 −0 Original line number Diff line number Diff line Loading @@ -4778,6 +4778,26 @@ bool Camera3Device::RequestThread::threadLoop() { return submitRequestSuccess; } status_t Camera3Device::removeFwkOnlyRegionKeys(CameraMetadata *request) { static const std::array<uint32_t, 4> kFwkOnlyRegionKeys = {ANDROID_CONTROL_AF_REGIONS_SET, ANDROID_CONTROL_AE_REGIONS_SET, ANDROID_CONTROL_AWB_REGIONS_SET, ANDROID_SCALER_CROP_REGION_SET}; if (request == nullptr) { ALOGE("%s request metadata nullptr", __FUNCTION__); return BAD_VALUE; } status_t res = OK; for (const auto &key : kFwkOnlyRegionKeys) { if (request->exists(key)) { res = request->erase(key); if (res != OK) { return res; } } } return OK; } status_t Camera3Device::RequestThread::prepareHalRequests() { ATRACE_CALL(); Loading Loading @@ -4837,6 +4857,12 @@ status_t Camera3Device::RequestThread::prepareHalRequests() { it != captureRequest->mSettingsList.end(); it++) { if (parent->mUHRCropAndMeteringRegionMappers.find(it->cameraId) == parent->mUHRCropAndMeteringRegionMappers.end()) { if (removeFwkOnlyRegionKeys(&(it->metadata)) != OK) { SET_ERR("RequestThread: Unable to remove fwk-only keys from request" "%d: %s (%d)", halRequest->frame_number, strerror(-res), res); return INVALID_OPERATION; } continue; } Loading @@ -4851,6 +4877,12 @@ status_t Camera3Device::RequestThread::prepareHalRequests() { return INVALID_OPERATION; } captureRequest->mUHRCropAndMeteringRegionsUpdated = true; if (removeFwkOnlyRegionKeys(&(it->metadata)) != OK) { SET_ERR("RequestThread: Unable to remove fwk-only keys from request" "%d: %s (%d)", halRequest->frame_number, strerror(-res), res); return INVALID_OPERATION; } } } Loading services/camera/libcameraservice/device3/Camera3Device.h +1 −0 Original line number Diff line number Diff line Loading @@ -297,6 +297,7 @@ class Camera3Device : private: status_t disconnectImpl(); static status_t removeFwkOnlyRegionKeys(CameraMetadata *request); // internal typedefs using RequestMetadataQueue = hardware::MessageQueue<uint8_t, hardware::kSynchronizedReadWrite>; Loading Loading
services/camera/libcameraservice/device3/Camera3Device.cpp +32 −0 Original line number Diff line number Diff line Loading @@ -4778,6 +4778,26 @@ bool Camera3Device::RequestThread::threadLoop() { return submitRequestSuccess; } status_t Camera3Device::removeFwkOnlyRegionKeys(CameraMetadata *request) { static const std::array<uint32_t, 4> kFwkOnlyRegionKeys = {ANDROID_CONTROL_AF_REGIONS_SET, ANDROID_CONTROL_AE_REGIONS_SET, ANDROID_CONTROL_AWB_REGIONS_SET, ANDROID_SCALER_CROP_REGION_SET}; if (request == nullptr) { ALOGE("%s request metadata nullptr", __FUNCTION__); return BAD_VALUE; } status_t res = OK; for (const auto &key : kFwkOnlyRegionKeys) { if (request->exists(key)) { res = request->erase(key); if (res != OK) { return res; } } } return OK; } status_t Camera3Device::RequestThread::prepareHalRequests() { ATRACE_CALL(); Loading Loading @@ -4837,6 +4857,12 @@ status_t Camera3Device::RequestThread::prepareHalRequests() { it != captureRequest->mSettingsList.end(); it++) { if (parent->mUHRCropAndMeteringRegionMappers.find(it->cameraId) == parent->mUHRCropAndMeteringRegionMappers.end()) { if (removeFwkOnlyRegionKeys(&(it->metadata)) != OK) { SET_ERR("RequestThread: Unable to remove fwk-only keys from request" "%d: %s (%d)", halRequest->frame_number, strerror(-res), res); return INVALID_OPERATION; } continue; } Loading @@ -4851,6 +4877,12 @@ status_t Camera3Device::RequestThread::prepareHalRequests() { return INVALID_OPERATION; } captureRequest->mUHRCropAndMeteringRegionsUpdated = true; if (removeFwkOnlyRegionKeys(&(it->metadata)) != OK) { SET_ERR("RequestThread: Unable to remove fwk-only keys from request" "%d: %s (%d)", halRequest->frame_number, strerror(-res), res); return INVALID_OPERATION; } } } Loading
services/camera/libcameraservice/device3/Camera3Device.h +1 −0 Original line number Diff line number Diff line Loading @@ -297,6 +297,7 @@ class Camera3Device : private: status_t disconnectImpl(); static status_t removeFwkOnlyRegionKeys(CameraMetadata *request); // internal typedefs using RequestMetadataQueue = hardware::MessageQueue<uint8_t, hardware::kSynchronizedReadWrite>; Loading