diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 71b4afc..68dcc83 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -31,32 +31,19 @@
         <item>@string/pref_video_quality_entry_qvga</item>
         <item>@string/pref_video_quality_entry_qcif</item>
    </string-array>
-
     <string-array name="pref_video_quality_entryvalues" translatable="false">
-        <!-- The integer value of CamcorderProfile.QUALITY_4kDCI -->
-        <item>13</item>
-        <!-- The integer value of CamcorderProfile.QUALITY_2160P -->
-        <item>8</item>
-        <!-- The integer value of CamcorderProfile.QUALITY_1080P -->
-        <item>6</item>
-        <!-- The integer value of CamcorderProfile.QUALITY_720P -->
-        <item>5</item>
-        <!-- The integer value of CamcorderProfile.QUALITY_480P -->
-        <item>4</item>
-        <!-- The integer value of CamcorderProfile.QUALITY_FWVGA -->
-        <item>12</item>
-        <!-- The integer value of CamcorderProfile.QUALITY_WVGA -->
-        <item>9</item>
-        <!-- The integer value of CamcorderProfile.QUALITY_VGA -->
-        <item>10</item>
-        <!-- The integer value of CamcorderProfile.QUALITY_WQVGA -->
-        <item>11</item>
-        <!-- The integer value of CamcorderProfile.QUALITY_CIF -->
-        <item>@string/pref_video_quality_default</item>
-        <!-- The integer value of CamcorderProfile.QUALITY_QVGA -->
-        <item>7</item>
-        <!-- The integer value of CamcorderProfile.QUALITY_QCIF -->
-        <item>2</item>
+        <item>4096x2160</item>
+        <item>3840x2160</item>
+        <item>1920x1080</item>
+        <item>1280x720</item>
+        <item>720x480</item>
+        <item>864x480</item>
+        <item>800x480</item>
+        <item>640x480</item>
+        <item>400x240</item>
+        <item>352x288</item>
+        <item>320x240</item>
+        <item>176x144</item>
     </string-array>
 
     <!-- Camera Preference save path entries -->
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e091605..67bdc26 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -238,8 +238,8 @@
 
     <!-- The Video quality settings in preference [CHAR LIMIT=21] -->
     <string name="pref_video_quality_title">Video quality</string>
-    <!-- The default quality value is 3 (CIF) -->
-    <string name="pref_video_quality_default" translatable="false">3</string>
+    <!-- The default quality value is (CIF) -->
+    <string name="pref_video_quality_default" translatable="false">352x288</string>
     <!-- Video quality setting entry.
     Videos will be recorded in 4k DCI quality. [CHAR LIMIT=24] -->
     <string name="pref_video_quality_entry_4kdci" translatable="false">
