From 19656479581c4cdda53e6af6acfcb3346b97164a Mon Sep 17 00:00:00 2001 From: Dimitar Borisov Date: Wed, 24 Sep 2014 17:32:06 +0300 Subject: SnapdragonCamera: Add support for CDS and TNR settings Add support for CDS and TNR settings - CDS and TNR can be controlled in photo mode and video mode. - CDS is set to off and cannot be set to other value when TNR is enabled - CDS value is restored when TNR is disabled again CRs-Fixed: 715042 Change-Id: Idf08403e38d0e3e634b047a955f2328b4237e691 --- src/com/android/camera/CameraSettings.java | 69 ++++++++++++++++++++++++++++++ src/com/android/camera/PhotoMenu.java | 44 +++++++++++++++++-- src/com/android/camera/PhotoModule.java | 38 ++++++++++++++++ src/com/android/camera/VideoMenu.java | 49 ++++++++++++++++++++- src/com/android/camera/VideoModule.java | 56 ++++++++++++++++++++++++ src/com/android/camera/VideoUI.java | 4 +- 6 files changed, 255 insertions(+), 5 deletions(-) (limited to 'src/com') diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java index 1232d09ac..2859d1acd 100644 --- a/src/com/android/camera/CameraSettings.java +++ b/src/com/android/camera/CameraSettings.java @@ -93,6 +93,10 @@ public class CameraSettings { public static final String KEY_HISTOGRAM = "pref_camera_histogram_key"; public static final String KEY_DENOISE = "pref_camera_denoise_key"; public static final String KEY_REDEYE_REDUCTION = "pref_camera_redeyereduction_key"; + public static final String KEY_CDS_MODE = "pref_camera_cds_mode_key"; + public static final String KEY_VIDEO_CDS_MODE = "pref_camera_video_cds_mode_key"; + public static final String KEY_TNR_MODE = "pref_camera_tnr_mode_key"; + public static final String KEY_VIDEO_TNR_MODE = "pref_camera_video_tnr_mode_key"; public static final String KEY_AE_BRACKET_HDR = "pref_camera_ae_bracket_hdr_key"; public static final String KEY_ADVANCED_FEATURES = "pref_camera_advanced_features_key"; public static final String KEY_HDR_MODE = "pref_camera_hdr_mode_key"; @@ -117,6 +121,10 @@ public class CameraSettings { private static final String KEY_QC_SUPPORTED_OZ_MODES = "opti-zoom-values"; private static final String KEY_QC_SUPPORTED_FACE_RECOGNITION_MODES = "face-recognition-values"; private static final String KEY_QC_SUPPORTED_DIS_MODES = "dis-values"; + private static final String KEY_QC_SUPPORTED_CDS_MODES = "cds-mode-values"; + private static final String KEY_QC_SUPPORTED_VIDEO_CDS_MODES = "video-cds-mode-values"; + private static final String KEY_QC_SUPPORTED_TNR_MODES = "tnr-mode-values"; + private static final String KEY_QC_SUPPORTED_VIDEO_TNR_MODES = "video-tnr-mode-values"; private static final String KEY_SNAPCAM_SUPPORTED_HDR_MODES = "hdr-mode-values"; private static final String KEY_SNAPCAM_SUPPORTED_HDR_NEED_1X = "hdr-need-1x-values"; public static final String KEY_QC_AE_BRACKETING = "ae-bracket-hdr"; @@ -128,6 +136,10 @@ public class CameraSettings { public static final String KEY_QC_OPTI_ZOOM = "opti-zoom"; public static final String KEY_QC_FACE_RECOGNITION = "face-recognition"; public static final String KEY_QC_DIS_MODE = "dis"; + public static final String KEY_QC_CDS_MODE = "cds-mode"; + public static final String KEY_QC_VIDEO_CDS_MODE = "video-cds-mode"; + public static final String KEY_QC_TNR_MODE = "tnr-mode"; + public static final String KEY_QC_VIDEO_TNR_MODE = "video-tnr-mode"; public static final String KEY_SNAPCAM_HDR_MODE = "hdr-mode"; public static final String KEY_SNAPCAM_HDR_NEED_1X = "hdr-need-1x"; public static final String KEY_VIDEO_HSR = "video-hsr"; @@ -276,6 +288,38 @@ public class CameraSettings { return split(str); } + public static List getSupportedCDSModes(Parameters params) { + String str = params.get(KEY_QC_SUPPORTED_CDS_MODES); + if (str == null) { + return null; + } + return split(str); + } + + public static List getSupportedVideoCDSModes(Parameters params) { + String str = params.get(KEY_QC_SUPPORTED_VIDEO_CDS_MODES); + if (str == null) { + return null; + } + return split(str); + } + + public static List getSupportedTNRModes(Parameters params) { + String str = params.get(KEY_QC_SUPPORTED_TNR_MODES); + if (str == null) { + return null; + } + return split(str); + } + + public static List getSupportedVideoTNRModes(Parameters params) { + String str = params.get(KEY_QC_SUPPORTED_VIDEO_TNR_MODES); + if (str == null) { + return null; + } + return split(str); + } + public static List getSupportedHDRModes(Parameters params) { String str = params.get(KEY_SNAPCAM_SUPPORTED_HDR_MODES); if (str == null) { @@ -392,6 +436,10 @@ public class CameraSettings { ListPreference auto_hdr = group.findPreference(KEY_AUTO_HDR); ListPreference hdr_mode = group.findPreference(KEY_HDR_MODE); ListPreference hdr_need_1x = group.findPreference(KEY_HDR_NEED_1X); + ListPreference cds_mode = group.findPreference(KEY_CDS_MODE); + ListPreference video_cds_mode = group.findPreference(KEY_VIDEO_CDS_MODE); + ListPreference tnr_mode = group.findPreference(KEY_TNR_MODE); + ListPreference video_tnr_mode = group.findPreference(KEY_VIDEO_TNR_MODE); if (hdr_need_1x != null) { filterUnsupportedOptions(group, @@ -402,6 +450,27 @@ public class CameraSettings { filterUnsupportedOptions(group, hdr_mode, getSupportedHDRModes(mParameters)); } + + if (cds_mode != null) { + filterUnsupportedOptions(group, + cds_mode, getSupportedCDSModes(mParameters)); + } + + if (video_cds_mode != null) { + filterUnsupportedOptions(group, + video_cds_mode, getSupportedVideoCDSModes(mParameters)); + } + + if (tnr_mode != null) { + filterUnsupportedOptions(group, + tnr_mode, getSupportedTNRModes(mParameters)); + } + + if (video_tnr_mode != null) { + filterUnsupportedOptions(group, + video_tnr_mode, getSupportedVideoTNRModes(mParameters)); + } + ListPreference videoRotation = group.findPreference(KEY_VIDEO_ROTATION); if (touchAfAec != null) { diff --git a/src/com/android/camera/PhotoMenu.java b/src/com/android/camera/PhotoMenu.java index 78ab98c5d..c4e8f8350 100644 --- a/src/com/android/camera/PhotoMenu.java +++ b/src/com/android/camera/PhotoMenu.java @@ -60,6 +60,9 @@ public class PhotoMenu extends PieController private int popupNum = 0; private PieItem mHdrItem = null; private PieItem mHdrPlusItem = null; + private String mPrevSavedCDS; + private boolean mIsTNREnabled = false; + private boolean mIsCDSUpdated = false; public PhotoMenu(CameraActivity activity, PhotoUI ui, PieRenderer pie) { super(activity, pie); @@ -106,7 +109,9 @@ public class PhotoMenu extends PieController CameraSettings.KEY_LONGSHOT, CameraSettings.KEY_AUTO_HDR, CameraSettings.KEY_HDR_MODE, - CameraSettings.KEY_HDR_NEED_1X + CameraSettings.KEY_HDR_NEED_1X, + CameraSettings.KEY_CDS_MODE, + CameraSettings.KEY_TNR_MODE }; mOtherKeys2 = new String[] { @@ -213,10 +218,43 @@ public class PhotoMenu extends PieController onSettingChanged(pref); } - @Override + @Override public void overrideSettings(final String ... keyvalues) { + if (mPopup1 != null) { + ListPreference pref_tnr = mPreferenceGroup.findPreference(CameraSettings.KEY_TNR_MODE); + ListPreference pref_cds = mPreferenceGroup.findPreference(CameraSettings.KEY_CDS_MODE); + + String tnr = (pref_tnr != null) ? pref_tnr.getValue() : null; + String cds = (pref_cds != null) ? pref_cds.getValue() : null; + + if (mPrevSavedCDS == null && cds != null) { + mPrevSavedCDS = cds; + } + + if ((tnr != null) && !mActivity.getString(R.string. + pref_camera_tnr_default).equals(tnr)) { + mPopup1.setPreferenceEnabled(CameraSettings.KEY_CDS_MODE, false); + mPopup1.overrideSettings(CameraSettings.KEY_CDS_MODE, + mActivity.getString(R.string.pref_camera_cds_value_off)); + mIsTNREnabled = true; + if (!mIsCDSUpdated) { + if (cds != null) { + mPrevSavedCDS = cds; + } + mIsCDSUpdated = true; + } + } else if (tnr != null) { + mPopup1.setPreferenceEnabled(CameraSettings.KEY_CDS_MODE, true); + if (mIsTNREnabled && mPrevSavedCDS != cds) { + mPopup1.overrideSettings(CameraSettings.KEY_CDS_MODE, mPrevSavedCDS); + mIsTNREnabled = false; + mIsCDSUpdated = false; + } + } + } + super.overrideSettings(keyvalues); - if ((mPopup1 == null) && (mPopup2 == null) && (mPopup3 == null)) initializePopup(); + if ((mPopup1 == null) && (mPopup2 == null) && (mPopup3 == null)) initializePopup(); mPopup1.overrideSettings(keyvalues); mPopup2.overrideSettings(keyvalues); mPopup3.overrideSettings(keyvalues); diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java index b81e96f0f..8f1fa89ed 100755 --- a/src/com/android/camera/PhotoModule.java +++ b/src/com/android/camera/PhotoModule.java @@ -190,6 +190,8 @@ public class PhotoModule // The degrees of the device rotated clockwise from its natural orientation. private int mOrientation = OrientationEventListener.ORIENTATION_UNKNOWN; private ComboPreferences mPreferences; + private String mPrevSavedCDS; + private boolean isTNREnabled; private static final String sTempCropFilename = "crop-temp"; @@ -2629,6 +2631,42 @@ public class PhotoModule mParameters.set(CameraSettings.KEY_QC_AE_BRACKETING, aeBracketing); } + // Set CDS + String cds = mPreferences.getString( + CameraSettings.KEY_CDS_MODE, + mActivity.getString(R.string.pref_camera_cds_default)); + if ((mPrevSavedCDS == null) && (cds != null)) { + mPrevSavedCDS = cds; + } + if (CameraUtil.isSupported(cds, + CameraSettings.getSupportedCDSModes(mParameters))) { + mParameters.set(CameraSettings.KEY_QC_CDS_MODE, cds); + } + + // Set TNR + String tnr = mPreferences.getString( + CameraSettings.KEY_TNR_MODE, + mActivity.getString(R.string.pref_camera_tnr_default)); + if (CameraUtil.isSupported(tnr, + CameraSettings.getSupportedTNRModes(mParameters))) { + if (!tnr.equals(mActivity.getString(R.string. + pref_camera_tnr_value_off))) { + mParameters.set(CameraSettings.KEY_QC_CDS_MODE, + mActivity.getString(R.string.pref_camera_cds_value_off)); + mUI.overrideSettings(CameraSettings.KEY_QC_CDS_MODE, + mActivity.getString(R.string.pref_camera_cds_value_off)); + if (cds != null) { + mPrevSavedCDS = cds; + } + isTNREnabled = true; + } else if (isTNREnabled) { + mParameters.set(CameraSettings.KEY_QC_CDS_MODE, mPrevSavedCDS); + mUI.overrideSettings(CameraSettings.KEY_QC_CDS_MODE, mPrevSavedCDS); + isTNREnabled = false; + } + mParameters.set(CameraSettings.KEY_QC_TNR_MODE, tnr); + } + // Set hdr mode String hdrMode = mPreferences.getString( CameraSettings.KEY_HDR_MODE, diff --git a/src/com/android/camera/VideoMenu.java b/src/com/android/camera/VideoMenu.java index 85e77dda7..33fc569bd 100644 --- a/src/com/android/camera/VideoMenu.java +++ b/src/com/android/camera/VideoMenu.java @@ -48,6 +48,9 @@ public class VideoMenu extends PieController private int mPopupStatus; private int popupNum; private CameraActivity mActivity; + private String mPrevSavedVideoCDS; + private boolean mIsVideoTNREnabled = false; + private boolean mIsVideoCDSUpdated = false; public VideoMenu(CameraActivity activity, VideoUI ui, PieRenderer pie) { super(activity, pie); @@ -83,7 +86,9 @@ public class VideoMenu extends PieController CameraSettings.KEY_WHITE_BALANCE, CameraSettings.KEY_VIDEO_HIGH_FRAME_RATE, CameraSettings.KEY_VIDEOCAMERA_FLASH_MODE, - CameraSettings.KEY_VIDEO_ROTATION + CameraSettings.KEY_VIDEO_ROTATION, + CameraSettings.KEY_VIDEO_CDS_MODE, + CameraSettings.KEY_VIDEO_TNR_MODE }; PieItem item1 = makeItem(R.drawable.ic_settings_holo_light_01); @@ -169,8 +174,49 @@ public class VideoMenu extends PieController } } + public void overrideCDSMode() { + if (mPopup2 != null) { + ListPreference pref_tnr = mPreferenceGroup. + findPreference(CameraSettings.KEY_VIDEO_TNR_MODE); + ListPreference pref_cds = mPreferenceGroup. + findPreference(CameraSettings.KEY_VIDEO_CDS_MODE); + String tnr = (pref_tnr != null) ? pref_tnr.getValue() : null; + String cds = (pref_cds != null) ? pref_cds.getValue() : null; + + if (mPrevSavedVideoCDS == null && cds != null) { + mPrevSavedVideoCDS = cds; + } + + if ((tnr != null) && !mActivity.getString(R.string. + pref_camera_video_tnr_default).equals(tnr)) { + ((MoreSettingPopup) mPopup2).setPreferenceEnabled( + CameraSettings.KEY_VIDEO_CDS_MODE,false); + ((MoreSettingPopup) mPopup2).overrideSettings( + CameraSettings.KEY_VIDEO_CDS_MODE, + mActivity.getString(R.string.pref_camera_video_cds_value_off)); + mIsVideoTNREnabled = true; + if (!mIsVideoCDSUpdated) { + if (cds != null) { + mPrevSavedVideoCDS = cds; + } + mIsVideoCDSUpdated = true; + } + } else if (tnr != null) { + ((MoreSettingPopup) mPopup2).setPreferenceEnabled( + CameraSettings.KEY_VIDEO_CDS_MODE,true); + if (mIsVideoTNREnabled) { + ((MoreSettingPopup) mPopup2).overrideSettings( + CameraSettings.KEY_VIDEO_CDS_MODE, mPrevSavedVideoCDS); + mIsVideoTNREnabled = false; + mIsVideoCDSUpdated = false; + } + } + } + } + @Override public void overrideSettings(final String ... keyvalues) { + overrideCDSMode(); super.overrideSettings(keyvalues); if (((mPopup1 == null) && (mPopup2 == null)) || mPopupStatus != POPUP_FIRST_LEVEL) { mPopupStatus = POPUP_FIRST_LEVEL; @@ -212,6 +258,7 @@ public class VideoMenu extends PieController popup2.setSettingChangedListener(this); popup2.initialize(mPreferenceGroup, mOtherKeys2); mPopup2 = popup2; + overrideCDSMode(); } public void popupDismissed(boolean topPopupOnly) { diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java index 8223fadf4..226e50398 100755 --- a/src/com/android/camera/VideoModule.java +++ b/src/com/android/camera/VideoModule.java @@ -187,6 +187,11 @@ public class VideoModule implements CameraModule, private boolean mStopRecPending = false; private boolean mStartPrevPending = false; private boolean mStopPrevPending = false; + private String mPrevSavedVideoCDS = null; + private String mTempVideoCDS = null; + private boolean mIsVideoTNREnabled; + private boolean mIsVideoCDSUpdated = false; + private boolean mOverrideCDS = false; // The preview window is on focus private boolean mPreviewFocused = false; @@ -2096,6 +2101,57 @@ public class VideoModule implements CameraModule, mParameters.set(CameraSettings.KEY_QC_SNAPSHOT_PICTURE_FLIP, picture_flip); } + // Set video CDS + String video_cds = mPreferences.getString( + CameraSettings.KEY_VIDEO_CDS_MODE, + mActivity.getString(R.string.pref_camera_video_cds_default)); + + if ((mPrevSavedVideoCDS == null) && (video_cds != null)) { + mPrevSavedVideoCDS = video_cds; + } + + if (mOverrideCDS) { + video_cds = mPrevSavedVideoCDS; + mOverrideCDS = false; + } + + if (CameraUtil.isSupported(video_cds, + CameraSettings.getSupportedVideoCDSModes(mParameters))) { + mParameters.set(CameraSettings.KEY_QC_VIDEO_CDS_MODE, video_cds); + } + + // Set video TNR + String video_tnr = mPreferences.getString( + CameraSettings.KEY_VIDEO_TNR_MODE, + mActivity.getString(R.string.pref_camera_video_tnr_default)); + if (CameraUtil.isSupported(video_tnr, + CameraSettings.getSupportedVideoTNRModes(mParameters))) { + if (!video_tnr.equals(mActivity.getString(R.string. + pref_camera_video_tnr_value_off))) { + mParameters.set(CameraSettings.KEY_QC_VIDEO_CDS_MODE, + mActivity.getString(R.string.pref_camera_video_cds_value_off)); + mUI.overrideSettings(CameraSettings.KEY_QC_VIDEO_CDS_MODE, + mActivity.getString(R.string.pref_camera_video_cds_value_off)); + if (!mIsVideoCDSUpdated) { + if (video_cds != null) { + mPrevSavedVideoCDS = mTempVideoCDS; + } + mIsVideoTNREnabled = true; + mIsVideoCDSUpdated = true; + } + } else if (mIsVideoTNREnabled) { + mParameters.set(CameraSettings.KEY_QC_VIDEO_CDS_MODE, mPrevSavedVideoCDS); + mUI.overrideSettings(CameraSettings.KEY_QC_VIDEO_CDS_MODE, mPrevSavedVideoCDS); + mIsVideoTNREnabled = false; + mIsVideoCDSUpdated = false; + mOverrideCDS = true; + } else { + mTempVideoCDS = video_cds; + } + mParameters.set(CameraSettings.KEY_QC_VIDEO_TNR_MODE, video_tnr); + mUI.overrideSettings(CameraSettings.KEY_QC_VIDEO_CDS_MODE, video_tnr); + } + // Set Video HDR. String videoHDR = mPreferences.getString( CameraSettings.KEY_VIDEO_HDR, diff --git a/src/com/android/camera/VideoUI.java b/src/com/android/camera/VideoUI.java index 328645a30..8de713adf 100644 --- a/src/com/android/camera/VideoUI.java +++ b/src/com/android/camera/VideoUI.java @@ -438,7 +438,9 @@ public class VideoUI implements PieRenderer.PieListener, } public void overrideSettings(final String... keyvalues) { - mVideoMenu.overrideSettings(keyvalues); + if (mVideoMenu != null) { + mVideoMenu.overrideSettings(keyvalues); + } } public void setOrientationIndicator(int orientation, boolean animation) { -- cgit v1.2.3