Chinaunix首页 | 论坛 | 博客
  • 博客访问: 119023
  • 博文数量: 34
  • 博客积分: 1485
  • 博客等级: 上尉
  • 技术积分: 380
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-06 17:32
文章分类

全部博文(34)

文章存档

2011年(8)

2010年(7)

2009年(12)

2008年(7)

我的朋友

分类:

2008-07-01 16:27:20

        SOLO6010通过memset或erase操作都可以达到清除屏幕OSD的效果,但是两者有本质区别,应该区分使用。
memset操作如下:
    220         fb_mem = mmap(NULL, line_length * yres, (PROT_READ | PROT_WRITE), MAP_SHARED, fd, 0);
    221         memset(fb_mem, 0xff, line_length * yres);
erase操作如下:
    239         struct SOLO6010FB_RECT rect = {
    240                 .x = 0,
    241                 .y = 0,
    242                 .width = 720,
    243                 .height = 576,
    244         };
……
    273         ioctl(fd, IOCTL_FB_ERASE, &rect);

        对于memset操作,确实清除了屏幕OSD数据,但是OSD层仍然存在;对于erase操作,不但屏幕OSD数据被清除,而且整个OSD层都不存在了。如果单考虑OSD,那么两者是没有多大区别的。如果要考虑不同视频分割的边缘(border)显示,那么就需要认真区分哪里使用memset哪里使用erase操作。由于border层处于OSD之下,因此,原理上每需要完全显示一次border时就应该先做一次erase操作。
        最后请注意flush操作的区域,被掩盖的border多是由错误的flush操作区域导致。

补遗1:
        尽量减少使用erase操作的频率,该操作会产生屏幕抖动的现像,容易被用户察觉。
阅读(715) | 评论(0) | 转发(0) |
0

上一篇:数字视频简介

下一篇:图解Debian安装

给主人留下些什么吧!~~