Chinaunix首页 | 论坛 | 博客
  • 博客访问: 321440
  • 博文数量: 62
  • 博客积分: 2087
  • 博客等级: 大尉
  • 技术积分: 780
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-20 21:08
文章分类

全部博文(62)

文章存档

2009年(7)

2008年(55)

我的朋友

分类: LINUX

2008-06-23 17:31:14

5.DFBDavinci平台上应用的可行性分析

5.1 DFB上的Davinci显卡驱动接口

       根据Davinci平台特点,DFB 将显卡驱动接口分为三个逻辑设备:ScreenOSDLayerVideoLayer,分别针对DFB特点对Davinci驱动进行了接口封装。

他们的驱动调用接口定义如下:

Screen

ScreenFuncs davinciScreenFuncs

驱动接口

功能描述

备注

InitScreen

初始化Screen的显示方式和名称

显示方式:DSCCAPS_VSYNC

设备描述:"TI Davinci Screen"

GetScreenSize

获取显示设备支持的分辨率

720x576

WaitVSync

通过Ioctl控制OSD0刷屏

只对OSD0进行刷屏

 

 

OSDLayer

DisplayLayerFuncs davinciOSDLayerFuncs

驱动接口

功能描述

备注

LayerDataSize

获取OSD信息结构体DavinciOSDLayerData的大小

typedef struct {

     struct fb_var_screeninfo var0;

     struct fb_var_screeninfo var1;

     bool                     alpha;

     bool                     enable;

} DavinciOSDLayerData;

itLayer

初始化OSD0OSD1的像素格式,分辨率,缓冲模式,是否带Alpha通道

获取OSD0/1fb_var_screeninfo,并设置为关闭显示状态

初始化OSD的显示能力为

DLCAPS_SURFACE

可直接在该LayerSurface上画图

DLCAPS_ALPHACHANNEL

Layer支持带Alpha Channel的像素格式,且能够以像素为单位和底层Layer进行Blending操作

DLCAPS_OPACITY

Layer可支持整体透明度设置

DLCAPS_SCREEN_POSITION

LayerScreen上的指定起始位置显示

DLCAPS_SRC_COLORKEY;

支持自定义的透明色

指定该Layer的显示类型为静态图像显示:DLTF_GRAPHICS

设定默认分辨率为640x480

默认像素格式为ARGB32

BufferModeDLBM_FRONTONLY

TestRegion

测试LayerRegion尺寸、像素格式是否符合Davinci平台的要求

 

SetRegion

根据LayerRegion的数据格式、Alpha Channel、透明度、坐标、尺寸等数据对davinciOSD显示控制寄存器进行配置

用到的ioctl有:

FBIO_SET_BITMAP_BLEND_FACTOR

FBIO_ENABLE_DISABLE_ATTRIBUTE_WIN

FBIO_SETPOS

FBIOPUT_VSCREENINFO

FBIOGET_FSCREENINFO

RemoveRegion

关闭OSD01的显示

 

FlipRegion

根据当前Surface Buffer的像素格式采取不同的显示策略,然后打开OSD01的显示

如果surface中的像素格式不为davinci所支持的RGB16,则调用update_buffersbuffer进行格式转换,如果支持DSP acceleration(需要c64x_drv.bin

)则由DSP进行转换运算,否则使用软件转换,转换后的结果直接输出到OSD Layer的显存内

UpdateRegion

功能同FlipRegion,区别在于Flip使用的是多缓冲切换显示机制,Update始终对同一Buffer进行显示刷新

 

 

VideoLayer

DisplayLayerFuncs davinciVideoLayerFuncs

驱动接口

功能描述

备注

LayerDataSize

获取Video信息结构体DavinciVideoLayerData的大小

typedef struct {

     struct fb_var_screeninfo var;

     bool                     enable;

} DavinciVideoLayerData;

InitLayer

初始化Video0Video1的像素格式,分辨率,缓冲模式

分辨率:720x576

像素格式:DSPF_UYVY

缓冲模式:DLBM_FRONTONLY

指定支持的显示类型

DLTF_VIDEO

动态视频图像

DLTF_STILL_PICTURE

单帧静态图像

DLCAPS_SURFACE 

/*OSD解释*/

DLCAPS_SCREEN_POSITION

/*OSD解释*/

TestRegion

