diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java
index 66fe6d7c6dfa3a00edacc16fc2e65dec588cfb4c..24b9137fd3aec4ae2da692abcb2a870bf36f0042 100755
--- a/src/com/android/camera/CaptureModule.java
+++ b/src/com/android/camera/CaptureModule.java
@@ -407,7 +407,6 @@ public class CaptureModule implements CameraModule, PhotoController,
     private boolean mHighSpeedCapture = false;
     private boolean mHighSpeedRecordingMode = false; //HFR
     private int mHighSpeedCaptureRate;
-    private boolean mEisEnabled = false;
     private CaptureRequest.Builder mVideoRequestBuilder;
     private CaptureRequest.Builder mVideoPausePreviewRequestBuilder;
 
@@ -3660,7 +3659,13 @@ public class CaptureModule implements CameraModule, PhotoController,
         mVideoPausePreviewRequestBuilder.setTag(cameraId);
         mVideoPausePreviewRequestBuilder.addTarget(surface);
         mVideoPausePreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, mControlAFMode);
-        applyVideoCommentSettings(mVideoPausePreviewRequestBuilder, cameraId);
+        if (mHighSpeedCapture) {
+            mVideoRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,
+                    mHighSpeedFPSRange);
+        }
+        if (!mHighSpeedCapture || !((int)mHighSpeedFPSRange.getUpper() > NORMAL_SESSION_MAX_FPS)) {
+            applyVideoCommentSettings(mVideoPausePreviewRequestBuilder, cameraId);
+        }
     }
 
     private void applyVideoCommentSettings(CaptureRequest.Builder builder, int cameraId) {
@@ -3804,11 +3809,7 @@ public class CaptureModule implements CameraModule, PhotoController,
         Log.v(TAG, "pauseVideoRecording");
         mMediaRecorderPausing = true;
         mRecordingTotalTime += SystemClock.uptimeMillis() - mRecordingStartTime;
-        if (mEisEnabled) {
-            setEndOfStreamForEIS(false, false);
-        } else {
-            mMediaRecorder.pause();
-        }
+        setEndOfStream(false, false);
     }
 
     private void resumeVideoRecording() {
@@ -3816,7 +3817,7 @@ public class CaptureModule implements CameraModule, PhotoController,
         mMediaRecorderPausing = false;
         mRecordingStartTime = SystemClock.uptimeMillis();
         updateRecordingTime();
-        setEndOfStreamForEIS(true, false);
+        setEndOfStream(true, false);
         if (!ApiHelper.HAS_RESUME_SUPPORTED){
             mMediaRecorder.start();
         } else {
@@ -3829,15 +3830,19 @@ public class CaptureModule implements CameraModule, PhotoController,
         }
     }
 
