summaryrefslogtreecommitdiffstats
path: root/camera
diff options
context:
space:
mode:
authorIgor Murashkin <iam@google.com>2013-03-27 11:07:06 -0700
committerIgor Murashkin <iam@google.com>2013-03-27 11:23:54 -0700
commite3e18d93d6b519145b3aa8e921a4d6fe1d67cfa8 (patch)
tree03dac0ab03bb12639fb15e5232886937b2b2e896 /camera
parent2247dd0dc60096d1b5a91ccadb5539f0b100c88f (diff)
downloadframeworks_av-e3e18d93d6b519145b3aa8e921a4d6fe1d67cfa8.zip
frameworks_av-e3e18d93d6b519145b3aa8e921a4d6fe1d67cfa8.tar.gz
frameworks_av-e3e18d93d6b519145b3aa8e921a4d6fe1d67cfa8.tar.bz2
ProCamera: Fix memory leak in consumeFrameMetadata
Bug: 8402301 Change-Id: I975990185f45bb8552712271b9ac457af08a170c
Diffstat (limited to 'camera')
-rw-r--r--camera/ProCamera.cpp6
-rw-r--r--camera/tests/ProCameraTests.cpp3
2 files changed, 5 insertions, 4 deletions
diff --git a/camera/ProCamera.cpp b/camera/ProCamera.cpp
index 396b009..fec5461 100644
--- a/camera/ProCamera.cpp
+++ b/camera/ProCamera.cpp
@@ -103,7 +103,7 @@ void ProCamera::onResultReceived(int32_t frameId, camera_metadata* result) {
{
Mutex::Autolock al(mWaitMutex);
mMetadataReady = true;
- mLatestMetadata = tmp;
+ mLatestMetadata = tmp; // make copy
mWaitCondition.broadcast();
}
@@ -312,8 +312,6 @@ void ProCamera::onFrameAvailable(int streamId) {
sp<ProCameraListener> listener = mListener;
StreamInfo& stream = getStreamInfo(streamId);
- CpuConsumer::LockedBuffer buf;
-
if (listener.get() != NULL) {
listener->onFrameAvailable(streamId, stream.cpuConsumer);
}
@@ -421,7 +419,7 @@ CameraMetadata ProCamera::consumeFrameMetadata() {
// Destructive: Subsequent calls return empty metadatas
CameraMetadata tmp = mLatestMetadata;
- mLatestMetadata.release();
+ mLatestMetadata.clear();
return tmp;
}
diff --git a/camera/tests/ProCameraTests.cpp b/camera/tests/ProCameraTests.cpp
index ecc0854..87f817a 100644
--- a/camera/tests/ProCameraTests.cpp
+++ b/camera/tests/ProCameraTests.cpp
@@ -1021,6 +1021,9 @@ TEST_F(ProCameraTest, WaitForDualStreamBuffer) {
// Consume two frames simultaneously. Unsynchronized by timestamps.
for (int i = 0; i < REQUEST_COUNT; ++i) {
+ // Exhaust event queue so it doesn't keep growing
+ while (mListener->ReadEvent() != UNKNOWN);
+
// Get the metadata
EXPECT_OK(mCamera->waitForFrameMetadata());
CameraMetadata meta = mCamera->consumeFrameMetadata();