liyujie
2025-08-28 b3810562527858a3b3d98ffa6e9c9c5b0f4a9a8e
android/frameworks/ex/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java
....@@ -39,6 +39,7 @@
3939
4040 import java.io.IOException;
4141 import java.util.Collections;
42
+import java.util.HashMap;
4243 import java.util.List;
4344 import java.util.StringTokenizer;
4445
....@@ -126,29 +127,31 @@
126127 }
127128
128129 private static class AndroidCameraDeviceInfo implements CameraDeviceInfo {
129
- private final Camera.CameraInfo[] mCameraInfos;
130
+ private final HashMap<Integer, Camera.CameraInfo> mCameraInfos;
130131 private final int mNumberOfCameras;
131132 private final int mFirstBackCameraId;
132133 private final int mFirstFrontCameraId;
134
+ private final int mFirstExternalCameraId;
133135
134
- private AndroidCameraDeviceInfo(Camera.CameraInfo[] info, int numberOfCameras,
135
- int firstBackCameraId, int firstFrontCameraId) {
136
-
136
+ private AndroidCameraDeviceInfo(HashMap<Integer, Camera.CameraInfo> info, int numberOfCameras,
137
+ int firstBackCameraId, int firstFrontCameraId, int firstExternalCameraId) {
137138 mCameraInfos = info;
138139 mNumberOfCameras = numberOfCameras;
139140 mFirstBackCameraId = firstBackCameraId;
140141 mFirstFrontCameraId = firstFrontCameraId;
142
+ mFirstExternalCameraId = firstExternalCameraId;
141143 }
142144
143145 public static AndroidCameraDeviceInfo create() {
144146 int numberOfCameras;
145
- Camera.CameraInfo[] cameraInfos;
147
+ HashMap<Integer, Camera.CameraInfo> cameraInfos;
146148 try {
147149 numberOfCameras = Camera.getNumberOfCameras();
148
- cameraInfos = new Camera.CameraInfo[numberOfCameras];
150
+ Log.d(TAG, "create with number " + numberOfCameras);
151
+ cameraInfos = new HashMap<Integer, Camera.CameraInfo>();
149152 for (int i = 0; i < numberOfCameras; i++) {
150
- cameraInfos[i] = new Camera.CameraInfo();
151
- Camera.getCameraInfo(i, cameraInfos[i]);
153
+ cameraInfos.put(i, new Camera.CameraInfo());
154
+ Camera.getCameraInfo(i, cameraInfos.get(i));
152155 }
153156 } catch (RuntimeException ex) {
154157 Log.e(TAG, "Exception while creating CameraDeviceInfo", ex);
....@@ -157,28 +160,29 @@
157160
158161 int firstFront = NO_DEVICE;
159162 int firstBack = NO_DEVICE;
163
+ int firstExternal = NO_DEVICE;
160164 // Get the first (smallest) back and first front camera id.
161165 for (int i = numberOfCameras - 1; i >= 0; i--) {
162
- if (cameraInfos[i].facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
166
+ if (cameraInfos.get(i).facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
163167 firstBack = i;
164
- } else {
165
- if (cameraInfos[i].facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
166
- firstFront = i;
167
- }
168
+ } else if (cameraInfos.get(i).facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
169
+ firstFront = i;
170
+ }
171
+ else if (cameraInfos.get(i).facing == Camera.CameraInfo.CAMERA_FACING_EXTERNAL) {
172
+ firstExternal = i;
168173 }
169174 }
170175
171
- return new AndroidCameraDeviceInfo(cameraInfos, numberOfCameras, firstBack, firstFront);
176
+ return new AndroidCameraDeviceInfo(cameraInfos, numberOfCameras, firstBack, firstFront, firstExternal);
172177 }
173178
174179 @Override
175180 public Characteristics getCharacteristics(int cameraId) {
176
- if (mCameraInfos == null || mCameraInfos.length == 0 || mCameraInfos.length <= cameraId) {
177
- return null;
178
- }
179
- Camera.CameraInfo info = mCameraInfos[cameraId];
181
+ Camera.CameraInfo info = mCameraInfos.get(cameraId);
180182 if (info != null) {
181183 return new AndroidCharacteristics(info);
184
+ } else if (!mCameraInfos.isEmpty()){
185
+ return new AndroidCharacteristics(mCameraInfos.get(0));
182186 } else {
183187 return null;
184188 }
....@@ -199,6 +203,11 @@
199203 return mFirstFrontCameraId;
200204 }
201205
206
+ @Override
207
+ public int getFirstExternalCameraId() {
208
+ return mFirstExternalCameraId;
209
+ }
210
+
202211 private static class AndroidCharacteristics extends Characteristics {
203212 private Camera.CameraInfo mCameraInfo;
204213
....@@ -217,6 +226,11 @@
217226 }
218227
219228 @Override
229
+ public boolean isFacingExternal() {
230
+ return mCameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_EXTERNAL;
231
+ }
232
+
233
+ @Override
220234 public int getSensorOrientation() {
221235 return mCameraInfo.orientation;
222236 }