diff options
author | Yin-Chia Yeh <yinchiayeh@google.com> | 2015-07-17 21:10:49 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-07-17 21:10:50 +0000 |
commit | 51d0b1d84dc1c095e68126257213f24f64ab3aa0 (patch) | |
tree | ee4b7ce1d0cbaac20923833dcc6e454356b7e45d /services/camera/libcameraservice/api1/Camera2Client.cpp | |
parent | dbd0f3c5e15e56c2d91ae1405fecf2279785ef00 (diff) | |
parent | 355d9c6b74cd22a88fc7d1c9ba2e928ba566c69e (diff) | |
download | frameworks_av-51d0b1d84dc1c095e68126257213f24f64ab3aa0.zip frameworks_av-51d0b1d84dc1c095e68126257213f24f64ab3aa0.tar.gz frameworks_av-51d0b1d84dc1c095e68126257213f24f64ab3aa0.tar.bz2 |
Merge "Camera2Client: handle slower jpeg stream sensor" into mnc-dev
Diffstat (limited to 'services/camera/libcameraservice/api1/Camera2Client.cpp')
-rw-r--r-- | services/camera/libcameraservice/api1/Camera2Client.cpp | 60 |
1 files changed, 51 insertions, 9 deletions
diff --git a/services/camera/libcameraservice/api1/Camera2Client.cpp b/services/camera/libcameraservice/api1/Camera2Client.cpp index e109595..36e99dd 100644 --- a/services/camera/libcameraservice/api1/Camera2Client.cpp +++ b/services/camera/libcameraservice/api1/Camera2Client.cpp @@ -764,16 +764,22 @@ status_t Camera2Client::startPreviewL(Parameters ¶ms, bool restart) { // first capture latency on HAL3 devices, and potentially on some HAL2 // devices. So create it unconditionally at preview start. As a drawback, // this increases gralloc memory consumption for applications that don't - // ever take a picture. + // ever take a picture. Do not enter this mode when jpeg stream will slow + // down preview. // TODO: Find a better compromise, though this likely would involve HAL // changes. int lastJpegStreamId = mJpegProcessor->getStreamId(); - res = updateProcessorStream(mJpegProcessor, params); - if (res != OK) { - ALOGE("%s: Camera %d: Can't pre-configure still image " - "stream: %s (%d)", - __FUNCTION__, mCameraId, strerror(-res), res); - return res; + // If jpeg stream will slow down preview, make sure we remove it before starting preview + if (params.slowJpegMode) { + mJpegProcessor->deleteStream(); + } else { + res = updateProcessorStream(mJpegProcessor, params); + if (res != OK) { + ALOGE("%s: Camera %d: Can't pre-configure still image " + "stream: %s (%d)", + __FUNCTION__, mCameraId, strerror(-res), res); + return res; + } } bool jpegStreamChanged = mJpegProcessor->getStreamId() != lastJpegStreamId; @@ -1453,9 +1459,12 @@ status_t Camera2Client::takePicture(int msgType) { } ALOGV("%s: Camera %d: Starting picture capture", __FUNCTION__, mCameraId); - int lastJpegStreamId = mJpegProcessor->getStreamId(); - res = updateProcessorStream(mJpegProcessor, l.mParameters); + // slowJpegMode will create jpeg stream in CaptureSequencer before capturing + if (!l.mParameters.slowJpegMode) { + res = updateProcessorStream(mJpegProcessor, l.mParameters); + } + // If video snapshot fail to configureStream, try override video snapshot size to // video size if (res == BAD_VALUE && l.mParameters.state == Parameters::VIDEO_SNAPSHOT) { @@ -1943,6 +1952,39 @@ status_t Camera2Client::stopStream() { return mStreamingProcessor->stopStream(); } +status_t Camera2Client::createJpegStreamL(Parameters ¶ms) { + status_t res = OK; + int lastJpegStreamId = mJpegProcessor->getStreamId(); + if (lastJpegStreamId != NO_STREAM) { + return INVALID_OPERATION; + } + + res = mStreamingProcessor->togglePauseStream(/*pause*/true); + if (res != OK) { + ALOGE("%s: Camera %d: Can't pause streaming: %s (%d)", + __FUNCTION__, mCameraId, strerror(-res), res); + return res; + } + + res = mDevice->flush(); + if (res != OK) { + ALOGE("%s: Camera %d: Unable flush device: %s (%d)", + __FUNCTION__, mCameraId, strerror(-res), res); + return res; + } + + // Ideally we don't need this, but current camera device + // status tracking mechanism demands it. + res = mDevice->waitUntilDrained(); + if (res != OK) { + ALOGE("%s: Camera %d: Waiting device drain failed: %s (%d)", + __FUNCTION__, mCameraId, strerror(-res), res); + } + + res = updateProcessorStream(mJpegProcessor, params); + return res; +} + const int32_t Camera2Client::kPreviewRequestIdStart; const int32_t Camera2Client::kPreviewRequestIdEnd; const int32_t Camera2Client::kRecordingRequestIdStart; |