Merge "Add QVGA resolution to CamcorderProfile" into ics-factoryrom
diff --git a/include/media/MediaProfiles.h b/include/media/MediaProfiles.h
index 4b023d1..eab7648 100644
--- a/include/media/MediaProfiles.h
+++ b/include/media/MediaProfiles.h
@@ -32,7 +32,8 @@
     CAMCORDER_QUALITY_480P = 4,
     CAMCORDER_QUALITY_720P = 5,
     CAMCORDER_QUALITY_1080P = 6,
-    CAMCORDER_QUALITY_LIST_END = 6,
+    CAMCORDER_QUALITY_QVGA = 7,
+    CAMCORDER_QUALITY_LIST_END = 7,
 
     CAMCORDER_QUALITY_TIME_LAPSE_LIST_START = 1000,
     CAMCORDER_QUALITY_TIME_LAPSE_LOW  = 1000,
@@ -42,7 +43,8 @@
     CAMCORDER_QUALITY_TIME_LAPSE_480P = 1004,
     CAMCORDER_QUALITY_TIME_LAPSE_720P = 1005,
     CAMCORDER_QUALITY_TIME_LAPSE_1080P = 1006,
-    CAMCORDER_QUALITY_TIME_LAPSE_LIST_END = 1006,
+    CAMCORDER_QUALITY_TIME_LAPSE_QVGA = 1007,
+    CAMCORDER_QUALITY_TIME_LAPSE_LIST_END = 1007,
 };
 
 /**
diff --git a/media/java/android/media/CamcorderProfile.java b/media/java/android/media/CamcorderProfile.java
index b2234e2..51a45cd 100644
--- a/media/java/android/media/CamcorderProfile.java
+++ b/media/java/android/media/CamcorderProfile.java
@@ -81,6 +81,16 @@
     public static final int QUALITY_1080P = 6;
 
     /**
+     * Quality level corresponding to the QVGA (320x240) resolution.
+     * {@hide}
+     */
+    public static final int QUALITY_QVGA = 7;
+
+    // Start and end of quality list
+    private static final int QUALITY_LIST_START = QUALITY_LOW;
+    private static final int QUALITY_LIST_END = QUALITY_QVGA;
+
+    /**
      * Time lapse quality level corresponding to the lowest available resolution.
      */
     public static final int QUALITY_TIME_LAPSE_LOW  = 1000;
@@ -116,6 +126,16 @@
     public static final int QUALITY_TIME_LAPSE_1080P = 1006;
 
     /**
+     * Time lapse quality level corresponding to the QVGA (320 x 240) resolution.
+     * {@hide}
+     */
+    public static final int QUALITY_TIME_LAPSE_QVGA = 1007;
+
+    // Start and end of timelapse quality list
+    private static final int QUALITY_TIME_LAPSE_LIST_START = QUALITY_TIME_LAPSE_LOW;
+    private static final int QUALITY_TIME_LAPSE_LIST_END = QUALITY_TIME_LAPSE_QVGA;
+
+    /**
      * Default recording duration in seconds before the session is terminated.
      * This is useful for applications like MMS has limited file size requirement.
      */
