merge in klp-release (no-op)
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.cpp b/camera/QCamera2/HAL3/QCamera3HWI.cpp
index 2a7379f..1f4ffe8 100755
--- a/camera/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/camera/QCamera2/HAL3/QCamera3HWI.cpp
@@ -227,9 +227,11 @@
/* Clean up all channels */
if (mCameraInitialized) {
- mMetadataChannel->stop();
- delete mMetadataChannel;
- mMetadataChannel = NULL;
+ if (mMetadataChannel) {
+ mMetadataChannel->stop();
+ delete mMetadataChannel;
+ mMetadataChannel = NULL;
+ }
deinitParameters();
}
@@ -378,22 +380,6 @@
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__);
- delete mMetadataChannel;
- mMetadataChannel = NULL;
- goto err3;
- }
mCallbackOps = callback_ops;
@@ -401,11 +387,6 @@
mCameraInitialized = true;
return 0;
-err3:
- delete mMetadataChannel;
- mMetadataChannel = NULL;
-err2:
- deinitParameters();
err1:
pthread_mutex_unlock(&mMutex);
return rc;
@@ -427,24 +408,20 @@
camera3_stream_configuration_t *streamList)
{
int rc = 0;
- pthread_mutex_lock(&mMutex);
// Sanity check stream_list
if (streamList == NULL) {
ALOGE("%s: NULL stream configuration", __func__);
- pthread_mutex_unlock(&mMutex);
return BAD_VALUE;
}
if (streamList->streams == NULL) {
ALOGE("%s: NULL stream list", __func__);
- pthread_mutex_unlock(&mMutex);
return BAD_VALUE;
}
if (streamList->num_streams < 1) {
ALOGE("%s: Bad number of streams requested: %d", __func__,
streamList->num_streams);
- pthread_mutex_unlock(&mMutex);
return BAD_VALUE;
}
@@ -459,6 +436,12 @@
(*it)->status = INVALID;
}
+ if (mMetadataChannel) {
+ /* If content of mStreamInfo is not 0, there is metadata stream */
+ mMetadataChannel->stop();
+ }
+ // Acquire Mutex after stoping all the channels
+ pthread_mutex_lock(&mMutex);
for (size_t i = 0; i < streamList->num_streams; i++) {
camera3_stream_t *newStream = streamList->streams[i];
ALOGD("%s: newStream type = %d, stream format = %d stream size : %d x %d",
@@ -517,7 +500,29 @@
}
}
- //mMetadataChannel->stop();
+ if (mMetadataChannel) {
+ 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;
+ mMetadataChannel = NULL;
+ pthread_mutex_unlock(&mMutex);
+ return rc;
+ }
/* Allocate channel objects for the requested streams */
for (size_t i = 0; i < streamList->num_streams; i++) {