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类似。
分享到:
相关推荐
Camera module for Android applications. Screenshots: https://www.dropbox.com/sh/2d7svoykpwpwmbw/AAAveLqvtaJ2Zt5NHaEu3-QSa Usage In your Application class call managers initializer: public class App ...
Android Camera 架构学习(Binder) ...Camera Architecture 是 Android 操作系统中的一部分,负责处理 CAMERA 相关的功能。它基于 Binder 机制,提供了高效的进程间通信机制,良好的可扩展性和高度的可靠性。
因为工作中要使用 Android Camera2 API 来实现相机功能,但因为Camera2比较复杂,网上资料也比较乱,有一定入门门槛,所以花了几天时间系统研究了下,这个项目就是我研究的成果。 其中包括一个自己写的Camera2的Demo...
`Camera`类的使用涉及到权限设置,如需访问相机,需要在`AndroidManifest.xml`中声明`<uses-permission android:name="android.permission.CAMERA" />`。 ### 摄像头预览 在Android相机应用中,首先需要创建一个...
由于工作中需要用到Camera1,所以花了两天时间研究了以下,使用Android Camera1 API实现了相机预览、拍照和录制视频的功能。 资源中有个MyCamera1Demo.apk可以直接安装运行,MyCamera1Demo.zip是Demo源码。 具体详见...
本篇文章将详尽地探讨"Android Camera开发与设置偏好值"这一主题,包括如何启动相机预览、设置相机参数以及理解Android Camera API的工作原理。 首先,Android Camera API分为两个版本:Camera API1(在Android 3.0...
`Camera2` API自Android 5.0(API级别21)开始引入,旨在解决旧版`Camera` API的局限性,提供更高清晰度的图片、更好的手动控制以及更多的视频录制选项。 标题"android camera2 google官方demo"表明这是一个基于`...
在Android平台上,Camera API是开发人员用来访问和控制设备摄像头的关键接口。这个“android Camera源码(可用)”提供了一套完整的源代码,已经解决了常见的问题,如包名冲突或运行时错误,使得开发者可以方便地...
"Android Camera添加水印(编码)"这一主题主要涉及如何在用户拍摄照片或录制视频时,实时地将自定义的水印信息叠加到图像或视频帧上。下面我们将深入探讨这个话题,包括必要的理论知识、实现方法以及可能遇到的问题。...
自己总结的Android Camera系统架构及源码分析,以framework和hal为主。
专栏主要记录Camera开发相关内容,包含Camera、Camera2、CameraX以及USB(UVC)摄像头。 和大家一起快速入门Camera开发工作,为后期的视频编解码、拍照、录像、推流等打好基础工作。
Android Camera API提供了丰富的接口和工具,让开发者可以构建出具有复杂拍照功能的应用。以下是基于提供的标题、描述和标签所解析出的Android相机拍照流程的关键知识点。 首先,我们要理解Android Camera API的三...
《深入解析Android Camera2 API》 在Android平台上,相机功能是开发者和用户都非常关注的部分,尤其是在移动设备上,高质量的拍照体验对用户来说至关重要。随着Android系统的不断演进,Camera API也经历了从早期的...
androidcamera摄像头驱动.pdf
在Android平台上,Camera2 API是自Android 5.0(API级别21)引入的全新相机接口,旨在提供更高级别的控制和性能。这个API允许开发者深入到相机硬件的细节,实现专业级的拍照和视频录制功能。本文将详细介绍如何使用...
android camera mirror 前置后置相机视频预览时左右镜像,实现镜子效果 基于以下网址实现的android studio项目源代码包,可以直接打开使用 https://blog.csdn.net/mbrose/article/details/80167781 代码做了一...
### Android Camera 架构深入解析 #### 一、Android Camera 概述 Android Camera 模块作为移动设备上的核心功能之一,在系统架构设计上显得尤为重要。为了更好地理解其内部工作原理,我们首先需要对它的整体架构有...
Android Studio提供了强大的集成开发环境,而Camera2 API则是Android系统提供给开发者用于访问和控制摄像头的高级接口。本篇将详细介绍如何利用MediaRecorder和Camera2框架来实现一个基本的录像功能。 1. **Camera2...
在Android平台上,Camera2 API是用于访问和控制设备相机功能的高级接口,相较于早期的Camera API,Camera2提供了更精细的控制和更好的性能。本文将深入探讨如何使用Camera2 API来实现预览和拍照功能。 一、Camera2 ...
我自己写的Android CameraX Demo,实现了预览/拍照/录制视频/图片分析/对焦/切换摄像头等操作。 具体详见我的博客 : https://blog.csdn.net/EthanCo/article/details/125603671