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 结构如下图:


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流程如下图:



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

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

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

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

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





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

在mxr_reg_reset函数中:


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





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

效果图像为:



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


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


显示的是灰色的图像。


alpha设置0x80的效果图:


花也变成了灰色。


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

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


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




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值