mx51 IPU 透明处理
Freescale MX51平台的透明处理根据bpp(bits_per_pixel)不同,处理方式有所不同。
透明处理涉及到两个图层的合并,这个合并操作是MX51 IPU的DP(Display process)模块来进行的。
下图为mx51 datasheet中的DP 微观架构图

上图的中Combining Unit就是用来实现两个图层的合并,DP有两个input FIFOs用来传输full 图层和partial图层的数据。在传入Combining Unit之前,还会做CSC(Color space convert)
Combining Unit
Combining Unit执行full和partial图层的合并操作,这两个图层可以是graphics(UI)或者video图层,一般来讲,我们是指video层和UI层的合并。
在合并过程中,有如下四个因素
- 本地alpha参数:bpp(bits_per_pixel) = 32,每一个pixel中32bits中有8bits是alpha分量
- 全局alpha参数:bpp=16,相对于本地alpha把alpha分量保存在每一个pixel中,全局alpha需要设置DP_COM_CONF的DP_GWAM为global alpha模式
- color key:首先color key是优先于alpha的,如果使能了DP_GWCKE_SYNC,那么在combining过程中,优先查看这个pixel是否符合设定的color,符合则上层像素无效并且底层像素透明出来,并且忽略掉alpha计算;不符合则进行alpha计算
- 图层顺序: full在partial图层之上,或者partial在full图层之上
Alpha 计算公式
OP = BG*(1 - a) + FG*a
BG和FG是上下两层的pixels;通过DP_GWSEL选择BG是来自full层还是partial层。
a= (A+floor(A/128))/256 alpha值
A 全局或者本地alpha参数
透明代码实现
首先考虑bpp=16的情况,bpp16,pixel数据只包含rgb或者yuv分量,并不包含透明参数alpha。
一般情况下video数据在下层,graphics(UI)数据在上层,在播放video时,需要把UI显示在video上面,同时UI看起来好像有透明效果。
可设置framebuffer如下:
gbl_alpha.alpha = 64;
gbl_alpha.enable = 1;
int ret = ioctl(fd, MXCFB_SET_GBL_ALPHA, &gbl_alpha);
if(ret <0) {
LOGE("Error!MXCFB_SET_GBL_ALPHA failed!");
return -1;
}
struct mxcfb_color_key key;
key.enable = 1;
key.color_key = 0x00000000; // Black
ret = ioctl(fd, MXCFB_SET_CLR_KEY, &key);
if(ret <0) {
LOGE("Error!Colorkey setting failed for dev ");
return -1;
}
graphics(UI)是Android上层在一个全黑的画布(canvas)上,画出界面的,在和video合并时,要求未画界面的部分是透明露出video,这是通过使能color key并设置匹配值为黑色(0x00000000)。但是这种实现在架构上是不完善的,因为如果画界面是包含了黑色,那么黑色界面部分也会透出底层video。
对于不匹配color key的部分,Combining Unit做alpha处理,这样UI看起来好像有透明效果了。
如果不希望UI透明,可disable 全局alpha设置如下:
gbl_alpha.alpha = dummy_value;
gbl_alpha.enable = 0;
ioctl(fd, MXCFB_SET_GBL_ALPHA, &gbl_alpha);
或者
gbl_alpha.alpha = 255;
gbl_alpha.enable = 1;
ioctl(fd, MXCFB_SET_GBL_ALPHA, &gbl_alpha);
对于bpp(bits_per_pixel) = 32,那么透明需要的alpha变量包含在每一个pixel数据里面,只需如下设置framebuffer
struct mxcfb_loc_alpha l_alpha;
l_alpha.enable = true;
l_alpha.alpha_in_pixel = true;
if (ioctl(fd, MXCFB_SET_LOC_ALPHA, &l_alpha) < 0) {
printf("Set local alpha failed\n");
close(fd);
return -errno;
}
而上层画界面服务需要处理每一个pixel,在pixel数据中加入alpha分量。
mx51 IPU 透明处理的更多相关文章
- mx51的三个framebuffer,mxc_ipuv3_fb.c分析
转载:http://blog.csdn.net/jack_a8/article/details/43309169 mx51支持三个framebuffer:fb0, fb1, fb2 /dev/grap ...
- Android UI体验之全屏沉浸式透明状态栏效果
前言: Android 4.4之后谷歌提供了沉浸式全屏体验, 在沉浸式全屏模式下, 状态栏. 虚拟按键动态隐藏, 应用可以使用完整的屏幕空间, 按照 Google 的说法, 给用户一种 身临其境 的体 ...
- 使用CSS3的box-shadow实现双透明遮罩层对话框
box-shadow介绍 在我之前的一篇文章<从天猫和支付宝身上学习opcity与rgba>中,介绍了实现双透明遮罩层效果的两种方法,分别是opacity和rgba.他们需要分别依赖于不同 ...
- MFC背景透明
# 一: # typedef BOOL (WINAPI *lpfnSetLayeredWindowAttributes)(HWND hWnd, COLORREF crKey, BYTE bAlpha, ...
- 利用CSS背景颜色属性使父级div背景透明同时避免子级标签透明。
实现背景色透明效果的代码 实现各个浏览器中具备良好的透明特性的效果,IE中使用私有滤镜filter,高端浏览器使用CSS3中的rgba属性. 输入十六进制的颜色值以及透明度,自动在IE的过渡滤镜以及C ...
- android 设颜色透明值
如:把 <color name="line_gray_tran">#8d8d8d</color> 要设70%的透明值 计算方法:255*0.75=19 ...
- 父容器利用opacity设置透明后,子元素跟着变透明的解决方案
背景半透明,子元素不透明的效果经常需要用到.通常对父容器使用opacity属性时,子元素也跟着变透明,所以不妨设置父容器的 background-color:rgba(r,g,b,x); 其中x取值从 ...
- openwrt下部署adbyby去广告大师 免luci 带自启动,自动开启透明代理
最近朋友送了个360老路由器 C301,于是乎就掉进了智能路由器的坑, 玩智能路由器第一件事一定是去广告, 要么怎么对得起智能路由器- -! 路由器去广告当然首推广告屏蔽大师 www.adbyby.c ...
- VB6史无前例的子类化之透明按钮
[原创文章,转发请保留版权信息] 作者:mezstd 文章地址:http://www.cnblogs.com/imez/p/3299728.html 效果图: 请原谅笔者无耻地称之为史无前例,至少在笔 ...
随机推荐
- CYQ.Data 支持WPF相关的数据控件绑定.Net获取iis版本
CYQ.Data 支持WPF相关的数据控件绑定(2013-08-09) 事件的结果 经过多天的思考及忙碌的开发及测试,CYQ.Data 终于在UI上全面支持WPF,至此,CYQ.Data 已经可以方便 ...
- Ubuntu下使用vpn连接远程服务器
公司的服务器提供了vpn接入点,这样在家里也可以通过vpn连到公司的服务器里作一些事情.昨天下午申请了vpn帐号,然后先在windows下试着连接vpn服务器,一切okay,证明自己的vpn帐户没有问 ...
- hdu 1068
找出没有缘分的同学,如果有缘分的建边, 就是求最大独立集问题了 #include<stdio.h> #include<string.h> int n,m,ma[1050][10 ...
- 筛选实现C++实现筛选法
每日一贴,今天的内容关键字为筛选实现 筛选法 分析: 筛选法又称筛法,是求不超越自然数N(N>1)的全部质数的一种方法.据说是古希腊的埃拉托斯特尼(Eratosthenes,约公元前274-19 ...
- OGG学习笔记02-单向复制配置实例
OGG学习笔记02-单向复制配置实例 实验环境: 源端:192.168.1.30,Oracle 10.2.0.5 单实例 目标端:192.168.1.31,Oracle 10.2.0.5 单实例 1. ...
- 常用的meta标签总结
<!-- 关键字,搜所引擎 SEO --><meta http-equiv="keywords" content="关键字1,关键字2,..." ...
- android中edittext被键盘挡住问题
最近开始新项目,做注册页时候由于ui布局问题,edittext被键盘挡住了. 在stackoverflow上找了一遍,有提到在对应activity中设置windowSoftInputMode, 例如: ...
- 相对协议-关于src里//开头的知识
"相对协议",也就是链接以 // 开头,前面去掉了 http: 或 https: 字样, 这样做的好处是浏览器能够根据你的网站所采用的协议来自动加载 CDN 上托管的文件!
- Django命令行相关命令 以及创建一个空白网页的步骤
django相关命令行命令: django.admin.py是Django的一个用于管理任务的命令行工具,manage.py是对django-admin.py的简单包装,每个Django Projec ...
- 【转】SQL Server 2008 事件探查器(SQL SERVER Profiler)
跟踪数据库sql语句的执行情况.例:一个系统,用到了sql server 数据库,这个系统共有500张表,当用户在前台页面做某一个操作时,比如插入,登录等等,我们想知道此刻是在对哪一张表操作,打开事件 ...