From 6f3dcb65d6833d29405d5ae4a3153ea464306fdf Mon Sep 17 00:00:00 2001 From: Guillaume Beraudo Date: Thu, 18 Aug 2011 09:36:31 +0200 Subject: [PATCH] Fix use of unsupported video capture frame rate. --- .../core/video/AndroidCameraRecord.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/org/linphone/core/video/AndroidCameraRecord.java b/src/org/linphone/core/video/AndroidCameraRecord.java index fe787f317..9d4dd29fe 100644 --- a/src/org/linphone/core/video/AndroidCameraRecord.java +++ b/src/org/linphone/core/video/AndroidCameraRecord.java @@ -55,7 +55,7 @@ public abstract class AndroidCameraRecord implements AutoFocusCallback { return Collections.emptyList(); } - private int[] findClosestFpsRange(int expectedFps, List fpsRanges) { + private int[] findClosestEnclosingFpsRange(int expectedFps, List 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 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 supportedRanges = parameters.getSupportedPreviewFpsRange(); + int[] range=findClosestEnclosingFpsRange((int)(1000*params.fps), supportedRanges); parameters.setPreviewFpsRange(range[0], range[1]); }