| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.media; | 5 package org.chromium.media; |
| 6 | 6 |
| 7 import android.content.Context; | 7 import android.content.Context; |
| 8 import android.graphics.ImageFormat; | 8 import android.graphics.ImageFormat; |
| 9 import android.view.Surface; | 9 import android.view.Surface; |
| 10 import android.view.WindowManager; | 10 import android.view.WindowManager; |
| 11 | 11 |
| 12 import org.chromium.base.ContextUtils; |
| 12 import org.chromium.base.annotations.CalledByNative; | 13 import org.chromium.base.annotations.CalledByNative; |
| 13 import org.chromium.base.annotations.JNINamespace; | 14 import org.chromium.base.annotations.JNINamespace; |
| 14 | 15 |
| 15 import java.nio.ByteBuffer; | 16 import java.nio.ByteBuffer; |
| 16 import java.util.ArrayList; | 17 import java.util.ArrayList; |
| 17 import java.util.Collections; | 18 import java.util.Collections; |
| 18 import java.util.Comparator; | 19 import java.util.Comparator; |
| 19 import java.util.List; | 20 import java.util.List; |
| 20 | 21 |
| 21 /** | 22 /** |
| 22 * Video Capture Device base class, defines a set of methods that native code | 23 * Video Capture Device base class, defines a set of methods that native code |
| 23 * needs to use to configure, start capture, and to be reached by callbacks and | 24 * needs to use to configure, start capture, and to be reached by callbacks and |
| 24 * provides some neccesary data type(s) with accessors. | 25 * provides some necessary data type(s) with accessors. |
| 25 **/ | 26 **/ |
| 26 @JNINamespace("media") | 27 @JNINamespace("media") |
| 27 public abstract class VideoCapture { | 28 public abstract class VideoCapture { |
| 28 /** | 29 /** |
| 29 * Common class for storing a framerate range. Values should be multiplied b
y 1000. | 30 * Common class for storing a framerate range. Values should be multiplied b
y 1000. |
| 30 */ | 31 */ |
| 31 protected static class FramerateRange { | 32 protected static class FramerateRange { |
| 32 public int min; | 33 public int min; |
| 33 public int max; | 34 public int max; |
| 34 | 35 |
| 35 public FramerateRange(int min, int max) { | 36 public FramerateRange(int min, int max) { |
| 36 this.min = min; | 37 this.min = min; |
| 37 this.max = max; | 38 this.max = max; |
| 38 } | 39 } |
| 39 } | 40 } |
| 40 | 41 |
| 41 // The angle (0, 90, 180, 270) that the image needs to be rotated to show in | 42 // The angle (0, 90, 180, 270) that the image needs to be rotated to show in |
| 42 // the display's native orientation. | 43 // the display's native orientation. |
| 43 protected int mCameraNativeOrientation; | 44 protected int mCameraNativeOrientation; |
| 44 // In some occasions we need to invert the device rotation readings, see the | 45 // In some occasions we need to invert the device rotation readings, see the |
| 45 // individual implementations. | 46 // individual implementations. |
| 46 protected boolean mInvertDeviceOrientationReadings; | 47 protected boolean mInvertDeviceOrientationReadings; |
| 47 | 48 |
| 48 protected VideoCaptureFormat mCaptureFormat; | 49 protected VideoCaptureFormat mCaptureFormat; |
| 49 protected final Context mContext; | |
| 50 protected final int mId; | 50 protected final int mId; |
| 51 // Native callback context variable. | 51 // Native callback context variable. |
| 52 protected final long mNativeVideoCaptureDeviceAndroid; | 52 protected final long mNativeVideoCaptureDeviceAndroid; |
| 53 | 53 |
| 54 protected boolean mUseBackgroundThreadForTesting; | 54 protected boolean mUseBackgroundThreadForTesting; |
| 55 | 55 |
| 56 VideoCapture(Context context, int id, long nativeVideoCaptureDeviceAndroid)
{ | 56 VideoCapture(int id, long nativeVideoCaptureDeviceAndroid) { |
| 57 mContext = context; | |
| 58 mId = id; | 57 mId = id; |
| 59 mNativeVideoCaptureDeviceAndroid = nativeVideoCaptureDeviceAndroid; | 58 mNativeVideoCaptureDeviceAndroid = nativeVideoCaptureDeviceAndroid; |
| 60 } | 59 } |
| 61 | 60 |
| 62 // Allocate necessary resources for capture. | 61 // Allocate necessary resources for capture. |
| 63 @CalledByNative | 62 @CalledByNative |
| 64 public abstract boolean allocate(int width, int height, int frameRate); | 63 public abstract boolean allocate(int width, int height, int frameRate); |
| 65 | 64 |
| 66 @CalledByNative | 65 @CalledByNative |
| 67 public abstract boolean startCapture(); | 66 public abstract boolean startCapture(); |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 137 mUseBackgroundThreadForTesting = true; | 136 mUseBackgroundThreadForTesting = true; |
| 138 } | 137 } |
| 139 | 138 |
| 140 protected final int getCameraRotation() { | 139 protected final int getCameraRotation() { |
| 141 int rotation = mInvertDeviceOrientationReadings ? (360 - getDeviceRotati
on()) | 140 int rotation = mInvertDeviceOrientationReadings ? (360 - getDeviceRotati
on()) |
| 142 : getDeviceRotation(); | 141 : getDeviceRotation(); |
| 143 return (mCameraNativeOrientation + rotation) % 360; | 142 return (mCameraNativeOrientation + rotation) % 360; |
| 144 } | 143 } |
| 145 | 144 |
| 146 protected final int getDeviceRotation() { | 145 protected final int getDeviceRotation() { |
| 147 if (mContext == null) return 0; | |
| 148 final int orientation; | 146 final int orientation; |
| 149 WindowManager wm = (WindowManager) mContext.getSystemService(Context.WIN
DOW_SERVICE); | 147 WindowManager wm = (WindowManager) ContextUtils.getApplicationContext().
getSystemService( |
| 148 Context.WINDOW_SERVICE); |
| 150 switch (wm.getDefaultDisplay().getRotation()) { | 149 switch (wm.getDefaultDisplay().getRotation()) { |
| 151 case Surface.ROTATION_90: | 150 case Surface.ROTATION_90: |
| 152 orientation = 90; | 151 orientation = 90; |
| 153 break; | 152 break; |
| 154 case Surface.ROTATION_180: | 153 case Surface.ROTATION_180: |
| 155 orientation = 180; | 154 orientation = 180; |
| 156 break; | 155 break; |
| 157 case Surface.ROTATION_270: | 156 case Surface.ROTATION_270: |
| 158 orientation = 270; | 157 orientation = 270; |
| 159 break; | 158 break; |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 231 // Method for VideoCapture implementations to signal an asynchronous error. | 230 // Method for VideoCapture implementations to signal an asynchronous error. |
| 232 public native void nativeOnError(long nativeVideoCaptureDeviceAndroid, Strin
g message); | 231 public native void nativeOnError(long nativeVideoCaptureDeviceAndroid, Strin
g message); |
| 233 | 232 |
| 234 // Method for VideoCapture implementations to send Photos back to. | 233 // Method for VideoCapture implementations to send Photos back to. |
| 235 public native void nativeOnPhotoTaken( | 234 public native void nativeOnPhotoTaken( |
| 236 long nativeVideoCaptureDeviceAndroid, long callbackId, byte[] data); | 235 long nativeVideoCaptureDeviceAndroid, long callbackId, byte[] data); |
| 237 | 236 |
| 238 // Method for VideoCapture implementations to report device started event. | 237 // Method for VideoCapture implementations to report device started event. |
| 239 public native void nativeOnStarted(long nativeVideoCaptureDeviceAndroid); | 238 public native void nativeOnStarted(long nativeVideoCaptureDeviceAndroid); |
| 240 } | 239 } |
| OLD | NEW |