diff options
author | Yin-Chia Yeh <yinchiayeh@google.com> | 2014-08-05 13:35:58 -0700 |
---|---|---|
committer | Yin-Chia Yeh <yinchiayeh@google.com> | 2014-08-05 14:32:00 -0700 |
commit | ca05ebd4c666322e754ac63236c8b329dbb53b00 (patch) | |
tree | ebdab693937717116cf2f6aa0c351be0633d02e3 /services/camera/libcameraservice/api1 | |
parent | 44622db93a24219123facbbe14259000f90de728 (diff) | |
download | frameworks_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.cpp | 34 |
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 ¶ms, 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 ¶ms, 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; |