summaryrefslogtreecommitdiff
path: root/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'msm8998/QCamera2/HAL3/QCamera3HWI.cpp')
-rw-r--r--msm8998/QCamera2/HAL3/QCamera3HWI.cpp208
1 files changed, 154 insertions, 54 deletions
diff --git a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
index 4e58fcc..2b14f84 100644
--- a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
@@ -538,6 +538,7 @@ QCamera3HardwareInterface::QCamera3HardwareInterface(uint32_t cameraId,
mLastRequestedLensShadingMapMode(ANDROID_STATISTICS_LENS_SHADING_MAP_MODE_OFF),
mLastRequestedFaceDetectMode(ANDROID_STATISTICS_FACE_DETECT_MODE_OFF),
mLastRequestedOisDataMode(ANDROID_STATISTICS_OIS_DATA_MODE_OFF),
+ mLastRequestedZoomRatio(1.0f),
mCurrFeatureState(0),
mLdafCalibExist(false),
mLastCustIntentFrmNum(-1),
@@ -3883,7 +3884,7 @@ void QCamera3HardwareInterface::sendPartialMetadataWithLock(
// Extract 3A metadata
result.result = translateCbUrgentMetadataToResultMetadata(
- metadata, lastUrgentMetadataInBatch, requestIter->frame_number,
+ metadata, lastUrgentMetadataInBatch, requestIter,
isJumpstartMetadata);
// Populate metadata result
result.frame_number = requestIter->frame_number;
@@ -4209,8 +4210,10 @@ void QCamera3HardwareInterface::handleMetadataWithLock(
streamDim.width, streamDim.height);
cam_eis_crop_info_t eisCrop = iter->crop_info;
+ //eisCrop already combines zoom_ratio, no
+ //need to apply it again.
mStreamCropMapper.toSensor(eisCrop.delta_x, eisCrop.delta_y,
- eisCrop.delta_width, eisCrop.delta_height);
+ eisCrop.delta_width, eisCrop.delta_height, 1.0f);
int32_t crop[4] = {
crop_data->crop_info[j].crop.left + eisCrop.delta_x,
@@ -4332,11 +4335,12 @@ void QCamera3HardwareInterface::handleDepthDataLocked(
}
camera3_stream_buffer_t resultBuffer =
- {.acquire_fence = -1,
- .release_fence = -1,
- .status = CAMERA3_BUFFER_STATUS_OK,
+ {.stream = mDepthChannel->getStream(),
.buffer = nullptr,
- .stream = mDepthChannel->getStream()};
+ .status = CAMERA3_BUFFER_STATUS_OK,
+ .acquire_fence = -1,
+ .release_fence = -1,
+ };
do {
depthBuffer = mDepthChannel->getOldestFrame(currentFrameNumber);
if (nullptr == depthBuffer) {
@@ -4396,11 +4400,11 @@ void QCamera3HardwareInterface::notifyErrorFoPendingDepthData(
{.type = CAMERA3_MSG_ERROR,
{{0, depthCh->getStream(), CAMERA3_MSG_ERROR_BUFFER}}};
camera3_stream_buffer_t resultBuffer =
- {.acquire_fence = -1,
- .release_fence = -1,
+ {.stream = depthCh->getStream(),
.buffer = nullptr,
- .stream = depthCh->getStream(),
- .status = CAMERA3_BUFFER_STATUS_ERROR};
+ .status = CAMERA3_BUFFER_STATUS_ERROR,
+ .acquire_fence = -1,
+ .release_fence = -1,};
while (nullptr !=
(depthBuffer = depthCh->getOldestFrame(currentFrameNumber))) {
@@ -4588,6 +4592,15 @@ void QCamera3HardwareInterface::handleBufferWithLock(
LOGH("result frame_number = %d, buffer = %p",
frame_number, buffer->buffer);
+ if (buffer->status == CAMERA3_BUFFER_STATUS_ERROR) {
+ camera3_notify_msg_t notify_msg = {};
+ notify_msg.type = CAMERA3_MSG_ERROR;
+ notify_msg.message.error.frame_number = frame_number;
+ notify_msg.message.error.error_code = CAMERA3_MSG_ERROR_BUFFER ;
+ notify_msg.message.error.error_stream = buffer->stream;
+ orchestrateNotify(&notify_msg);
+ }
+
mPendingBuffersMap.removeBuf(buffer->buffer);
mOutputBufferDispatcher.markBufferReady(frame_number, *buffer);
@@ -5799,6 +5812,7 @@ no_error:
pendingRequest.requestedLensShadingMapMode = requestedLensShadingMapMode;
pendingRequest.requestedFaceDetectMode = mLastRequestedFaceDetectMode;
pendingRequest.requestedOisDataMode = mLastRequestedOisDataMode;
+ pendingRequest.zoomRatio = mLastRequestedZoomRatio;
if (request->input_buffer) {
pendingRequest.input_buffer =
(camera3_stream_buffer_t*)malloc(sizeof(camera3_stream_buffer_t));
@@ -5874,11 +5888,13 @@ no_error:
ALOGD("%s: frame number %u is an HDR+ request.", __FUNCTION__, frameNumber);
}
+ buffer_handle_t *depth_buffer = nullptr;
for (size_t i = 0; i < request->num_output_buffers; i++) {
if ((request->output_buffers[i].stream->data_space ==
HAL_DATASPACE_DEPTH) &&
(HAL_PIXEL_FORMAT_BLOB ==
request->output_buffers[i].stream->format)) {
+ depth_buffer = request->output_buffers[i].buffer;
continue;
}
RequestedBufferInfo requestedBuf;
@@ -5915,6 +5931,23 @@ no_error:
if(mFlush) {
LOGI("mFlush is true");
+
+ // If depth buffer is requested, return an error depth buffer. The buffer is not
+ // going to be added to the depth channel so it won't be returned in
+ // notifyErrorFoPendingDepthData().
+ if (depth_buffer != nullptr) {
+ camera3_stream_buffer_t errorBuffer =
+ {
+ .stream = mDepthChannel->getStream(),
+ .buffer = depth_buffer,
+ .status = CAMERA3_BUFFER_STATUS_ERROR,
+ .acquire_fence = -1,
+ .release_fence = -1,
+ };
+
+ mOutputBufferDispatcher.markBufferReady(frameNumber, errorBuffer);
+ }
+
pthread_mutex_unlock(&mMutex);
return NO_ERROR;
}
@@ -7384,6 +7417,24 @@ QCamera3HardwareInterface::translateFromHalMetadata(
camMetadata.update(ANDROID_SYNC_FRAME_NUMBER, &fwk_frame_number, 1);
}
+ IF_META_AVAILABLE(cam_crop_region_t, hScalerCropRegion,
+ CAM_INTF_META_SCALER_CROP_REGION, metadata) {
+ int32_t scalerCropRegion[4];
+ scalerCropRegion[0] = hScalerCropRegion->left;
+ scalerCropRegion[1] = hScalerCropRegion->top;
+ scalerCropRegion[2] = hScalerCropRegion->width;
+ scalerCropRegion[3] = hScalerCropRegion->height;
+
+ // Adjust crop region from sensor output coordinate system to active
+ // array coordinate system.
+ mCropRegionMapper.toActiveArray(scalerCropRegion[0], scalerCropRegion[1],
+ scalerCropRegion[2], scalerCropRegion[3], pendingRequest.zoomRatio);
+
+ camMetadata.update(ANDROID_SCALER_CROP_REGION, scalerCropRegion, 4);
+ }
+
+ camMetadata.update(ANDROID_CONTROL_ZOOM_RATIO, &pendingRequest.zoomRatio, 1);
+
IF_META_AVAILABLE(cam_fps_range_t, float_range, CAM_INTF_PARM_FPS_RANGE, metadata) {
int32_t fps_range[2];
fps_range[0] = (int32_t)float_range->min_fps;
@@ -7538,24 +7589,9 @@ QCamera3HardwareInterface::translateFromHalMetadata(
CAM_INTF_META_EIS_CROP_INFO, metadata) {
mLastEISCropInfo = *eisCropInfo;
+ //mLastEISCropInfo contains combined zoom_ratio.
mCropRegionMapper.toActiveArray(mLastEISCropInfo.delta_x, mLastEISCropInfo.delta_y,
- mLastEISCropInfo.delta_width, mLastEISCropInfo.delta_height);
- }
-
- IF_META_AVAILABLE(cam_crop_region_t, hScalerCropRegion,
- CAM_INTF_META_SCALER_CROP_REGION, metadata) {
- int32_t scalerCropRegion[4];
- scalerCropRegion[0] = hScalerCropRegion->left;
- scalerCropRegion[1] = hScalerCropRegion->top;
- scalerCropRegion[2] = hScalerCropRegion->width;
- scalerCropRegion[3] = hScalerCropRegion->height;
-
- // Adjust crop region from sensor output coordinate system to active
- // array coordinate system.
- mCropRegionMapper.toActiveArray(scalerCropRegion[0], scalerCropRegion[1],
- scalerCropRegion[2], scalerCropRegion[3]);
-
- camMetadata.update(ANDROID_SCALER_CROP_REGION, scalerCropRegion, 4);
+ mLastEISCropInfo.delta_width, mLastEISCropInfo.delta_height, 1.0f/*zoom_ratio*/);
}
IF_META_AVAILABLE(int64_t, sensorExpTime, CAM_INTF_META_SENSOR_EXPOSURE_TIME, metadata) {
@@ -7639,7 +7675,7 @@ QCamera3HardwareInterface::translateFromHalMetadata(
// array coordinate system.
cam_rect_t rect = faceDetectionInfo->faces[i].face_boundary;
mCropRegionMapper.toActiveArray(rect.left, rect.top,
- rect.width, rect.height);
+ rect.width, rect.height, pendingRequest.zoomRatio);
convertToRegions(rect, faceRectangles+j, -1);
@@ -7673,13 +7709,16 @@ QCamera3HardwareInterface::translateFromHalMetadata(
// array coordinate system.
mCropRegionMapper.toActiveArray(
face_landmarks.left_eye_center.x,
- face_landmarks.left_eye_center.y);
+ face_landmarks.left_eye_center.y,
+ pendingRequest.zoomRatio);
mCropRegionMapper.toActiveArray(
face_landmarks.right_eye_center.x,
- face_landmarks.right_eye_center.y);
+ face_landmarks.right_eye_center.y,
+ pendingRequest.zoomRatio);
mCropRegionMapper.toActiveArray(
face_landmarks.mouth_center.x,
- face_landmarks.mouth_center.y);
+ face_landmarks.mouth_center.y,
+ pendingRequest.zoomRatio);
convertLandmarks(face_landmarks, faceLandmarks+k);
@@ -8114,7 +8153,7 @@ QCamera3HardwareInterface::translateFromHalMetadata(
// array coordinate system.
cam_rect_t hAeRect = hAeRegions->rect;
mCropRegionMapper.toActiveArray(hAeRect.left, hAeRect.top,
- hAeRect.width, hAeRect.height);
+ hAeRect.width, hAeRect.height, pendingRequest.zoomRatio);
convertToRegions(hAeRect, aeRegions, hAeRegions->weight);
camMetadata.update(ANDROID_CONTROL_AE_REGIONS, aeRegions,
@@ -8697,7 +8736,7 @@ mm_jpeg_exif_params_t QCamera3HardwareInterface::get3AExifParams()
* @lastUrgentMetadataInBatch: Boolean to indicate whether this is the last
* urgent metadata in a batch. Always true for
* non-batch mode.
- * @frame_number : frame number for this urgent metadata
+ * @requestIter: Pending request iterator
* @isJumpstartMetadata: Whether this is a partial metadata for jumpstart,
* i.e. even though it doesn't map to a valid partial
* frame number, its metadata entries should be kept.
@@ -8707,10 +8746,11 @@ mm_jpeg_exif_params_t QCamera3HardwareInterface::get3AExifParams()
camera_metadata_t*
QCamera3HardwareInterface::translateCbUrgentMetadataToResultMetadata
(metadata_buffer_t *metadata, bool lastUrgentMetadataInBatch,
- uint32_t frame_number, bool isJumpstartMetadata)
+ const pendingRequestIterator requestIter, bool isJumpstartMetadata)
{
CameraMetadata camMetadata;
camera_metadata_t *resultMetadata;
+ uint32_t frame_number = requestIter->frame_number;
if (!lastUrgentMetadataInBatch && !isJumpstartMetadata) {
/* In batch mode, use empty metadata if this is not the last in batch
@@ -8796,7 +8836,7 @@ QCamera3HardwareInterface::translateCbUrgentMetadataToResultMetadata
// Adjust crop region from sensor output coordinate system to active
// array coordinate system.
mCropRegionMapper.toActiveArray(hAfRect.left, hAfRect.top,
- hAfRect.width, hAfRect.height);
+ hAfRect.width, hAfRect.height, requestIter->zoomRatio);
convertToRegions(hAfRect, afRegions, hAfRegions->weight);
camMetadata.update(ANDROID_CONTROL_AF_REGIONS, afRegions,
@@ -10104,6 +10144,10 @@ int QCamera3HardwareInterface::initStaticMetadata(uint32_t cameraId)
staticInfo.update(ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM,
&maxZoom, 1);
+ float zoomRatioRange[] = {1.0f, maxZoom};
+ staticInfo.update(ANDROID_CONTROL_ZOOM_RATIO_RANGE, zoomRatioRange, 2);
+ gCamCapability[cameraId]->max_zoom = maxZoom;
+
uint8_t croppingType = ANDROID_SCALER_CROPPING_TYPE_CENTER_ONLY;
staticInfo.update(ANDROID_SCALER_CROPPING_TYPE, &croppingType, 1);
@@ -10884,6 +10928,7 @@ int QCamera3HardwareInterface::initStaticMetadata(uint32_t cameraId)
ANDROID_SENSOR_SENSITIVITY, ANDROID_SHADING_MODE,
#ifndef USE_HAL_3_3
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST,
+ ANDROID_CONTROL_ZOOM_RATIO,
#endif
ANDROID_STATISTICS_FACE_DETECT_MODE,
ANDROID_STATISTICS_SHARPNESS_MAP_MODE, ANDROID_STATISTICS_OIS_DATA_MODE,
@@ -10964,6 +11009,7 @@ int QCamera3HardwareInterface::initStaticMetadata(uint32_t cameraId)
ANDROID_STATISTICS_OIS_Y_SHIFTS,
#ifndef USE_HAL_3_3
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST,
+ ANDROID_CONTROL_ZOOM_RATIO,
#endif
NEXUS_EXPERIMENTAL_2016_HYBRID_AE_ENABLE,
NEXUS_EXPERIMENTAL_2016_AF_SCENE_CHANGE,
@@ -11163,6 +11209,7 @@ int QCamera3HardwareInterface::initStaticMetadata(uint32_t cameraId)
#ifndef USE_HAL_3_3
ANDROID_SENSOR_OPAQUE_RAW_SIZE,
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE,
+ ANDROID_CONTROL_ZOOM_RATIO_RANGE,
#endif
ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS,
ANDROID_SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAP,
@@ -12193,6 +12240,9 @@ camera_metadata_t* QCamera3HardwareInterface::translateCapabilityToMetadata(int
scaler_crop_region[3] = gCamCapability[mCameraId]->active_array_size.height;
settings.update(ANDROID_SCALER_CROP_REGION, scaler_crop_region, 4);
+ float zoom_ratio = 1.0f;
+ settings.update(ANDROID_CONTROL_ZOOM_RATIO, &zoom_ratio, 1);
+
static const uint8_t antibanding_mode = ANDROID_CONTROL_AE_ANTIBANDING_MODE_AUTO;
settings.update(ANDROID_CONTROL_AE_ANTIBANDING_MODE, &antibanding_mode, 1);
@@ -13427,9 +13477,16 @@ int QCamera3HardwareInterface::translateFwkMetadataToHalMetadata(
scalerCropRegion.width = frame_settings.find(ANDROID_SCALER_CROP_REGION).data.i32[2];
scalerCropRegion.height = frame_settings.find(ANDROID_SCALER_CROP_REGION).data.i32[3];
+ if (frame_settings.exists(ANDROID_CONTROL_ZOOM_RATIO)) {
+ mLastRequestedZoomRatio = frame_settings.find(ANDROID_CONTROL_ZOOM_RATIO).data.f[0];
+ mLastRequestedZoomRatio = MIN(MAX(mLastRequestedZoomRatio, 1.0f),
+ gCamCapability[mCameraId]->max_zoom);
+ LOGD("setting zoomRatio %f", mLastRequestedZoomRatio);
+ }
+
// Map coordinate system from active array to sensor output.
mCropRegionMapper.toSensor(scalerCropRegion.left, scalerCropRegion.top,
- scalerCropRegion.width, scalerCropRegion.height);
+ scalerCropRegion.width, scalerCropRegion.height, mLastRequestedZoomRatio);
if (ADD_SET_PARAM_ENTRY_TO_BATCH(hal_metadata, CAM_INTF_META_SCALER_CROP_REGION,
scalerCropRegion)) {
@@ -13633,11 +13690,12 @@ int QCamera3HardwareInterface::translateFwkMetadataToHalMetadata(
// Map coordinate system from active array to sensor output.
mCropRegionMapper.toSensor(roi.rect.left, roi.rect.top, roi.rect.width,
- roi.rect.height);
+ roi.rect.height, mLastRequestedZoomRatio);
if (scalerCropSet) {
reset = resetIfNeededROI(&roi, &scalerCropRegion);
}
+
if (reset && ADD_SET_PARAM_ENTRY_TO_BATCH(hal_metadata, CAM_INTF_META_AEC_ROI, roi)) {
rc = BAD_VALUE;
}
@@ -13650,7 +13708,7 @@ int QCamera3HardwareInterface::translateFwkMetadataToHalMetadata(
// Map coordinate system from active array to sensor output.
mCropRegionMapper.toSensor(roi.rect.left, roi.rect.top, roi.rect.width,
- roi.rect.height);
+ roi.rect.height, mLastRequestedZoomRatio);
if (scalerCropSet) {
reset = resetIfNeededROI(&roi, &scalerCropRegion);
@@ -15167,8 +15225,11 @@ int32_t QCamera3HardwareInterface::notifyErrorForPendingRequests()
pendingBuffer = mPendingBuffersMap.mPendingBuffersInRequest.erase(pendingBuffer);
} else if (pendingBuffer == mPendingBuffersMap.mPendingBuffersInRequest.end() ||
((pendingRequest != mPendingRequestsList.end()) &&
- (pendingBuffer->frame_number > pendingRequest->frame_number))) {
- // If the buffers for this frame were sent already, notify about a result error.
+ (pendingBuffer->frame_number > pendingRequest->frame_number ||
+ (pendingBuffer->frame_number == pendingRequest->frame_number &&
+ pendingBuffer->mPendingBufferList.size() < pendingRequest->num_buffers)))) {
+ // If some or all buffers for this frame were sent already, notify about a result error,
+ // as well as remaining buffer errors.
camera3_notify_msg_t notify_msg;
memset(&notify_msg, 0, sizeof(camera3_notify_msg_t));
notify_msg.type = CAMERA3_MSG_ERROR;
@@ -15185,20 +15246,41 @@ int32_t QCamera3HardwareInterface::notifyErrorForPendingRequests()
orchestrateResult(&result);
}
+ if (pendingBuffer != mPendingBuffersMap.mPendingBuffersInRequest.end() &&
+ pendingBuffer->frame_number == pendingRequest->frame_number) {
+ for (const auto &info : pendingBuffer->mPendingBufferList) {
+ // Send a buffer error for this frame number.
+ camera3_notify_msg_t notify_msg;
+ memset(&notify_msg, 0, sizeof(camera3_notify_msg_t));
+ notify_msg.type = CAMERA3_MSG_ERROR;
+ notify_msg.message.error.error_code = CAMERA3_MSG_ERROR_BUFFER;
+ notify_msg.message.error.error_stream = info.stream;
+ notify_msg.message.error.frame_number = pendingBuffer->frame_number;
+ orchestrateNotify(&notify_msg);
+
+ camera3_stream_buffer_t buffer = {};
+ buffer.acquire_fence = -1;
+ buffer.release_fence = -1;
+ buffer.buffer = info.buffer;
+ buffer.status = CAMERA3_BUFFER_STATUS_ERROR;
+ buffer.stream = info.stream;
+ mOutputBufferDispatcher.markBufferReady(pendingBuffer->frame_number, buffer);
+ }
+ pendingBuffer = mPendingBuffersMap.mPendingBuffersInRequest.erase(pendingBuffer);
+ }
mShutterDispatcher.clear(pendingRequest->frame_number);
pendingRequest = mPendingRequestsList.erase(pendingRequest);
} else {
// If both buffers and result metadata weren't sent yet, notify about a request error
// and return buffers with error.
- for (auto &info : pendingBuffer->mPendingBufferList) {
- camera3_notify_msg_t notify_msg;
- memset(&notify_msg, 0, sizeof(camera3_notify_msg_t));
- notify_msg.type = CAMERA3_MSG_ERROR;
- notify_msg.message.error.error_code = CAMERA3_MSG_ERROR_REQUEST;
- notify_msg.message.error.error_stream = info.stream;
- notify_msg.message.error.frame_number = pendingBuffer->frame_number;
- orchestrateNotify(&notify_msg);
+ camera3_notify_msg_t notify_msg;
+ memset(&notify_msg, 0, sizeof(camera3_notify_msg_t));
+ notify_msg.type = CAMERA3_MSG_ERROR;
+ notify_msg.message.error.error_code = CAMERA3_MSG_ERROR_REQUEST;
+ notify_msg.message.error.frame_number = pendingBuffer->frame_number;
+ orchestrateNotify(&notify_msg);
+ for (auto &info : pendingBuffer->mPendingBufferList) {
camera3_stream_buffer_t buffer = {};
buffer.acquire_fence = -1;
buffer.release_fence = -1;
@@ -15892,11 +15974,29 @@ bool QCamera3HardwareInterface::trySubmittingHdrPlusRequestLocked(
hdrPlusRequest->frameworkOutputBuffers.emplace(pbStreamId, request.output_buffers[i]);
}
+ float zoomRatio = 1.0f;
+ camera_metadata_ro_entry zoomRatioEntry = metadata.find(ANDROID_CONTROL_ZOOM_RATIO);
+ if (zoomRatioEntry.count == 1) {
+ zoomRatio = MIN(MAX(zoomRatioEntry.data.f[0], 1.0f), gCamCapability[mCameraId]->max_zoom);
+ }
+
+ // Capture requests should not be modified.
+ CameraMetadata updatedMetadata(metadata);
+ camera_metadata_entry entry = updatedMetadata.find(ANDROID_SCALER_CROP_REGION);
if (isEISCropInSnapshotNeeded(metadata)) {
int32_t scalerRegion[4] = {0, 0, gCamCapability[mCameraId]->active_array_size.width,
gCamCapability[mCameraId]->active_array_size.height};
- if (metadata.exists(ANDROID_SCALER_CROP_REGION)) {
+ if (entry.count == 4) {
auto currentScalerRegion = metadata.find(ANDROID_SCALER_CROP_REGION).data.i32;
+ scalerRegion[0] = currentScalerRegion[0];
+ scalerRegion[1] = currentScalerRegion[1];
+ scalerRegion[2] = currentScalerRegion[2];
+ scalerRegion[3] = currentScalerRegion[3];
+
+ // Apply zoom ratio to generate new crop region
+ mCropRegionMapper.applyZoomRatio(scalerRegion[0], scalerRegion[1],
+ scalerRegion[2], scalerRegion[3], zoomRatio);
+
scalerRegion[0] = currentScalerRegion[0] + mLastEISCropInfo.delta_x;
scalerRegion[1] = currentScalerRegion[1] + mLastEISCropInfo.delta_y;
scalerRegion[2] = currentScalerRegion[2] - mLastEISCropInfo.delta_width;
@@ -15908,8 +16008,6 @@ bool QCamera3HardwareInterface::trySubmittingHdrPlusRequestLocked(
scalerRegion[3] -= mLastEISCropInfo.delta_height;
}
- // Capture requests should not be modified.
- CameraMetadata updatedMetadata(metadata);
if (isCropValid(scalerRegion[0], scalerRegion[1], scalerRegion[2], scalerRegion[3],
gCamCapability[mCameraId]->active_array_size.width,
gCamCapability[mCameraId]->active_array_size.height)) {
@@ -15917,11 +16015,13 @@ bool QCamera3HardwareInterface::trySubmittingHdrPlusRequestLocked(
} else {
LOGE("Invalid EIS compensated crop region");
}
-
- res = gHdrPlusClient->submitCaptureRequest(&pbRequest, updatedMetadata);
} else {
- res = gHdrPlusClient->submitCaptureRequest(&pbRequest, metadata);
+ if (entry.count == 4) {
+ mCropRegionMapper.applyZoomRatio(entry.data.i32[0], entry.data.i32[1],
+ entry.data.i32[2], entry.data.i32[3], zoomRatio);
+ }
}
+ res = gHdrPlusClient->submitCaptureRequest(&pbRequest, updatedMetadata);
if (res != OK) {
ALOGE("%s: %d: Submitting a capture request failed: %s (%d)", __FUNCTION__, __LINE__,