QCamera2/HAL3: Report ERROR_RESULT when metadata is dropped
When metadata is dropped due to lower performance scenarios,
report ERROR_RESULT to framework instead of ENODEV as
the metadata error can be recoverable.
This change limits the recovery to HFR usecase only.
BUG=29450580
Change-Id: Ib62ecbf1ea4ad1c7d8092c3a296ebb5da5d1251a
diff --git a/QCamera2/HAL3/QCamera3HWI.cpp b/QCamera2/HAL3/QCamera3HWI.cpp
index 90338ce..f40ac5b 100644
--- a/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/QCamera2/HAL3/QCamera3HWI.cpp
@@ -2782,6 +2782,19 @@
}
}
+void QCamera3HardwareInterface::notifyError(uint32_t frameNumber,
+ camera3_error_msg_code_t errorCode)
+{
+ camera3_notify_msg_t notify_msg;
+ memset(¬ify_msg, 0, sizeof(camera3_notify_msg_t));
+ notify_msg.type = CAMERA3_MSG_ERROR;
+ notify_msg.message.error.error_code = errorCode;
+ notify_msg.message.error.error_stream = NULL;
+ notify_msg.message.error.frame_number = frameNumber;
+ mCallbackOps->notify(mCallbackOps, ¬ify_msg);
+
+ return;
+}
/*===========================================================================
* FUNCTION : handleMetadataWithLock
*
@@ -2976,6 +2989,15 @@
/* this will be handled in handleInputBufferWithLock */
i++;
continue;
+ } else if (mBatchSize) {
+
+ mPendingLiveRequest--;
+
+ CameraMetadata dummyMetadata;
+ dummyMetadata.update(ANDROID_REQUEST_ID, &(i->request_id), 1);
+ result.result = dummyMetadata.release();
+
+ notifyError(i->frame_number, CAMERA3_MSG_ERROR_RESULT);
} else {
LOGE("Fatal: Missing metadata buffer for frame number %d", i->frame_number);
if (free_and_bufdone_meta_buf) {
diff --git a/QCamera2/HAL3/QCamera3HWI.h b/QCamera2/HAL3/QCamera3HWI.h
index 1d4d254..6c884d5 100644
--- a/QCamera2/HAL3/QCamera3HWI.h
+++ b/QCamera2/HAL3/QCamera3HWI.h
@@ -323,6 +323,8 @@
int32_t startAllChannels();
int32_t stopAllChannels();
int32_t notifyErrorForPendingRequests();
+ void notifyError(uint32_t frameNumber,
+ camera3_error_msg_code_t errorCode);
int32_t getReprocessibleOutputStreamId(uint32_t &id);
int32_t handleCameraDeviceError();