Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(920)

Unified Diff: media/base/android/java/src/org/chromium/media/VideoCaptureAndroid.java

Issue 1714913002: Reland: Move VideoCapture* files from media/base/android/... to media/capture/video/android/java/... (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: gyp-gn files and added a capture_jni_registrar Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/base/android/java/src/org/chromium/media/VideoCaptureAndroid.java
diff --git a/media/base/android/java/src/org/chromium/media/VideoCaptureAndroid.java b/media/base/android/java/src/org/chromium/media/VideoCaptureAndroid.java
deleted file mode 100644
index 35ec09fbe0a0c71813ee558b7a1b9414aeccdd6a..0000000000000000000000000000000000000000
--- a/media/base/android/java/src/org/chromium/media/VideoCaptureAndroid.java
+++ /dev/null
@@ -1,183 +0,0 @@
-// Copyright 2014 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.
-
-package org.chromium.media;
-
-import android.content.Context;
-import android.graphics.ImageFormat;
-
-import org.chromium.base.Log;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * This class extends the VideoCaptureCamera base class for manipulating normal
- * video capture devices in Android, including receiving copies of preview
- * frames via Java-allocated buffers. It also includes class BuggyDeviceHack to
- * deal with troublesome devices.
- **/
-@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",
- };
-
- static int getImageFormat() {
- for (String buggyDevice : COLORSPACE_BUGGY_DEVICE_LIST) {
- if (buggyDevice.contentEquals(android.os.Build.MODEL)) {
- return ImageFormat.NV21;
- }
- }
- return ImageFormat.YV12;
- }
- }
-
- private int mExpectedFrameSize;
- private static final int NUM_CAPTURE_BUFFERS = 3;
- private static final String TAG = "cr.media";
-
- static int getNumberOfCameras() {
- return android.hardware.Camera.getNumberOfCameras();
- }
-
- static int getCaptureApiType(int id) {
- if (VideoCaptureCamera.getCameraInfo(id) == null) {
- return CaptureApiType.API_TYPE_UNKNOWN;
- }
- return CaptureApiType.API1;
- }
-
- static String getName(int id) {
- 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");
- }
-
- static VideoCaptureFormat[] getDeviceSupportedFormats(int id) {
- android.hardware.Camera camera;
- try {
- camera = android.hardware.Camera.open(id);
- } catch (RuntimeException ex) {
- Log.e(TAG, "Camera.open: ", ex);
- return null;
- }
- android.hardware.Camera.Parameters parameters = getCameraParameters(camera);
- if (parameters == null) {
- return null;
- }
-
- ArrayList<VideoCaptureFormat> formatList = new ArrayList<VideoCaptureFormat>();
- // getSupportedPreview{Formats,FpsRange,PreviewSizes}() returns Lists
- // with at least one element, but when the camera is in bad state, they
- // can return null pointers; in that case we use a 0 entry, so we can
- // retrieve as much information as possible.
- List<Integer> pixelFormats = parameters.getSupportedPreviewFormats();
- if (pixelFormats == null) {
- pixelFormats = new ArrayList<Integer>();
- }
- if (pixelFormats.size() == 0) {
- pixelFormats.add(ImageFormat.UNKNOWN);
- }
- for (Integer previewFormat : pixelFormats) {
- int pixelFormat = AndroidImageFormat.UNKNOWN;
- if (previewFormat == ImageFormat.YV12) {
- pixelFormat = AndroidImageFormat.YV12;
- } else if (previewFormat == ImageFormat.NV21) {
- continue;
- }
-
- List<int[]> listFpsRange = parameters.getSupportedPreviewFpsRange();
- if (listFpsRange == null) {
- listFpsRange = new ArrayList<int[]>();
- }
- if (listFpsRange.size() == 0) {
- listFpsRange.add(new int[] {0, 0});
- }
- for (int[] fpsRange : listFpsRange) {
- List<android.hardware.Camera.Size> supportedSizes =
- parameters.getSupportedPreviewSizes();
- if (supportedSizes == null) {
- supportedSizes = new ArrayList<android.hardware.Camera.Size>();
- }
- if (supportedSizes.size() == 0) {
- 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));
- }
- }
- }
- camera.release();
- return formatList.toArray(new VideoCaptureFormat[formatList.size()]);
- }
-
- VideoCaptureAndroid(Context context,
- int id,
- long nativeVideoCaptureDeviceAndroid) {
- super(context, id, nativeVideoCaptureDeviceAndroid);
- }
-
- @Override
- protected void setCaptureParameters(
- int width,
- int height,
- int frameRate,
- android.hardware.Camera.Parameters cameraParameters) {
- mCaptureFormat = new VideoCaptureFormat(
- width, height, frameRate, BuggyDeviceHack.getImageFormat());
- }
-
- @Override
- protected void allocateBuffers() {
- mExpectedFrameSize = mCaptureFormat.mWidth * mCaptureFormat.mHeight
- * ImageFormat.getBitsPerPixel(mCaptureFormat.mPixelFormat) / 8;
- for (int i = 0; i < NUM_CAPTURE_BUFFERS; i++) {
- byte[] buffer = new byte[mExpectedFrameSize];
- mCamera.addCallbackBuffer(buffer);
- }
- }
-
- @Override
- protected void setPreviewCallback(android.hardware.Camera.PreviewCallback cb) {
- mCamera.setPreviewCallbackWithBuffer(cb);
- }
-
- @Override
- public void onPreviewFrame(byte[] data, android.hardware.Camera camera) {
- mPreviewBufferLock.lock();
- try {
- if (!mIsRunning) {
- return;
- }
- if (data.length == mExpectedFrameSize) {
- nativeOnFrameAvailable(mNativeVideoCaptureDeviceAndroid,
- data, mExpectedFrameSize, getCameraRotation());
- }
- } finally {
- mPreviewBufferLock.unlock();
- if (camera != null) {
- camera.addCallbackBuffer(data);
- }
- }
- }
-
- // TODO(wjia): investigate whether reading from texture could give better
- // performance and frame rate, using onFrameAvailable().
-}

Powered by Google App Engine
This is Rietveld 408576698