我对Android Camera的认识,会陆续的全部写下来,逐步完善大脑里的Camera网络。
1.Android Camera的2个独立进程
Android Camera 是C/S架构已经被说烂了,但是我还是要把这条记下来,因为我时常会脑袋短路,在client端做些无用的劳动希望来解决问题,那么这个希望真的就是奢望了。
核心自然不用说,是service端。service进程一直负责接收底层Camera 驱动传来的数据,然后传给surface显示出来。
Client端也不是吃干饭的。Client进程虽然不曾拥有任何实质的Camera数据,但是service端为它提供了丰富的接口,它可以轻松的获得Camera数据的地址,然后处理这些数据。
最后再补一句废话,Client和Service是通过Binder通信的。
2.Camera和ICamera
刚开始接触Camera的时候,苦于理不清Camera的工作流程,当我看着看着Camera,摁着键盘Ctrl+】跳来跳去,跳到ICamera出现的时候,顿时心里只有一种感觉,这不是坑爹么!
其实,静下心来,仔细分析一下,也不是很坑爹 >_< ...
ICamera,ICameraClient,ICameraService 全部都属于Android Camera 的 Client端,他们的任务就是负责与Android Camera 的Service端通信。
嗯…还得使下这个图,请注意,我们一直活跃在Android Camera 的 Client端。
按照上图的流程,一路哐哐哐下来,到了Camera.cpp,终于和ICamera扯上关系了。对于上层应用来说,Camera.cpp是最为直接的函数调用和实现。继承于ICameraClient类,典型的Client端的接口实例。
千万不要怕晕,事实是这样的: sp<Camera> camera = Camera::connect();
Camera类通过sp<ICamera> mCamera对象,调用函数。
达到的效果就是好像是在直接调用CameraService::Client的mClient的函数们。
如果你晕了,就表明你没有记住我刚说过的Android Camera Service端 为Android Camera Client端提供丰富的接口。
sp<Camera> Camera::connect()
{
LOGV("connect");
sp<Camera> c = new Camera();
const sp<ICameraService>& cs = getCameraService();
if (cs != 0) {
c->mCamera = cs->connect(c);
}
if (c->mCamera != 0) {
c->mCamera->asBinder()->linkToDeath(c);
c->mStatus = NO_ERROR;
} else {
c.clear();
}
return c;
}
CameraService的connect函数接口:
sp<ICamera> CameraService::connect(const sp<ICameraClient>& cameraClient) {
…..
// create a new Client object
client = new Client(this, cameraClient, callingPid);
mClient = client;
if (client->mHardware == NULL) {
client = NULL;
mClient = NULL;
return client;
}
…..
}
就是这里了,创建了一个Client实例对象,并将该实例对象赋值给CameraSevice的类成员mClient,方便其实函数接口对Client的调用。
3.客户都是变态的,Sensor型号必须是多变的
客户总是换硬件方案,那么好吧,我们也要跟着重新移植Android Camera 。一提到移植两个字,许多人都觉得好可怕。我们讨论的是嵌入式,又不是医学,移植个肾脏你抖三抖情有可原,移植个Camera,就是多写个sensor驱动你怕啥?!
至于Sensor具体的配置属性怎么写,得听客户的,我说了不算。
嗨,程序员嘛,谁还没被客户的需求耍过?叹口气,就算了,绝不多抱怨。谁叫咱是IT界最伟大最智慧最善良的程序员呢!
分享到:
相关推荐
因为工作中要使用 Android Camera2 API 来实现相机功能,但因为Camera2比较复杂,网上资料也比较乱,有一定入门门槛,所以花了几天时间系统研究了下,这个项目就是我研究的成果。 其中包括一个自己写的Camera2的Demo...
4.0android之camera
由于工作中需要用到Camera1,所以花了两天时间研究了以下,使用Android Camera1 API实现了相机预览、拍照和录制视频的功能。 资源中有个MyCamera1Demo.apk可以直接安装运行,MyCamera1Demo.zip是Demo源码。 具体详见...
Android Camera2 API
自己总结的Android Camera系统架构及源码分析,以framework和hal为主。
androidusbcamera是在saki4510t/uvc camera的基础上开发的,usb摄像机(uvc设备)项目和视频数据采集的使用都是高度封装的,它可以通过几个简单的api帮助开发者轻松使用usb摄像机设备。通过使用androidusbcamera,您...
Android原生人脸识别,包含Camera和Camera2两种实现方法
Android 5.0以上Google官方建议使用camera2 ,camera已废弃。在这里给大家下载官方demo.
android camera mirror 前置后置相机视频预览时左右镜像,实现镜子效果 基于以下网址实现的android studio项目源代码包,可以直接打开使用 https://blog.csdn.net/mbrose/article/details/80167781 代码做了一...
我自己写的Android CameraX Demo,实现了预览/拍照/录制视频/图片分析/对焦/切换摄像头等操作。 具体详见我的博客 : https://blog.csdn.net/EthanCo/article/details/125603671
Android camera整体框架介绍
androidcamera摄像头驱动.pdf
一个简单的android camera的实现
Android Camera Imaging Test Suite / CTS Verifier Document version: 1.9 Document date: 31st May, 2016 The ITS is a framework for running tests on the images produced by an Android camera.
(精品)Android Camera分析(整理).pdf Android 的Camera架构介绍.pdf Camera模块解析驱动.pdf Android Camera的接口与架构介绍.pdf 第七章_Android_Camera架构.pdf 学习camera framework 总结.pdf Android框架下...
android原生人脸识别demo camera2
android的相机(android——camera)代码,这是一个完成的工程,用Eclipse导入即可编译使用。
android camera is for the test
Android源码之Camera的代码分享
Android中使用surfaceview开发的Camera相机,内容含有注释,非常清楚