diff --git a/QCamera2/HAL/QCameraChannel.cpp b/QCamera2/HAL/QCameraChannel.cpp
index 78a460d..0f2a02c 100644
--- a/QCamera2/HAL/QCameraChannel.cpp
+++ b/QCamera2/HAL/QCameraChannel.cpp
@@ -54,6 +54,7 @@
 {
     m_camHandle = cam_handle;
     m_camOps = cam_ops;
+    m_bIsActive = false;
 
     m_handle = 0;
     m_numStreams = 0;
@@ -73,6 +74,7 @@
 {
     m_camHandle = 0;
     m_camOps = NULL;
+    m_bIsActive = false;
 
     m_handle = 0;
     m_numStreams = 0;
@@ -90,6 +92,10 @@
  *==========================================================================*/
 QCameraChannel::~QCameraChannel()
 {
+    if (m_bIsActive) {
+        stop();
+    }
+
     for (int i = 0; i < m_numStreams; i++) {
         if (mStreams[i] != NULL) {
             delete mStreams[i];
@@ -227,6 +233,8 @@
                 mStreams[i]->stop();
             }
         }
+    } else {
+        m_bIsActive = true;
     }
 
     return rc;
@@ -254,6 +262,7 @@
         }
     }
 
+    m_bIsActive = false;
     return rc;
 }
 
@@ -579,6 +588,12 @@
     for (int i = 0; i < pSrcChannel->getNumOfStreams(); i++) {
         pStream = pSrcChannel->getStreamByIndex(i);
         if (pStream != NULL) {
+            if (pStream->isTypeOf(CAM_STREAM_TYPE_METADATA)) {
+                // Skip metadata for reprocess now because PP module cannot handle meta data
+                // May need furthur discussion if Imaginglib need meta data
+                continue;
+            }
+
             pStreamInfoBuf = allocator.allocateStreamInfoBuf(CAM_STREAM_TYPE_OFFLINE_PROC);
             if (pStreamInfoBuf == NULL) {
                 ALOGE("%s: no mem for stream info buf", __func__);
diff --git a/QCamera2/HAL/QCameraChannel.h b/QCamera2/HAL/QCameraChannel.h
index 2fd64cd..51b14e4 100644
--- a/QCamera2/HAL/QCameraChannel.h
+++ b/QCamera2/HAL/QCameraChannel.h
@@ -69,6 +69,7 @@
 protected:
     uint32_t m_camHandle;
     mm_camera_ops_t *m_camOps;
+    bool m_bIsActive;
 
     uint32_t m_handle;
     uint8_t m_numStreams;
diff --git a/QCamera2/HAL/QCameraPostProc.cpp b/QCamera2/HAL/QCameraPostProc.cpp
index 8e63e7f..b58782d 100644
--- a/QCamera2/HAL/QCameraPostProc.cpp
+++ b/QCamera2/HAL/QCameraPostProc.cpp
@@ -716,13 +716,8 @@
 void QCameraPostProcessor::releasePPInputData(void *data, void *user_data)
 {
     QCameraPostProcessor *pme = (QCameraPostProcessor *)user_data;
-    qcamera_pp_request_t *request = (qcamera_pp_request_t *)data;
     if (NULL != pme) {
-        if (request->frame != NULL) {
-            pme->releaseSuperBuf(request->frame);
-            free(request->frame);
-            request->frame = NULL;
-        }
+        pme->releaseSuperBuf((mm_camera_super_buf_t *)data);
     }
 }
 
@@ -1379,17 +1374,17 @@
                         }
                     }
 
-                    qcamera_pp_request_t *request =
-                        (qcamera_pp_request_t *)pme->m_inputPPQ.dequeue();
-                    if (NULL != request) {
+                    mm_camera_super_buf_t *pp_frame =
+                        (mm_camera_super_buf_t *)pme->m_inputPPQ.dequeue();
+                    if (NULL != pp_frame) {
                         qcamera_pp_data_t *pp_job =
                             (qcamera_pp_data_t *)malloc(sizeof(qcamera_pp_data_t));
                         if (pp_job != NULL) {
                             memset(pp_job, 0, sizeof(qcamera_pp_data_t));
                             if (pme->m_pReprocChannel != NULL) {
-                                ret = pme->m_pReprocChannel->doReprocess(request->frame);
+                                ret = pme->m_pReprocChannel->doReprocess(pp_frame);
                                 if (ret == 0) {
-                                    pp_job->src_frame = request->frame;
+                                    pp_job->src_frame = pp_frame;
                                 }
                             } else {
                                 ALOGE("%s: Reprocess channel is NULL", __func__);
@@ -1402,12 +1397,10 @@
 
                         if (0 != ret) {
                             // free frame
-                            if (request->frame != NULL) {
-                                pme->releaseSuperBuf(request->frame);
-                                free(request->frame);
+                            if (pp_frame != NULL) {
+                                pme->releaseSuperBuf(pp_frame);
+                                free(pp_frame);
                             }
-                            // free request buf
-                            free(request);
                             // send error notify
                             pme->sendDataNotify(CAMERA_MSG_COMPRESSED_IMAGE,
                                                 NULL,
@@ -1415,9 +1408,6 @@
                                                 NULL,
                                                 NULL);
                         } else {
-                            // free request buf
-                            free(request);
-
                             // add into ongoing jpeg job Q
                             pme->m_ongoingPPQ.enqueue((void *)pp_job);
                         }
@@ -1435,13 +1425,10 @@
                         pme->releaseSuperBuf(super_buf);
                         free(super_buf);
                     }
-                    qcamera_pp_request_t *request =
-                        (qcamera_pp_request_t *)pme->m_inputPPQ.dequeue();
-                    if (NULL != request) {
-                        if (request->frame != NULL) {
-                            pme->releaseSuperBuf(request->frame);
-                        }
-                        free(request);
+                    super_buf = (mm_camera_super_buf_t *)pme->m_inputPPQ.dequeue();
+                    if (NULL != super_buf) {
+                        pme->releaseSuperBuf(super_buf);
+                        free(super_buf);
                     }
                 }
             }
diff --git a/QCamera2/HAL/QCameraStateMachine.cpp b/QCamera2/HAL/QCameraStateMachine.cpp
index 882f443..904130c 100644
--- a/QCamera2/HAL/QCameraStateMachine.cpp
+++ b/QCamera2/HAL/QCameraStateMachine.cpp
@@ -1579,9 +1579,10 @@
         break;
     case QCAMERA_SM_EVT_TAKE_PICTURE:
         {
+            m_state = QCAMERA_SM_STATE_VIDEO_PIC_TAKING;
             rc = m_parent->takeLiveSnapshot();
-            if (rc == 0) {
-                m_state = QCAMERA_SM_STATE_VIDEO_PIC_TAKING;
+            if (rc != NO_ERROR) {
+                m_state = QCAMERA_SM_STATE_RECORDING;
             }
             result.status = rc;
             result.request_api = evt;
