【连载7.2.3】RGB888转YCbCr功能测试
0赞OK,这里解决RGB888数据源的问题。我们直接再前面02_VGA_OV7725_Sensor1_RAW640480中的VIP模块内,进行进一步计算,即便将得到的Bayer恢复得到的RGB888数据,输入到RGB888转YCbCr模块中,转换为YUV444。如下图所示:
最后,将Video_Image_Processor输出得到的处理后的视频流信号,输出给SDRAM的RD-FIFO写入端口。虽然我们完成了完整的RGB888转YCbCr444,不过灰度显示只需要Y通道,因此CbCr这里并没有使用到。那么我们让显示器显示灰度图(这也是我们后面算法处理的源数据),即R=G=B=Y即可。
那么问题来了,这里进一步探讨下:
1)Y只有8bit,但是SDRAM为16bit宽度,这浪费了一半,因此修改SDARM控制器,将输入输出的DCFIFO分别改为8转16或16转8,比如写DCFIFO如下所示:
2)从这里开始,为了代码的整洁与可移植性,在Bingo提供的配套代码中,采用了宏定义,即VIP文件夹所有工程的Video_Image_Processor代码均保持一致,但是通过宏定义define区分,如下文件所示:
所以后面的滤波,边缘检测,服饰膨胀等算法,代码上只需要打开宏定义就可以了。这样最大程度地保证了功能的可阉割性和代码的可以执行,请读者好好学习!
最后,言归正传,OV7725采集Bayer→恢复RGB888→转YCbCr444→提取Y→R=G=B=Y显示灰度图像的功能,全编译,下载sof后测试,如下图所示。左图为上一章中Bayer恢复后RGB565的VGA显示,右图为本节中最后提取的灰度视频的VGA显示。
至此,我们的第一个HDL-VIP工程完成,基本的VIP算法框架实现。在后续的各种VIP算法介绍中,万变不离其中!(别牛角尖说第一个HDL-VIP是前面的Bayer转RGB哈。)