…lines 1–8 unchanged (8 lines)
9import android.hardware.camera2.CameraManager;
10import android.hardware.camera2.params.StreamConfigurationMap;
11import android.media.MediaCodec;
12import android.util.Range;
13
14import java.util.List;
15import java.util.SortedSet;
16import java.util.TreeSet;
17
18public final class LogUtils {
19
20 private LogUtils() {
21 // not instantiable
…lines 22–100 unchanged (79 lines)
101
102 Rect activeSize = characteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);
103 builder.append(activeSize.width()).append("x").append(activeSize.height()).append(", ");
104
105 // Capture frame rates for low-FPS mode are the same for every resolution
106 Range<Integer>[] lowFpsRanges = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);
107 SortedSet<Integer> uniqueLowFps = getUniqueSet(lowFpsRanges);
108 builder.append("fps=").append(uniqueLowFps).append(')');
109
110 if (includeSizes) {
111 StreamConfigurationMap configs = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
112
113 android.util.Size[] sizes = configs.getOutputSizes(MediaCodec.class);
114 for (android.util.Size size : sizes) {
115 builder.append("\n - ").append(size.getWidth()).append('x').append(size.getHeight());
116 }
117
118 android.util.Size[] highSpeedSizes = configs.getHighSpeedVideoSizes();
119 if (highSpeedSizes.length > 0) {
120 builder.append("\n High speed capture (--camera-high-speed):");
121 for (android.util.Size size : highSpeedSizes) {
122 Range<Integer>[] highFpsRanges = configs.getHighSpeedVideoFpsRanges();
123 SortedSet<Integer> uniqueHighFps = getUniqueSet(highFpsRanges);
124 builder.append("\n - ").append(size.getWidth()).append("x").append(size.getHeight());
125 builder.append(" (fps=").append(uniqueHighFps).append(')');
126 }
127 }
128 }
129 }
130 }
131 } catch (CameraAccessException e) {
132 builder.append("\n (access denied)");
133 }
134 return builder.toString();
135 }
136
137 private static SortedSet<Integer> getUniqueSet(Range<Integer>[] ranges) {
138 SortedSet<Integer> set = new TreeSet<>();
139 for (Range<Integer> range : ranges) {
140 set.add(range.getUpper());
141 }
142 return set;
143 }
144}
145