Index: media/base/android/java/src/org/chromium/media/VideoCapture.java |
diff --git a/media/base/android/java/src/org/chromium/media/VideoCapture.java b/media/base/android/java/src/org/chromium/media/VideoCapture.java |
index 298986d99d4daaa309be63e3999eda6ba253812a..8634c0cc1b40d0d3a238007bbf0a3c73abd2bea4 100644 |
--- a/media/base/android/java/src/org/chromium/media/VideoCapture.java |
+++ b/media/base/android/java/src/org/chromium/media/VideoCapture.java |
@@ -122,19 +122,22 @@ public abstract class VideoCapture implements android.hardware.Camera.PreviewCal |
Log.e(TAG, "allocate: no fps range found"); |
return false; |
} |
- int frameRateInMs = frameRate * 1000; |
- // Use the first range as default. |
- int[] fpsMinMax = listFpsRange.get(0); |
- int newFrameRate = (fpsMinMax[0] + 999) / 1000; |
+ // Use the first range as the default chosen range. |
+ int[] chosenFpsRange = listFpsRange.get(0); |
+ int chosenFrameRate = (chosenFpsRange[0] + 999) / 1000; |
+ int fpsRangeSize = Integer.MAX_VALUE; |
+ // API fps ranges are scaled up x1000 to avoid floating point. |
+ int frameRateScaled = frameRate * 1000; |
for (int[] fpsRange : listFpsRange) { |
- if (fpsRange[0] <= frameRateInMs && frameRateInMs <= fpsRange[1]) { |
- fpsMinMax = fpsRange; |
- newFrameRate = frameRate; |
- break; |
+ if (fpsRange[0] <= frameRateScaled && frameRateScaled <= fpsRange[1] && |
+ (fpsRange[1] - fpsRange[0]) <= fpsRangeSize) { |
+ chosenFpsRange = fpsRange; |
+ chosenFrameRate = frameRate; |
+ fpsRangeSize = fpsRange[1] - fpsRange[0]; |
} |
} |
- frameRate = newFrameRate; |
- Log.d(TAG, "allocate: fps set to " + frameRate); |
+ Log.d(TAG, "allocate: fps set to " + chosenFrameRate + ", [" + |
+ chosenFpsRange[0] + "-" + chosenFpsRange[1] + "]"); |
// Calculate size. |
List<android.hardware.Camera.Size> listCameraSize = |
@@ -171,10 +174,10 @@ public abstract class VideoCapture implements android.hardware.Camera.PreviewCal |
Log.d(TAG, "Image stabilization not supported."); |
} |
- setCaptureParameters(matchedWidth, matchedHeight, frameRate, parameters); |
+ setCaptureParameters(matchedWidth, matchedHeight, chosenFrameRate, parameters); |
parameters.setPreviewSize(mCaptureFormat.mWidth, |
mCaptureFormat.mHeight); |
- parameters.setPreviewFpsRange(fpsMinMax[0], fpsMinMax[1]); |
+ parameters.setPreviewFpsRange(chosenFpsRange[0], chosenFpsRange[1]); |
parameters.setPreviewFormat(mCaptureFormat.mPixelFormat); |
try { |
mCamera.setParameters(parameters); |