summaryrefslogtreecommitdiffstats
path: root/services/camera/libcameraservice/api1/Camera2Client.cpp
diff options
context:
space:
mode:
authorYin-Chia Yeh <yinchiayeh@google.com>2015-07-17 21:10:49 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-07-17 21:10:50 +0000
commit51d0b1d84dc1c095e68126257213f24f64ab3aa0 (patch)
treeee4b7ce1d0cbaac20923833dcc6e454356b7e45d /services/camera/libcameraservice/api1/Camera2Client.cpp
parentdbd0f3c5e15e56c2d91ae1405fecf2279785ef00 (diff)
parent355d9c6b74cd22a88fc7d1c9ba2e928ba566c69e (diff)
downloadframeworks_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.cpp60
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 &params, 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 &params) {
+ 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;