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++) {