| Index: media/capture/video/android/java/src/org/chromium/media/VideoCaptureCamera.java
|
| diff --git a/media/capture/video/android/java/src/org/chromium/media/VideoCaptureCamera.java b/media/capture/video/android/java/src/org/chromium/media/VideoCaptureCamera.java
|
| index 112f87668d605c73b8dc4dc2f46140df49df18af..53607868696608f12fde692e6804415d119dcd2b 100644
|
| --- a/media/capture/video/android/java/src/org/chromium/media/VideoCaptureCamera.java
|
| +++ b/media/capture/video/android/java/src/org/chromium/media/VideoCaptureCamera.java
|
| @@ -296,6 +296,27 @@ public abstract class VideoCaptureCamera
|
| @Override
|
| public PhotoCapabilities getPhotoCapabilities() {
|
| final android.hardware.Camera.Parameters parameters = getCameraParameters(mCamera);
|
| + Log.d(TAG, " CAM params: " + parameters.flatten());
|
| +
|
| + // Before the Camera2 API there was no official way to retrieve the supported, if any, ISO
|
| + // values from |parameters|; some platforms had "iso-values", others "iso-mode-values" etc.
|
| + // Ignore them.
|
| + final int maxIso = 0;
|
| + final int currentIso = 0;
|
| + final int minIso = 0;
|
| +
|
| + List<android.hardware.Camera.Size> supportedSizes = parameters.getSupportedPictureSizes();
|
| + int minWidth = Integer.MAX_VALUE;
|
| + int minHeight = Integer.MAX_VALUE;
|
| + int maxWidth = 0;
|
| + int maxHeight = 0;
|
| + for (android.hardware.Camera.Size size : supportedSizes) {
|
| + if (size.width < minWidth) minWidth = size.width;
|
| + if (size.height < minHeight) minHeight = size.height;
|
| + if (size.width > maxWidth) maxWidth = size.width;
|
| + if (size.height > maxHeight) maxHeight = size.height;
|
| + }
|
| + final android.hardware.Camera.Size currentSize = parameters.getPreviewSize();
|
|
|
| int maxZoom = 0;
|
| int currentZoom = 0;
|
| @@ -316,7 +337,9 @@ public abstract class VideoCaptureCamera
|
| || focusMode.equals(android.hardware.Camera.Parameters.FOCUS_MODE_INFINITY)
|
| || focusMode.equals(android.hardware.Camera.Parameters.FOCUS_MODE_EDOF);
|
|
|
| - return new PhotoCapabilities(maxZoom, minZoom, currentZoom, !isFocusManual);
|
| + return new PhotoCapabilities(minIso, maxIso, currentIso, maxHeight, minHeight,
|
| + currentSize.height, maxWidth, minWidth, currentSize.width, maxZoom, minZoom,
|
| + currentZoom, !isFocusManual);
|
| }
|
|
|
| @Override
|
| @@ -338,7 +361,7 @@ public abstract class VideoCaptureCamera
|
| }
|
|
|
| @Override
|
| - public boolean takePhoto(final long callbackId) {
|
| + public boolean takePhoto(final long callbackId, int width, int height) {
|
| if (mCamera == null || !mIsRunning) {
|
| Log.e(TAG, "takePhoto: mCamera is null or is not running");
|
| return false;
|
| @@ -352,13 +375,41 @@ public abstract class VideoCaptureCamera
|
|
|
| android.hardware.Camera.Parameters parameters = getCameraParameters(mCamera);
|
| parameters.setRotation(getCameraRotation());
|
| - mCamera.setParameters(parameters);
|
| + final android.hardware.Camera.Size original_size = parameters.getPictureSize();
|
| +
|
| + List<android.hardware.Camera.Size> supportedSizes = parameters.getSupportedPictureSizes();
|
| + android.hardware.Camera.Size closestSize = null;
|
| + int minDiff = Integer.MAX_VALUE;
|
| + for (android.hardware.Camera.Size size : supportedSizes) {
|
| + final int diff = ((width > 0) ? Math.abs(size.width - width) : 0)
|
| + + ((height > 0) ? Math.abs(size.height - height) : 0);
|
| + if (diff < minDiff) {
|
| + minDiff = diff;
|
| + closestSize = size;
|
| + }
|
| + }
|
| + Log.d(TAG, "requested resolution: (%dx%d)", width, height);
|
| + if (minDiff != Integer.MAX_VALUE) {
|
| + Log.d(TAG, " matched (%dx%d)", closestSize.width, closestSize.height);
|
| + parameters.setPictureSize(closestSize.width, closestSize.height);
|
| + }
|
| +
|
| try {
|
| + mCamera.setParameters(parameters);
|
| mCamera.takePicture(null, null, null, new CrPictureCallback());
|
| } catch (RuntimeException ex) {
|
| Log.e(TAG, "takePicture ", ex);
|
| return false;
|
| }
|
| +
|
| + // Restore original parameters.
|
| + parameters.setPictureSize(original_size.width, original_size.height);
|
| + try {
|
| + mCamera.setParameters(parameters);
|
| + } catch (RuntimeException ex) {
|
| + Log.e(TAG, "takePicture ", ex);
|
| + return false;
|
| + }
|
| return true;
|
| }
|
|
|
|
|