Merge "Various bug fixes to make ZSL work." into jb-mr2-dev
diff --git a/camera/CallbackNotifier.cpp b/camera/CallbackNotifier.cpp
index 140c872..b288f52 100755
--- a/camera/CallbackNotifier.cpp
+++ b/camera/CallbackNotifier.cpp
@@ -170,8 +170,14 @@
 
 void CallbackNotifier::releaseRecordingFrame(const void* opaque)
 {
-    /* We don't really have anything to release here, since we report video
-     * frames by copying them directly to the camera memory. */
+    List<camera_memory_t*>::iterator it = mCameraMemoryTs.begin();
+    for( ; it != mCameraMemoryTs.end(); ++it ) {
+        if ( (*it)->data == opaque ) {
+            (*it)->release( *it );
+            mCameraMemoryTs.erase(it);
+            break;
+        }
+    }
 }
 
 status_t CallbackNotifier::storeMetaDataInBuffers(bool enable)
@@ -214,6 +220,8 @@
             memcpy(cam_buff->data, frame, camera_dev->getFrameBufferSize());
             mDataCBTimestamp(timestamp, CAMERA_MSG_VIDEO_FRAME,
                                cam_buff, 0, mCBOpaque);
+
+            mCameraMemoryTs.push_back( cam_buff );
         } else {
             ALOGE("%s: Memory failure in CAMERA_MSG_VIDEO_FRAME", __FUNCTION__);
         }
diff --git a/camera/CallbackNotifier.h b/camera/CallbackNotifier.h
index 63301d2..24784b5 100755
--- a/camera/CallbackNotifier.h
+++ b/camera/CallbackNotifier.h
@@ -22,6 +22,8 @@
  * via set_callbacks, enable_msg_type, and disable_msg_type camera HAL API.
  */
 
+#include <utils/List.h>
+
 namespace android {
 
 class EmulatedCameraDevice;
@@ -209,6 +211,9 @@
     camera_request_memory           mGetMemoryCB;
     void*                           mCBOpaque;
 
+    /* video frame queue for the CameraHeapMemory destruction */
+    List<camera_memory_t*>          mCameraMemoryTs;
+
     /* Timestamp when last frame has been delivered to the framework. */
     nsecs_t                         mLastFrameTimestamp;