chl00100的笔记 https://bbs.21ic.com/?432396 [收藏] [复制] [RSS]

日志

DM642中采集CIF4:2:0图像

已有 1105 次阅读2008-6-18 17:36 |个人分类:DSP|系统分类:DSP

近段在DM642上做H.264压缩录像,需要用到4:2:0格式的YUV,为了求速度,需要把默认的D1改为CIF.初始图方便就取了D1的左上角的1/4作为CIF用了,但这样有一个缺点就是视场也小了,变为了原来的1/4.于是想把整个视场抽样为CIF,一种最直接的办法可能就是对每行,列像素抽样,滤波等得到,这样做计算量稍微大了点.


查看TI的VIC文档发现DM642本身有1/2scaling功能,即可以把D1中每一行的Y分量的720pix抽样为360pix,但行数不变,还是576.   于是编了一个YUV422to420函数,完成功能为Y分量每隔两行(720pix)取352pix,UV分量每隔四行(720pix)取176pix,这其中422采样为420与我取D1的1/4左上角作为CIF时采用的方法是一样的,,,,,,,,但结果出现了bug,


主要是颜色不正,Y分量没有问题的.最后专门PS了一张图片,中间画一个十字分为四部分,分别为红,绿,蓝,黑,使其恰好充满整个sensor的靶面,发现经压缩解压缩后的图像上半部分红绿相间,且稍微往下倾斜,下半部分则为蓝黑相间,,,,,,,,,,,,,,分析一下,能判断肯定是UV采样搞错了,但到底错在哪里一时没看出来,因为用1/2scaling功能之前如此采样是没有出现问题的,仔细分析一下颜色错位的特点,判断应该是采集时出现了一个不该有的移位,所以把左边的红色会移到右边去,捣弄了半天,无果,,,,


突然想起来刚才1/2scaling后查看内存,video cap通道的Y,Cr,Cb中Cr,Cb分量好像有点异常,回头再看,发现按常理Cr,Cb都应该为180*576 = 103680的,可实际大小为105984,当时没有注意,现在用105984除以576才等于184,而不是180!!!!赶快把UV采样中的720pix改为每736pix采样176pix,重新编译下载,录像效果OK!!!


这个问题主要是1/2scaling时UV分量每行多出来了4个像素,但VIC资料中并没有提及,才浪费了偶半天时间,,,,,,,,


路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (2 个评论)

回复 dspserver 2008-12-12 10:32
你可以下载一个网络下载调试内核(bios) dspserver 网站(.com)有.内核驱动了部分外设,包括视频网络接口,是开源开放的,驱动完成后,直接跳转你程序入口,而不需要其它CPU资源,保证程 序纯净
回复 hanyuxia 2009-4-24 05:38
你好!我想问一下你,你把D1格式转成CIF格式,从你写的意思来看,就是用你编写的YUV422to420这个函数实现了D1格式到CIF格式的转换吗?