diff --git a/src/com/android/camera/AndroidCameraManagerImpl.java b/src/com/android/camera/AndroidCameraManagerImpl.java
index 42ae20f..637a5f5 100644
--- a/src/com/android/camera/AndroidCameraManagerImpl.java
+++ b/src/com/android/camera/AndroidCameraManagerImpl.java
@@ -201,14 +201,7 @@
             try {
                 switch (msg.what) {
                     case OPEN_CAMERA:
-                        try {
-                            mCamera = android.hardware.Camera.openLegacy(msg.arg1,
-                                    android.hardware.Camera.CAMERA_HAL_API_VERSION_1_0);
-                        } catch (RuntimeException e) {
-                            /* Retry with open if openLegacy fails */
-                            Log.v(TAG, "openLegacy failed. Using open instead");
-                            mCamera = android.hardware.Camera.open(msg.arg1);
-                        }
+                        mCamera = android.hardware.Camera.open(msg.arg1);
                         if (mCamera != null) {
                             mParametersIsDirty = true;
 
diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java
index e27a08e..6f50fcb 100644
--- a/src/com/android/camera/CameraSettings.java
+++ b/src/com/android/camera/CameraSettings.java
@@ -28,6 +28,7 @@
 import android.hardware.Camera.Parameters;
 import android.hardware.Camera.Size;
 import android.media.CamcorderProfile;
+import java.util.HashMap;
 import android.util.Log;
 
 import com.android.camera.util.ApiHelper;
@@ -242,6 +243,26 @@
     private final CameraInfo[] mCameraInfo;
     private final int mCameraId;
 
+    public static final HashMap<String, Integer>
+            VIDEO_QUALITY_TABLE = new HashMap<String, Integer>();
+
+    static {
+        //video qualities
+        VIDEO_QUALITY_TABLE.put("4096x2160", CamcorderProfile.QUALITY_4kDCI);
+        VIDEO_QUALITY_TABLE.put("3840x2160", CamcorderProfile.QUALITY_2160P);
+        VIDEO_QUALITY_TABLE.put("1920x1080", CamcorderProfile.QUALITY_1080P);
+        VIDEO_QUALITY_TABLE.put("1280x720",  CamcorderProfile.QUALITY_720P);
+        VIDEO_QUALITY_TABLE.put("720x480",   CamcorderProfile.QUALITY_480P);
+        VIDEO_QUALITY_TABLE.put("864x480",   CamcorderProfile.QUALITY_FWVGA);
+        VIDEO_QUALITY_TABLE.put("800x480",   CamcorderProfile.QUALITY_WVGA);
+        VIDEO_QUALITY_TABLE.put("640x480",   CamcorderProfile.QUALITY_VGA);
+        VIDEO_QUALITY_TABLE.put("400x240",   CamcorderProfile.QUALITY_WQVGA);
+        VIDEO_QUALITY_TABLE.put("352x288",   CamcorderProfile.QUALITY_CIF);
+        VIDEO_QUALITY_TABLE.put("320x240",   CamcorderProfile.QUALITY_QVGA);
+        VIDEO_QUALITY_TABLE.put("176x144",   CamcorderProfile.QUALITY_QCIF);
+    }
+
+
     public CameraSettings(Activity activity, Parameters parameters,
                           int cameraId, CameraInfo[] cameraInfo) {
         mContext = activity;
@@ -262,7 +283,7 @@
             String defaultQuality,Parameters parameters) {
         // When launching the camera app first time, we will set the video quality
         // to the first one (i.e. highest quality) in the supported list
-        List<String> supported = getSupportedVideoQuality(cameraId,parameters);
+        List<String> supported = getSupportedVideoQualities(cameraId,parameters);
         if (supported == null) {
             Log.e(TAG, "No supported video quality is found");
             return defaultQuality;
@@ -714,7 +735,7 @@
         }
 
         if (videoQuality != null) {
-            filterUnsupportedOptions(group, videoQuality, getSupportedVideoQuality(
+            filterUnsupportedOptions(group, videoQuality, getSupportedVideoQualities(
                    mCameraId,mParameters));
         }
 
@@ -1128,6 +1149,20 @@
         }
 
     }
+
+    public static ArrayList<String> getSupportedVideoQualities(int cameraId,Parameters parameters) {
+        ArrayList<String> supported = new ArrayList<String>();
+        List<String> temp = sizeListToStringList(parameters.getSupportedVideoSizes());
+        for (String videoSize : temp) {
+            if (VIDEO_QUALITY_TABLE.containsKey(videoSize)) {
+                int profile = VIDEO_QUALITY_TABLE.get(videoSize);
+                if (CamcorderProfile.hasProfile(cameraId, profile)) {
+                      supported.add(videoSize);
+                }
+            }
+        }
+        return supported;
+    }
     public static int getVideoDurationInMillis(String quality) {
         if (VIDEO_QUALITY_MMS.equals(quality)) {
             return MMS_VIDEO_DURATION * 1000;
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index ec99573..76c6a21 100644
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -2583,7 +2583,7 @@
     /** This can run on a background thread, so don't do UI updates here. Post any
              view updates to MainHandler or do it on onPreviewStarted() .  */
     private void startPreview() {
-        if (mPaused || mCameraDevice == null) {
+        if (mPaused || mCameraDevice == null || mParameters == null) {
             return;
         }
 
diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java
index 4e5b5ab..23f4042 100644
--- a/src/com/android/camera/VideoModule.java
+++ b/src/com/android/camera/VideoModule.java
@@ -768,11 +768,11 @@
         String videoQuality = mPreferences.getString(CameraSettings.KEY_VIDEO_QUALITY,
                         null);
         if (videoQuality == null) {
-             mParameters = mCameraDevice.getParameters();
+            mParameters = mCameraDevice.getParameters();
             String defaultQuality = mActivity.getResources().getString(
                     R.string.pref_video_quality_default);
             boolean hasProfile = CamcorderProfile.hasProfile(
-                     Integer.parseInt(defaultQuality));
+                     CameraSettings.VIDEO_QUALITY_TABLE.get(defaultQuality));
             if (hasProfile == true){
                 videoQuality = defaultQuality;
             } else {
@@ -782,7 +782,7 @@
             }
             mPreferences.edit().putString(CameraSettings.KEY_VIDEO_QUALITY, videoQuality);
         }
-        int quality = Integer.valueOf(videoQuality);
+        int quality = CameraSettings.VIDEO_QUALITY_TABLE.get(videoQuality);
 
         // Set video quality.
         Intent intent = mActivity.getIntent();
