From c1a696583dac3da1853f582e4fac6a1eca4cfac5 Mon Sep 17 00:00:00 2001 From: xianming wang Date: Fri, 7 Sep 2018 10:42:34 +0800 Subject: SnapdragonCamera: Add abortCaptures for flush Add abortCaptures for flush. (1) when exit app. (2) when switch cameraID. (3) start recording before closePreview session. (4) stop recording except enable EIS. CRs-Fixed: 2349737 Change-Id: I4546fbfefa3ffa4bcec688a6b5c6eea24045f232 --- res/values/camera2arrays.xml | 11 +++++ res/values/qcomstrings.xml | 7 ++++ res/xml/capture_preferences.xml | 7 ++++ res/xml/setting_menu_preferences.xml | 9 ++++ src/com/android/camera/CaptureModule.java | 62 +++++++++++++++++++++++++++- src/com/android/camera/SettingsManager.java | 1 + src/com/android/camera/util/PersistUtil.java | 6 +++ 7 files changed, 101 insertions(+), 2 deletions(-) diff --git a/res/values/camera2arrays.xml b/res/values/camera2arrays.xml index f34d2f81e..eecfbf2ec 100755 --- a/res/values/camera2arrays.xml +++ b/res/values/camera2arrays.xml @@ -1228,4 +1228,15 @@ for time lapse recording --> @string/pref_camera2_fs2_entry_value_disable @string/pref_camera2_fs2_entry_value_enable + + + @string/pref_camera2_abort_captures_entry_disable + @string/pref_camera2_abort_captures_entry_enable + + + + @string/pref_camera2_abort_captures_entry_value_disable + @string/pref_camera2_abort_captures_entry_value_enable + + diff --git a/res/values/qcomstrings.xml b/res/values/qcomstrings.xml index 50f70f0ea..e0dd8b3d1 100755 --- a/res/values/qcomstrings.xml +++ b/res/values/qcomstrings.xml @@ -1298,5 +1298,12 @@ 1 0 + Abort Captures + 1 + enable + disable + 1 + 0 + diff --git a/res/xml/capture_preferences.xml b/res/xml/capture_preferences.xml index cb5b73e2d..51002729e 100755 --- a/res/xml/capture_preferences.xml +++ b/res/xml/capture_preferences.xml @@ -469,4 +469,11 @@ camera:entries="@array/pref_camera2_fs2_entries" camera:entryValues="@array/pref_camera2_fs2_entryvalues" /> + + diff --git a/res/xml/setting_menu_preferences.xml b/res/xml/setting_menu_preferences.xml index 7bdbca9f0..da0a21154 100755 --- a/res/xml/setting_menu_preferences.xml +++ b/res/xml/setting_menu_preferences.xml @@ -492,5 +492,14 @@ android:layout="@layout/preference" android:summary="%s"/> + + diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java index 5864a9193..e5a65c564 100755 --- a/src/com/android/camera/CaptureModule.java +++ b/src/com/android/camera/CaptureModule.java @@ -3030,6 +3030,16 @@ public class CaptureModule implements CameraModule, PhotoController, throw new RuntimeException("Time out waiting to lock camera closing"); } Log.d(TAG, "Closing camera: " + mCameraDevice[i].getId()); + + if (isAbortCapturesEnable()) { + mCaptureSession[i].abortCaptures(); + Log.d(TAG, "Closing camera call abortCaptures "); + } + if (isSendRequestAfterFlushEnable()) { + Log.v(TAG, "Closing camera call setRepeatingRequest"); + mCaptureSession[i].setRepeatingRequest(mPreviewRequestBuilder[i].build(), + mCaptureCallback, mCameraHandler); + } mCameraDevice[i].close(); mCameraDevice[i] = null; mCameraOpened[i] = false; @@ -3056,6 +3066,8 @@ public class CaptureModule implements CameraModule, PhotoController, } catch (InterruptedException e) { mCameraOpenCloseLock.release(); throw new RuntimeException("Interrupted while trying to lock camera closing.", e); + } catch (CameraAccessException e) { + e.printStackTrace(); } finally { mCameraOpenCloseLock.release(); } @@ -4607,6 +4619,10 @@ public class CaptureModule implements CameraModule, PhotoController, mUI.clearFocus(); mUI.hideUIwhileRecording(); mCameraHandler.removeMessages(CANCEL_TOUCH_FOCUS, mCameraId[cameraId]); + if (isAbortCapturesEnable()) { + mCaptureSession[cameraId].abortCaptures(); + Log.d(TAG, "startRecordingVideo call abortCaptures befor close preview "); + } mState[cameraId] = STATE_PREVIEW; mControlAFMode = CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE; mIsAutoFocusStarted = false; @@ -5189,6 +5205,36 @@ public class CaptureModule implements CameraModule, PhotoController, resumeVideoRecording(); } + private boolean isEISDisable() { + boolean result = true; + String value = mSettingsManager.getValue(SettingsManager.KEY_EIS_VALUE); + if (value != null) { + result = value.equals(mActivity.getResources().getString( + R.string.pref_camera2_eis_entry_value_disable)); + } else { + result = false; + } + Log.v(TAG, "isEISDisable :" + result); + return result; + } + + private boolean isAbortCapturesEnable() { + boolean result = true; + String value = mSettingsManager.getValue(SettingsManager.KEY_ABORT_CAPTURES); + if (value != null) { + result = value.equals(mActivity.getResources().getString( + R.string.pref_camera2_abort_captures_entry_value_enable)); + } else { + result = false; + } + Log.v(TAG, "isAbortCapturesEnable :" + result); + return result; + } + + private boolean isSendRequestAfterFlushEnable() { + return PersistUtil.isSendRequestAfterFlush(); + } + private void stopRecordingVideo(int cameraId) { Log.d(TAG, "stopRecordingVideo " + cameraId); mStopRecordingTime = System.currentTimeMillis(); @@ -5202,8 +5248,18 @@ public class CaptureModule implements CameraModule, PhotoController, if (mLiveShotInitHeifWriter != null) { mLiveShotInitHeifWriter.close(); } - closePreviewSession(); mIsRecordingVideo = false; + if (isEISDisable() && isAbortCapturesEnable()) { + try { + mCurrentSession.abortCaptures(); + Log.d(TAG, "stopRecordingVideo call abortCaptures "); + } catch (CameraAccessException e) { + e.printStackTrace(); + } + } + if (!mPaused) { + closePreviewSession(); + } try { mMediaRecorder.setOnErrorListener(null); mMediaRecorder.setOnInfoListener(null); @@ -5245,7 +5301,9 @@ public class CaptureModule implements CameraModule, PhotoController, mUI.hideSurfaceView(); mUI.showSurfaceView(); } - createSessions(); + if (!mPaused) { + createSessions(); + } mUI.showUIafterRecording(); mUI.resetTrackingFocus(); mStopRecPending = false; diff --git a/src/com/android/camera/SettingsManager.java b/src/com/android/camera/SettingsManager.java index 013fb6775..7085a2726 100755 --- a/src/com/android/camera/SettingsManager.java +++ b/src/com/android/camera/SettingsManager.java @@ -163,6 +163,7 @@ public class SettingsManager implements ListMenu.SettingsListener { public static final String KEY_VIDEO_HDR_VALUE = "pref_camera2_video_hdr_key"; public static final String KEY_CAPTURE_MFNR_VALUE = "pref_camera2_capture_mfnr_key"; public static final String KEY_SENSOR_MODE_FS2_VALUE = "pref_camera2_fs2_key"; + public static final String KEY_ABORT_CAPTURES = "pref_camera2_abort_captures_key"; public static final String KEY_SAVERAW = "pref_camera2_saveraw_key"; public static final String KEY_ZOOM = "pref_camera2_zoom_key"; public static final String KEY_SHARPNESS_CONTROL_MODE = "pref_camera2_sharpness_control_key"; diff --git a/src/com/android/camera/util/PersistUtil.java b/src/com/android/camera/util/PersistUtil.java index bbb33a489..49f8f0df7 100755 --- a/src/com/android/camera/util/PersistUtil.java +++ b/src/com/android/camera/util/PersistUtil.java @@ -95,6 +95,8 @@ public class PersistUtil { SystemProperties.getBoolean("persist.sys.camera.perf.skip_memck", false); private static final boolean PERSIST_ZZHDR_ENABLED = SystemProperties.getBoolean("persist.sys.camera.zzhdr.enable", false); + private static final boolean PERSIST_SEND_REQUEST_AFTER_FLUSH = + SystemProperties.getBoolean("persist.sys.camera.send_request_after_flush", false); private static final int PERSIST_PREVIEW_SIZE = SystemProperties.getInt("persist.sys.camera.preview.size", 0); private static final long PERSIST_TIMESTAMP_LIMIT = @@ -257,6 +259,10 @@ public class PersistUtil { return PERSIST_ZZHDR_ENABLED; } + public static boolean isSendRequestAfterFlush() { + return PERSIST_SEND_REQUEST_AFTER_FLUSH; + } + public static int getPreviewSize(){ //Read Preview Resolution from adb command //value: 0(default) - Default value as per snapshot aspect ratio -- cgit v1.2.3