第6讲 Android Camera2 API Open、Close Camera代码实现

本讲是Android Camera专题系列的第6讲,我们介绍Android Camera2 API专题的Open、Close Camera代码实现部分。

视频在线观看:

枚举Camera数量

public int getNumberOfCameras() {
    try {
        String[] cameraIdArray = mCameraManager.getCameraIdList();
        if(MyDebug.LOG) {
            Log.d(TAG, "getCameraIdList length:" + cameraIdArray.length);
        }
        for (int i = 0; i < cameraIdArray.length; i++) {
            isLogicalMultiCamera(mContext, i);
            if(MyDebug.LOG) {
                Log.d(TAG, "CameraID:" +i + ", Facing:" + getFacing(i));
            }
        }
        return cameraIdArray.length;
    } catch(Throwable e) {
        if(MyDebug.LOG) {
            Log.e(TAG, "exception trying to get camera ids");
        }
        e.printStackTrace();
    }
    return 0;
}

判断Camera Facing

@Override
public CameraController.Facing getFacing(int cameraId) {
    try {
        String cameraIdS = mCameraManager.getCameraIdList()[cameraId];
        CameraCharacteristics characteristics = mCameraManager.getCameraCharacteristics(cameraIdS);
        switch(characteristics.get(CameraCharacteristics.LENS_FACING)) {
            case CameraMetadata.LENS_FACING_FRONT:
                return CameraController.Facing.FACING_FRONT;
            case CameraMetadata.LENS_FACING_BACK:
                return CameraController.Facing.FACING_BACK;
            case CameraMetadata.LENS_FACING_EXTERNAL:
                return CameraController.Facing.FACING_EXTERNAL;
        }
        Log.e(TAG, "unknown camera_facing: " + characteristics.get(CameraCharacteristics.LENS_FACING));
    } catch(Throwable e) {
        if(MyDebug.LOG)
            Log.e(TAG, "exception trying to get camera characteristics");
        e.printStackTrace();
    }
    return CameraController.Facing.FACING_UNKNOWN;
}

判断是否是Logical MultiCamera

@Override
public boolean isLogicalMultiCamera(Context context, int cameraId) {
    try {
        String cameraIdS = mCameraManager.getCameraIdList()[cameraId];
        CameraCharacteristics characteristics = mCameraManager.getCameraCharacteristics(cameraIdS);
        Set<String> phySicalCameraIds = characteristics.getPhysicalCameraIds();
        int[] capabilities = characteristics.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES);
        List<Integer> capabilitiesList = new ArrayList<>();
        for(Integer capability : capabilities) {
            capabilitiesList.add(capability);
        }
        int logicalMultiCameraId = CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA;
        Log.d(TAG, "(LogicalCamera: " + cameraIdS +
                ",PhysicalCameraIds:" + phySicalCameraIds.toString() +
                ",has LOGICAL_MULTI_CAMERA capability:" +
                capabilitiesList.contains(logicalMultiCameraId) + ")");
        return capabilitiesList.contains(logicalMultiCameraId) && (capabilities.length > 0);
    } catch (Throwable e) {
        if(MyDebug.LOG)
            Log.e(TAG, "exception trying to isLogicalMultiCamera.");
        e.printStackTrace();
    }
    return false;
}

OpenCamera流程代码实现

OpenCamera流程代码实现

实战代码流程

Preview#onSurfaceTextureAvailable
    Preview#mySurfaceCreated
        Preview#openCamera
            Preview#mOpenCameraTask.execute();
                Preview#openCameraCore
                    new CameraController2
                        manager.openCamera

Close Camera代码实现

Close Camera代码实现

实战代码流程

Preview#onSurfaceTextureDestroyed
    Preview#mySurfaceDestroyed
        Preview#closeCamera
            new CloseCameraTask
                CameraController2#release
                    mCameraDevice.close
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

deepinout_camera

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值