测试LayerRegion尺寸、像素格式是否符合Davinci视频层的要求

 

SetRegion

调用视频驱动设置VID1的尺寸、坐标、数据格式

 

RemoveRegion

关闭视频显示

 

FlipRegion

显示Surface中的视频数据

 

UpdateRegion

显示Surface中的视频数据

 

 

5.2 关于DSP加速功能的补充

DFB通过c64x驱动将DSP寄存器的地址映射到内核地址空间进行控制,同时

从外部加载固件程序c64x_drv.binDSP中运行。该固件程序的作用是转换OSD Layer上的像素格式。如将Surface Buffer上格式为ARGB32的图像数据快速转换为Davinci支持的数据RGB163bitAlpha Attribute数据,直接传送到OSD0OSD1fb中。

 

目前我们还没有得到“c64x_drv.bin”这个固件程序,而且该程序可能会影响DSP原有的音视频编解码程序的运行。

 

 

5.3 DFBDavinci  OSDVideo层分别支持

OSD : /*source color keyingglobal alpha factor不能同时生效,当设置前者时后者失效*/

  - Has a surface.

  - Supports blending based on alpha channel.    透明通道目前传给驱动的pixelformat只能是RGB16,正在找问题的原因和解决办法

  - Supports source color keying.

  - Supports blending based on global alpha factor.

  - Supports Set Background Color or Background Image

  -Supports Double Buffer

 

Video:

  - Has a surface.

  - Supports Set Background Color or Background Image

5.3 图像格式兼容性测试:

OSD:

Source Data Format

Dest Format

Support

DSPF_RGB444

DSPF_RGB16

N/A

DSPF_RGB555

DSPF_RGB16

N/A

DSPF_RGB16

DSPF_RGB16

Y

DSPF_RGB32

DSPF_RGB16

N/A

DSPF_ARGB4444

DSPF_RGB16

N/A

DSPF_ARGB1555

DSPF_RGB16

N/A

DSPF_ARGB32

DSPF_RGB16

Y

Video:

Source Data Format

Dest Format

Support

DSPF_UYVY

DSPF_UYVY

Y

DSPF_RGB16

DSPF_UYVY

Y

DSPF_ARGB32

DSPF_UYVY

Y

 

 

5.4使用DFB和不使用DFB OSDVideo刷屏性能测试:

OSD层:

Source Data Format

Dest Format

Image Size

刷屏次数

Cose Timems

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Video层:

Source Data Format

Dest Format

Image Size

刷屏次数

CoseTimems

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5.5 DFBDavinci上多进程共享显示设备测试

OSD层可以被多个进程共享:

第一个创建DFB Super Interface的进程为Master,后面创建DFB super interface的进程都为

Slave

Master程序退出,则所有Slave的进程都将退出。Slave进程退出Master进程不受影响。

 

多进程共享情况下进行了简单的压力测试和系统稳定性测试。

 

测试过程

20个进程同时运行对OSD的操作,两个应用程序,一个循环设置OSD透明度,一个重复刷屏,时间间隔都为1S

测试时间

60分钟

测试结果

发现多进程刷屏的内容混合出现在一个画面,可能是电视刷新率不足以跟的上Buffer的刷新频率导致的。

无进程退出

没有发现内存泄露

操作系统运行正常

 

注:当使用的显示设备为电视的时候davinci 每次刷屏后使用FBIO_WAITFORVSYNC等待一次刷屏的结束,但这种方式对于多进程共享显示设备时就不起作用,其他进程对显存刷新动作并不会等待当前刷屏结束,所以才会产生上面测试出现的多进程刷屏的内容出现在一个屏幕内的现象。

Video层正在测试:

5.5其他

在字体引擎、解码库的帮助下,支持矢量字体显示,PNGJPEG等图片显示、常见视频解码输出。

以多帧GIF文件的播放为例分析一下VideoProvider的运行机制:

 

5.6结论

目前原有STB功能除了AlphaChannel还有些问题没实现(需要进一步研究是DFB问题还是使用方法上的问题),其他功能DFB都能满足,。。。。

最大的优点就是多进程间不需要互斥访问显示设备。

 

阅读(2403) | 评论(1) | 转发(0) |
0

上一篇:制作ramdisk

下一篇:技术专辑

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

chinaunix网友2008-09-24 16:30:15

great,thanks for your share