您的位置:首页 > 其它

Androdi平台camera的相关知识总结

2017-09-18 11:09 204 查看
想总结下camera整个数据流及中间的数据转换到显示,先大概梳理下整体思路,以后具体分析下。

1、UVC的对于android来说,必须把底层的v4l2打开,然后添加jni层,上层才能调用;

2、高通、MTK等平台camera,amera是mipi或者其他接口协议的数据,这是我要分析的重点!!!

3、关于camera ISP(image single processor)的概念,平台不带isp的,camera模组本身一定要带;



4、单个摄像头如何做到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);

      重点从入队列和出队列来找突破点。

5、两个摄像头同时开启录像,会不会有其他的什么问题?例如传输带宽等。

        涉及到的知识点:数据格式,压缩方式

        好像H264和mpeg比较通用。       

        搞清软解码和硬解码的区别:cpu解就是软解,显卡就是硬解。如果是双路摄像头同时录像的,最好能分开,一个软解,一个硬解。平台自带的camera调用的是gpu,属于硬解(MediaRecorder \ MediaCodec)。usb camera则需要自己利用开源h.264来编译.so来进行软解。

6、后台录像。这个简单,启用一个service就行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: