Android Camera Module Architecture and Bottom layer communication mechanism
-----------albertChen
Android应用程序编程语言是JAVA,而linux的很多服务程序,包括一些libraries都是用c 或者c++写的,应用程序使用什么样的机制去调用这些系统函数的呢?Java的虚拟机可以通过
System.loadLibrary
来加载本地库,也可以通过JNI
函数
RegisterNatives
来注册与类相关联的本地方法。在Android中对于一些底层平台相关的native函数大多采用注册关联的方式来调用。
系统启动后两个重要的process
:
1:App_main process: 进程通过AndroidRuntime调用register_jni_procs向JNI注册模块的native函数供JVM调用。
2:Mediaserver proces:进程注册了以下几个server:
AudioFlinger, MediaPlayerServer;CameraService.
Android Camera Application调用native 函数流程:
首
先Android
Runtime调用register_android_hardware_Camera注册Camera相关的navtive函数到JNI。然后调用
android_hardware_Camera_native_setup为Application创建一个client
通过openCameraHardware打开设备,并连接到CameraServer。Application
开启preview的过程与Application建立到CameraService之间连接相似。这个过程如下图:
从
上面可以看出在JAVA VM 与native之间存在一个非常重要的连接层JNI即JAVA Native
Interface。Android1.0平台提供了Camera相关的native接口,如果这些接口不够的话,通过这种机制我们可以方便的进行扩展,
但是我们自己扩展的接口是与我们的硬件平台相关的,并不是Android官方支持的。网上有人说Android1.0不支持JNI,Android无法执
行本地JNI调用,但从Android源码来看是乎不存在这种情况,至少是支持注册与类相关联的本地方法。
Android Architecture
JAVA process 与Native process之间的通信
Native process姑且认为是以c,c++语言编写服务程序(是独立的一个进程)。JAVA process是通常说的Android Application。还是Camera模块为例。我们要建立Camera Object,与CameraService Object之间的通信。
JAVA Application调
用native_setup在CameraService中创建了一个Camera客户端,客户端通过getCameraService取得
CameraSevice中的IBinder对象,为JAVA Application
与CamerService之间建立了一个接口ICameraService,通过这个接口我们调用BpCameraService::connect
实际上通过前面取得的IBinder对象将调用CameraService::onTransact函数在这个函数中再调用
BnCameraSrvice::onTransact至此JAVA Application与CameraService之间的消息管道建立完毕。
上
图中,Camera.jar Camera.cpp,ICamera, ICameraService的对象都属于java application
process,当两个object之间的通信建立完毕,java
application通过ICamera接口向CameraService中Camera Client发送消息。
在Native层,不同进程间两个
对象需要传递消息需要继承IBinder接口,如果一个对象只需要发起连接可以继承IBinder的扩展接口BpInterface,如果需要接受连接请
求可以继承BnInterface接口,比如在ICamera.cpp中有两个接口BpCamera与BnCamera,BpCamera用于发送消
息,BnCamera由CameraService继承,最近消息响应通过BnCamera调用CameraService::client对象处理消
息。
AudioRecord,AudioFinger,MediaPlayer其底层接口实现方式与Camera类似。
欢迎联系交流:auspiciousbird@126.com
相关推荐
Android camera模块代码分析以及camera 对视频的处理流程
android 照相机的实现 以及 一部分图像处理 图像调节 色调 饱和度 透明度
Android Camera 模块
Camera模块解析驱动.pdf Android Camera的接口与架构介绍.pdf 第七章_Android_Camera架构.pdf 学习camera framework 总结.pdf Android框架下Camera的设计与实现.pdf android_Camera框架分析.pdf
V40 camera模块使用说明,用于V40芯片camera部分,调试。
android camera 模块开发。
Camera代码分析资料。是android的本身就带的camera 源代码分析
实现Camera功能的相关模块为: 1. android_cupcake/packages/apps/Camera/src/com/android/camera 此部分内容被编译为Camera.apk android_cupcake/framework/base/core/java/android/hardware/Camera.java ...
android系统模块源码:音乐播放器,BasicSmsReceiver,Bluetooth,VideoEditor,Phone,Camera,Gallery等
android相机的应用,简单的人脸识别,简单的mvp代码封装。目前未加没有动态权限申请。
android整个Camera模块的应用层源代码,供大家学习。
目前有很多智能设备采用了Android系统,对Camera,图形渲染都有很多不同于手机App的需求,在没有很好的跨进程传输方案的情况,有些项目只能把很多业务功能杂糅在一个App进程中,使模块承载的业务功能不是很清晰,有...
android-CameraRecorder Android摄像头相关 模块说明 appcamera 摄像头录制视频App
本资料提供了摄像机传感器和相关模块的驱动程序开发指南,并描述了如何在MSM 8909、MSM 8916、MSM 8992、MSM 8994和MSM8x36 Android平台。
RK3399 Android7.1 Hal层Camera模块通过回填的形式获取HDMI输入图像数据
Camera2_aosp_app AOSP的Android最新Camera2应用程序。 我更改了编译方法,如果您想使用Android Stuido对其进行编译,请参见以下存储库: : 。 和Camera2仅用于Camera2_Project的子模块。
采用android5.0中Camera2 api+MVP模式开发的一个相机程序。 运行效果如下: 包含以下功能: 拍照 录像:单次录像,暂停与恢复录像。 模式设置:自动调焦,闪关灯,手动调焦, zoom调焦 采用的技术点: Camera2 API:...
基于高通平台的android源代码中,camera模块的软件架构分析。