标题:
基于DM6446的P2P数字电视机顶盒OSD研究与实现(2)
[打印本页]
作者:
yuyang911220
时间:
2015-10-21 09:34
标题:
基于DM6446的P2P数字电视机顶盒OSD研究与实现(2)
(2)Alpha
通道。
在
OSD
图像混合中
,
为了实现图像的透明效果
,
采取在图像文件的处理与存储中附加上另一个
8
位信息的方法
,
这个附加的通道代表图像中各个像素点透明度的信息就叫做
Alpha
通道。
Alpha
通道使用
8
位二进制数
,
最多可以表示
2^8=256
级灰度
,
即
256
级的透明度。这样一来
,
一幅完整的全信息图像应该是
24
位
RGB
彩色加
8
位
256
级的透明信息
,
一共是
32
位。
Alpha
通道通常白色值为
255,
用以定义完全不透明的像素
,
而黑色值为
0,
用以定义完全透明像素
,
介于黑白之间的灰度
(
值为
0-255)
的
Alpha
像素用以定义从完全透明到完全不透明之间的过渡像素。
计算机图形学中总是把
[0-255]
映射到
[0-1]
区间上
,
即
Alpha
值为
0-1
之间的数值
,
这样一个完成的图像分量信号就由
RGBA
组成
(
其中
A
就是
Alpha),
并且每幅图像的输出等于
{R*A
、
G*A
、
B*A},
图像混合后的输出就是
Output=Alpha*foreground+(1-Alpha)*background
其中
Output
为输出混合后的图像
,foreground
为“混合层”图像
,background
为“基层”图像。调整这个
Alpha
值便可以得到不同的混合效果。当
Alpha
为
0
时
,
只显示“基层”图像
;
当
Alpha
值为
1
时
,
只显示“混合层”图像
,
当取其它介于
0-1
之间的值可取得按照一定比率混合的图像
,
这样就可以按照一定的方式实现文字叠加、图片混合等效果
,
可以调整
Alpha
值直到符合要求。
(3)DM6446
中的具体实现。
在
DaVinci DM6446
平台中
,TI
公司把视频输出硬件抽象成一个帧缓冲设备
,
这样在
linux
操作系统下
,
可以直接对其执行像操作一般文件一样打开、读、写和关闭等操作
,
因此可以直接在其上进行快速
OSD
开发。在
OSD
体系结构图
2
中
,OSDWIN1
是用于配制混合图像属性的窗口
(
例如透明度
),OSDWIN0
是用于显示图像的窗口。由于
DM6446
支持
RGB565
或位图数据两种格式
,
又由于
RGB
图像格式表达的色彩种类可达
64k
种
,
因此这里选用
RGB565
格式
,
但是
RGB
数据是原始未压缩数据
,
不包含常用于图像编辑器识别图像的头信息
,
且种类众多
,
没有可以利用的图像编辑器直接生成
RGB565
图像文件。
BMP
位图数据也是未压缩的
,
但它在每个位图数据后面附有文件格式头信息
,
且当每像素使用相同的位数表示时
,
位图数据格式和
RGB565
数据格式本质上是一样的。这样在实际应用中
,
就需要对
BMP
位图文件进行转换
,
使之生成
RGB16
图像文件。由于
BMP
图像是
24
位的
,
且其位图信息在文件中是按照颜色顺序为
BGR (24
位
,
每种颜色分量为
8
位
)
的顺序存放的
,
读出来后分别取
RGB
分量的高
5,6,5
位的颜色信息
,
并丢弃低
3(R)
、
2(G)
和
3( B)
位的颜色信息
,
将之转换为
16
位的
,
且颜色顺序为
RGB(5 6 5)
的
RGB565
数据
,
然后再存放到文件中去。使用
fread()
库函数从位图文件流中分别读取蓝、绿、红的图像色彩分量
,
然后作为
OSD
数据写入
RGB16
数据中
,
这样就可以得到所需要的
RGB565
格式图像文件。将该图像文件拷贝到
OSD
数据缓冲区中
,
即可查看图像输出效果
,
调整
OSDWIN1
中的图像混合属性配制
,
修改其中的
Alpha
通道值
,
使其图像的混合输出达到满意效果。
1.3
P2P
数字电视机顶盒
OSD
菜单设计
OSD
菜单作为直接关系到用户体验的满意度
,
要求必须具有良好的人性化设计
,
还要能够实现强大的操作功能
,
因此我们对此进行了合理的规划与设计。
OSD
菜单主要包括四个组成部分
:
1)
本地节目
(LocalWindow):
该菜单读取本地硬盘上存取节目的列表
,
并对之进行播放、删除、上传、下载等操作等。
2)P2P
网络
(NetworkWindow):
该菜单与
EPGClient
交互
,
读取
EPGServer
服务器上的当前频道列表以及节目信息并对之进行相应操作等。
3)
系统设置
(Setup):
该菜单主要实现服务器
IP
和用户名、密码还有上传速度以及下载速度
,
同时允许连接数、端口等的设置。
4)
工具
(Tools):
该菜单主要实现第三方软件的安装、使用以及升级
,
如浏览器、游戏等。
在本
OSD
菜单中
,
采用双向动态链表进行导航操作
,
实现父子窗口、父子控件以及同屏翻页、同屏滚动等事件的操作
,
数据结构如下
:
typedef struct osd_ui_t
{
struct osd_ui_t * prev;
struct osd_ui_t * next;
osd_item_t * head;
osd_item_t * focus;
OSD_UI_FUNCTION next_focus;
OSD_UI_FUNCTION prev_focus;
}osd_ui_t;
当窗口链的状态发生变化时
,
必须动态分配和撤销这些存储区。窗口的创建、撤销、关闭等
OSD
内部函数及消息提供了很好的内存管理方法
,
它是整个
OSD
系统能否稳定运行的基础。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0