diff options
| author | Mansoor Aftab <maftab@codeaurora.org> | 2013-08-30 17:25:20 -0700 |
|---|---|---|
| committer | Ali B <abittin@gmail.com> | 2018-06-17 19:16:30 +0300 |
| commit | e1fab5a4b19c2e77d1f32ad2dd02dca9658a0c53 (patch) | |
| tree | 554e6313c52d7058bb53734352a1f103499b7ed1 | |
| parent | c0f769f529782eb9c160be4f7df5e4b14835d169 (diff) | |
Camera3: Enable livesnapshot for zsl
Ensure that metadata is handled correctly for different
ZSL usecases.
Change-Id: Ic521f54b973535384cbc2ec94facea3a3f326648
Signed-off-by: Daniel Jarai <jaraidaniel@gmail.com>
| -rwxr-xr-x | camera/QCamera2/HAL3/QCamera3HWI.cpp | 52 | ||||
| -rwxr-xr-x | camera/QCamera2/HAL3/QCamera3HWI.h | 1 |
2 files changed, 29 insertions, 24 deletions
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.cpp b/camera/QCamera2/HAL3/QCamera3HWI.cpp index f8db98a..74c8a56 100755 --- a/camera/QCamera2/HAL3/QCamera3HWI.cpp +++ b/camera/QCamera2/HAL3/QCamera3HWI.cpp @@ -903,6 +903,7 @@ int QCamera3HardwareInterface::processCaptureRequest( pendingRequest.num_buffers = request->num_output_buffers; pendingRequest.request_id = request_id; pendingRequest.blob_request = blob_request; + pendingRequest.input_buffer_present = (request->input_buffer != NULL)? 1 : 0; pendingRequest.ae_trigger.trigger_id = mPrecaptureId; pendingRequest.ae_trigger.trigger = CAM_AEC_TRIGGER_IDLE; @@ -941,7 +942,6 @@ int QCamera3HardwareInterface::processCaptureRequest( if (output.stream->format == HAL_PIXEL_FORMAT_BLOB) { QCamera3RegularChannel* inputChannel = NULL; if(request->input_buffer != NULL){ - //Try to get the internal format inputChannel = (QCamera3RegularChannel*) request->input_buffer->stream->priv; @@ -1154,14 +1154,21 @@ void QCamera3HardwareInterface::captureResultCb(mm_camera_super_buf_t *metadata_ } } if (!found_metadata) { - //livesnapshot case - if (i->blob_request) { - mPictureChannel->queueMetadata(metadata_buf); - } else { - //return the metadata immediately - mMetadataChannel->bufDone(metadata_buf); - free(metadata_buf); - } + if (!i->input_buffer_present && i->blob_request) { + //livesnapshot or fallback non-zsl snapshot case + for (List<RequestedBufferInfo>::iterator j = i->buffers.begin(); + j != i->buffers.end(); j++){ + if (j->stream->stream_type == CAMERA3_STREAM_OUTPUT && + j->stream->format == HAL_PIXEL_FORMAT_BLOB) { + mPictureChannel->queueMetadata(metadata_buf); + break; + } + } + } else { + //return the metadata immediately + mMetadataChannel->bufDone(metadata_buf); + free(metadata_buf); + } } } else if (!mIsZslMode && i->blob_request) { //If it is a blob request then send the metadata to the picture channel @@ -1374,22 +1381,19 @@ QCamera3HardwareInterface::translateCbMetadataToResultMetadata int32_t aeRegions[5]; convertToRegions(hAeRegions->rect, aeRegions, hAeRegions->weight); camMetadata.update(ANDROID_CONTROL_AE_REGIONS, aeRegions, 5); - if(mIsZslMode) { - uint8_t ae_state = ANDROID_CONTROL_AE_STATE_CONVERGED; - camMetadata.update(ANDROID_CONTROL_AE_STATE, &ae_state, 1); - } else { - uint8_t ae_state = - *(uint8_t *)POINTER_OF(CAM_INTF_META_AEC_STATE, metadata); - //Override AE state for front(YUV) sensor if corresponding request - //contain a precapture trigger. This is to work around the precapture - //trigger timeout for YUV sensor. - if (gCamCapability[mCameraId]->position == CAM_POSITION_FRONT && - aeTrigger.trigger_id > 0 && aeTrigger.trigger == - ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER_START) { - ae_state = ANDROID_CONTROL_AE_STATE_CONVERGED; - } - camMetadata.update(ANDROID_CONTROL_AE_STATE, &ae_state, 1); + + uint8_t ae_state = + *(uint8_t *)POINTER_OF(CAM_INTF_META_AEC_STATE, metadata); + //Override AE state for front(YUV) sensor if corresponding request + //contain a precapture trigger. This is to work around the precapture + //trigger timeout for YUV sensor. + if (gCamCapability[mCameraId]->position == CAM_POSITION_FRONT && + aeTrigger.trigger_id > 0 && aeTrigger.trigger == + ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER_START) { + ae_state = ANDROID_CONTROL_AE_STATE_CONVERGED; } + camMetadata.update(ANDROID_CONTROL_AE_STATE, &ae_state, 1); + uint8_t *focusMode = (uint8_t *)POINTER_OF(CAM_INTF_PARM_FOCUS_MODE, metadata); camMetadata.update(ANDROID_CONTROL_AF_MODE, focusMode, 1); diff --git a/camera/QCamera2/HAL3/QCamera3HWI.h b/camera/QCamera2/HAL3/QCamera3HWI.h index 30d9a4a..0e014a8 100755 --- a/camera/QCamera2/HAL3/QCamera3HWI.h +++ b/camera/QCamera2/HAL3/QCamera3HWI.h @@ -200,6 +200,7 @@ private: int32_t request_id; List<RequestedBufferInfo> buffers; int blob_request; + int input_buffer_present; cam_trigger_t ae_trigger; } PendingRequestInfo; typedef KeyedVector<camera3_stream_t *, uint32_t> PendingBuffersMap; |
