diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java
index 1232d09..2859d1a 100644
--- a/src/com/android/camera/CameraSettings.java
+++ b/src/com/android/camera/CameraSettings.java
@@ -93,6 +93,10 @@
     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 @@
     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 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 @@
         return split(str);
     }
 
+    public static List<String> getSupportedCDSModes(Parameters params) {
+        String str = params.get(KEY_QC_SUPPORTED_CDS_MODES);
+        if (str == null) {
+            return null;
+        }
+        return split(str);
+    }
+
+    public static List<String> getSupportedVideoCDSModes(Parameters params) {
+        String str = params.get(KEY_QC_SUPPORTED_VIDEO_CDS_MODES);
+        if (str == null) {
+            return null;
+        }
+        return split(str);
+    }
+
+    public static List<String> getSupportedTNRModes(Parameters params) {
+        String str = params.get(KEY_QC_SUPPORTED_TNR_MODES);
+        if (str == null) {
+            return null;
+        }
+        return split(str);
+    }
+
+    public static List<String> getSupportedVideoTNRModes(Parameters params) {
+        String str = params.get(KEY_QC_SUPPORTED_VIDEO_TNR_MODES);
+        if (str == null) {
+            return null;
+        }
+        return split(str);
+    }
+
     public static List<String> getSupportedHDRModes(Parameters params) {
         String str = params.get(KEY_SNAPCAM_SUPPORTED_HDR_MODES);
         if (str == null) {
@@ -392,6 +436,10 @@
         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 @@
             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 78ab98c..c4e8f83 100644
--- a/src/com/android/camera/PhotoMenu.java
+++ b/src/com/android/camera/PhotoMenu.java
@@ -60,6 +60,9 @@
     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 @@
                 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 @@
         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 b81e96f..8f1fa89 100755
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -190,6 +190,8 @@
     // 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 @@
             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 85e77dd..33fc569 100644
--- a/src/com/android/camera/VideoMenu.java
+++ b/src/com/android/camera/VideoMenu.java
@@ -48,6 +48,9 @@
     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 @@
                 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 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 @@
         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 8223fad..226e503 100755
--- a/src/com/android/camera/VideoModule.java
+++ b/src/com/android/camera/VideoModule.java
@@ -187,6 +187,11 @@
     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 @@
             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 328645a..8de713a 100644
--- a/src/com/android/camera/VideoUI.java
+++ b/src/com/android/camera/VideoUI.java
@@ -438,7 +438,9 @@
     }
 
     public void overrideSettings(final String... keyvalues) {
-        mVideoMenu.overrideSettings(keyvalues);
+        if (mVideoMenu != null) {
+            mVideoMenu.overrideSettings(keyvalues);
+        }
     }
 
     public void setOrientationIndicator(int orientation, boolean animation) {