-    private void setEndOfStreamForEIS(boolean isResume, boolean isStopRecord) {
-        if (!mEisEnabled) {
-            return;
-        }
+    private void setEndOfStream(boolean isResume, boolean isStopRecord) {
         try {
             if (isResume) {
                 mVideoRequestBuilder.set(CaptureModule.recording_end_stream, (byte) 0x00);
-                mCurrentSession.setRepeatingRequest(mVideoRequestBuilder.build(),
-                        mCaptureCallback, mCameraHandler);
+                if (mCurrentSession instanceof CameraConstrainedHighSpeedCaptureSession) {
+                    List requestList = CameraUtil.createHighSpeedRequestList(
+                            mVideoRequestBuilder.build(), getMainCameraId());
+                    mCurrentSession.setRepeatingBurst(requestList,
+                            mCaptureCallback, mCameraHandler);
+                } else {
+                    mCurrentSession.setRepeatingRequest(mVideoRequestBuilder.build(),
+                            mCaptureCallback, mCameraHandler);
+                }
             } else {
                 // is pause or stopRecord
                 if (!(mMediaRecorderPausing && mStopRecPending)) {
@@ -3847,14 +3852,28 @@ public class CaptureModule implements CameraModule, PhotoController,
                     builder.setTag(getMainCameraId());
                     addPreviewSurface(builder, null, getMainCameraId());
                     builder.set(CaptureModule.recording_end_stream, (byte) 0x01);
-                    mCurrentSession.capture(builder.build(), mCaptureCallback, mCameraHandler);
+                    if (mCurrentSession instanceof CameraConstrainedHighSpeedCaptureSession) {
+                        List requestList = CameraUtil.
+                                createHighSpeedRequestList(builder.build(), getMainCameraId());
+                        mCurrentSession.captureBurst(requestList, mCaptureCallback, mCameraHandler);
+                    } else {
+                        mCurrentSession.capture(builder.build(), mCaptureCallback, mCameraHandler);
+                    }
                 }
                 if (!isStopRecord) {
                     //is pause record
                     mMediaRecorder.pause();
                     if (mVideoPausePreviewRequestBuilder != null) {
-                        mCurrentSession.setRepeatingRequest(mVideoPausePreviewRequestBuilder.build(),
-                                mCaptureCallback, mCameraHandler);
+                        if (mCurrentSession instanceof CameraConstrainedHighSpeedCaptureSession) {
+                            List requestList = CameraUtil.createHighSpeedRequestList(
+                                    mVideoPausePreviewRequestBuilder.build(), getMainCameraId());
+                            mCurrentSession.setRepeatingBurst(requestList,
+                                    mCaptureCallback, mCameraHandler);
+                        } else {
+                            mCurrentSession.setRepeatingRequest(
+                                    mVideoPausePreviewRequestBuilder.build(),
+                                    mCaptureCallback, mCameraHandler);
+                        }
                     } else {
                         //if failed to set up preview builder, stop recording
                         stopRecordingVideo(getMainCameraId());
@@ -3863,7 +3882,7 @@ public class CaptureModule implements CameraModule, PhotoController,
             }
         } catch (CameraAccessException | IllegalArgumentException e) {
             if (e instanceof CameraAccessException) {
-                Log.w(TAG, "setEndOfStreamForEIS, Camera access failed");
+                Log.w(TAG, "setEndOfStream, Camera access failed");
             }
             if (e instanceof IllegalArgumentException) {
                 Log.w(TAG, "can not find vendor tag: org.quic.camera.recording.endOfStream");
@@ -3872,14 +3891,21 @@ public class CaptureModule implements CameraModule, PhotoController,
                 mMediaRecorder.pause();
                 try {
                     if (mVideoPausePreviewRequestBuilder != null) {
-                        mCurrentSession.setRepeatingRequest(mVideoPausePreviewRequestBuilder.build(),
-                                mCaptureCallback, mCameraHandler);
+                        if (mCurrentSession instanceof CameraConstrainedHighSpeedCaptureSession) {
+                            List requestList = CameraUtil.createHighSpeedRequestList(
+                                    mVideoPausePreviewRequestBuilder.build(), getMainCameraId());
+                            mCurrentSession.setRepeatingBurst(requestList,
+                                    mCaptureCallback, mCameraHandler);
+                        } else {
+                            mCurrentSession.setRepeatingRequest(mVideoPausePreviewRequestBuilder
+                                    .build(), mCaptureCallback, mCameraHandler);
+                        }
                     } else {
                         //if failed to set up preview builder, stop recording
                         stopRecordingVideo(getMainCameraId());
                     }
                 } catch (CameraAccessException exception) {
-                    Log.w(TAG, "setEndOfStreamForEIS, Camera access failed");
+                    Log.w(TAG, "setEndOfStream, Camera access failed");
                 }
             }
         }
@@ -3904,7 +3930,7 @@ public class CaptureModule implements CameraModule, PhotoController,
         boolean shouldAddToMediaStoreNow = false;
         // Stop recording
         checkAndPlayRecordSound(cameraId, false);
-        setEndOfStreamForEIS(false, true);
+        setEndOfStream(false, true);
         mFrameProcessor.setVideoOutputSurface(null);
         mFrameProcessor.onClose();
         closePreviewSession();
@@ -4490,8 +4516,7 @@ public class CaptureModule implements CameraModule, PhotoController,
         }
         String value = mSettingsManager.getValue(SettingsManager.KEY_EIS_VALUE);
         if (value != null) {
-            mEisEnabled = Boolean.parseBoolean(value);
-            byte byteValue = (byte) (mEisEnabled ? 0x01 : 0x00);
+            byte byteValue = (byte) (Boolean.parseBoolean(value) ? 0x01 : 0x00);
             try {
                 request.set(CaptureModule.eis_mode, byteValue);
             } catch (IllegalArgumentException e) {