您的位置:笔笔发 技术资料 嵌入式操作系统 Android 正文
内容搜索
笔笔发:技术产业信息平台----成就有识之士创业梦想的殿堂
热门内容
推荐内容
Android camera preview and take picture with V4l2

本文章共3552字,分3页,当前第1页,快速翻页:
 

                                      Android camera preview and take picture with V4l2


FSL camera preview with V4l2

这部分spec的内容没有全看懂,但是根据FSL的代码能知道这其中的sequence,下面就结合着FSL的代码来描述下video overlay过程的sequence,如果有什么错误的地方,请大家指正。

首先介绍一下video overlay,vieo overlay不同于video capture,是指不需要对video信号的帧进行copy,直接将视频信号转化成显卡的VGA信号或者将捕获到的视频帧直接存放在显卡的内存中,具体过程就是将视频帧直接写入framebuffer中,不需要经过android 平台的处理。实际上看过FSL的camera preview过程之后就知道,它就是直接将视频数据 写入framebuffer,而没有经过android的surfaceflinger的处理。Video overlay需要硬件的支持,必须是支持video overlay的camera才能使用这套overlay interface。

因为video overlay直接使用linux 的framebuffer来显示捕获到的image,所以和capture相比它更具有效率,而不是将捕获到的image拷贝以后通过其他的方式(android surfaceflinger)来显示。Viedo overlay只用来preview,又被称为framebuffer overlay或previwing。

从spec上来看,实际上video capture interface也能实现preview,只是没有overlay有效率,因为video capture是将数据经过copy以后由android surfaceflinger来控制进行显示(实际上最后surfaceflinger还是通过framebuffer来显示的)。

Video overlay和Video capture使用同样的device,overlay的功能只有在调用VIDIOC_S_FMT后才会有效。下面就看看overlay流程的sequcence。

 

1、open device

这部分同video capture,首先是要打开设备。如果是同时进行overlay和capture,应该尽量不使用同一个文件 描述符,比如说如果此时在overlay,要拍照的话应该再打开设备,使用一个分开的文件描述符来进行capture。如果driver支持同时进行overlay和capture的话,必须支持使用分开的文件描述符来分别进行overlay和capture 。

camera_device = open(VIDEO_DEVICE, O_RDWR)) ;

2、set output

对于这个设置 输出不是太理解,但overlay换个角度来说是将捕获的image重新组合成能在屏幕上显示的视频信号,在这里的设置输出应该是如果device有多个输出的话,选择一个输出来将数据输入到屏幕,也就是framebuffer。

ioctl(camera_device, VIDIOC_S_OUTPUT, &g_display_lcd) ;

3、set control[可选]

设置用户控制参数,FSL在这里使用了他们驱动自定义的控制参数,不是很理解这个参数设置是想实现什么操作,我觉得这个应该是可选的。

ioctl(camera_device, VIDIOC_S_CTRL, &ctl) ;

4、set crop

这个同video capture是一样的,只是type由V4L2_BUF_TYPE_VIDEO_CAPTURE换成了V4L2_BUF_TYPE_VIDEO_OVERLAY,然后是取景参数的设置:left,top,width,height。

ioctl(camera_device, VIDIOC_S_CROP, &crop) ;

5、set format

这个format应该是最后preview我们在屏幕上看到的image的格式,如果在video capture中,这个就是我们拍照时image的格式。

ioctl(camera_device, VIDIOC_S_FMT, fmt) ;

6、 get video std

这个我觉得肯定是可选的,取得当前视频标准

ioctl(camera_device, VIDIOC_G_STD, &id) ;

7、set stream param

设置流参数,这个和video capture是相同的,这里的param.type是V4L2_BUF_TYPE_VIDEO_CAPTURE,其中timeperframe的分母是需要设定的帧率,而分子是1。

ioctl(camera_device, VIDIOC_S_PARM, &parm) ;

[PS]这里补充一点stream param方面的spec:
 

 
点这里复制本页地址发送给您QQ/MSN上的好友

相关文章

简单说说android的线程封装
Android Graphic : apk and Skia/OpenGL|E
Android 应用初始化及窗体事件的分发
Android Building System 总结
Android Codec 集成和 video Overlay
activity的任务堆栈API中文翻译
Android的Launcher研究--首發:客製化桌面U
Android Makefile and build system 分析
Android Power Management
Android Widgets的Click事件
Android,开源还是封闭?
Android重量级开发之--提高android启动速度
android omx分析
App Widget Framework分析之一:AppWidgetSe
Android 编译单个项目的方法
android使用 2D 方法实现倒影特效
介绍Android中与JSON相关的应用
【译】Android 多媒体扫描过程(Android Me
学习 camera framework 总结
Bitmap内存限制问题的一些看法和探索

相关评论


本文章所属分类:首页 技术资料 嵌入式操作系统 Android


反馈意见和建议