@@ -238,8 +258,10 @@
      * @see #QUALITY_TIME_LAPSE_1080P
      */
     public static CamcorderProfile get(int cameraId, int quality) {
-        if (!((quality >= QUALITY_LOW && quality <= QUALITY_1080P) ||
-                (quality >= QUALITY_TIME_LAPSE_LOW && quality <= QUALITY_TIME_LAPSE_1080P))) {
+        if (!((quality >= QUALITY_LIST_START &&
+               quality <= QUALITY_LIST_END) ||
+              (quality >= QUALITY_TIME_LAPSE_LIST_START &&
+               quality <= QUALITY_TIME_LAPSE_LIST_END))) {
             String errMessage = "Unsupported quality level: " + quality;
             throw new IllegalArgumentException(errMessage);
         }
diff --git a/media/jni/android_media_MediaProfiles.cpp b/media/jni/android_media_MediaProfiles.cpp
index e5e688c..7ed0050 100644
--- a/media/jni/android_media_MediaProfiles.cpp
+++ b/media/jni/android_media_MediaProfiles.cpp
@@ -161,13 +161,19 @@
     return cap;
 }
 
+static bool isCamcorderQualityKnown(int quality)
+{
+    return ((quality >= CAMCORDER_QUALITY_LIST_START &&
+             quality <= CAMCORDER_QUALITY_LIST_END) ||
+            (quality >= CAMCORDER_QUALITY_TIME_LAPSE_LIST_START &&
+             quality <= CAMCORDER_QUALITY_TIME_LAPSE_LIST_END));
+}
+
 static jobject
 android_media_MediaProfiles_native_get_camcorder_profile(JNIEnv *env, jobject thiz, jint id, jint quality)
 {
     LOGV("native_get_camcorder_profile: %d %d", id, quality);
-    if (!((quality >= CAMCORDER_QUALITY_LOW && quality <= CAMCORDER_QUALITY_1080P) ||
-                (quality >= CAMCORDER_QUALITY_TIME_LAPSE_LOW &&
-                quality <= CAMCORDER_QUALITY_TIME_LAPSE_1080P))) {
+    if (!isCamcorderQualityKnown(quality)) {
         jniThrowException(env, "java/lang/RuntimeException", "Unknown camcorder profile quality");
         return NULL;
     }
@@ -216,9 +222,7 @@
 android_media_MediaProfiles_native_has_camcorder_profile(JNIEnv *env, jobject thiz, jint id, jint quality)
 {
     LOGV("native_has_camcorder_profile: %d %d", id, quality);
-    if (!((quality >= CAMCORDER_QUALITY_LOW && quality <= CAMCORDER_QUALITY_1080P) ||
-                (quality >= CAMCORDER_QUALITY_TIME_LAPSE_LOW &&
-                quality <= CAMCORDER_QUALITY_TIME_LAPSE_1080P))) {
+    if (!isCamcorderQualityKnown(quality)) {
         return false;
     }
 
diff --git a/media/libmedia/MediaProfiles.cpp b/media/libmedia/MediaProfiles.cpp
index 5a8bc60..ad55ff8 100644
--- a/media/libmedia/MediaProfiles.cpp
+++ b/media/libmedia/MediaProfiles.cpp
@@ -67,6 +67,7 @@
     {"480p", CAMCORDER_QUALITY_480P},
     {"720p", CAMCORDER_QUALITY_720P},
     {"1080p", CAMCORDER_QUALITY_1080P},
+    {"qvga", CAMCORDER_QUALITY_QVGA},
 
     {"timelapselow",  CAMCORDER_QUALITY_TIME_LAPSE_LOW},
     {"timelapsehigh", CAMCORDER_QUALITY_TIME_LAPSE_HIGH},
@@ -74,7 +75,8 @@
     {"timelapsecif", CAMCORDER_QUALITY_TIME_LAPSE_CIF},
     {"timelapse480p", CAMCORDER_QUALITY_TIME_LAPSE_480P},
     {"timelapse720p", CAMCORDER_QUALITY_TIME_LAPSE_720P},
-    {"timelapse1080p", CAMCORDER_QUALITY_TIME_LAPSE_1080P}
+    {"timelapse1080p", CAMCORDER_QUALITY_TIME_LAPSE_1080P},
+    {"timelapseqvga", CAMCORDER_QUALITY_TIME_LAPSE_QVGA},
 };
 
 /*static*/ void
@@ -1139,7 +1141,7 @@
     if (index >= 0) {
         offsetTimeMs = mStartTimeOffsets.valueFor(cameraId);
     }
-    LOGV("%s: offsetTime=%d ms and cameraId=%d", offsetTimeMs, cameraId);
+    LOGV("offsetTime=%d ms and cameraId=%d", offsetTimeMs, cameraId);
     return offsetTimeMs;
 }