HDMI blend alpha 配置

问题:usb摄像头图像经过fimc0格式转换后并没有alpha值,只有rgb值,再输出到HDMI时,显示器背景出现蓝色;

分析:  在linux3.9.7中fimc-m2m只实现了格式转化和分辨率调整,没有s_ctrl中alpha配置功能的实现,当输出为RGB不能设置输出图像的alpha值,alpha值为0. 导致输出图像不正常。

解决方法:

1、fimc-m2c.c中添加配置alpha的函数;

2、修改mixer,使其默认输出为有0xff的alpha值;

为了简单测试,这里尝试修改mixer寄存器。

s5pv210 hdmi和tvout 结构如下图:

HDMI blend alpha 配置_第1张图片

s5pv210 视频输入有三个:一个VP(Video Processor)、两个Mixer;视频输出有两个Video DAC(TV Out)、HDMI。

1、VP(Video Processor) 主要负责接收YUV数据输入;

2、MIXER中的grp0和grp1主要负责接收RGB的数据输入;

3、然后这三种输入流按照blend的配置显示在输出设备上;

s5pv210支持 三者的优先级,alpha值和默认背景的配置。

blend流程如下图:

HDMI blend alpha 配置_第2张图片


mixer的alpha的配置有三种实现方式:

1、window blend方式:就是设置一个window blend的值,使整个画面都配置成这一个相同的alpha值,

2、pixel blend方式:根据每个像素的alpha值,和其他层的图像组合,

3、window blend + pixel blend方式:组合方式

下面是数据手册给出的公式:

HDMI blend alpha 配置_第3张图片

HDMI blend alpha 配置_第4张图片



这里测试例程只使用到了一个 grp0或者grp1,驱动默认使用的是pixel blend方式。

在mxr_reg_reset函数中:

HDMI blend alpha 配置_第5张图片

当fimc0出来的rgb数据的alpha值为0时,出来的不正常图像如下:


HDMI blend alpha 配置_第6张图片



修改寄存器,使能windows blend方式,禁用piexl blend方式,默认alpha值为0xff(为什么为0xff,下面会讲)

HDMI blend alpha 配置_第7张图片

效果图像为:

HDMI blend alpha 配置_第8张图片


这样,图像就显示正常了,只是在混合的时候不能按照每个像素的alpha值单独混合了。


当把alpha值设置为0x00时,这时blend因子为0,理论上,图像是100%透明,因为有之前已经设置了背景图像0x80808080,为灰度,显示效果如下:

HDMI blend alpha 配置_第9张图片

显示的是灰色的图像。


alpha设置0x80的效果图:

HDMI blend alpha 配置_第10张图片

花也变成了灰色。


这里通过驱动的修改,使hdmi的输出图像能够正常,因为测试都是比较简单的,不会考虑到pixel之间的混合,所以就舍弃了原有的配置。

如果使用原有的配置,不得不在fimc0输出的图像再重新遍历一遍,添加alpha值,影响了cam预览的的帧率。


以上纯属个人理解,可能存在错误和不足。




你可能感兴趣的:(HDMI blend alpha 配置)