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(); 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); Log.d("Searching for closest fps range from ",expectedFps);
int measure = Integer.MAX_VALUE; int measure = Integer.MAX_VALUE;
int[] closestRange = fpsRanges.get(0); int[] closestRange = fpsRanges.get(0);
@ -120,9 +120,20 @@ public abstract class AndroidCameraRecord implements AutoFocusCallback {
// Frame rate // Frame rate
if (Version.sdkStrictlyBelow(Version.API09_GINGERBREAD_23)) { 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 { } 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]); parameters.setPreviewFpsRange(range[0], range[1]);
} }