diff options
author | Emilian Peev <epeev@mm-sol.com> | 2012-08-30 11:47:54 +0300 |
---|---|---|
committer | Daniel Levin <dendy@ti.com> | 2012-10-10 18:55:49 +0300 |
commit | 41b5af767d46ce8152eef537114bbfde6f2bdadc (patch) | |
tree | 94d4bf46cb474b4fcb72ccd2c7b74d316a09d444 /camera/BufferSourceAdapter.cpp | |
parent | 3f012f6415176a8a156f5271e25c90580554e6ab (diff) | |
download | hardware_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.cpp | 16 |
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 |