Camera1分析
1.相关概念介绍
camera 1相关内容 | 作用 |
---|---|
camera.java | 进行初始化设置以及调用jni实现功能 |
android_hardware_Camera.cpp | 调用native层代码获得底层camera硬件的访问入口 |
camera.java
- 位置: frameworks/base/core/java/android/hardware/Camera.java
- 首先不会去调用缺省构造函数,获取Camera对象是在Camera.open()获取的,这个也是一个静态方法,在这个方法的基础上,会调用构造函数来进行初始化设置。
- 在这个类当中的主要方法有:
- public final void setPreviewDisplay(SurfaceHolder holder)
- public final void takePicture(ShutterCallback shutter, PictureCallback raw,PictureCallback jpeg)
- public void handleMessage(Message msg)
可以看到在这个类当中,主要涉及
- 相机初始化
- 相机参数设定
- 相机处理回调
- 相机调用JNI(主要目的)
- 相机消息处理
Message | 解释 |
---|---|
CAMERA_MSG_SHUTTER | 处理相机回调 |
CAMERA_MSG_RAW_IMAGE | 处理当拍照完成且图片为raw的回调 |
CAMERA_MSG_COMPRESSED_IMAGE | 处理当拍照完成且图片为JPEG的回调 |
CAMERA_MSG_PREVIEW_FRAME | 处理获取预览的回调 |
CAMERA_MSG_FOCUS | 处理获取聚焦的回调 |
4. 关于surface:简单的说Surface对应了一块屏幕缓冲区,每个window对应一个Surface,任何View都要画在Surface的Canvas上(后面有原因解释)。传统的view共享一块屏幕缓冲区,所有的绘制必须在UI线程中进行。在SDK的文档中,对Surface的描述是这样的:“Handle onto a raw buffer that is being managed by the screen compositor”,翻译成中文就是“由屏幕显示内容合成器(screen compositor)所管理的原始缓冲区的句柄”,这句话包括下面两个意思:
1、通过Surface(因为S