我对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 Camera】之花落知多少相关推荐

  1. android camera 降低帧率_Android性能问题分析之bugreport

    Android手机性能问题一直是用户关注的重点,分析性能问题则成为工程师日常工作的一部分.根据问题的类型通常有适合的工具可供使用,比如systrace ,traceview,simpleperf等可视 ...

  2. Android Camera 通过V4L2与kernel driver的完整交互过程

    Android Camera 通过V4L2与kernel driver的完整交互过程 之前在  Android Camera 的执行流程   http://blog.chinaunix.net/uid ...

  3. Android Camera设置setPreviewCallback实现onPreviewFrame接口实时截取每一帧视频流数据

    1 概述 通过Android Camera拍摄预览中设置setPreviewCallback实现onPreviewFrame接口,实时截取每一帧视频流数据 2 知识点 ① Android Camera ...

  4. qcom Android Camera【转】

    本文转载自:http://blog.csdn.net/Wilsonboliu/article/details/54949196 1.总体架构 Android Camera 框架从整体上看是一个 cli ...

  5. android camera之nv21旋转

    android camera之nv21旋转 这周做的一个android的camera开发,需要获取到视频帧数据,并且需要是nv21格式的byte数组,并且视频帧的图像需要是正方向的.和android相 ...

  6. 【Android RTMP】Android Camera 视频数据采集预览 ( 图像传感器方向设置 | Camera 使用流程 | 动态权限申请 )

    文章目录 安卓直播推流专栏博客总结 一. Camera 传感器方向简介 二. Camera 图像传感器横向显示数据 三. Camera 图像传感器纵向显示数据 四. 设置 Camera 预览数据方向 ...

  7. 【Android RTMP】Android Camera 视频数据采集预览 ( 视频采集相关概念 | 摄像头预览参数设置 | 摄像头预览数据回调接口 )

    文章目录 安卓直播推流专栏博客总结 一. Android 端数据采集涉及到的相关概念 二. Camera 预览图像尺寸设置 三. 获取摄像头采集的数据格式 安卓直播推流专栏博客总结 Android R ...

  8. android camera(三):camera V4L2 FIMC

    关键词: android  camera CMM 模组 camera参数  CAMIF   V4L2   平台信息: 内核: linux 系统: android 平台:S5PV310(samsung ...

  9. android camera(二):摄像头工作原理、s5PV310 摄像头接口(CAMIF)

    关键词: android  camera CMM 模组 camera参数  CAMIF 平台信息: 内核: linux 系统: android 平台:S5PV310(samsung exynos 42 ...

最新文章

  1. python sort 多级排序_Python使用sort和class实现的多级排序功能示例
  2. 目标检测 dcn v2_使用Detectron2分6步进行目标检测
  3. 你真的了解Python吗?这篇文章可以让你了解90%,赶紧收藏!
  4. 输出质数(java)
  5. IPLAT62--弹窗
  6. IIS和Tomcat共用80端口的解决方案
  7. ie11兼容性视图设置_ie11浏览器不兼容的解决办法
  8. 【初识 JQMobile 小小总结】
  9. linux 实现离线迅雷,Linux 下使用 wget/aria2 进行离线迅雷批量下载
  10. 基于微信公众平台的智能硬件/智能设备APP开发详解
  11. 4.1.1认识计算机与程序,4.1.1-认识计算机与程序-课件.ppt
  12. 二维码扫描枪是如何在我们生活中助力移动支付成为主流
  13. python下对bin文件的处理
  14. Linux RabbitMQ - CLI tool fails to authenticate with the server
  15. 企业产品品牌如何打造?招商加盟数字化怎么做?
  16. 关于win10 睡眠或关屏恢复后卡顿的问题
  17. Java计算文章多少字_java计算中文字数的代码实例
  18. FAR PASCAL 的解释
  19. 开源mysql数据库审计工具_Yearning基于Inception的开源SQL审核平台(数据库审计)
  20. html清除盒子间距,inline-block元素默认间距清除

热门文章

  1. 数据库获取本年所有月份
  2. 信捷XDPLC十轴(包含)及以下万能通用程序模板,用进制数据和S状态完美结合
  3. Charles设置代理手机和浏览器抓包
  4. [ 网络协议篇 ] vlan 详解之 MUX vlan 详解
  5. 联想ERP项目实施案例分析(10):回到最初再反思IT价值
  6. 学计算机要6选3选什么学科,北京新高考选科,6选3到底怎么选?
  7. python变量定义是什么意思_Python 变量定义规范
  8. 3.深入PHP中的引用
  9. 汽车虚拟仿真vr教学系统激发学生探索科技的兴趣
  10. 网页端收消息,究竟是推还是拉?