diff --git a/apps/TestingCamera/res/layout/main.xml b/apps/TestingCamera/res/layout/main.xml
index a83c5db..42dce9b 100644
--- a/apps/TestingCamera/res/layout/main.xml
+++ b/apps/TestingCamera/res/layout/main.xml
@@ -239,6 +239,20 @@
                 android:layout_height="wrap_content"
                 android:layout_weight="1" />
 
+            <TextView
+                android:id="@+id/video_frame_rate_label"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:text="@string/video_frame_rate_prompt"
+                android:textAppearance="?android:attr/textAppearanceSmall" />
+
+            <Spinner
+                android:id="@+id/video_frame_rate_spinner"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_weight="1" />
+
             <ToggleButton
                 android:id="@+id/start_record"
                 android:layout_width="fill_parent"
diff --git a/apps/TestingCamera/res/values/strings.xml b/apps/TestingCamera/res/values/strings.xml
index e86b350..41f107f 100644
--- a/apps/TestingCamera/res/values/strings.xml
+++ b/apps/TestingCamera/res/values/strings.xml
@@ -30,6 +30,7 @@
     <string name="record_off_label">Recording off</string>
     <string name="camcorder_profile_prompt">Camcorder profile</string>
     <string name="video_record_size_prompt">Video Record size</string>
+    <string name="video_frame_rate_prompt">Video Frame Rate</string>
     <string name="horiz_rule_color">#777777</string>
     <string name="show_info">Info</string>
     <string name="info_ok_button_label">OK</string>
diff --git a/apps/TestingCamera/src/com/android/testingcamera/TestingCamera.java b/apps/TestingCamera/src/com/android/testingcamera/TestingCamera.java
index dc58384..1ca0e87 100644
--- a/apps/TestingCamera/src/com/android/testingcamera/TestingCamera.java
+++ b/apps/TestingCamera/src/com/android/testingcamera/TestingCamera.java
@@ -78,6 +78,7 @@
     private Button  mTakePictureButton;
     private Spinner mCamcorderProfileSpinner;
     private Spinner mVideoRecordSizeSpinner;
+    private Spinner mVideoFrameRateSpinner;
     private ToggleButton mRecordToggle;
 
     private TextView mLogView;
@@ -100,6 +101,8 @@
     private int mCamcorderProfile = 0;
     private List<Camera.Size> mVideoRecordSizes;
     private int mVideoRecordSize = 0;
+    private List<Integer> mVideoFrameRates;
+    private int mVideoFrameRate = 0;
 
     private MediaRecorder mRecorder;
     private File mRecordingFile;
@@ -165,6 +168,9 @@
         mVideoRecordSizeSpinner = (Spinner) findViewById(R.id.video_record_size_spinner);
         mVideoRecordSizeSpinner.setOnItemSelectedListener(mVideoRecordSizeListener);
 
+        mVideoFrameRateSpinner = (Spinner) findViewById(R.id.video_frame_rate_spinner);
+        mVideoFrameRateSpinner.setOnItemSelectedListener(mVideoFrameRateListener);
+
         mRecordToggle = (ToggleButton) findViewById(R.id.start_record);
         mRecordToggle.setOnClickListener(mRecordToggleListener);
         mPreviewOnlyControls.add(mRecordToggle);
@@ -464,6 +470,21 @@
         }
     };
 
+    private AdapterView.OnItemSelectedListener mVideoFrameRateListener =
+                new AdapterView.OnItemSelectedListener() {
+        public void onItemSelected(AdapterView<?> parent,
+                        View view, int pos, long id) {
+            if (pos == mVideoFrameRate) return;
+
+            log("Setting video frame rate to " + ((TextView)view).getText());
+            mVideoFrameRate = pos;
+        }
+
+        public void onNothingSelected(AdapterView<?> parent) {
+
+        }
+    };
+
     private View.OnClickListener mRecordToggleListener =
             new View.OnClickListener() {
         public void onClick(View v) {
@@ -539,6 +560,7 @@
         updateSnapshotSizes(mParams);
         updateCamcorderProfile(mCameraId);
         updateVideoRecordSize(mCameraId);
+        updateVideoFrameRate(mCameraId);
 
         // Update parameters based on above updates
         mCamera.setParameters(mParams);
@@ -729,6 +751,29 @@
         log("Setting video record profile to " + nameArray[mVideoRecordSize]);
     }
 
+    private void updateVideoFrameRate(int cameraId) {
+        // Use preview framerates as video framerates
+        List<Integer> frameRates = mParams.getSupportedPreviewFrameRates();
+
+        List<String> frameRateStrings = new ArrayList<String>();
+        mVideoFrameRates = new ArrayList<Integer>();
+
+        frameRateStrings.add("Default");
+        mVideoFrameRates.add(0);
+
+        for (Integer frameRate : frameRates) {
+            frameRateStrings.add(frameRate.toString());
+            mVideoFrameRates.add(frameRate);
+        }
+        String[] nameArray = (String[])frameRateStrings.toArray(new String[0]);
+        mVideoFrameRateSpinner.setAdapter(
+                new ArrayAdapter<String>(
+                        this, R.layout.spinner_item, nameArray));
+
+        mVideoFrameRate = 0;
+        log("Setting frame rate to " + nameArray[mVideoFrameRate]);
+    }
+
     void resizePreview(int width, int height) {
         if (mPreviewHolder != null) {
             int viewHeight = mPreviewView.getHeight();
@@ -827,6 +872,9 @@
         if (videoRecordSize.width > 0 && videoRecordSize.height > 0) {
             mRecorder.setVideoSize(videoRecordSize.width, videoRecordSize.height);
         }
+        if (mVideoFrameRates.get(mVideoFrameRate) > 0) {
+            mRecorder.setVideoFrameRate(mVideoFrameRates.get(mVideoFrameRate));
+        }
         File outputFile = getOutputMediaFile(MEDIA_TYPE_VIDEO);
         log("File name:" + outputFile.toString());
         mRecorder.setOutputFile(outputFile.toString());
