Android 平台camera相关梳理
来源:互联网 发布:知乎马前卒是谁 编辑:程序博客网 时间:2024/06/05 03:19
其实这个题目起得有点大,不过,我实在找不到好的描述。
本文主要的作用是梳理思路用的。
一、usb 免驱camera。 其实就是UVC camera,免驱其实是免除手动安装,实际上是camera和系统都必须支持UVC的协议,然后系统自动安装。对于android来说,必须把底层的v4l2打开,然后添加jni层,上层才能调用。
二、和第一点对应的就是像mtk平台自带的camera,这种camera是mipi或者其他接口协议的数据,和第一点应该是完全不同的流程。
三、关于camera ISP(image single processor)的概念,平台不带isp的,camera模组本身一定要带。
四、单个摄像头如何做到capture video 不漏秒?两种流程应该需要分开来处理。
要解决这个问题,必须非常熟悉这两个流程。usb camera就是要把v4l2玩好。
网上总结的基本流程,非常清晰:
1.打开设备文件。 int fd=open(”/dev/video0″,O_RDWR);
2.取得设备的capability,看看设备具有什么功能,比如是否具有视频输入,或者音频输入输出等。VIDIOC_QUERYCAP,struct v4l2_capability;
3.设置视频的制式和帧格式,制式包括PAL,NTSC,帧的格式包括宽度和高度等。VIDIOC_S_STD,VIDIOC_S_FMT,struct v4l2_std_id,struct v4l2_format;
4.向驱动申请帧缓冲,一般不超过5个。struct v4l2_requestbuffers;
5.将申请到的帧缓冲映射到用户空间,这样就可以直接操作采集到的帧了,而不必去复制。mmap;
6.将申请到的帧缓冲全部入队列,以便存放采集到的数据.VIDIOC_QBUF,struct v4l2_buffer;
7.开始视频的采集。VIDIOC_STREAMON;
8.出队列以取得已采集数据的帧缓冲,取得原始采集数据。VIDIOC_DQBUF;
9.将缓冲重新入队列尾,这样可以循环采集。VIDIOC_QBUF;
10.停止视频的采集。VIDIOC_STREAMOFF;
11.关闭视频设备。close(fd);
重点从入队列和出队列来找突破点。
五、两个摄像头同时开启录像,会不会有其他的什么问题?例如传输带宽等。
涉及到的知识点:数据格式,压缩方式
好像H264和mpeg比较通用。
搞清软解码和硬解码的区别:cpu解就是软解,显卡就是硬解。如果是双路摄像头同时录像的,最好能分开,一个软解,一个硬解。平台自带的camera调用的是gpu,属于硬解(MediaRecorder \ MediaCodec)。usb camera则需要自己利用开源h.264来编译.so来进行软解。
六、后台录像。这个简单,启用一个service就行。
需要加强的地方:
cameraservice相关的framework层
参考文章:
http://www.cnblogs.com/skyseraph 有一系列文章介绍,并且排版很好,方便阅读。
http://blog.csdn.net/andyhuabing/article/details/7229557
- Android 平台camera相关梳理
- Android Camera 流程梳理
- android camera相关demo
- android camera相关
- 英特尔xmm6321平台camera闪光灯相关记录
- Androdi平台camera的相关知识总结
- android平台camera基础知识总结
- Android相机Camera相关问题
- android Camera 中的相关概念
- 与Android camera相关代码
- Android基础知识梳理之View相关知识
- 【Camera】Android平台Camera实时滤镜实现方法
- Android平台硬件调试之Camera篇
- Android NVidia Tegra2平台Camera架构浅析
- Android NVidia Tegra2平台Camera架构浅析
- FS_S5PC100平台上Android Camera架构分析
- FS_S5PC100平台上Android Camera架构分析
- FS_S5PC100平台上Android Camera架构分析
- Spark经典视频之《王家林老师DT大数据梦工场》
- 【转】理解矩阵(三)
- 寻找固定的和(C百例)
- 在学习iOS的MRC管理中,遇到的retain引起的循环问题、NSString问题
- 【LintCode】 Reverse Linked List 翻转链表
- Android 平台camera相关梳理
- 编码规范之eclipse设置
- C++语言编程基础1
- 选择排序
- 《DirectX 9.0 3D 游戏开发编程基础》学习笔记#2 D3D初始化
- Union 和 Union All的区别
- POJ - 3254 Corn Fields 状态压缩
- 正则表达式基本概念
- 软件开发,一定意味着加班吗?