Camera3: Enable livesnapshot for zsl
Ensure that metadata is handled correctly for different
ZSL usecases.
Change-Id: Ic521f54b973535384cbc2ec94facea3a3f326648
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.cpp b/camera/QCamera2/HAL3/QCamera3HWI.cpp
old mode 100644
new mode 100755
index c516f54..14344b5
--- a/camera/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/camera/QCamera2/HAL3/QCamera3HWI.cpp
@@ -1008,6 +1008,7 @@
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;
for (size_t i = 0; i < request->num_output_buffers; i++) {
RequestedBufferInfo requestedBuf;
@@ -1036,7 +1037,6 @@
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;
@@ -1247,14 +1247,21 @@
}
}
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
@@ -1460,14 +1467,11 @@
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 *ae_state =
(uint8_t *)POINTER_OF(CAM_INTF_META_AEC_STATE, metadata);
- camMetadata.update(ANDROID_CONTROL_AE_STATE, ae_state, 1);
- }
+ 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
old mode 100644
new mode 100755
index b3d08f7..bff7311
--- a/camera/QCamera2/HAL3/QCamera3HWI.h
+++ b/camera/QCamera2/HAL3/QCamera3HWI.h
@@ -199,6 +199,7 @@
int32_t request_id;
List<RequestedBufferInfo> buffers;
int blob_request;
+ int input_buffer_present;
} PendingRequestInfo;
typedef KeyedVector<camera3_stream_t *, uint32_t> PendingBuffersMap;
/*Data structure to store metadata information*/