summaryrefslogtreecommitdiffstats
path: root/camera/BufferSourceAdapter.cpp
diff options
context:
space:
mode:
authorEmilian Peev <epeev@mm-sol.com>2012-08-30 11:47:54 +0300
committerDaniel Levin <dendy@ti.com>2012-10-10 18:55:49 +0300
commit41b5af767d46ce8152eef537114bbfde6f2bdadc (patch)
tree94d4bf46cb474b4fcb72ccd2c7b74d316a09d444 /camera/BufferSourceAdapter.cpp
parent3f012f6415176a8a156f5271e25c90580554e6ab (diff)
downloadhardware_ti_omap4-41b5af767d46ce8152eef537114bbfde6f2bdadc.tar.gz
hardware_ti_omap4-41b5af767d46ce8152eef537114bbfde6f2bdadc.tar.bz2
hardware_ti_omap4-41b5af767d46ce8152eef537114bbfde6f2bdadc.zip
CameraHal: Avoid metadata leak in non-CPCam use case
- The metadata was not getting released properly in non-CPCam use cases. This patch adds the extended metadata as part of 'CameraMetadataResult' which is reference counted and will get released correctly in all use-cases. Change-Id: I6a5d88941c1077c25df803b239979d808aa603f5 Signed-off-by: Emilian Peev <epeev@mm-sol.com> Signed-off-by: Daniel Levin <dendy@ti.com>
Diffstat (limited to 'camera/BufferSourceAdapter.cpp')
-rw-r--r--camera/BufferSourceAdapter.cpp16
1 files changed, 9 insertions, 7 deletions
diff --git a/camera/BufferSourceAdapter.cpp b/camera/BufferSourceAdapter.cpp
index c542741..3088a0b 100644
--- a/camera/BufferSourceAdapter.cpp
+++ b/camera/BufferSourceAdapter.cpp
@@ -696,14 +696,16 @@ void BufferSourceAdapter::handleFrameCallback(CameraFrame* frame)
return;
}
- if ( NULL != frame->mMetaData ) {
- camera_metadata_t *metaData = static_cast<camera_metadata_t *> (frame->mMetaData->data);
- metaData->timestamp = frame->mTimestamp;
- ret = extendedOps()->set_metadata(mBufferSource, frame->mMetaData);
- if (ret != 0) {
- CAMHAL_LOGE("Surface::set_metadata returned error %d", ret);
+ if ( NULL != frame->mMetaData.get() ) {
+ camera_memory_t *extMeta = frame->mMetaData->getExtendedMetadata();
+ if ( NULL != extMeta ) {
+ camera_metadata_t *metaData = static_cast<camera_metadata_t *> (extMeta->data);
+ metaData->timestamp = frame->mTimestamp;
+ ret = extendedOps()->set_metadata(mBufferSource, extMeta);
+ if (ret != 0) {
+ CAMHAL_LOGE("Surface::set_metadata returned error %d", ret);
+ }
}
- frame->mMetaData->release(frame->mMetaData);
}
// unlock buffer before enqueueing