vidcat在优龙pxa270开发板上的移植

移植过程比较简单,网上有一篇流传很广的文章里面讲的很清楚,即从w3cam-0.7.2源代码中抽取出3个文件:vidcat.c v4l.c v4l.h 后,用arm-linux-gcc交叉编译即可。注意其中的编译选项“-DVIDEO_DEV=/"/dev/video/" -DVERSION=/"0.7.2/" ”,其中的-DVIDEO_DEV 选项设定程序要用到的的默认video4linux设备名称,我的板子上是/dev/v4l/video1,故我的-DVIDEO_DEV 即设定为“-DVIDEO_DEV=/"/dev/v4l/video1/",至于-DVERSION选项随便给一个就好。当然要注意选项是大写的。

把vidcat拷贝到开发板上后,运行

./vidcat -p c > test.jpg

提示错误:Invalid argument

后又尝试:

./vidcat -p y > test.jpg

这次没报错,故可能是那个rgb24调色板(palette)不可用(具体是硬件原因还是软件原因以后具体分析),但是 这次得到的 test.jpg 大小为0 bytes,所以说还有问题。但限于自己水平,读源代码不太可能找到问题所在,故Google之。结果,我搜到了一个哥们提出的一个关于vidcat在2410上移植的问题,上面讲到没法直接生成jpeg格式的文件,同时从其他的回帖来看造成这种情况的原因是系统中缺少jpeg的lib。而且他说到可以生成ppm格式的文件,因为我的当务之急是测试买的二手的webeyev2000摄像头是否可用,所以就没有花时间去实现改写代码来实现jpeg文件的抓取,而是直接试了试是否可以生成ppm文件,命令:

./vidcat -p y > test.ppm

生成了文件,把它拷贝到主机linux(fc7)系统下x - windows下打开,成功,大喜——摄像头是好的!

后来又看了看源代码,发现可以生成yuv文件,记得在前面编译xvidcore的时候,为encraw找yuv格式的测试序列大伤脑筋的一把,这是我便产生了通过vidcat来生成yuv格式的序列并通过encraw编码成mpeg-4格式来播放的念头,于是尝试如下:

./vidcat -p y -f yuv4mpeg -s 176x144 > test.yuv

确实生成了test.yuv文件,但是当我把它encraw后用用XvidDecTst播放时,发现图像不是一帧一帧地显示,而是帧与帧之间有重叠,从而导致了播放时图像有向右平移的现象。分析造成这种现象的原因:不在播放端,不在编码端,只能在图像采集端。所以再次拿过vidcat 的源代码来分析。起初认为可能是双缓冲的vid_buf.offsets[0]和vid_buf.offsets[1]的大小不对,造成了图像帧的错位叠加,在查看了vid_buf.offsets[0]/[1]的实际大小后,我排除了之中可能,之后又分析了种种可能原因,都一一排除,最后看到代码中的put_to_ppm,put_to_pgm等都是直接写到文件out中,而to_yuv是把输出写道stdout,我在获取test.yuv文件的时候使用的是 “>” 来实现的,而这种保存文件的方式相比起其他几个来应该要花上多几倍的时间,而在系统来不及写完文件的时候可能就会造成不同帧数据的混叠,会不会是这个原因造成的呢?于是,我把程序中的sdtout输出改成输出到out文件,如下命令:

./vidcat -s 176x144 -p y -f yuv4mpeg -o test.yuv

后,编码,播放,一切顺利!这提醒我做嵌入式应用时必须考虑的时间,时序!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值