summaryrefslogtreecommitdiffstats
path: root/services/camera/libcameraservice/api1
diff options
context:
space:
mode:
authorYin-Chia Yeh <yinchiayeh@google.com>2014-08-05 13:35:58 -0700
committerYin-Chia Yeh <yinchiayeh@google.com>2014-08-05 14:32:00 -0700
commitca05ebd4c666322e754ac63236c8b329dbb53b00 (patch)
treeebdab693937717116cf2f6aa0c351be0633d02e3 /services/camera/libcameraservice/api1
parent44622db93a24219123facbbe14259000f90de728 (diff)
downloadframeworks_av-ca05ebd4c666322e754ac63236c8b329dbb53b00.zip
frameworks_av-ca05ebd4c666322e754ac63236c8b329dbb53b00.tar.gz
frameworks_av-ca05ebd4c666322e754ac63236c8b329dbb53b00.tar.bz2
cameraservice: disallow zsl/recording coexistentce
Make sure ZSL and recording stream does not exist at the same time. Change-Id: I19e28dedd9dd5cc5118449860b612a5c950fdaec
Diffstat (limited to 'services/camera/libcameraservice/api1')
-rw-r--r--services/camera/libcameraservice/api1/Camera2Client.cpp34
1 files changed, 33 insertions, 1 deletions
diff --git a/services/camera/libcameraservice/api1/Camera2Client.cpp b/services/camera/libcameraservice/api1/Camera2Client.cpp
index 9721e13..046988e 100644
--- a/services/camera/libcameraservice/api1/Camera2Client.cpp
+++ b/services/camera/libcameraservice/api1/Camera2Client.cpp
@@ -810,7 +810,9 @@ status_t Camera2Client::startPreviewL(Parameters &params, bool restart) {
return res;
}
}
- if (params.zslMode && !params.recordingHint) {
+
+ if (params.zslMode && !params.recordingHint &&
+ getRecordingStreamId() == NO_STREAM) {
res = updateProcessorStream(mZslProcessor, params);
if (res != OK) {
ALOGE("%s: Camera %d: Unable to update ZSL stream: %s (%d)",
@@ -1033,6 +1035,36 @@ status_t Camera2Client::startRecordingL(Parameters &params, bool restart) {
return res;
}
}
+
+ if (mZslProcessor->getStreamId() != NO_STREAM) {
+ ALOGV("%s: Camera %d: Clearing out zsl stream before "
+ "creating recording stream", __FUNCTION__, mCameraId);
+ res = mStreamingProcessor->stopStream();
+ if (res != OK) {
+ ALOGE("%s: Camera %d: Can't stop streaming to delete callback stream",
+ __FUNCTION__, mCameraId);
+ return res;
+ }
+ res = mDevice->waitUntilDrained();
+ if (res != OK) {
+ ALOGE("%s: Camera %d: Waiting to stop streaming failed: %s (%d)",
+ __FUNCTION__, mCameraId, strerror(-res), res);
+ }
+ res = mZslProcessor->clearZslQueue();
+ if (res != OK) {
+ ALOGE("%s: Camera %d: Can't clear zsl queue",
+ __FUNCTION__, mCameraId);
+ return res;
+ }
+ res = mZslProcessor->deleteStream();
+ if (res != OK) {
+ ALOGE("%s: Camera %d: Unable to delete zsl stream before "
+ "record: %s (%d)", __FUNCTION__, mCameraId,
+ strerror(-res), res);
+ return res;
+ }
+ }
+
// Disable callbacks if they're enabled; can't record and use callbacks,
// and we can't fail record start without stagefright asserting.
params.previewCallbackFlags = 0;