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";