]> sjero.net Git - linphone/commitdiff
Fix use of unsupported video capture frame rate.
authorGuillaume Beraudo <guillaume.beraudo@belledonne-communications.com>
Thu, 18 Aug 2011 07:36:31 +0000 (09:36 +0200)
committerGuillaume Beraudo <guillaume.beraudo@belledonne-communications.com>
Thu, 18 Aug 2011 07:36:31 +0000 (09:36 +0200)
video/AndroidCameraRecord.java

index fe787f3179c3e7d8350d75b5d7a4f544c4208ed4..9d4dd29fe290088e74d7f3937b2b516763c6fff1 100644 (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]);
                }