diff --git a/media/Camera/entry/src/main/java/ohos/samples/camera/TakePhotoAbility.java b/media/Camera/entry/src/main/java/ohos/samples/camera/TakePhotoAbility.java index e5fab3f653ace3cb1bb94da72ae51ca1f34d66e5..1242b7d83243625da357e9a35bcb2fb54fd861e4 100644 --- a/media/Camera/entry/src/main/java/ohos/samples/camera/TakePhotoAbility.java +++ b/media/Camera/entry/src/main/java/ohos/samples/camera/TakePhotoAbility.java @@ -29,7 +29,6 @@ import ohos.agp.graphics.Surface; import ohos.agp.graphics.SurfaceOps; import ohos.agp.window.dialog.ToastDialog; import ohos.app.Context; -import ohos.app.Environment; import ohos.eventhandler.EventHandler; import ohos.eventhandler.EventRunner; import ohos.hiviewdfx.HiLog; @@ -37,6 +36,7 @@ import ohos.hiviewdfx.HiLogLabel; import ohos.media.camera.CameraKit; import ohos.media.camera.device.Camera; import ohos.media.camera.device.CameraConfig; +import ohos.media.camera.device.CameraInfo; import ohos.media.camera.device.CameraStateCallback; import ohos.media.camera.device.FrameConfig; import ohos.media.image.ImageReceiver; @@ -66,7 +66,7 @@ public class TakePhotoAbility extends Ability { private ImageReceiver imageReceiver; - private boolean isCameraFront; + private boolean isFrontCamera; private Surface previewSurface; @@ -115,9 +115,29 @@ public class TakePhotoAbility extends Ability { imageReceiver.setImageArrivalListener(this::saveImage); CameraKit cameraKit = CameraKit.getInstance(getApplicationContext()); String[] cameraList = cameraKit.getCameraIds(); - String cameraId = cameraList.length > 1 && isCameraFront ? cameraList[1] : cameraList[0]; - CameraStateCallbackImpl cameraStateCallback = new CameraStateCallbackImpl(); - cameraKit.createCamera(cameraId, cameraStateCallback, eventHandler); + String cameraId = ""; + for (String logicalCameraId : cameraList) { + int faceType = cameraKit.getCameraInfo(logicalCameraId).getFacingType(); + switch (faceType){ + case CameraInfo.FacingType.CAMERA_FACING_FRONT: + if (isFrontCamera) { + cameraId = logicalCameraId; + } + break; + case CameraInfo.FacingType.CAMERA_FACING_BACK: + if (!isFrontCamera) { + cameraId = logicalCameraId; + } + break; + case CameraInfo.FacingType.CAMERA_FACING_OTHERS: + default: + break; + } + } + if (cameraId != null && !cameraId.isEmpty()) { + CameraStateCallbackImpl cameraStateCallback = new CameraStateCallbackImpl(); + cameraKit.createCamera(cameraId, cameraStateCallback, eventHandler); + } } private void saveImage(ImageReceiver receiver) { @@ -157,7 +177,10 @@ public class TakePhotoAbility extends Ability { } private void switchCamera(Component component) { - isCameraFront = !isCameraFront; + isFrontCamera = !isFrontCamera; + if (cameraDevice != null) { + cameraDevice.release(); + } updateComponentVisible(false); openCamera(); } @@ -196,7 +219,15 @@ public class TakePhotoAbility extends Ability { private class SurfaceCallBack implements SurfaceOps.Callback { @Override public void surfaceCreated(SurfaceOps callbackSurfaceOps) { - openCamera(); + if (callbackSurfaceOps != null) { + callbackSurfaceOps.setFixedSize(SCREEN_HEIGHT,SCREEN_WIDTH); + } + eventHandler.postTask(new Runnable() { + @Override + public void run() { + openCamera(); + } + },200); } @Override diff --git a/media/Camera/entry/src/main/java/ohos/samples/camera/VideoRecordAbility.java b/media/Camera/entry/src/main/java/ohos/samples/camera/VideoRecordAbility.java index 361f364aa46256b9806cd80c1af2225d4a9c1a90..ba7de740b1a8c83fb158a976591b10b73dd3dfc3 100644 --- a/media/Camera/entry/src/main/java/ohos/samples/camera/VideoRecordAbility.java +++ b/media/Camera/entry/src/main/java/ohos/samples/camera/VideoRecordAbility.java @@ -34,6 +34,7 @@ import ohos.hiviewdfx.HiLogLabel; import ohos.media.camera.CameraKit; import ohos.media.camera.device.Camera; import ohos.media.camera.device.CameraConfig; +import ohos.media.camera.device.CameraInfo; import ohos.media.camera.device.CameraStateCallback; import ohos.media.camera.device.FrameConfig; import ohos.media.common.AudioProperty; @@ -53,6 +54,10 @@ public class VideoRecordAbility extends Ability { private static final HiLogLabel LABEL_LOG = new HiLogLabel(3, 0xD000F00, TAG); + private static final int SCREEN_WIDTH = 1080; + + private static final int SCREEN_HEIGHT = 1920; + private SurfaceProvider surfaceProvider; private Surface recorderSurface; @@ -153,9 +158,29 @@ public class VideoRecordAbility extends Ability { private void openCamera() { CameraKit cameraKit = CameraKit.getInstance(getApplicationContext()); String[] cameraList = cameraKit.getCameraIds(); - String cameraId = cameraList.length > 1 && isFrontCamera ? cameraList[1] : cameraList[0]; - CameraStateCallbackImpl cameraStateCallback = new CameraStateCallbackImpl(); - cameraKit.createCamera(cameraId, cameraStateCallback, eventHandler); + String cameraId = ""; + for (String logicalCameraId : cameraList) { + int faceType = cameraKit.getCameraInfo(logicalCameraId).getFacingType(); + switch (faceType){ + case CameraInfo.FacingType.CAMERA_FACING_FRONT: + if (isFrontCamera) { + cameraId = logicalCameraId; + } + break; + case CameraInfo.FacingType.CAMERA_FACING_BACK: + if (!isFrontCamera) { + cameraId = logicalCameraId; + } + break; + case CameraInfo.FacingType.CAMERA_FACING_OTHERS: + default: + break; + } + } + if (cameraId != null && !cameraId.isEmpty()) { + CameraStateCallbackImpl cameraStateCallback = new CameraStateCallbackImpl(); + cameraKit.createCamera(cameraId, cameraStateCallback, eventHandler); + } } private void switchCamera(Component component) { @@ -247,7 +272,16 @@ public class VideoRecordAbility extends Ability { private class SurfaceCallBack implements SurfaceOps.Callback { @Override public void surfaceCreated(SurfaceOps callbackSurfaceOps) { - openCamera(); + if (callbackSurfaceOps != null) { + callbackSurfaceOps.setFixedSize(SCREEN_HEIGHT,SCREEN_WIDTH); + } + eventHandler.postTask(new Runnable() { + @Override + public void run() { + openCamera(); + } + },200); + } @Override