summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorIgor Murashkin <iam@google.com>2012-10-04 09:56:44 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-10-04 09:56:44 -0700
commitf66cc52cc5a075b86b585cf72c4a41f6907b2142 (patch)
tree0f50e30b831044b06d09195d11ad87724b4a822b /services
parentd69fd4d2567f9fce02252ce10d7ae3a28fc79e04 (diff)
parent04273cb14d2326e85bb047ea6ef75294c8b3d561 (diff)
downloadframeworks_av-f66cc52cc5a075b86b585cf72c4a41f6907b2142.zip
frameworks_av-f66cc52cc5a075b86b585cf72c4a41f6907b2142.tar.gz
frameworks_av-f66cc52cc5a075b86b585cf72c4a41f6907b2142.tar.bz2
Merge "Camera2: Fix deadlock while zooming during record" into jb-mr1-dev
Diffstat (limited to 'services')
-rw-r--r--services/camera/libcameraservice/camera2/StreamingProcessor.cpp22
1 files changed, 11 insertions, 11 deletions
diff --git a/services/camera/libcameraservice/camera2/StreamingProcessor.cpp b/services/camera/libcameraservice/camera2/StreamingProcessor.cpp
index 744b7ed..8921172 100644
--- a/services/camera/libcameraservice/camera2/StreamingProcessor.cpp
+++ b/services/camera/libcameraservice/camera2/StreamingProcessor.cpp
@@ -422,6 +422,9 @@ void StreamingProcessor::onFrameAvailable() {
if (client == 0) return;
{
+ /* acquire SharedParameters before mMutex so we don't dead lock
+ with Camera2Client code calling into StreamingProcessor */
+ SharedParameters::Lock l(client->getParameters());
Mutex::Autolock m(mMutex);
BufferItemConsumer::BufferItem imgBuffer;
res = mRecordingConsumer->acquireBuffer(&imgBuffer);
@@ -435,17 +438,14 @@ void StreamingProcessor::onFrameAvailable() {
mRecordingFrameCount++;
ALOGV("OnRecordingFrame: Frame %d", mRecordingFrameCount);
- {
- SharedParameters::Lock l(client->getParameters());
- // TODO: Signal errors here upstream
- if (l.mParameters.state != Parameters::RECORD &&
- l.mParameters.state != Parameters::VIDEO_SNAPSHOT) {
- ALOGV("%s: Camera %d: Discarding recording image buffers "
- "received after recording done", __FUNCTION__,
- client->getCameraId());
- mRecordingConsumer->releaseBuffer(imgBuffer);
- return;
- }
+ // TODO: Signal errors here upstream
+ if (l.mParameters.state != Parameters::RECORD &&
+ l.mParameters.state != Parameters::VIDEO_SNAPSHOT) {
+ ALOGV("%s: Camera %d: Discarding recording image buffers "
+ "received after recording done", __FUNCTION__,
+ client->getCameraId());
+ mRecordingConsumer->releaseBuffer(imgBuffer);
+ return;
}
if (mRecordingHeap == 0) {