Android之 Camera 框架,Android程序员必备

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

android_hardware_camera.cpp 文件中的 register_android_hardware_Camera(JNIEnv *env)函数

会将上面的 native 函数注册到虚拟机中,以供 FrameWork 层的 JAVA 代码调用。这些 native

函数通过调用 libcamera_client.so 中的 Camera 类实现具体的功能。

核心的 libcamera_client.so 动态库源代码位于:   frameworks/base/libs/camera/,  实现了如下几

个类:

Camera---->Camera.cpp/Camera.h

CameraParameters—>CameraParameters.cpp/CameraParameters.h

Icamera—>ICamera.cpp/ICamera.h

IcameraClient—>ICameraClient.cpp/ICameraClient.h

IcameraService—>ICameraService.cpp/ICameraService.h

Icamera、IcameraClient、IcameraService 三个类是按照 Binder IPC 通信要求的框架实现的,用

来与 service 端通信。

类 CameraParameters 接收 FrameWork 层的 android.hardware.camera::Parameters 类为参数,

解析与格式化所有的参数设置。

Camera 是一个很重要的类,     它与 CameraService 端通过 Binder IPC 机制交互来实现具体功能。

Camera 继承自 BnCameraClient,并最终继承自 ICameraClient。

Camera 类通过:

sp sm = defaultServiceManager();

sp binder = sm->getService(String16(“media.camera”));

sp mCameraService = interface_cast(binder);

得到名字为“media.camera”的 CameraService。通过调用 CameraService 的接口 connect()返

回得到 sp mCamera,并在 CameraService 端 new 一个 CameraService::Client 类

mClient。mClient 继承自 BnCamera,并最终继承自 ICamera。

之 后 Camera 类 通 过 这 个 sp mCamera 对 象 调 用 函 数 就 像 直 接 调 用

CameraService::Client 类 mClient 的函数。CameraService::Client 类实现具体的功能。

service 端

实现在动态库 libcameraservice.so 中,  源代码位于:  frameworks/base/camera/libcameraservice

Libcameraservice.so 中主要有下面两个类:

Libcameraservice.so::CameraService 类 , 继 承 自 BnCameraService , 并 最 终 继 承 自

ICameraService

Libcameraservice.so::CameraService::Client 类, 继承自 BnCamera,    并最终继承自 ICamera

CameraService::Client 类通过调用 Camera HAL 层来实现具体的功能。目前的 code 中只支持

一个 CameraService::Client 实例。

Camera Service 在 系 统 启 动 时 new 了 一 个 实 例 , 以 “ media.camera ” 为 名 字 注 册 到

ServiceManager 中。在 init.rc 中有如下代码执行可执行文件/

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值