| Index: media/base/android/java/src/org/chromium/media/VideoCaptureFactory.java
|
| diff --git a/media/base/android/java/src/org/chromium/media/VideoCaptureFactory.java b/media/base/android/java/src/org/chromium/media/VideoCaptureFactory.java
|
| index 54186bf16cfb491d8385003e0d4b164e60f207e0..015031639f15ffcbfa4c997754ad873a0ae03d69 100644
|
| --- a/media/base/android/java/src/org/chromium/media/VideoCaptureFactory.java
|
| +++ b/media/base/android/java/src/org/chromium/media/VideoCaptureFactory.java
|
| @@ -21,39 +21,22 @@ import org.chromium.media.VideoCapture;
|
| * cameras have |id| above the standard ones. Video Capture objects allocated
|
| * via createVideoCapture() are explicitly owned by the caller.
|
| * ChromiumCameraInfo is an internal class with some static methods needed from
|
| - * the native side to enumerate devices and collect their names and info. It
|
| - * takes into account the mentioned special devices.
|
| + * the rest of the class to manipulate the |id|s of normal and special devices.
|
| **/
|
| @JNINamespace("media")
|
| @SuppressWarnings("deprecation")
|
| class VideoCaptureFactory {
|
|
|
| - static class CamParams {
|
| - final int mId;
|
| - final String mName;
|
| - final int mWidth;
|
| - final int mHeight;
|
| -
|
| - CamParams(int id, String name, int width, int height) {
|
| - mId = id;
|
| - mName = name;
|
| - mWidth = width;
|
| - mHeight = height;
|
| - }
|
| - }
|
| -
|
| + // Internal class to encapsulate camera device id manipulations.
|
| static class ChromiumCameraInfo {
|
| - private final int mId;
|
| - private final android.hardware.Camera.CameraInfo mCameraInfo;
|
| // Special devices have more cameras than usual. Those devices are
|
| // identified by model & device. Currently only the Tango is supported.
|
| // Note that these devices have no Camera.CameraInfo.
|
| private static final String[][] SPECIAL_DEVICE_LIST = {
|
| {"Peanut", "peanut"},
|
| };
|
| - private static final String TAG = "ChromiumCameraInfo";
|
| -
|
| private static int sNumberOfSystemCameras = -1;
|
| + private static final String TAG = "ChromiumCameraInfo";
|
|
|
| private static boolean isSpecialDevice() {
|
| for (String[] device : SPECIAL_DEVICE_LIST) {
|
| @@ -74,84 +57,28 @@ class VideoCaptureFactory {
|
| return id - sNumberOfSystemCameras;
|
| }
|
|
|
| - private ChromiumCameraInfo(int index) {
|
| - mId = index;
|
| - mCameraInfo = isSpecialCamera(index) ? null : getCameraInfo(mId);
|
| - }
|
| -
|
| - @CalledByNative("ChromiumCameraInfo")
|
| private static int getNumberOfCameras(Context appContext) {
|
| - // Camera.getNumberOfCammeras() will not fail without permission, but the
|
| - // following operation on camera will do. Without permission isn't fatal
|
| - // error in WebView, specially for those application which has no purpose
|
| - // to use camera, but happens to load page required it.
|
| - // So, we output a warning log and pretend system have no camera at all.
|
| + // getNumberOfCameras() would not fail due to lack of permission, but the
|
| + // following operations on camera would. "No permission" isn't a fatal
|
| + // error in WebView, specially for those applications which have no purpose
|
| + // to use a camera, but "load page" requires it. So, output a warning log
|
| + // and carry on pretending the system has no camera(s).
|
| if (sNumberOfSystemCameras == -1) {
|
| if (PackageManager.PERMISSION_GRANTED ==
|
| appContext.getPackageManager().checkPermission(
|
| "android.permission.CAMERA", appContext.getPackageName())) {
|
| - sNumberOfSystemCameras = android.hardware.Camera.getNumberOfCameras();
|
| + sNumberOfSystemCameras = VideoCaptureAndroid.getNumberOfCameras();
|
| } else {
|
| sNumberOfSystemCameras = 0;
|
| Log.w(TAG, "Missing android.permission.CAMERA permission, "
|
| - + "no system camera available.");
|
| + + "no system camera available.");
|
| }
|
| }
|
| - if (isSpecialDevice()) {
|
| - Log.d(TAG, "Special device: " + android.os.Build.MODEL);
|
| - return sNumberOfSystemCameras +
|
| - VideoCaptureTango.numberOfCameras();
|
| - } else {
|
| + if (!isSpecialDevice()) {
|
| return sNumberOfSystemCameras;
|
| }
|
| - }
|
| -
|
| - @CalledByNative("ChromiumCameraInfo")
|
| - private static ChromiumCameraInfo getAt(int index) {
|
| - return new ChromiumCameraInfo(index);
|
| - }
|
| -
|
| - @CalledByNative("ChromiumCameraInfo")
|
| - private int getId() {
|
| - return mId;
|
| - }
|
| -
|
| - @CalledByNative("ChromiumCameraInfo")
|
| - private String getDeviceName() {
|
| - if (isSpecialCamera(mId)) {
|
| - return VideoCaptureTango.getCamParams(toSpecialCameraId(mId)).mName;
|
| - } else {
|
| - if (mCameraInfo == null) {
|
| - return "";
|
| - }
|
| - Log.d(TAG, "Camera enumerated: " + (mCameraInfo.facing ==
|
| - android.hardware.Camera.CameraInfo.CAMERA_FACING_FRONT ? "front" :
|
| - "back"));
|
| - return "camera " + mId + ", facing " + (mCameraInfo.facing ==
|
| - android.hardware.Camera.CameraInfo.CAMERA_FACING_FRONT ? "front" :
|
| - "back");
|
| - }
|
| - }
|
| -
|
| - @CalledByNative("ChromiumCameraInfo")
|
| - private int getOrientation() {
|
| - if (isSpecialCamera(mId)) {
|
| - return android.hardware.Camera.CameraInfo.CAMERA_FACING_BACK;
|
| - } else {
|
| - return (mCameraInfo == null ? 0 : mCameraInfo.orientation);
|
| - }
|
| - }
|
| -
|
| - private android.hardware.Camera.CameraInfo getCameraInfo(int id) {
|
| - android.hardware.Camera.CameraInfo cameraInfo =
|
| - new android.hardware.Camera.CameraInfo();
|
| - try {
|
| - android.hardware.Camera.getCameraInfo(id, cameraInfo);
|
| - } catch (RuntimeException ex) {
|
| - Log.e(TAG, "getCameraInfo: android.hardware.Camera.getCameraInfo: " + ex);
|
| - return null;
|
| - }
|
| - return cameraInfo;
|
| + Log.d(TAG, "Special device: " + android.os.Build.MODEL);
|
| + return sNumberOfSystemCameras + VideoCaptureTango.numberOfCameras();
|
| }
|
| }
|
|
|
| @@ -169,6 +96,23 @@ class VideoCaptureFactory {
|
| }
|
|
|
| @CalledByNative
|
| + static int getNumberOfCameras(Context appContext) {
|
| + return ChromiumCameraInfo.getNumberOfCameras(appContext);
|
| + }
|
| +
|
| + @CalledByNative
|
| + static String getDeviceName(int id) {
|
| + return (ChromiumCameraInfo.isSpecialCamera(id)) ?
|
| + VideoCaptureTango.getName(ChromiumCameraInfo.toSpecialCameraId(id)) :
|
| + VideoCaptureAndroid.getName(id);
|
| + }
|
| +
|
| + @CalledByNative
|
| + static String getDeviceId(int id) {
|
| + return Integer.toString(id);
|
| + }
|
| +
|
| + @CalledByNative
|
| static VideoCapture.CaptureFormat[] getDeviceSupportedFormats(int id) {
|
| return ChromiumCameraInfo.isSpecialCamera(id) ?
|
| VideoCaptureTango.getDeviceSupportedFormats(
|
|
|