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(). |
-} |