Android系统--Camera 1.0 部分源码分析

本文深入分析Android Camera1.0的源码,主要涉及Camera.java、android_hardware_Camera.cpp和Camera.cpp。从相机初始化、参数设置、回调处理到JNI调用,特别是Surface在预览显示中的作用,以及Native层如何通过ICamera接口与底层服务通信,利用Binder机制进行跨进程交互。
摘要由CSDN通过智能技术生成

Camera1分析

1.相关概念介绍

camera 1相关内容 作用
camera.java 进行初始化设置以及调用jni实现功能
android_hardware_Camera.cpp 调用native层代码获得底层camera硬件的访问入口

camera.java

  1. 位置: frameworks/base/core/java/android/hardware/Camera.java
  2. 首先不会去调用缺省构造函数,获取Camera对象是在Camera.open()获取的,这个也是一个静态方法,在这个方法的基础上,会调用构造函数来进行初始化设置。
  3. 在这个类当中的主要方法有:
    • 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值