Bug 1441585 - Set picture size to something valid. r?dminor
MozReview-Commit-ID: 13lZcfR9wlC
--- a/media/webrtc/trunk/webrtc/modules/video_capture/android/java/src/org/webrtc/videoengine/VideoCaptureAndroid.java
+++ b/media/webrtc/trunk/webrtc/modules/video_capture/android/java/src/org/webrtc/videoengine/VideoCaptureAndroid.java
@@ -192,19 +192,43 @@ public class VideoCaptureAndroid impleme
}
List<String> focusModes = parameters.getSupportedFocusModes();
if (focusModes.contains(android.hardware.Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) {
Log.d(TAG, "Enable continuous auto focus mode.");
parameters.setFocusMode(android.hardware.Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
}
- parameters.setPictureSize(width, height);
+ // (width,height) is a valid preview size. It might not be a valid picture
+ // size.
parameters.setPreviewSize(width, height);
+ List<Camera.Size> supportedPictureSizes =
+ parameters.getSupportedPictureSizes();
+ Camera.Size pictureSize = supportedPictureSizes.get(0);
+ for (Camera.Size size : supportedPictureSizes) {
+ if (size.width < width || size.height < height) {
+ // We want a picture size larger than the preview size
+ continue;
+ }
+ if (pictureSize.width < width || pictureSize.height < height) {
+ // The so-far chosen pictureSize is smaller than the preview size.
+ // `size` is a better fit.
+ pictureSize = size;
+ continue;
+ }
+ if (size.width <= pictureSize.width &&
+ size.height <= pictureSize.height) {
+ // Both the so-far chosen pictureSize and `size` are larger than the
+ // preview size, but `size` is closest, so it's preferred.
+ pictureSize = size;
+ }
+ }
+ parameters.setPictureSize(pictureSize.width, pictureSize.height);
+
// Check if requested fps range is supported by camera,
// otherwise calculate frame drop ratio.
List<int[]> supportedFpsRanges = parameters.getSupportedPreviewFpsRange();
frameDropRatio = Integer.MAX_VALUE;
for (int i = 0; i < supportedFpsRanges.size(); i++) {
int[] range = supportedFpsRanges.get(i);
if (range[Parameters.PREVIEW_FPS_MIN_INDEX] == min_mfps &&
range[Parameters.PREVIEW_FPS_MAX_INDEX] == max_mfps) {