Loading services/camera/libcameraservice/api1/Camera2Client.cpp +7 −4 Original line number Diff line number Diff line Loading @@ -322,6 +322,9 @@ status_t Camera2Client::dumpClient(int fd, const Vector<String16>& args) { p.fastInfo.bestStillCaptureFpsRange[0], p.fastInfo.bestStillCaptureFpsRange[1]); result.appendFormat(" Use zero shutter lag: %s\n", p.useZeroShutterLag() ? "yes" : "no"); result.append(" Current streams:\n"); result.appendFormat(" Preview stream ID: %d\n", getPreviewStreamId()); Loading Loading @@ -813,7 +816,7 @@ status_t Camera2Client::startPreviewL(Parameters ¶ms, bool restart) { } } if (params.zslMode && !params.recordingHint && if (params.useZeroShutterLag() && getRecordingStreamId() == NO_STREAM) { res = updateProcessorStream(mZslProcessor, params); if (res != OK) { Loading Loading @@ -1362,7 +1365,7 @@ status_t Camera2Client::cancelAutoFocus() { return OK; } if (l.mParameters.zslMode) { if (l.mParameters.allowZslMode) { mZslProcessor->clearZslQueue(); } } Loading Loading @@ -1460,7 +1463,7 @@ status_t Camera2Client::takePicture(int msgType) { // Clear ZSL buffer queue when Jpeg size is changed. bool jpegStreamChanged = mJpegProcessor->getStreamId() != lastJpegStreamId; if (l.mParameters.zslMode && jpegStreamChanged) { if (l.mParameters.allowZslMode && jpegStreamChanged) { ALOGV("%s: Camera %d: Clear ZSL buffer queue when Jpeg size is changed", __FUNCTION__, mCameraId); mZslProcessor->clearZslQueue(); Loading Loading @@ -1495,7 +1498,7 @@ status_t Camera2Client::setParameters(const String8& params) { if (res != OK) return res; Parameters::focusMode_t focusModeAfter = l.mParameters.focusMode; if (l.mParameters.zslMode && focusModeAfter != focusModeBefore) { if (l.mParameters.allowZslMode && focusModeAfter != focusModeBefore) { mZslProcessor->clearZslQueue(); } Loading services/camera/libcameraservice/api1/client2/CaptureSequencer.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -338,7 +338,7 @@ CaptureSequencer::CaptureState CaptureSequencer::manageStart( return DONE; } else if (l.mParameters.zslMode && else if (l.mParameters.useZeroShutterLag() && l.mParameters.state == Parameters::STILL_CAPTURE && l.mParameters.flashMode != Parameters::FLASH_MODE_ON) { nextState = ZSL_START; Loading services/camera/libcameraservice/api1/client2/Parameters.cpp +24 −3 Original line number Diff line number Diff line Loading @@ -908,12 +908,12 @@ status_t Parameters::initialize(const CameraMetadata *info, int deviceVersion) { property_get("camera.disable_zsl_mode", value, "0"); if (!strcmp(value,"1") || slowJpegMode) { ALOGI("Camera %d: Disabling ZSL mode", cameraId); zslMode = false; allowZslMode = false; } else { zslMode = true; allowZslMode = true; } ALOGI("%s: zslMode: %d slowJpegMode %d", __FUNCTION__, zslMode, slowJpegMode); ALOGI("%s: allowZslMode: %d slowJpegMode %d", __FUNCTION__, allowZslMode, slowJpegMode); state = STOPPED; Loading Loading @@ -1127,6 +1127,8 @@ status_t Parameters::buildFastInfo() { ALOGV("Camera %d: Flexible YUV %s supported", cameraId, fastInfo.useFlexibleYuv ? "is" : "is not"); fastInfo.maxJpegSize = getMaxSize(getAvailableJpegSizes()); return OK; } Loading Loading @@ -2231,6 +2233,25 @@ bool Parameters::isJpegSizeOverridden() { return pictureSizeOverriden; } bool Parameters::useZeroShutterLag() const { // If ZSL mode is disabled, don't use it if (!allowZslMode) return false; // If recording hint is enabled, don't do ZSL if (recordingHint) return false; // If still capture size is no bigger than preview or video size, // don't do ZSL if (pictureWidth <= previewWidth || pictureHeight <= previewHeight || pictureWidth <= videoWidth || pictureHeight <= videoHeight) { return false; } // If still capture size is less than quarter of max, don't do ZSL if ((pictureWidth * pictureHeight) < (fastInfo.maxJpegSize.width * fastInfo.maxJpegSize.height / 4) ) { return false; } return true; } const char* Parameters::getStateName(State state) { #define CASE_ENUM_TO_CHAR(x) case x: return(#x); break; switch(state) { Loading services/camera/libcameraservice/api1/client2/Parameters.h +5 −2 Original line number Diff line number Diff line Loading @@ -161,9 +161,9 @@ struct Parameters { bool previewCallbackOneShot; bool previewCallbackSurface; bool zslMode; bool allowZslMode; // Whether the jpeg stream is slower than 30FPS and can slow down preview. // When slowJpegMode is true, zslMode must be false to avoid slowing down preview. // When slowJpegMode is true, allowZslMode must be false to avoid slowing down preview. bool slowJpegMode; // Overall camera state Loading Loading @@ -219,6 +219,7 @@ struct Parameters { DefaultKeyedVector<uint8_t, OverrideModes> sceneModeOverrides; float minFocalLength; bool useFlexibleYuv; Size maxJpegSize; } fastInfo; // Quirks information; these are short-lived flags to enable workarounds for Loading Loading @@ -271,6 +272,8 @@ struct Parameters { status_t recoverOverriddenJpegSize(); // if video snapshot size is currently overridden bool isJpegSizeOverridden(); // whether zero shutter lag should be used for non-recording operation bool useZeroShutterLag() const; // Calculate the crop region rectangle, either tightly about the preview // resolution, or a region just based on the active array; both take Loading services/camera/libcameraservice/api1/client2/StreamingProcessor.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -115,7 +115,7 @@ status_t StreamingProcessor::updatePreviewRequest(const Parameters ¶ms) { // Use CAMERA3_TEMPLATE_ZERO_SHUTTER_LAG for ZSL streaming case. if (client->getCameraDeviceVersion() >= CAMERA_DEVICE_API_VERSION_3_0) { if (params.zslMode && !params.recordingHint) { if (params.useZeroShutterLag() && !params.recordingHint) { res = device->createDefaultRequest(CAMERA3_TEMPLATE_ZERO_SHUTTER_LAG, &mPreviewRequest); } else { Loading Loading
services/camera/libcameraservice/api1/Camera2Client.cpp +7 −4 Original line number Diff line number Diff line Loading @@ -322,6 +322,9 @@ status_t Camera2Client::dumpClient(int fd, const Vector<String16>& args) { p.fastInfo.bestStillCaptureFpsRange[0], p.fastInfo.bestStillCaptureFpsRange[1]); result.appendFormat(" Use zero shutter lag: %s\n", p.useZeroShutterLag() ? "yes" : "no"); result.append(" Current streams:\n"); result.appendFormat(" Preview stream ID: %d\n", getPreviewStreamId()); Loading Loading @@ -813,7 +816,7 @@ status_t Camera2Client::startPreviewL(Parameters ¶ms, bool restart) { } } if (params.zslMode && !params.recordingHint && if (params.useZeroShutterLag() && getRecordingStreamId() == NO_STREAM) { res = updateProcessorStream(mZslProcessor, params); if (res != OK) { Loading Loading @@ -1362,7 +1365,7 @@ status_t Camera2Client::cancelAutoFocus() { return OK; } if (l.mParameters.zslMode) { if (l.mParameters.allowZslMode) { mZslProcessor->clearZslQueue(); } } Loading Loading @@ -1460,7 +1463,7 @@ status_t Camera2Client::takePicture(int msgType) { // Clear ZSL buffer queue when Jpeg size is changed. bool jpegStreamChanged = mJpegProcessor->getStreamId() != lastJpegStreamId; if (l.mParameters.zslMode && jpegStreamChanged) { if (l.mParameters.allowZslMode && jpegStreamChanged) { ALOGV("%s: Camera %d: Clear ZSL buffer queue when Jpeg size is changed", __FUNCTION__, mCameraId); mZslProcessor->clearZslQueue(); Loading Loading @@ -1495,7 +1498,7 @@ status_t Camera2Client::setParameters(const String8& params) { if (res != OK) return res; Parameters::focusMode_t focusModeAfter = l.mParameters.focusMode; if (l.mParameters.zslMode && focusModeAfter != focusModeBefore) { if (l.mParameters.allowZslMode && focusModeAfter != focusModeBefore) { mZslProcessor->clearZslQueue(); } Loading
services/camera/libcameraservice/api1/client2/CaptureSequencer.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -338,7 +338,7 @@ CaptureSequencer::CaptureState CaptureSequencer::manageStart( return DONE; } else if (l.mParameters.zslMode && else if (l.mParameters.useZeroShutterLag() && l.mParameters.state == Parameters::STILL_CAPTURE && l.mParameters.flashMode != Parameters::FLASH_MODE_ON) { nextState = ZSL_START; Loading
services/camera/libcameraservice/api1/client2/Parameters.cpp +24 −3 Original line number Diff line number Diff line Loading @@ -908,12 +908,12 @@ status_t Parameters::initialize(const CameraMetadata *info, int deviceVersion) { property_get("camera.disable_zsl_mode", value, "0"); if (!strcmp(value,"1") || slowJpegMode) { ALOGI("Camera %d: Disabling ZSL mode", cameraId); zslMode = false; allowZslMode = false; } else { zslMode = true; allowZslMode = true; } ALOGI("%s: zslMode: %d slowJpegMode %d", __FUNCTION__, zslMode, slowJpegMode); ALOGI("%s: allowZslMode: %d slowJpegMode %d", __FUNCTION__, allowZslMode, slowJpegMode); state = STOPPED; Loading Loading @@ -1127,6 +1127,8 @@ status_t Parameters::buildFastInfo() { ALOGV("Camera %d: Flexible YUV %s supported", cameraId, fastInfo.useFlexibleYuv ? "is" : "is not"); fastInfo.maxJpegSize = getMaxSize(getAvailableJpegSizes()); return OK; } Loading Loading @@ -2231,6 +2233,25 @@ bool Parameters::isJpegSizeOverridden() { return pictureSizeOverriden; } bool Parameters::useZeroShutterLag() const { // If ZSL mode is disabled, don't use it if (!allowZslMode) return false; // If recording hint is enabled, don't do ZSL if (recordingHint) return false; // If still capture size is no bigger than preview or video size, // don't do ZSL if (pictureWidth <= previewWidth || pictureHeight <= previewHeight || pictureWidth <= videoWidth || pictureHeight <= videoHeight) { return false; } // If still capture size is less than quarter of max, don't do ZSL if ((pictureWidth * pictureHeight) < (fastInfo.maxJpegSize.width * fastInfo.maxJpegSize.height / 4) ) { return false; } return true; } const char* Parameters::getStateName(State state) { #define CASE_ENUM_TO_CHAR(x) case x: return(#x); break; switch(state) { Loading
services/camera/libcameraservice/api1/client2/Parameters.h +5 −2 Original line number Diff line number Diff line Loading @@ -161,9 +161,9 @@ struct Parameters { bool previewCallbackOneShot; bool previewCallbackSurface; bool zslMode; bool allowZslMode; // Whether the jpeg stream is slower than 30FPS and can slow down preview. // When slowJpegMode is true, zslMode must be false to avoid slowing down preview. // When slowJpegMode is true, allowZslMode must be false to avoid slowing down preview. bool slowJpegMode; // Overall camera state Loading Loading @@ -219,6 +219,7 @@ struct Parameters { DefaultKeyedVector<uint8_t, OverrideModes> sceneModeOverrides; float minFocalLength; bool useFlexibleYuv; Size maxJpegSize; } fastInfo; // Quirks information; these are short-lived flags to enable workarounds for Loading Loading @@ -271,6 +272,8 @@ struct Parameters { status_t recoverOverriddenJpegSize(); // if video snapshot size is currently overridden bool isJpegSizeOverridden(); // whether zero shutter lag should be used for non-recording operation bool useZeroShutterLag() const; // Calculate the crop region rectangle, either tightly about the preview // resolution, or a region just based on the active array; both take Loading
services/camera/libcameraservice/api1/client2/StreamingProcessor.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -115,7 +115,7 @@ status_t StreamingProcessor::updatePreviewRequest(const Parameters ¶ms) { // Use CAMERA3_TEMPLATE_ZERO_SHUTTER_LAG for ZSL streaming case. if (client->getCameraDeviceVersion() >= CAMERA_DEVICE_API_VERSION_3_0) { if (params.zslMode && !params.recordingHint) { if (params.useZeroShutterLag() && !params.recordingHint) { res = device->createDefaultRequest(CAMERA3_TEMPLATE_ZERO_SHUTTER_LAG, &mPreviewRequest); } else { Loading