diff options
18 files changed, 142 insertions, 189 deletions
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index 6cf137e..5bc69aa 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn @@ -136,7 +136,7 @@ android_library("chrome_java") { "//components/web_contents_delegate_android:web_contents_delegate_android_java", "//components/web_restrictions:web_restrictions_java", "//content/public/android:content_java", - "//media/base/android:media_java", + "//media/capture/video/android:media_java", "//media/midi:midi_java", "//net/android:net_java", "//printing:printing_java", diff --git a/content/public/android/BUILD.gn b/content/public/android/BUILD.gn index e726c46..67838f0 100644 --- a/content/public/android/BUILD.gn +++ b/content/public/android/BUILD.gn @@ -38,7 +38,7 @@ android_library("content_java") { "//device/usb:java", "//device/vibration:mojo_bindings_java", "//device/vibration/android:vibration_manager_android", - "//media/base/android:media_java", + "//media/capture/video/android:media_java", "//media/midi:midi_java", "//mojo/android:system_java", "//mojo/public/java:bindings", @@ -176,7 +176,7 @@ android_library("content_javatests") { "//content/shell/android:content_shell_test_java", "//device/vibration:mojo_bindings_java", "//device/vibration/android:vibration_manager_android", - "//media/base/android:media_java", + "//media/capture/video/android:media_java", "//mojo/android:system_java", "//mojo/public/interfaces/bindings/tests:test_interfaces_java", "//mojo/public/java:bindings", diff --git a/content/shell/android/BUILD.gn b/content/shell/android/BUILD.gn index 3c6af4d..6a20d79 100644 --- a/content/shell/android/BUILD.gn +++ b/content/shell/android/BUILD.gn @@ -45,7 +45,7 @@ android_library("content_shell_java") { ":content_shell_java_resources", "//base:base_java", "//content/public/android:content_java", - "//media/base/android:media_java", + "//media/capture/video/android:media_java", "//mojo/public/java:system", "//net/android:net_java", "//ui/android:ui_java", @@ -79,7 +79,7 @@ android_library("content_shell_apk_java") { ":content_shell_java", "//base:base_java", "//content/public/android:content_java", - "//media/base/android:media_java", + "//media/capture/video/android:media_java", "//net/android:net_java", "//ui/android:ui_java", ] @@ -109,7 +109,7 @@ android_apk("content_shell_apk") { ":libcontent_shell_content_view", "//base:base_java", "//content/public/android:content_java", - "//media/base/android:media_java", + "//media/capture/video/android:media_java", "//net/android:net_java", "//third_party/mesa:osmesa", "//ui/android:ui_java", diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn index 4aa5d41..4ad3c61 100644 --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn @@ -924,7 +924,7 @@ if (is_android) { deps += [ "//gpu:test_support", "//media/base/android", - "//media/base/android:media_java", + "//media/capture/video/android:media_java", "//testing/gmock", "//ui/android:ui_java", ] diff --git a/media/BUILD.gn b/media/BUILD.gn index b1686f4..813aa64 100644 --- a/media/BUILD.gn +++ b/media/BUILD.gn @@ -403,7 +403,8 @@ component("media") { deps += [ "//media/base/android", "//media/base/android:media_jni_headers", - "//media/base/android:video_capture_jni_headers", + "//media/capture/video/android:media_java", + "//media/capture/video/android:video_capture_jni_headers", ] # Only 64 bit builds are using android-21 NDK library, check common.gypi @@ -719,7 +720,6 @@ test("media_unittests") { "filters/decrypting_video_decoder_unittest.cc", ] deps += [ - "//media/base/android:media_java", "//media/base/android:unittests", "//ui/android:ui_java", ] diff --git a/media/base/BUILD.gn b/media/base/BUILD.gn index 1d1747c..9c4177f 100644 --- a/media/base/BUILD.gn +++ b/media/base/BUILD.gn @@ -249,9 +249,7 @@ source_set("base") { if (is_android) { public_deps = [ "//media/base/android", - "//media/base/android:media_java", "//media/base/android:media_jni_headers", - "//media/base/android:video_capture_jni_headers", ] allow_circular_includes_from += [ "//media/base/android" ] } diff --git a/media/base/android/BUILD.gn b/media/base/android/BUILD.gn index 10bfdfe..9e5b914 100644 --- a/media/base/android/BUILD.gn +++ b/media/base/android/BUILD.gn @@ -114,28 +114,3 @@ generate_jni("media_jni_headers") { ] jni_package = "media" } - -generate_jni("video_capture_jni_headers") { - sources = [ - "java/src/org/chromium/media/VideoCapture.java", - "java/src/org/chromium/media/VideoCaptureFactory.java", - ] - jni_package = "media" -} - -java_cpp_enum("media_java_enums_srcjar") { - sources = [ - "//media/capture/video/android/video_capture_device_android.h", - "//media/capture/video/video_capture_device.h", - ] -} - -android_library("media_java") { - deps = [ - "//base:base_java", - ] - - srcjar_deps = [ ":media_java_enums_srcjar" ] - - DEPRECATED_java_in_dir = "java/src" -} diff --git a/media/base/android/java/src/org/chromium/media/OWNERS b/media/base/android/java/src/org/chromium/media/OWNERS deleted file mode 100644 index 85e4365..0000000 --- a/media/base/android/java/src/org/chromium/media/OWNERS +++ /dev/null @@ -1,2 +0,0 @@ -# VideoCapture classes under Android -per-file VideoCapture*.java=mcasas@chromium.org diff --git a/media/capture/video/android/BUILD.gn b/media/capture/video/android/BUILD.gn new file mode 100644 index 0000000..5eab88e --- /dev/null +++ b/media/capture/video/android/BUILD.gn @@ -0,0 +1,36 @@ +# Copyright 2016 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//build/config/android/config.gni") +import("//build/config/android/rules.gni") +import("//build/config/arm.gni") +import("//build/config/ui.gni") +import("//media/media_options.gni") + +assert(is_android) + +generate_jni("video_capture_jni_headers") { + sources = [ + "java/src/org/chromium/media/VideoCapture.java", + "java/src/org/chromium/media/VideoCaptureFactory.java", + ] + jni_package = "media" +} + +java_cpp_enum("media_java_enums_srcjar") { + sources = [ + "../video_capture_device.h", + "video_capture_device_android.h", + ] +} + +android_library("media_java") { + deps = [ + "//base:base_java", + ] + + srcjar_deps = [ ":media_java_enums_srcjar" ] + + DEPRECATED_java_in_dir = "java/src" +} diff --git a/media/capture/video/android/java/src/org/chromium/media/OWNERS b/media/capture/video/android/java/src/org/chromium/media/OWNERS new file mode 100644 index 0000000..66e61fe --- /dev/null +++ b/media/capture/video/android/java/src/org/chromium/media/OWNERS @@ -0,0 +1,2 @@ +mcasas@chromium.org +qinmin@chromium.org diff --git a/media/base/android/java/src/org/chromium/media/VideoCapture.java b/media/capture/video/android/java/src/org/chromium/media/VideoCapture.java index bc8351f..2e2a289 100644 --- a/media/base/android/java/src/org/chromium/media/VideoCapture.java +++ b/media/capture/video/android/java/src/org/chromium/media/VideoCapture.java @@ -19,7 +19,6 @@ import org.chromium.base.annotations.JNINamespace; **/ @JNINamespace("media") public abstract class VideoCapture { - // The angle (0, 90, 180, 270) that the image needs to be rotated to show in // the display's native orientation. protected int mCameraNativeOrientation; @@ -33,9 +32,7 @@ public abstract class VideoCapture { // Native callback context variable. protected final long mNativeVideoCaptureDeviceAndroid; - VideoCapture(Context context, - int id, - long nativeVideoCaptureDeviceAndroid) { + VideoCapture(Context context, int id, long nativeVideoCaptureDeviceAndroid) { mContext = context; mId = id; mNativeVideoCaptureDeviceAndroid = nativeVideoCaptureDeviceAndroid; @@ -87,8 +84,8 @@ public abstract class VideoCapture { } protected final int getCameraRotation() { - int rotation = mInvertDeviceOrientationReadings - ? (360 - getDeviceRotation()) : getDeviceRotation(); + int rotation = mInvertDeviceOrientationReadings ? (360 - getDeviceRotation()) + : getDeviceRotation(); return (mCameraNativeOrientation + rotation) % 360; } @@ -96,7 +93,7 @@ public abstract class VideoCapture { if (mContext == null) return 0; final int orientation; WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); - switch(wm.getDefaultDisplay().getRotation()) { + switch (wm.getDefaultDisplay().getRotation()) { case Surface.ROTATION_90: orientation = 90; break; @@ -115,12 +112,9 @@ public abstract class VideoCapture { } // Method for VideoCapture implementations to call back native code. - public native void nativeOnFrameAvailable(long nativeVideoCaptureDeviceAndroid, - byte[] data, - int length, - int rotation); + public native void nativeOnFrameAvailable( + long nativeVideoCaptureDeviceAndroid, byte[] data, int length, int rotation); // Method for VideoCapture implementations to signal an asynchronous error. - public native void nativeOnError(long nativeVideoCaptureDeviceAndroid, - String message); + public native void nativeOnError(long nativeVideoCaptureDeviceAndroid, String message); } diff --git a/media/base/android/java/src/org/chromium/media/VideoCaptureAndroid.java b/media/capture/video/android/java/src/org/chromium/media/VideoCaptureAndroid.java index 35ec09f..ce384d1 100644 --- a/media/base/android/java/src/org/chromium/media/VideoCaptureAndroid.java +++ b/media/capture/video/android/java/src/org/chromium/media/VideoCaptureAndroid.java @@ -20,18 +20,14 @@ import java.util.List; **/ @SuppressWarnings("deprecation") public class VideoCaptureAndroid extends VideoCaptureCamera { - // Some devices don't support YV12 format correctly, even with JELLY_BEAN or // newer OS. To work around the issues on those devices, we have to request // NV21. This is supposed to be a temporary hack. private static class BuggyDeviceHack { private static final String[] COLORSPACE_BUGGY_DEVICE_LIST = { - "SAMSUNG-SGH-I747", - "ODROID-U2", - // See https://crbug.com/577435 for more info. - "XT1092", - "XT1095", - "XT1096", + "SAMSUNG-SGH-I747", "ODROID-U2", + // See https://crbug.com/577435 for more info. + "XT1092", "XT1095", "XT1096", }; static int getImageFormat() { @@ -63,8 +59,10 @@ public class VideoCaptureAndroid extends VideoCaptureCamera { android.hardware.Camera.CameraInfo cameraInfo = VideoCaptureCamera.getCameraInfo(id); if (cameraInfo == null) return null; - return "camera " + id + ", facing " + (cameraInfo.facing - == android.hardware.Camera.CameraInfo.CAMERA_FACING_FRONT ? "front" : "back"); + return "camera " + id + ", facing " + + (cameraInfo.facing == android.hardware.Camera.CameraInfo.CAMERA_FACING_FRONT + ? "front" + : "back"); } static VideoCaptureFormat[] getDeviceSupportedFormats(int id) { @@ -117,10 +115,8 @@ public class VideoCaptureAndroid extends VideoCaptureCamera { supportedSizes.add(camera.new Size(0, 0)); } for (android.hardware.Camera.Size size : supportedSizes) { - formatList.add(new VideoCaptureFormat(size.width, - size.height, - (fpsRange[1] + 999) / 1000, - pixelFormat)); + formatList.add(new VideoCaptureFormat( + size.width, size.height, (fpsRange[1] + 999) / 1000, pixelFormat)); } } } @@ -128,20 +124,15 @@ public class VideoCaptureAndroid extends VideoCaptureCamera { return formatList.toArray(new VideoCaptureFormat[formatList.size()]); } - VideoCaptureAndroid(Context context, - int id, - long nativeVideoCaptureDeviceAndroid) { + VideoCaptureAndroid(Context context, int id, long nativeVideoCaptureDeviceAndroid) { super(context, id, nativeVideoCaptureDeviceAndroid); } @Override - protected void setCaptureParameters( - int width, - int height, - int frameRate, + protected void setCaptureParameters(int width, int height, int frameRate, android.hardware.Camera.Parameters cameraParameters) { - mCaptureFormat = new VideoCaptureFormat( - width, height, frameRate, BuggyDeviceHack.getImageFormat()); + mCaptureFormat = + new VideoCaptureFormat(width, height, frameRate, BuggyDeviceHack.getImageFormat()); } @Override @@ -167,8 +158,8 @@ public class VideoCaptureAndroid extends VideoCaptureCamera { return; } if (data.length == mExpectedFrameSize) { - nativeOnFrameAvailable(mNativeVideoCaptureDeviceAndroid, - data, mExpectedFrameSize, getCameraRotation()); + nativeOnFrameAvailable(mNativeVideoCaptureDeviceAndroid, data, mExpectedFrameSize, + getCameraRotation()); } } finally { mPreviewBufferLock.unlock(); diff --git a/media/base/android/java/src/org/chromium/media/VideoCaptureCamera.java b/media/capture/video/android/java/src/org/chromium/media/VideoCaptureCamera.java index 9e10c68..afe58d3 100644 --- a/media/base/android/java/src/org/chromium/media/VideoCaptureCamera.java +++ b/media/capture/video/android/java/src/org/chromium/media/VideoCaptureCamera.java @@ -24,11 +24,10 @@ import java.util.concurrent.locks.ReentrantLock; **/ @JNINamespace("media") @SuppressWarnings("deprecation") -//TODO: is this class only used on ICS MR1 (or some later version) and above? +// TODO: is this class only used on ICS MR1 (or some later version) and above? @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) -public abstract class VideoCaptureCamera extends VideoCapture - implements android.hardware.Camera.PreviewCallback { - +public abstract class VideoCaptureCamera + extends VideoCapture implements android.hardware.Camera.PreviewCallback { protected android.hardware.Camera mCamera; // Lock to mutually exclude execution of OnPreviewFrame() and {start/stop}Capture(). protected ReentrantLock mPreviewBufferLock = new ReentrantLock(); @@ -42,8 +41,7 @@ public abstract class VideoCaptureCamera extends VideoCapture private static final String TAG = "cr.media"; protected static android.hardware.Camera.CameraInfo getCameraInfo(int id) { - android.hardware.Camera.CameraInfo cameraInfo = - new android.hardware.Camera.CameraInfo(); + android.hardware.Camera.CameraInfo cameraInfo = new android.hardware.Camera.CameraInfo(); try { android.hardware.Camera.getCameraInfo(id, cameraInfo); } catch (RuntimeException ex) { @@ -66,9 +64,7 @@ public abstract class VideoCaptureCamera extends VideoCapture return parameters; } - VideoCaptureCamera(Context context, - int id, - long nativeVideoCaptureDeviceAndroid) { + VideoCaptureCamera(Context context, int id, long nativeVideoCaptureDeviceAndroid) { super(context, id, nativeVideoCaptureDeviceAndroid); } @@ -113,8 +109,9 @@ public abstract class VideoCaptureCamera extends VideoCapture // Use the first range as the default chosen range. int[] chosenFpsRange = listFpsRange.get(0); int frameRateNearest = Math.abs(frameRateScaled - chosenFpsRange[0]) - < Math.abs(frameRateScaled - chosenFpsRange[1]) - ? chosenFpsRange[0] : chosenFpsRange[1]; + < Math.abs(frameRateScaled - chosenFpsRange[1]) + ? chosenFpsRange[0] + : chosenFpsRange[1]; int chosenFrameRate = (frameRateNearest + 999) / 1000; int fpsRangeSize = Integer.MAX_VALUE; for (int[] fpsRange : listFpsRange) { @@ -125,18 +122,16 @@ public abstract class VideoCaptureCamera extends VideoCapture fpsRangeSize = fpsRange[1] - fpsRange[0]; } } - Log.d(TAG, "allocate: fps set to %d, [%d-%d]", chosenFrameRate, - chosenFpsRange[0], chosenFpsRange[1]); + Log.d(TAG, "allocate: fps set to %d, [%d-%d]", chosenFrameRate, chosenFpsRange[0], + chosenFpsRange[1]); // Calculate size. - List<android.hardware.Camera.Size> listCameraSize = - parameters.getSupportedPreviewSizes(); + List<android.hardware.Camera.Size> listCameraSize = parameters.getSupportedPreviewSizes(); int minDiff = Integer.MAX_VALUE; int matchedWidth = width; int matchedHeight = height; for (android.hardware.Camera.Size size : listCameraSize) { - int diff = Math.abs(size.width - width) - + Math.abs(size.height - height); + int diff = Math.abs(size.width - width) + Math.abs(size.height - height); Log.d(TAG, "allocate: supported (%d, %d), diff=%d", size.width, size.height, diff); // TODO(wjia): Remove this hack (forcing width to be multiple // of 32) by supporting stride in video frame buffer. @@ -156,14 +151,14 @@ public abstract class VideoCaptureCamera extends VideoCapture if (parameters.isVideoStabilizationSupported()) { Log.d(TAG, "Image stabilization supported, currently: " - + parameters.getVideoStabilization() + ", setting it."); + + parameters.getVideoStabilization() + ", setting it."); parameters.setVideoStabilization(true); } else { Log.d(TAG, "Image stabilization not supported."); } if (parameters.getSupportedFocusModes().contains( - android.hardware.Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) { + android.hardware.Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) { parameters.setFocusMode(android.hardware.Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO); } else { Log.d(TAG, "Continuous focus mode not supported."); @@ -188,15 +183,15 @@ public abstract class VideoCaptureCamera extends VideoCapture GLES20.glGenTextures(1, mGlTextures, 0); GLES20.glBindTexture(GL_TEXTURE_EXTERNAL_OES, mGlTextures[0]); // No mip-mapping with camera source. - GLES20.glTexParameterf(GL_TEXTURE_EXTERNAL_OES, - GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); - GLES20.glTexParameterf(GL_TEXTURE_EXTERNAL_OES, - GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); + GLES20.glTexParameterf( + GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); + GLES20.glTexParameterf( + GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); // Clamp to edge is only option. - GLES20.glTexParameteri(GL_TEXTURE_EXTERNAL_OES, - GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); - GLES20.glTexParameteri(GL_TEXTURE_EXTERNAL_OES, - GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); + GLES20.glTexParameteri( + GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); + GLES20.glTexParameteri( + GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); mSurfaceTexture = new SurfaceTexture(mGlTextures[0]); mSurfaceTexture.setOnFrameAvailableListener(null); @@ -282,10 +277,7 @@ public abstract class VideoCaptureCamera extends VideoCapture // Local hook to allow derived classes to fill capture format and modify // camera parameters as they see fit. - abstract void setCaptureParameters( - int width, - int height, - int frameRate, + abstract void setCaptureParameters(int width, int height, int frameRate, android.hardware.Camera.Parameters cameraParameters); // Local method to be overriden with the particular setPreviewCallback to be diff --git a/media/base/android/java/src/org/chromium/media/VideoCaptureCamera2.java b/media/capture/video/android/java/src/org/chromium/media/VideoCaptureCamera2.java index 0c66ede..5851027 100644 --- a/media/base/android/java/src/org/chromium/media/VideoCaptureCamera2.java +++ b/media/capture/video/android/java/src/org/chromium/media/VideoCaptureCamera2.java @@ -40,7 +40,6 @@ import java.util.List; @JNINamespace("media") @TargetApi(Build.VERSION_CODES.LOLLIPOP) public class VideoCaptureCamera2 extends VideoCapture { - // Inner class to extend a CameraDevice state change listener. private class CrStateListener extends CameraDevice.StateCallback { @Override @@ -49,8 +48,7 @@ public class VideoCaptureCamera2 extends VideoCapture { changeCameraStateAndNotify(CameraState.CONFIGURING); if (!createCaptureObjects()) { changeCameraStateAndNotify(CameraState.STOPPED); - nativeOnError(mNativeVideoCaptureDeviceAndroid, - "Error configuring camera"); + nativeOnError(mNativeVideoCaptureDeviceAndroid, "Error configuring camera"); } } @@ -67,7 +65,7 @@ public class VideoCaptureCamera2 extends VideoCapture { mCameraDevice = null; changeCameraStateAndNotify(CameraState.STOPPED); nativeOnError(mNativeVideoCaptureDeviceAndroid, - "Camera device error " + Integer.toString(error)); + "Camera device error " + Integer.toString(error)); } }; @@ -86,8 +84,7 @@ public class VideoCaptureCamera2 extends VideoCapture { // TODO(mcasas): When signalling error, C++ will tear us down. Is there need for // cleanup? changeCameraStateAndNotify(CameraState.STOPPED); - nativeOnError(mNativeVideoCaptureDeviceAndroid, - "Camera session configuration error"); + nativeOnError(mNativeVideoCaptureDeviceAndroid, "Camera session configuration error"); } }; @@ -100,10 +97,9 @@ public class VideoCaptureCamera2 extends VideoCapture { try { image = reader.acquireLatestImage(); if (image == null) return; - if (image.getFormat() != ImageFormat.YUV_420_888 - || image.getPlanes().length != 3) { - Log.e(TAG, "Unexpected image format: %d or #planes: %d", - image.getFormat(), image.getPlanes().length); + if (image.getFormat() != ImageFormat.YUV_420_888 || image.getPlanes().length != 3) { + Log.e(TAG, "Unexpected image format: %d or #planes: %d", image.getFormat(), + image.getPlanes().length); return; } @@ -114,10 +110,8 @@ public class VideoCaptureCamera2 extends VideoCapture { + "x" + image.getHeight()); } readImageIntoBuffer(image, mCapturedData); - nativeOnFrameAvailable(mNativeVideoCaptureDeviceAndroid, - mCapturedData, - mCapturedData.length, - getCameraRotation()); + nativeOnFrameAvailable(mNativeVideoCaptureDeviceAndroid, mCapturedData, + mCapturedData.length, getCameraRotation()); } catch (IllegalStateException ex) { Log.e(TAG, "acquireLatestImage():" + ex); return; @@ -139,7 +133,7 @@ public class VideoCaptureCamera2 extends VideoCapture { private static final double kNanoSecondsToFps = 1.0E-9; private static final String TAG = "cr.media"; - private static enum CameraState {OPENING, CONFIGURING, STARTED, STOPPED} + private static enum CameraState { OPENING, CONFIGURING, STARTED, STOPPED } private CameraState mCameraState = CameraState.STOPPED; private final Object mCameraStateLock = new Object(); @@ -163,15 +157,12 @@ public class VideoCaptureCamera2 extends VideoCapture { // readback take place on its own thread. final int maxImages = 2; mImageReader = ImageReader.newInstance(mCaptureFormat.getWidth(), - mCaptureFormat.getHeight(), - mCaptureFormat.getPixelFormat(), - maxImages); + mCaptureFormat.getHeight(), mCaptureFormat.getPixelFormat(), maxImages); HandlerThread thread = new HandlerThread("CameraPreview"); thread.start(); final Handler backgroundHandler = new Handler(thread.getLooper()); final CrImageReaderListener imageReaderListener = new CrImageReaderListener(); - mImageReader.setOnImageAvailableListener(imageReaderListener, - backgroundHandler); + mImageReader.setOnImageAvailableListener(imageReaderListener, backgroundHandler); // The Preview template specifically means "high frame rate is given // priority over the highest-quality post-processing". @@ -195,13 +186,12 @@ public class VideoCaptureCamera2 extends VideoCapture { mPreviewBuilder.addTarget(mImageReader.getSurface()); // A series of configuration options in the PreviewBuilder - mPreviewBuilder.set(CaptureRequest.CONTROL_MODE, - CameraMetadata.CONTROL_MODE_AUTO); - mPreviewBuilder.set(CaptureRequest.NOISE_REDUCTION_MODE, - CameraMetadata.NOISE_REDUCTION_MODE_FAST); + mPreviewBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO); + mPreviewBuilder.set( + CaptureRequest.NOISE_REDUCTION_MODE, CameraMetadata.NOISE_REDUCTION_MODE_FAST); mPreviewBuilder.set(CaptureRequest.EDGE_MODE, CameraMetadata.EDGE_MODE_FAST); mPreviewBuilder.set(CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE, - CameraMetadata.CONTROL_VIDEO_STABILIZATION_MODE_ON); + CameraMetadata.CONTROL_VIDEO_STABILIZATION_MODE_ON); // SENSOR_EXPOSURE_TIME ? List<Surface> surfaceList = new ArrayList<Surface>(1); @@ -318,8 +308,8 @@ public class VideoCaptureCamera2 extends VideoCapture { return CaptureApiType.API_TYPE_UNKNOWN; } - final int supportedHWLevel = cameraCharacteristics.get( - CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL); + final int supportedHWLevel = + cameraCharacteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL); switch (supportedHWLevel) { case CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY: return CaptureApiType.API2_LEGACY; @@ -346,8 +336,8 @@ public class VideoCaptureCamera2 extends VideoCapture { getCameraCharacteristics(appContext, id); if (cameraCharacteristics == null) return null; - final int[] capabilities = cameraCharacteristics.get( - CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES); + final int[] capabilities = + cameraCharacteristics.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES); // Per-format frame rate via getOutputMinFrameDuration() is only available if the // property REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR is set. boolean minFrameDurationAvailable = false; @@ -384,9 +374,7 @@ public class VideoCaptureCamera2 extends VideoCapture { return formatList.toArray(new VideoCaptureFormat[formatList.size()]); } - VideoCaptureCamera2(Context context, - int id, - long nativeVideoCaptureDeviceAndroid) { + VideoCaptureCamera2(Context context, int id, long nativeVideoCaptureDeviceAndroid) { super(context, id, nativeVideoCaptureDeviceAndroid); } @@ -435,7 +423,7 @@ public class VideoCaptureCamera2 extends VideoCapture { // but NOT for N7 with a dev Build. Figure out which one to support. mInvertDeviceOrientationReadings = cameraCharacteristics.get(CameraCharacteristics.LENS_FACING) - == CameraCharacteristics.LENS_FACING_BACK; + == CameraCharacteristics.LENS_FACING_BACK; return true; } diff --git a/media/base/android/java/src/org/chromium/media/VideoCaptureFactory.java b/media/capture/video/android/java/src/org/chromium/media/VideoCaptureFactory.java index 7c70c9d..c88f9f7 100644 --- a/media/base/android/java/src/org/chromium/media/VideoCaptureFactory.java +++ b/media/capture/video/android/java/src/org/chromium/media/VideoCaptureFactory.java @@ -25,14 +25,13 @@ import org.chromium.base.annotations.JNINamespace; @JNINamespace("media") @SuppressWarnings("deprecation") class VideoCaptureFactory { - // Internal class to encapsulate camera device id manipulations. static class ChromiumCameraInfo { // 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"}, + {"Peanut", "peanut"}, }; private static int sNumberOfSystemCameras = -1; private static final String TAG = "cr.media"; @@ -71,11 +70,10 @@ class VideoCaptureFactory { != PackageManager.PERMISSION_GRANTED) { sNumberOfSystemCameras = 0; Log.w(TAG, "Missing android.permission.CAMERA permission, " - + "no system camera available."); + + "no system camera available."); } else { if (isLReleaseOrLater()) { - sNumberOfSystemCameras = - VideoCaptureCamera2.getNumberOfCameras(appContext); + sNumberOfSystemCameras = VideoCaptureCamera2.getNumberOfCameras(appContext); } else { sNumberOfSystemCameras = VideoCaptureAndroid.getNumberOfCameras(); if (isSpecialDevice()) { @@ -98,18 +96,13 @@ class VideoCaptureFactory { static VideoCapture createVideoCapture( Context context, int id, long nativeVideoCaptureDeviceAndroid) { if (isLReleaseOrLater() && !VideoCaptureCamera2.isLegacyDevice(context, id)) { - return new VideoCaptureCamera2(context, - id, - nativeVideoCaptureDeviceAndroid); + return new VideoCaptureCamera2(context, id, nativeVideoCaptureDeviceAndroid); } if (!ChromiumCameraInfo.isSpecialCamera(id)) { - return new VideoCaptureAndroid(context, - id, - nativeVideoCaptureDeviceAndroid); + return new VideoCaptureAndroid(context, id, nativeVideoCaptureDeviceAndroid); } - return new VideoCaptureTango(context, - ChromiumCameraInfo.toSpecialCameraId(id), - nativeVideoCaptureDeviceAndroid); + return new VideoCaptureTango( + context, ChromiumCameraInfo.toSpecialCameraId(id), nativeVideoCaptureDeviceAndroid); } @CalledByNative @@ -122,8 +115,7 @@ class VideoCaptureFactory { if (isLReleaseOrLater()) { return VideoCaptureCamera2.getCaptureApiType(id, appContext); } else if (ChromiumCameraInfo.isSpecialCamera(id)) { - return VideoCaptureTango.getCaptureApiType( - ChromiumCameraInfo.toSpecialCameraId(id)); + return VideoCaptureTango.getCaptureApiType(ChromiumCameraInfo.toSpecialCameraId(id)); } else { return VideoCaptureAndroid.getCaptureApiType(id); } @@ -146,7 +138,7 @@ class VideoCaptureFactory { } return ChromiumCameraInfo.isSpecialCamera(id) ? VideoCaptureTango.getDeviceSupportedFormats( - ChromiumCameraInfo.toSpecialCameraId(id)) + ChromiumCameraInfo.toSpecialCameraId(id)) : VideoCaptureAndroid.getDeviceSupportedFormats(id); } diff --git a/media/base/android/java/src/org/chromium/media/VideoCaptureFormat.java b/media/capture/video/android/java/src/org/chromium/media/VideoCaptureFormat.java index 6eb3f78..a875843 100644 --- a/media/base/android/java/src/org/chromium/media/VideoCaptureFormat.java +++ b/media/capture/video/android/java/src/org/chromium/media/VideoCaptureFormat.java @@ -10,8 +10,7 @@ class VideoCaptureFormat { final int mFramerate; final int mPixelFormat; - public VideoCaptureFormat( - int width, int height, int framerate, int pixelformat) { + public VideoCaptureFormat(int width, int height, int framerate, int pixelformat) { mWidth = width; mHeight = height; mFramerate = framerate; diff --git a/media/base/android/java/src/org/chromium/media/VideoCaptureTango.java b/media/capture/video/android/java/src/org/chromium/media/VideoCaptureTango.java index c85cf0f..b48539e 100644 --- a/media/base/android/java/src/org/chromium/media/VideoCaptureTango.java +++ b/media/capture/video/android/java/src/org/chromium/media/VideoCaptureTango.java @@ -22,7 +22,6 @@ import java.util.Arrays; **/ @SuppressWarnings("deprecation") public class VideoCaptureTango extends VideoCaptureCamera { - private static class CamParams { final int mId; final String mName; @@ -46,7 +45,7 @@ public class VideoCaptureTango extends VideoCaptureCamera { private static final CamParams CAM_PARAMS[] = { new CamParams(DEPTH_CAMERA_ID, "depth", 320, 240), new CamParams(FISHEYE_CAMERA_ID, "fisheye", 640, 480), - new CamParams(FOURMP_CAMERA_ID, "4MP", 1280, 720) }; + new CamParams(FOURMP_CAMERA_ID, "4MP", 1280, 720)}; // SuperFrame size definitions. Note that total size is the amount of lines // multiplied by 3/2 due to Chroma components following. @@ -55,9 +54,9 @@ public class VideoCaptureTango extends VideoCaptureCamera { private static final int SF_FULL_HEIGHT = SF_HEIGHT * 3 / 2; private static final int SF_LINES_HEADER = 16; private static final int SF_LINES_FISHEYE = 240; - private static final int SF_LINES_RESERVED = 80; // Spec says 96. + private static final int SF_LINES_RESERVED = 80; // Spec says 96. private static final int SF_LINES_DEPTH = 60; - private static final int SF_LINES_DEPTH_PADDED = 112; // Spec says 96. + private static final int SF_LINES_DEPTH_PADDED = 112; // Spec says 96. private static final int SF_LINES_BIGIMAGE = 720; private static final int SF_OFFSET_4MP_CHROMA = 112; @@ -92,24 +91,17 @@ public class VideoCaptureTango extends VideoCaptureCamera { return formatList.toArray(new VideoCaptureFormat[formatList.size()]); } - VideoCaptureTango(Context context, - int id, - long nativeVideoCaptureDeviceAndroid) { + VideoCaptureTango(Context context, int id, long nativeVideoCaptureDeviceAndroid) { // All Tango cameras are like the back facing one for the generic VideoCapture code. super(context, 0, nativeVideoCaptureDeviceAndroid); mTangoCameraId = id; } @Override - protected void setCaptureParameters( - int width, - int height, - int frameRate, + protected void setCaptureParameters(int width, int height, int frameRate, android.hardware.Camera.Parameters cameraParameters) { mCaptureFormat = new VideoCaptureFormat(CAM_PARAMS[mTangoCameraId].mWidth, - CAM_PARAMS[mTangoCameraId].mHeight, - frameRate, - ImageFormat.YV12); + CAM_PARAMS[mTangoCameraId].mHeight, frameRate, ImageFormat.YV12); // Connect Tango SuperFrame mode. Available sf modes are "all", // "big-rgb", "small-rgb", "depth", "ir". cameraParameters.set("sf-mode", "all"); @@ -117,8 +109,8 @@ public class VideoCaptureTango extends VideoCaptureCamera { @Override protected void allocateBuffers() { - mFrameBuffer = ByteBuffer.allocateDirect( - mCaptureFormat.mWidth * mCaptureFormat.mHeight * 3 / 2); + mFrameBuffer = + ByteBuffer.allocateDirect(mCaptureFormat.mWidth * mCaptureFormat.mHeight * 3 / 2); // Prefill Chroma to their zero-equivalent for the cameras that only // provide Luma component. Arrays.fill(mFrameBuffer.array(), CHROMA_ZERO_LEVEL); @@ -160,8 +152,8 @@ public class VideoCaptureTango extends VideoCaptureCamera { // them explicitly since they're filled to 128 on creation. ByteBuffer.wrap(data, startY, sizeY).get(mFrameBuffer.array(), 0, sizeY); } else if (mTangoCameraId == FOURMP_CAMERA_ID) { - int startY = SF_WIDTH * (SF_LINES_HEADER + SF_LINES_FISHEYE - + SF_LINES_RESERVED + SF_LINES_DEPTH_PADDED); + int startY = SF_WIDTH * (SF_LINES_HEADER + SF_LINES_FISHEYE + SF_LINES_RESERVED + + SF_LINES_DEPTH_PADDED); int sizeY = SF_WIDTH * SF_LINES_BIGIMAGE; // The spec is completely inaccurate on the location, sizes @@ -174,21 +166,17 @@ public class VideoCaptureTango extends VideoCaptureCamera { // Equivalent to the following |for| loop but much faster: // for (int i = START; i < START + SIZE; ++i) // mFrameBuffer.put(data[i]); - ByteBuffer.wrap(data, startY, sizeY) - .get(mFrameBuffer.array(), 0, sizeY); - ByteBuffer.wrap(data, startU, sizeU) - .get(mFrameBuffer.array(), sizeY, sizeU); + ByteBuffer.wrap(data, startY, sizeY).get(mFrameBuffer.array(), 0, sizeY); + ByteBuffer.wrap(data, startU, sizeU).get(mFrameBuffer.array(), sizeY, sizeU); ByteBuffer.wrap(data, startV, sizeV) - .get(mFrameBuffer.array(), sizeY + sizeU, sizeV); + .get(mFrameBuffer.array(), sizeY + sizeU, sizeV); } else { Log.e(TAG, "Unknown camera, #id: %d", mTangoCameraId); return; } - mFrameBuffer.rewind(); // Important! - nativeOnFrameAvailable(mNativeVideoCaptureDeviceAndroid, - mFrameBuffer.array(), - mFrameBuffer.capacity(), - getCameraRotation()); + mFrameBuffer.rewind(); // Important! + nativeOnFrameAvailable(mNativeVideoCaptureDeviceAndroid, mFrameBuffer.array(), + mFrameBuffer.capacity(), getCameraRotation()); } } finally { mPreviewBufferLock.unlock(); diff --git a/media/media.gyp b/media/media.gyp index 638f9e8..79f97b4 100644 --- a/media/media.gyp +++ b/media/media.gyp @@ -1866,8 +1866,8 @@ 'target_name': 'video_capture_android_jni_headers', 'type': 'none', 'sources': [ - 'base/android/java/src/org/chromium/media/VideoCapture.java', - 'base/android/java/src/org/chromium/media/VideoCaptureFactory.java', + 'capture/video/android/java/src/org/chromium/media/VideoCapture.java', + 'capture/video/android/java/src/org/chromium/media/VideoCaptureFactory.java', ], 'variables': { 'jni_gen_package': 'media', @@ -1972,7 +1972,7 @@ '../base/base.gyp:base', ], 'variables': { - 'java_in_dir': 'base/android/java', + 'java_in_dir': 'capture/video/android/java', }, 'includes': ['../build/java.gypi'], }, |