Camera3: Destroy metadata stream whenever configure_streams happens
This ensures frame id counter reset after configure_streams.
Bug: 10429994
Change-Id: Iad2a1bb97ed806df349a40074d9b52f4635a2f05
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.cpp b/camera/QCamera2/HAL3/QCamera3HWI.cpp
index a08eae3..d3cf016 100644
--- a/camera/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/camera/QCamera2/HAL3/QCamera3HWI.cpp
@@ -238,9 +238,11 @@
/* Clean up all channels */
if (mCameraInitialized) {
- mMetadataChannel->stop();
- delete mMetadataChannel;
- mMetadataChannel = NULL;
+ if (mMetadataChannel) {
+ mMetadataChannel->stop();
+ delete mMetadataChannel;
+ mMetadataChannel = NULL;
+ }
deinitParameters();
}
@@ -389,32 +391,12 @@
ALOGE("%s: initParamters failed %d", __func__, rc);
goto err1;
}
- //Create metadata channel and initialize it
- mMetadataChannel = new QCamera3MetadataChannel(mCameraHandle->camera_handle,
- mCameraHandle->ops, captureResultCb,
- &gCamCapability[mCameraId]->padding_info, this);
- if (mMetadataChannel == NULL) {
- ALOGE("%s: failed to allocate metadata channel", __func__);
- rc = -ENOMEM;
- goto err2;
- }
- rc = mMetadataChannel->initialize();
- if (rc < 0) {
- ALOGE("%s: metadata channel initialization failed", __func__);
- goto err3;
- }
-
mCallbackOps = callback_ops;
pthread_mutex_unlock(&mMutex);
mCameraInitialized = true;
return 0;
-err3:
- delete mMetadataChannel;
- mMetadataChannel = NULL;
-err2:
- deinitParameters();
err1:
pthread_mutex_unlock(&mMutex);
return rc;
@@ -468,6 +450,7 @@
(*it)->status = INVALID;
}
+
for (size_t i = 0; i < streamList->num_streams; i++) {
camera3_stream_t *newStream = streamList->streams[i];
ALOGV("%s: newStream type = %d, stream format = %d stream size : %d x %d",
@@ -526,7 +509,29 @@
}
}
- //mMetadataChannel->stop();
+ if (mMetadataChannel) {
+ mMetadataChannel->stop();
+ delete mMetadataChannel;
+ mMetadataChannel = NULL;
+ }
+
+ //Create metadata channel and initialize it
+ mMetadataChannel = new QCamera3MetadataChannel(mCameraHandle->camera_handle,
+ mCameraHandle->ops, captureResultCb,
+ &gCamCapability[mCameraId]->padding_info, this);
+ if (mMetadataChannel == NULL) {
+ ALOGE("%s: failed to allocate metadata channel", __func__);
+ rc = -ENOMEM;
+ pthread_mutex_unlock(&mMutex);
+ return rc;
+ }
+ rc = mMetadataChannel->initialize();
+ if (rc < 0) {
+ ALOGE("%s: metadata channel initialization failed", __func__);
+ delete mMetadataChannel;
+ pthread_mutex_unlock(&mMutex);
+ return rc;
+ }
/* Allocate channel objects for the requested streams */
for (size_t i = 0; i < streamList->num_streams; i++) {