一、Camera2 操作android.hardware.Camera 分析

来源:互联网 发布:匡恩网络太有钱了 编辑:程序博客网 时间:2024/05/20 03:46



android.hardware.Camera    路径:frameworks/base/core/java/android/hardware/Camera.java
作为承上启下的作用。一些底层接口释放给上层应用。
1、    CameraHolder
这个类是为了保持“android.hardware.Camera”的实例。
这是用于不同模块之间的切换。
这个类在Camera应用里,是典型的单例模式。

方法:
(1)    public static synchronized CameraHolder instance() {
        if (sHolder == null) {
            sHolder = new CameraHolder();
        }
        return sHolder;
            }
            说明:创建单实例,如果实例sHolder 已经存在。那么就直接返回。否则就重新创建一个。
(2)     构造函数里面的语句
{
        HandlerThread ht = new HandlerThread("CameraHolder");
        ht.start();
        mHandler = new MyHandler(ht.getLooper());
//获取Camera数量
        mNumberOfCameras = android.hardware.Camera.getNumberOfCameras();
        mInfo = new CameraInfo[mNumberOfCameras];
        for (int i = 0; i < mNumberOfCameras; i++) {
            mInfo[i] = new CameraInfo();
            android.hardware.Camera.getCameraInfo(i, mInfo[i]);
        }

        // get the first (smallest) back and first front camera id
        for (int i = 0; i < mNumberOfCameras; i++) {
            if (mBackCameraId == -1 && mInfo[i].facing == CameraInfo.CAMERA_FACING_BACK) {
                mBackCameraId = i;
            } else if (mFrontCameraId == -1 && mInfo[i].facing == CameraInfo.CAMERA_FACING_FRONT) {
                mFrontCameraId = i;
            }
        }        
(3)    Open  方法
通过语句:
mCameraDevice = CameraManagerFactory
                    .getAndroidCameraManager().cameraOpen(handler, cameraId, cb);
来调用android.hardware.Camera 打开Camera 设备。
(4)    release()
关闭Camera的时候,调用release

2、    CameraManager 接口和AndroidCameraManagerImpl类
接口,为Camera设备提供操作的方法。这个接口的实现类是AndroidCameraManagerImpl
在这个接口里,只声明了一个方法。
    public CameraProxy cameraOpen(
            Handler handler, int cameraId, CameraOpenErrorCallback callback);
目的就是打开Camera设备。

在这个接口里面还声明多个内部的接口下面详细介绍。

3、    CameraProxy 接口 和AndroidCameraProxyImpl类
这个接口就是将对Camera 接受和发送的操作,送达到Camera设备。除了一些特殊的方法外,其他方法都是默认为异步操作。
这个接口的实现类是AndroidCameraProxyImpl,这个类属于AndroidCameraManagerImpl的内部类。在AndroidCameraManagerImpl.java 里面还有一个内部类CameraHandler,这个类属于Handler。在CameraHandler的handleMessage方法里,就是根据不同的消息参数来对android.hardware.Camera 进行控制。比如打开,释放,对焦,变焦等等

4、    CameraAFCallback 接口和AutoFocusCallback类
自动对焦回调的接口。此接口实现在PhotoModule类里面的内部类AutoFocusCallback实现。并且传给AndroidCameraProxyImpl的实例的autoFocus方法。然后调用CameraHandler 类里面的handleMessage方法,传给android.hardware.Camera 。
5、    CameraShutterCallback 接口 和 ShutterCallback 类
拍照的接口。
6、    CameraPictureCallback 接口和 PostViewPictureCallback,RawPictureCallback,JpegPictureCallback类
拍照后,将相片图片保存。


0 0
原创粉丝点击