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

Side by Side Diff: webrtc/api/java/android/org/webrtc/CameraEnumerationAndroid.java

Issue 2024573002: Revert of Android: Add FramerateRange class (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 6 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2015 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2015 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 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 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 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 25 matching lines...) Expand all
36 CameraEnumerationAndroid.enumerator = enumerator; 36 CameraEnumerationAndroid.enumerator = enumerator;
37 } 37 }
38 38
39 public static synchronized List<CaptureFormat> getSupportedFormats(int cameraI d) { 39 public static synchronized List<CaptureFormat> getSupportedFormats(int cameraI d) {
40 final List<CaptureFormat> formats = enumerator.getSupportedFormats(cameraId) ; 40 final List<CaptureFormat> formats = enumerator.getSupportedFormats(cameraId) ;
41 Logging.d(TAG, "Supported formats for camera " + cameraId + ": " + formats); 41 Logging.d(TAG, "Supported formats for camera " + cameraId + ": " + formats);
42 return formats; 42 return formats;
43 } 43 }
44 44
45 public static class CaptureFormat { 45 public static class CaptureFormat {
46 // Class to represent a framerate range. The framerate varies because of lig htning conditions.
47 // The values are multiplied by 1000, so 1000 represents one frame per secon d.
48 public static class FramerateRange {
49 public int min;
50 public int max;
51
52 public FramerateRange(int min, int max) {
53 this.min = min;
54 this.max = max;
55 }
56
57 @Override
58 public String toString() {
59 return "[" + (min / 1000.0f) + ":" + (max / 1000.0f) + "]";
60 }
61
62 @Override
63 public boolean equals(Object other) {
64 if (!(other instanceof FramerateRange)) {
65 return false;
66 }
67 final FramerateRange otherFramerate = (FramerateRange) other;
68 return min == otherFramerate.min && max == otherFramerate.max;
69 }
70
71 @Override
72 public int hashCode() {
73 // Use prime close to 2^16 to avoid collisions for normal values less th an 2^16.
74 return 1 + 65537 * min + max;
75 }
76 }
77
78 public final int width; 46 public final int width;
79 public final int height; 47 public final int height;
80 public final FramerateRange framerate; 48 public final int maxFramerate;
49 public final int minFramerate;
81 // TODO(hbos): If VideoCapturer.startCapture is updated to support other ima ge formats then this 50 // TODO(hbos): If VideoCapturer.startCapture is updated to support other ima ge formats then this
82 // needs to be updated and VideoCapturer.getSupportedFormats need to return CaptureFormats of 51 // needs to be updated and VideoCapturer.getSupportedFormats need to return CaptureFormats of
83 // all imageFormats. 52 // all imageFormats.
84 public final int imageFormat = ImageFormat.NV21; 53 public final int imageFormat = ImageFormat.NV21;
85 54
86 public CaptureFormat(int width, int height, int minFramerate, int maxFramera te) { 55 public CaptureFormat(int width, int height, int minFramerate,
56 int maxFramerate) {
87 this.width = width; 57 this.width = width;
88 this.height = height; 58 this.height = height;
89 this.framerate = new FramerateRange(minFramerate, maxFramerate); 59 this.minFramerate = minFramerate;
90 } 60 this.maxFramerate = maxFramerate;
91
92 public CaptureFormat(int width, int height, FramerateRange framerate) {
93 this.width = width;
94 this.height = height;
95 this.framerate = framerate;
96 } 61 }
97 62
98 // Calculates the frame size of this capture format. 63 // Calculates the frame size of this capture format.
99 public int frameSize() { 64 public int frameSize() {
100 return frameSize(width, height, imageFormat); 65 return frameSize(width, height, imageFormat);
101 } 66 }
102 67
103 // Calculates the frame size of the specified image format. Currently only 68 // Calculates the frame size of the specified image format. Currently only
104 // supporting ImageFormat.NV21. 69 // supporting ImageFormat.NV21.
105 // The size is width * height * number of bytes per pixel. 70 // The size is width * height * number of bytes per pixel.
106 // http://developer.android.com/reference/android/hardware/Camera.html#addCa llbackBuffer(byte[]) 71 // http://developer.android.com/reference/android/hardware/Camera.html#addCa llbackBuffer(byte[])
107 public static int frameSize(int width, int height, int imageFormat) { 72 public static int frameSize(int width, int height, int imageFormat) {
108 if (imageFormat != ImageFormat.NV21) { 73 if (imageFormat != ImageFormat.NV21) {
109 throw new UnsupportedOperationException("Don't know how to calculate " 74 throw new UnsupportedOperationException("Don't know how to calculate "
110 + "the frame size of non-NV21 image formats."); 75 + "the frame size of non-NV21 image formats.");
111 } 76 }
112 return (width * height * ImageFormat.getBitsPerPixel(imageFormat)) / 8; 77 return (width * height * ImageFormat.getBitsPerPixel(imageFormat)) / 8;
113 } 78 }
114 79
115 @Override 80 @Override
116 public String toString() { 81 public String toString() {
117 return width + "x" + height + "@" + framerate; 82 return width + "x" + height + "@[" + minFramerate + ":" + maxFramerate + " ]";
118 } 83 }
119 84
120 public boolean isSameFormat(final CaptureFormat that) { 85 public boolean isSameFormat(final CaptureFormat that) {
121 if (that == null) { 86 if (that == null) {
122 return false; 87 return false;
123 } 88 }
124 return width == that.width && height == that.height && framerate.equals(th at.framerate); 89 return width == that.width && height == that.height && maxFramerate == tha t.maxFramerate
90 && minFramerate == that.minFramerate;
125 } 91 }
126 } 92 }
127 93
128 // Returns device names that can be used to create a new VideoCapturerAndroid. 94 // Returns device names that can be used to create a new VideoCapturerAndroid.
129 public static String[] getDeviceNames() { 95 public static String[] getDeviceNames() {
130 String[] names = new String[android.hardware.Camera.getNumberOfCameras()]; 96 String[] names = new String[android.hardware.Camera.getNumberOfCameras()];
131 for (int i = 0; i < android.hardware.Camera.getNumberOfCameras(); ++i) { 97 for (int i = 0; i < android.hardware.Camera.getNumberOfCameras(); ++i) {
132 names[i] = getDeviceName(i); 98 names[i] = getDeviceName(i);
133 } 99 }
134 return names; 100 return names;
(...skipping 26 matching lines...) Expand all
161 public static String getNameOfFrontFacingDevice() { 127 public static String getNameOfFrontFacingDevice() {
162 return getNameOfDevice(android.hardware.Camera.CameraInfo.CAMERA_FACING_FRON T); 128 return getNameOfDevice(android.hardware.Camera.CameraInfo.CAMERA_FACING_FRON T);
163 } 129 }
164 130
165 // Returns the name of the back facing camera. Returns null if the 131 // Returns the name of the back facing camera. Returns null if the
166 // camera can not be used or does not exist. 132 // camera can not be used or does not exist.
167 public static String getNameOfBackFacingDevice() { 133 public static String getNameOfBackFacingDevice() {
168 return getNameOfDevice(android.hardware.Camera.CameraInfo.CAMERA_FACING_BACK ); 134 return getNameOfDevice(android.hardware.Camera.CameraInfo.CAMERA_FACING_BACK );
169 } 135 }
170 136
171 // Helper class for finding the closest supported format for the two functions below. It creates a 137 // Helper class for finding the closest supported format for the two functions below.
172 // comparator based on the difference to some requested parameters, where the element with the
173 // minimum difference is the element that is closest to the requested paramete rs.
174 private static abstract class ClosestComparator<T> implements Comparator<T> { 138 private static abstract class ClosestComparator<T> implements Comparator<T> {
175 // Difference between supported and requested parameter. 139 // Difference between supported and requested parameter.
176 abstract int diff(T supportedParameter); 140 abstract int diff(T supportedParameter);
177 141
178 @Override 142 @Override
179 public int compare(T t1, T t2) { 143 public int compare(T t1, T t2) {
180 return diff(t1) - diff(t2); 144 return diff(t1) - diff(t2);
181 } 145 }
182 } 146 }
183 147
184 public static CaptureFormat.FramerateRange getClosestSupportedFramerateRange( 148 public static int[] getFramerateRange(android.hardware.Camera.Parameters param eters,
185 List<CaptureFormat.FramerateRange> supportedFramerates, final int requeste dFps) { 149 final int framerate) {
186 return Collections.min(supportedFramerates, 150 List<int[]> listFpsRange = parameters.getSupportedPreviewFpsRange();
187 new ClosestComparator<CaptureFormat.FramerateRange>() { 151 if (listFpsRange.isEmpty()) {
188 private static final int MAX_FPS_WEIGHT = 10; 152 Logging.w(TAG, "No supported preview fps range");
189 153 return new int[]{0, 0};
190 @Override 154 }
191 int diff(CaptureFormat.FramerateRange range) { 155 return Collections.min(listFpsRange,
192 return range.min + MAX_FPS_WEIGHT * abs(requestedFps * 1000 - range. max); 156 new ClosestComparator<int[]>() {
157 @Override int diff(int[] range) {
158 final int maxFpsWeight = 10;
159 return range[android.hardware.Camera.Parameters.PREVIEW_FPS_MIN_INDE X]
160 + maxFpsWeight * abs(framerate
161 - range[android.hardware.Camera.Parameters.PREVIEW_FPS_MAX_I NDEX]);
193 } 162 }
194 }); 163 });
195 } 164 }
196 165
197 public static android.hardware.Camera.Size getClosestSupportedSize( 166 public static android.hardware.Camera.Size getClosestSupportedSize(
198 List<android.hardware.Camera.Size> supportedSizes, final int requestedWidt h, 167 List<android.hardware.Camera.Size> supportedSizes, final int requestedWidt h,
199 final int requestedHeight) { 168 final int requestedHeight) {
200 return Collections.min(supportedSizes, 169 return Collections.min(supportedSizes,
201 new ClosestComparator<android.hardware.Camera.Size>() { 170 new ClosestComparator<android.hardware.Camera.Size>() {
202 @Override int diff(android.hardware.Camera.Size size) { 171 @Override int diff(android.hardware.Camera.Size size) {
(...skipping 10 matching lines...) Expand all
213 if (info.facing == facing) { 182 if (info.facing == facing) {
214 return getDeviceName(i); 183 return getDeviceName(i);
215 } 184 }
216 } catch (Exception e) { 185 } catch (Exception e) {
217 Logging.e(TAG, "getCameraInfo() failed on index " + i, e); 186 Logging.e(TAG, "getCameraInfo() failed on index " + i, e);
218 } 187 }
219 } 188 }
220 return null; 189 return null;
221 } 190 }
222 } 191 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698