From b3810562527858a3b3d98ffa6e9c9c5b0f4a9a8e Mon Sep 17 00:00:00 2001 From: liyujie <2352380935@qq.com> Date: Thu, 28 Aug 2025 12:04:14 +0000 Subject: [PATCH] [1/4]解决USB摄像头打开相机预览界面绿屏 --- android/frameworks/ex/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java | 50 ++++++++++++++++++++++++++++++++------------------ 1 files changed, 32 insertions(+), 18 deletions(-) diff --git a/android/frameworks/ex/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java b/android/frameworks/ex/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java index 345e3dc..7e652eb 100644 --- a/android/frameworks/ex/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java +++ b/android/frameworks/ex/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java @@ -39,6 +39,7 @@ import java.io.IOException; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.StringTokenizer; @@ -126,29 +127,31 @@ } private static class AndroidCameraDeviceInfo implements CameraDeviceInfo { - private final Camera.CameraInfo[] mCameraInfos; + private final HashMap<Integer, Camera.CameraInfo> mCameraInfos; private final int mNumberOfCameras; private final int mFirstBackCameraId; private final int mFirstFrontCameraId; + private final int mFirstExternalCameraId; - private AndroidCameraDeviceInfo(Camera.CameraInfo[] info, int numberOfCameras, - int firstBackCameraId, int firstFrontCameraId) { - + private AndroidCameraDeviceInfo(HashMap<Integer, Camera.CameraInfo> info, int numberOfCameras, + int firstBackCameraId, int firstFrontCameraId, int firstExternalCameraId) { mCameraInfos = info; mNumberOfCameras = numberOfCameras; mFirstBackCameraId = firstBackCameraId; mFirstFrontCameraId = firstFrontCameraId; + mFirstExternalCameraId = firstExternalCameraId; } public static AndroidCameraDeviceInfo create() { int numberOfCameras; - Camera.CameraInfo[] cameraInfos; + HashMap<Integer, Camera.CameraInfo> cameraInfos; try { numberOfCameras = Camera.getNumberOfCameras(); - cameraInfos = new Camera.CameraInfo[numberOfCameras]; + Log.d(TAG, "create with number " + numberOfCameras); + cameraInfos = new HashMap<Integer, Camera.CameraInfo>(); for (int i = 0; i < numberOfCameras; i++) { - cameraInfos[i] = new Camera.CameraInfo(); - Camera.getCameraInfo(i, cameraInfos[i]); + cameraInfos.put(i, new Camera.CameraInfo()); + Camera.getCameraInfo(i, cameraInfos.get(i)); } } catch (RuntimeException ex) { Log.e(TAG, "Exception while creating CameraDeviceInfo", ex); @@ -157,28 +160,29 @@ int firstFront = NO_DEVICE; int firstBack = NO_DEVICE; + int firstExternal = NO_DEVICE; // Get the first (smallest) back and first front camera id. for (int i = numberOfCameras - 1; i >= 0; i--) { - if (cameraInfos[i].facing == Camera.CameraInfo.CAMERA_FACING_BACK) { + if (cameraInfos.get(i).facing == Camera.CameraInfo.CAMERA_FACING_BACK) { firstBack = i; - } else { - if (cameraInfos[i].facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { - firstFront = i; - } + } else if (cameraInfos.get(i).facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { + firstFront = i; + } + else if (cameraInfos.get(i).facing == Camera.CameraInfo.CAMERA_FACING_EXTERNAL) { + firstExternal = i; } } - return new AndroidCameraDeviceInfo(cameraInfos, numberOfCameras, firstBack, firstFront); + return new AndroidCameraDeviceInfo(cameraInfos, numberOfCameras, firstBack, firstFront, firstExternal); } @Override public Characteristics getCharacteristics(int cameraId) { - if (mCameraInfos == null || mCameraInfos.length == 0 || mCameraInfos.length <= cameraId) { - return null; - } - Camera.CameraInfo info = mCameraInfos[cameraId]; + Camera.CameraInfo info = mCameraInfos.get(cameraId); if (info != null) { return new AndroidCharacteristics(info); + } else if (!mCameraInfos.isEmpty()){ + return new AndroidCharacteristics(mCameraInfos.get(0)); } else { return null; } @@ -199,6 +203,11 @@ return mFirstFrontCameraId; } + @Override + public int getFirstExternalCameraId() { + return mFirstExternalCameraId; + } + private static class AndroidCharacteristics extends Characteristics { private Camera.CameraInfo mCameraInfo; @@ -217,6 +226,11 @@ } @Override + public boolean isFacingExternal() { + return mCameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_EXTERNAL; + } + + @Override public int getSensorOrientation() { return mCameraInfo.orientation; } -- Gitblit v1.6.2