Fix use of unsupported video capture frame rate.

This commit is contained in:
Guillaume Beraudo 2011-08-18 09:36:31 +02:00
parent 050a943723
commit 6f3dcb65d6

View file

@ -55,7 +55,7 @@ public abstract class AndroidCameraRecord implements AutoFocusCallback {
return Collections.emptyList();
}
private int[] findClosestFpsRange(int expectedFps, List<int[]> fpsRanges) {
private int[] findClosestEnclosingFpsRange(int expectedFps, List<int[]> fpsRanges) {
Log.d("Searching for closest fps range from ",expectedFps);
int measure = Integer.MAX_VALUE;
int[] closestRange = fpsRanges.get(0);
@ -120,9 +120,20 @@ public abstract class AndroidCameraRecord implements AutoFocusCallback {
// Frame rate
if (Version.sdkStrictlyBelow(Version.API09_GINGERBREAD_23)) {
parameters.setPreviewFrameRate(Math.round(params.fps));
// Select the supported fps just faster than the target rate
List<Integer> supportedFrameRates=parameters.getSupportedPreviewFrameRates();
if (supportedFrameRates != null && supportedFrameRates.size() > 0) {
Collections.sort(supportedFrameRates);
int selectedRate = -1;
for (Integer rate : supportedFrameRates) {
selectedRate=rate;
if (rate >= params.fps) break;
}
parameters.setPreviewFrameRate(selectedRate);
}
} else {
int[] range=findClosestFpsRange((int)(1000*params.fps), parameters.getSupportedPreviewFpsRange());
List<int[]> supportedRanges = parameters.getSupportedPreviewFpsRange();
int[] range=findClosestEnclosingFpsRange((int)(1000*params.fps), supportedRanges);
parameters.setPreviewFpsRange(range[0], range[1]);
}