免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2111 | 回复: 3
打印 上一主题 下一主题

请教一下fb驱动中RGB数据格式的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-13 12:02 |只看该作者 |倒序浏览
在阅读内核里自带的2410的fb驱动源代码时,产生了一点疑问,特向各位大虾请教:
在cmap里存储的颜色数值(16位),是不是有效位都在高位?比如说red值的有效位数为15至11位?而green的有效位数为15至10位(565模式)?
我感觉如果有效位不在高位的话,源代码中的chan_to_field()和fb_setcolreg()函数则说不通。但是有效位都在高位的话,又感觉有点不符合常理。
希望哪位大虾帮我解除一下疑惑,谢谢。

论坛徽章:
0
2 [报告]
发表于 2009-05-13 12:15 |只看该作者
11-15 为 red, 5-10 为 green, 0-4 为 blue.

论坛徽章:
0
3 [报告]
发表于 2009-05-13 13:08 |只看该作者

回复 #2 connet 的帖子

这个我知道,你说的调色板上的颜色值。我说的是fb_cmap这个结构里的数据。
struct fb_cmap {
        __u32 start;                        /* First entry        */
        __u32 len;                        /* Number of entries */
        __u16 *red;                        /* Red values        */
        __u16 *green;
        __u16 *blue;
        __u16 *transp;                        /* transparency, can be NULL */
};

我说的是这个结构里red,green,blue地址对应的数据。这三个数据经过整合才得到调色板上的值。这三个数都是16位的,但565模式时,有效位是5位或6位。我的问题是:这三个数的有效位是在高位开始的吗?因为fb_setcolreg()函数里有这么一段代码:

                        val  = (red   >>  0) & 0xf800;
                        val |= (green >>  5) & 0x07e0;
                        val |= (blue  >> 11) & 0x001f;

                        writel(val, regs + S3C2410_TFTPAL(regno));

其中val是调色板上的数值。就这段代码看来似乎只有认为这三个数有效位都在高位才说的过去,不知是也不是?

论坛徽章:
0
4 [报告]
发表于 2009-05-14 23:41 |只看该作者
原帖由 kycent 于 2009-5-13 13:08 发表
这个我知道,你说的调色板上的颜色值。我说的是fb_cmap这个结构里的数据。
struct fb_cmap {
        __u32 start;                        /* First entry        */
        __u32 len;                        /* Number of entries */
        __u16 *red;                        /* Red values        */
...

毫无疑问,是。给自己多点信心嘛
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP