summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorIgor Murashkin <iam@google.com>2013-10-09 09:12:58 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2013-10-09 09:12:58 -0700
commit71d241c0e2092d6012ff28fecf5be0cba0cea4d8 (patch)
tree612e3c1d3632fc04ada5ec9244d87c7b079d8aca /services
parent318f7018f5fa8ce1db3cd53ab02498addeb8a1c5 (diff)
parentc55d9e72f8d12e42a1f036badacd245fa99680e6 (diff)
downloadframeworks_av-71d241c0e2092d6012ff28fecf5be0cba0cea4d8.zip
frameworks_av-71d241c0e2092d6012ff28fecf5be0cba0cea4d8.tar.gz
frameworks_av-71d241c0e2092d6012ff28fecf5be0cba0cea4d8.tar.bz2
am c55d9e72: am 828363da: Merge "camera2: Don\'t race while dumping last frame metadata" into klp-dev
* commit 'c55d9e72f8d12e42a1f036badacd245fa99680e6': camera2: Don't race while dumping last frame metadata
Diffstat (limited to 'services')
-rw-r--r--services/camera/libcameraservice/common/FrameProcessorBase.cpp10
-rw-r--r--services/camera/libcameraservice/common/FrameProcessorBase.h1
2 files changed, 10 insertions, 1 deletions
diff --git a/services/camera/libcameraservice/common/FrameProcessorBase.cpp b/services/camera/libcameraservice/common/FrameProcessorBase.cpp
index e7b440a..52906ee 100644
--- a/services/camera/libcameraservice/common/FrameProcessorBase.cpp
+++ b/services/camera/libcameraservice/common/FrameProcessorBase.cpp
@@ -66,7 +66,14 @@ status_t FrameProcessorBase::removeListener(int32_t minId,
void FrameProcessorBase::dump(int fd, const Vector<String16>& /*args*/) {
String8 result(" Latest received frame:\n");
write(fd, result.string(), result.size());
- mLastFrame.dump(fd, 2, 6);
+
+ CameraMetadata lastFrame;
+ {
+ // Don't race while dumping metadata
+ Mutex::Autolock al(mLastFrameMutex);
+ lastFrame = CameraMetadata(mLastFrame);
+ }
+ lastFrame.dump(fd, 2, 6);
}
bool FrameProcessorBase::threadLoop() {
@@ -113,6 +120,7 @@ void FrameProcessorBase::processNewFrames(const sp<CameraDeviceBase> &device) {
}
if (!frame.isEmpty()) {
+ Mutex::Autolock al(mLastFrameMutex);
mLastFrame.acquire(frame);
}
}
diff --git a/services/camera/libcameraservice/common/FrameProcessorBase.h b/services/camera/libcameraservice/common/FrameProcessorBase.h
index f96caff..4d80ebf 100644
--- a/services/camera/libcameraservice/common/FrameProcessorBase.h
+++ b/services/camera/libcameraservice/common/FrameProcessorBase.h
@@ -58,6 +58,7 @@ class FrameProcessorBase: public Thread {
virtual bool threadLoop();
Mutex mInputMutex;
+ Mutex mLastFrameMutex;
struct RangeListener {
int32_t minId;