Add camera recording hint parameter.

The API is still hidden.

bug:4266229
Change-Id: I5e4c24e9e2808582aecb55ac4f1d5be3ed7e36a2
diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java
index b487764..4128a2c 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -1471,6 +1471,7 @@
                                             "preferred-preview-size-for-video";
         private static final String KEY_MAX_NUM_DETECTED_FACES_HW = "max-num-detected-faces-hw";
         private static final String KEY_MAX_NUM_DETECTED_FACES_SW = "max-num-detected-faces-sw";
+        private static final String KEY_RECORDING_HINT = "recording-hint";
 
         // Parameter key suffix for supported values.
         private static final String SUPPORTED_VALUES_SUFFIX = "-values";
@@ -3172,6 +3173,37 @@
             throw new IllegalArgumentException("Invalid face detection type " + type);
         }
 
+        /**
+         * Sets the hint of the recording mode. If this is true, {@link
+         * android.media.MediaRecorder#start()} may be faster or has less
+         * glitches. This should be called before starting the preview for the
+         * best result. But it is allowed to change the hint while the preview
+         * is active. The default value is false.
+         *
+         * The apps can still call {@link #takePicture(Camera.ShutterCallback,
+         * Camera.PictureCallback, Camera.PictureCallback, Camera.PictureCallback)}
+         * when the hint is true. The apps can call MediaRecorder.start() when
+         * the hint is false. But the performance may be worse.
+         *
+         * @param hint true if the apps intend to record a video using
+         *             {@link android.media.MediaRecorder}.
+         * @hide
+         */
+        public void setRecordingHint(boolean hint) {
+            set(KEY_RECORDING_HINT, hint ? TRUE : FALSE);
+        }
+
+        /**
+         * Gets the current recording hint.
+         *
+         * @return the current recording hint state.
+         * @see #setRecordingHint(boolean)
+         * @hide
+         */
+        public boolean getRecordingHint() {
+            return TRUE.equals(get(KEY_RECORDING_HINT));
+        }
+
         // Splits a comma delimited string to an ArrayList of String.
         // Return null if the passing string is null or the size is 0.
         private ArrayList<String> split(String str) {
diff --git a/include/camera/CameraParameters.h b/include/camera/CameraParameters.h
index d2f398a..48483fd 100644
--- a/include/camera/CameraParameters.h
+++ b/include/camera/CameraParameters.h
@@ -484,6 +484,17 @@
     // Example value: "yuv420sp" or PIXEL_FORMAT_XXX constants. Read only.
     static const char KEY_VIDEO_FRAME_FORMAT[];
 
+    // Sets the hint of the recording mode. If this is true, MediaRecorder.start
+    // may be faster or has less glitches. This should be called before starting
+    // the preview for the best result. But it is allowed to change the hint
+    // while the preview is active. The default value is false.
+    //
+    // The apps can still call Camera.takePicture when the hint is true. The
+    // apps can call MediaRecorder.start when the hint is false. But the
+    // performance may be worse.
+    // Example value: "true" or "false". Read/write.
+    static const char KEY_RECORDING_HINT[];
+
     // Value for KEY_ZOOM_SUPPORTED or KEY_SMOOTH_ZOOM_SUPPORTED.
     static const char TRUE[];
     static const char FALSE[];
diff --git a/libs/camera/CameraParameters.cpp b/libs/camera/CameraParameters.cpp
index d8fef09..251615d 100644
--- a/libs/camera/CameraParameters.cpp
+++ b/libs/camera/CameraParameters.cpp
@@ -86,6 +86,7 @@
 const char CameraParameters::KEY_PREFERRED_PREVIEW_SIZE_FOR_VIDEO[] = "preferred-preview-size-for-video";
 const char CameraParameters::KEY_MAX_NUM_DETECTED_FACES_HW[] = "max-num-detected-faces-hw";
 const char CameraParameters::KEY_MAX_NUM_DETECTED_FACES_SW[] = "max-num-detected-faces-sw";
+const char CameraParameters::KEY_RECORDING_HINT[] = "recording-hint";
 
 const char CameraParameters::TRUE[] = "true";
 const char CameraParameters::FALSE[] = "false";