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

Side by Side Diff: webrtc/api/android/java/src/org/webrtc/Camera1Enumerator.java

Issue 2547483003: Move /webrtc/api/android files to /webrtc/sdk/android (Closed)
Patch Set: Move to api folder under Android instead of src Created 4 years 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 unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 * Copyright 2015 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 package org.webrtc;
12
13 import android.os.SystemClock;
14 import java.util.ArrayList;
15 import java.util.List;
16 import org.webrtc.CameraEnumerationAndroid.CaptureFormat;
17
18 @SuppressWarnings("deprecation")
19 public class Camera1Enumerator implements CameraEnumerator {
20 private final static String TAG = "Camera1Enumerator";
21 // Each entry contains the supported formats for corresponding camera index. T he formats for all
22 // cameras are enumerated on the first call to getSupportedFormats(), and cach ed for future
23 // reference.
24 private static List<List<CaptureFormat>> cachedSupportedFormats;
25
26 private final boolean captureToTexture;
27
28 public Camera1Enumerator() {
29 this(true /* captureToTexture */);
30 }
31
32 public Camera1Enumerator(boolean captureToTexture) {
33 this.captureToTexture = captureToTexture;
34 }
35
36 // Returns device names that can be used to create a new VideoCapturerAndroid.
37 @Override
38 public String[] getDeviceNames() {
39 ArrayList<String> namesList = new ArrayList<>();
40 for (int i = 0; i < android.hardware.Camera.getNumberOfCameras(); ++i) {
41 String name = getDeviceName(i);
42 if (name != null) {
43 namesList.add(name);
44 Logging.d(TAG, "Index: " + i + ". " + name);
45 } else {
46 Logging.e(TAG, "Index: " + i + ". Failed to query camera name.");
47 }
48 }
49 String[] namesArray = new String[namesList.size()];
50 return namesList.toArray(namesArray);
51 }
52
53 @Override
54 public boolean isFrontFacing(String deviceName) {
55 android.hardware.Camera.CameraInfo info = getCameraInfo(getCameraIndex(devic eName));
56 return info != null && info.facing == android.hardware.Camera.CameraInfo.CAM ERA_FACING_FRONT;
57 }
58
59 @Override
60 public boolean isBackFacing(String deviceName) {
61 android.hardware.Camera.CameraInfo info = getCameraInfo(getCameraIndex(devic eName));
62 return info != null && info.facing == android.hardware.Camera.CameraInfo.CAM ERA_FACING_BACK;
63 }
64
65 @Override
66 public List<CaptureFormat> getSupportedFormats(String deviceName) {
67 return getSupportedFormats(getCameraIndex(deviceName));
68 }
69
70 @Override
71 public CameraVideoCapturer createCapturer(
72 String deviceName, CameraVideoCapturer.CameraEventsHandler eventsHandler) {
73 return new Camera1Capturer(deviceName, eventsHandler, captureToTexture);
74 }
75
76 private static android.hardware.Camera.CameraInfo getCameraInfo(int index) {
77 android.hardware.Camera.CameraInfo info = new android.hardware.Camera.Camera Info();
78 try {
79 android.hardware.Camera.getCameraInfo(index, info);
80 } catch (Exception e) {
81 Logging.e(TAG, "getCameraInfo failed on index " + index, e);
82 return null;
83 }
84 return info;
85 }
86
87 static synchronized List<CaptureFormat> getSupportedFormats(int cameraId) {
88 if (cachedSupportedFormats == null) {
89 cachedSupportedFormats = new ArrayList<List<CaptureFormat>>();
90 for (int i = 0; i < android.hardware.Camera.getNumberOfCameras(); ++i) {
91 cachedSupportedFormats.add(enumerateFormats(i));
92 }
93 }
94 return cachedSupportedFormats.get(cameraId);
95 }
96
97 private static List<CaptureFormat> enumerateFormats(int cameraId) {
98 Logging.d(TAG, "Get supported formats for camera index " + cameraId + ".");
99 final long startTimeMs = SystemClock.elapsedRealtime();
100 final android.hardware.Camera.Parameters parameters;
101 android.hardware.Camera camera = null;
102 try {
103 Logging.d(TAG, "Opening camera with index " + cameraId);
104 camera = android.hardware.Camera.open(cameraId);
105 parameters = camera.getParameters();
106 } catch (RuntimeException e) {
107 Logging.e(TAG, "Open camera failed on camera index " + cameraId, e);
108 return new ArrayList<CaptureFormat>();
109 } finally {
110 if (camera != null) {
111 camera.release();
112 }
113 }
114
115 final List<CaptureFormat> formatList = new ArrayList<CaptureFormat>();
116 try {
117 int minFps = 0;
118 int maxFps = 0;
119 final List<int[]> listFpsRange = parameters.getSupportedPreviewFpsRange();
120 if (listFpsRange != null) {
121 // getSupportedPreviewFpsRange() returns a sorted list. Take the fps ran ge
122 // corresponding to the highest fps.
123 final int[] range = listFpsRange.get(listFpsRange.size() - 1);
124 minFps = range[android.hardware.Camera.Parameters.PREVIEW_FPS_MIN_INDEX] ;
125 maxFps = range[android.hardware.Camera.Parameters.PREVIEW_FPS_MAX_INDEX] ;
126 }
127 for (android.hardware.Camera.Size size : parameters.getSupportedPreviewSiz es()) {
128 formatList.add(new CaptureFormat(size.width, size.height, minFps, maxFps ));
129 }
130 } catch (Exception e) {
131 Logging.e(TAG, "getSupportedFormats() failed on camera index " + cameraId, e);
132 }
133
134 final long endTimeMs = SystemClock.elapsedRealtime();
135 Logging.d(TAG, "Get supported formats for camera index " + cameraId + " done ."
136 + " Time spent: " + (endTimeMs - startTimeMs) + " ms.");
137 return formatList;
138 }
139
140 // Convert from android.hardware.Camera.Size to Size.
141 static List<Size> convertSizes(List<android.hardware.Camera.Size> cameraSizes) {
142 final List<Size> sizes = new ArrayList<Size>();
143 for (android.hardware.Camera.Size size : cameraSizes) {
144 sizes.add(new Size(size.width, size.height));
145 }
146 return sizes;
147 }
148
149 // Convert from int[2] to CaptureFormat.FramerateRange.
150 static List<CaptureFormat.FramerateRange> convertFramerates(List<int[]> arrayR anges) {
151 final List<CaptureFormat.FramerateRange> ranges = new ArrayList<CaptureForma t.FramerateRange>();
152 for (int[] range : arrayRanges) {
153 ranges.add(new CaptureFormat.FramerateRange(
154 range[android.hardware.Camera.Parameters.PREVIEW_FPS_MIN_INDEX],
155 range[android.hardware.Camera.Parameters.PREVIEW_FPS_MAX_INDEX]));
156 }
157 return ranges;
158 }
159
160 // Returns the camera index for camera with name |deviceName|, or throws Illeg alArgumentException
161 // if no such camera can be found.
162 static int getCameraIndex(String deviceName) {
163 Logging.d(TAG, "getCameraIndex: " + deviceName);
164 for (int i = 0; i < android.hardware.Camera.getNumberOfCameras(); ++i) {
165 if (deviceName.equals(getDeviceName(i))) {
166 return i;
167 }
168 }
169 throw new IllegalArgumentException("No such camera: " + deviceName);
170 }
171
172 // Returns the name of the camera with camera index. Returns null if the
173 // camera can not be used.
174 static String getDeviceName(int index) {
175 android.hardware.Camera.CameraInfo info = getCameraInfo(index);
176 if (info == null) {
177 return null;
178 }
179
180 String facing =
181 (info.facing == android.hardware.Camera.CameraInfo.CAMERA_FACING_FRONT) ? "front" : "back";
182 return "Camera " + index + ", Facing " + facing + ", Orientation " + info.or ientation;
183 }
184 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698