问题描述: camera 的输入源是bt656,交错扫描, 720×576.但是输出到屏幕上是480×320的分辨率。所以用到了resizer的功能,从resizer取出的图像如果camer不移动,效果正常(如图1), 一旦移动camera,就会出现花屏(如图2)。看了下ReleaseNotes-04.02.00.07.pdf中说是不支持resizer驱动, 但是查看源码是有resizer的驱动,我经过了一点改动 可以实现resizer的功能, 就是不能移动camera。 我实现的方法是ccdc-> memory, memory->resizer->memory , 然后再写到display中显示。这里我可以保证的是 帧速率是是1秒25帧。

图一

图2
我没有更改源码中寄存器的值,显示就会成上面的样子. 有解决这个问题的大牛麻烦提醒下我应该怎么做 谢谢。
Chris Meng:
你好,
采集进来的是隔行数据,没有经过去隔行处理,直接逐行显示隔行数据,运动时候就会有这样的问题。不是resizer的问题。
yanlong wu:
回复 Chris Meng:
我是CCDC 采集数据到memory中, 然后将memory的内容再拷贝到resizer input的内存映射。 CCDC中已经设置了CCDC_SDOFST来进行反交错。我理解该寄存器就是将采集到的隔行数据进行反交错然后写到memory中, 然后我从内存中读取的就是一帧完整的数据( 这种情况我已经证实了, 我将CCDC的memory直接写到video7中从display模块的video2显示出来是没有问题的。)
这张图是我新拍的,可以很明显看到屏幕上有很多规律的但是不属于图像的行 出现,而且这种现象在黑白背景变化时特别明显。 直观上感觉的确像没有做隔行处理,但是我已经在上面解释过了,已经做了隔行处理。
还有一个问题是, 如果我直接从ccdc->resizer-> resizer out , 那么就不会出现以上的问题, 图像被放大了,效果很好,但是 ccdc直接到resizer貌似不支持反交错处理,所以 输出的图像是 下面的样子:
可以看到上半部分就是camera采集的偶数帧, 下半部分就是奇数帧。如果CCDC->resizer有反交错的方法,麻烦告诉我下。谢谢。如果没有反交错的功能,那么我只能用 ccdc->memory,然后memory->resizer, 因为ccdc->memory的时候是可以反交错的, 但是这种方法就出现上面出现的问题。
Chris Meng:
回复 yanlong wu:
你好,
CCDC->memory->resize 和CCDC-》Resize在处理上resizer硬件都是一样的,不会有不一样的功能。我怀疑CCDC->memory->resize丢弃了一场数据,把一场数据垂直方向放大了一倍来做去隔行的。你能读取一下resizer的寄存器来对比看看么?
yanlong wu:
回复 Chris Meng:
”CDC->memory->resize 和CCDC-》Resize在处理上resizer硬件都是一样的“
同意,因为我已经实验验证过了。
”我怀疑CCDC->memory->resize丢弃了一场数据,把一场数据垂直方向放大了一倍来做去隔行的。你能读取一下resizer的寄存器来对比看看么?“
应该不是, 因为我只将半帧进行放大效果也是很好的,就是 水波纹同时也放大了。
=================================================================================
我将ISPCCDC_SDOFST 中的LOFST0~LOFST3 更改为0, 1,0 ,1,再这种情况下我使用两种方法向LCD中输出图像,分别是CCDC->memory->display(图一), 和CCDC->memory -> resizer->memory-> display(图二)。
图一
图 二
图一是没有经过resizer的图像, camera 采集到的是720×288,所以上半部分显示的就是一个偶数场(在我的环境中应该是偶数场在前),下面显示的就是反交错的效果, 很有规律,而且可以看不到明显的区别。(如果上面的参数都设置为1,1,1,1,那么就是正确的反交错了)
图二是CCDC->memory->resizer->disyplay, 可想而知,当CCDC->memory这个阶段就是 图一中的数据, 然后经过resizer(resizer设置的input和output的大小是相等的), 从resizer中读取显示出来就可以看到明显的区别,我用箭头标记了, 这个地方有一条明显变暗的黑条, 我想这也就是我在之前图片中的问题的原因。
yanlong wu:
回复 Chris Meng:
我基本上可以找到问题的原因,但是我不知道该怎么解决。
问题的原因: 由于camera是采用的奇偶扫描, 然后CCDC进行反交错,来还原图像。 但是奇偶扫描 在camera快速移动时奇场和偶场采集的数据差别就会特别大, 然后将差别比较大的图像 给resizer , 这时resizer转换出来的图像就会有问题了,中间会出现多条横杠(也就是上图中红色箭头标识的地方)。
其实比较简单的测试环境就是 取出一张yuv的图片, 将第一行 和第二行循环输出到resizer,可以看到 输出的图像 还算比较平稳, 但是如果我将第1行和第4行循环输出到resizer中,就会出现横杠。
现在由于resizer的参数,包括其中的一些系数已经是固定的,我不知道该怎么设置了,所以貌似这种方法已经不可行 了。
Chris Meng:
回复 yanlong wu:
你好,
还有一个问题是, 如果我直接从ccdc->resizer-> resizer out , 那么就不会出现以上的问题, 图像被放大了,效果很好,但是 ccdc直接到resizer貌似不支持反交错处理,
【Chris】 能否尝试把resizer的输出offset配置为宽度x2。尝试在每个vd中断(场中断)里面修改resizer输出的地址,偶场输出地址假设为A,奇场输出地址需要配置为A+width?目的是为了把奇偶场合并成一帧。
yanlong wu:
回复 Chris Meng:
谢谢提醒,这应该是一个可行方案。 我试试,等有结果再回帖!
yanlong wu:
回复 Chris Meng:
Chris, 您好, 我已经尝试过了你提出的方法, 即 现将偶场放大,然后利用resizer output offset 来隔行输出,然后将奇场放大,通过更改resizer output addreass然后隔行插入。 这样输出后不的确不会出现横杠现象, 但是输出的图像效果不是很好。如图:
从图中可以看到效果。 斜线的地方出现了特别明显的锯齿, (这里的奇偶行应该是没有插反的), 但是如果水平的字效果就要好一些。
看来将奇偶场图片分别resizer,然后反交错的方法也是不可以行的, 不知道是否还有其他的方法能够实现??谢谢。
TI中文支持网






