xtli_21
驱动牛犊
驱动牛犊
  • 注册日期2003-07-24
  • 最后登录2005-12-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:6731回复:11

如何利用directdraw Overlay方式实现多路视频显示?

楼主#
更多 发布于:2003-08-08 15:30
各位大侠:
    我想利用directdraw的overlay方式实现多路视频的显示数据格式是YUV422,请问怎样创建overlay表面,我是这样做的:
1.利用DirectdrawCreate()创建多个DirectDraw对象;
2.给每一个Directdraw 对象创建一个Primary surface;
以上两个步骤都成功了
3.创建overlay表面,创建第一个overlay表面是成功的,当为第二个
DirectDraw 对象创建Overlay表面时不成功。请问怎样才能为每一个Directdraw对象都创建一个overlay表面呢?
lms2000
驱动牛犊
驱动牛犊
  • 注册日期2001-05-19
  • 最后登录2018-05-30
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望102点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-08-11 03:02
支持Overlay的个数由硬件决定


Sunbeam
驱动小牛
驱动小牛
  • 注册日期2001-10-29
  • 最后登录2010-01-29
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望12点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-08-12 13:07
OVERLAY平面最好只建一个。这是目前显卡最低的要求。

要多路显示,利用当前显卡高性能(现在的显卡都支持),在显卡内建立缓冲区。利用显卡的自身来进行缩放。(现在至少16MB,可以分配二十个以上CIF格式BUFFER。呵呵,并且它的特点与SYSTEM MEMORY不一样(很方便,本来就是为视频准备的嘛),显示性能会得到很大提升)。
堂堂正正做人,明明白白做事
xtli_21
驱动牛犊
驱动牛犊
  • 注册日期2003-07-24
  • 最后登录2005-12-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-08-12 15:19
怎样建立显卡的缓冲区实现缩放,能否说的更详细一点儿?thank you!!!!
leerom
驱动小牛
驱动小牛
  • 注册日期2001-06-08
  • 最后登录2010-08-31
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-08-15 09:11
这个问题我也很关心,愿意另外开贴给分。
to Sunbeam:
缓冲区多个,但是overlay只有一个也不成啊。你的方案能写的具体一点吗?比如,已经在显卡上开了四个缓冲区,凭且每个缓冲区中已经有了要显示的视频图像(四个不同的视频)。而显卡只有一个overlay,这是应该怎样做?
leerom
mzfmzf
驱动牛犊
驱动牛犊
  • 注册日期2002-12-05
  • 最后登录2009-01-15
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-08-20 07:53
偶也想知道!
ppl
ppl
驱动小牛
驱动小牛
  • 注册日期2001-06-13
  • 最后登录2006-05-21
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-08-20 12:14

你可以按照这个步骤做:
  1。创建一个overlay表面。
  2。 调用overlay lock,得到虚拟内存地址,
     将这个地址传给驱动程序,得到物理地址。
     unlock.
  3。编程硬件,让硬件将数据直接写道对应的物理地址里边去。
  4。如果除了视频,你还要显示一些菜单,logo,状态之类的,
    请使用color key.
这样子做的问题:
  1. 图像会出现\"撕裂\".
  2. 当overlay表面lost的时候,会出错。
  3. 当改变大小等操作时,速度比较慢。
  4. 有些显卡和采集芯片不支持,或者要求比较苛刻。
  5. 你要写一个驱动程序,一个应用程序,驱动和应用要很好的
     配合,调试的时候很容易死机。
优点:
  1. 占用cpu很少,为0.
附注:
  Directx 9出来了,overlay技术已经快要被淘汰了。
  最好不要使用。;)

    
xtli_21
驱动牛犊
驱动牛犊
  • 注册日期2003-07-24
  • 最后登录2005-12-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-08-20 12:44
hi,
ppl,你说的方法只能实现一路的视频显示,如果要显示多路视频的话一个overlay表面怕是不行了吧,硬件只能支持创建一个overlay表面,如果在一个overlay表面实现多路,怎样对每一路都实现缩放呢?
另外,你说利用directx9.0实现,请问怎样实现能不能说的详细一点儿?thank you very much
hong
驱动小牛
驱动小牛
  • 注册日期2001-09-19
  • 最后登录2005-12-16
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-08-26 02:49
if you thread the overlay surface as a surface then you will be able to find a way to handle more than one video.

that say you create an overlay surface: 640x480; {0,0,639,479}
then you have four 320x240 video data:a,b,c,d
each is {0,0,319,239}

after you got the overlay surface buffer pointer then you
 
copy the video a data to overlay surface {0,0,319,239}
copy the video b data to overlay surface {0,320,639,239}
copy the video c data to overlay surface {240,0,319,479}
copy the video d data to overlay surface {240,320,639,479}

then update this overlay you will got four video.

the other way you can do is:
create four offscreen surface for each video;
copy each video data on that surface;
blt each offscreen surface onto overlay surface;
update overlay surface;
this way is more flexible and easy to use.


[编辑 -  8/26/03 by  hong]

[编辑 -  8/26/03 by  hong]
xtli_21
驱动牛犊
驱动牛犊
  • 注册日期2003-07-24
  • 最后登录2005-12-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-08-26 09:06
hi,hong
谢谢你提供的方法,这样能实现任意一路的缩放吗?先前就是用的这种方法,但是没有实现任意一路的缩放,所以最后就放弃了,改用Blt:
我以前的做法是:
1.CreateDirectDraw Object;
2.CreatePrimarySurface;
3.CreateOverlaySurface;
4.CreateOffScreenSurface:
5.Copy yuv422 data to offScreen Surface;
6.blt offscreensurface to overlaysurface;在这一步根目标矩形和源矩形的大小不同实现缩放;
7.UpdateOverlay;
结果得到的图像形状和颜色都不对,图像花花的看不出原来的模样,不知什么地方不对,请hong多多指教?
leerom
驱动小牛
驱动小牛
  • 注册日期2001-06-08
  • 最后登录2010-08-31
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-08-26 09:38
多谢hong的回答,我另外开贴给分。
顺便说说,我在Direct3D的例子中看到了一个有趣的东西。它将一个AVI文件中的视频图像作为纹理贴在一个立方体上,效果还不错。我在想是不是能将视频数据放入纹理(texture)surface,再显示出来?它好像没有数量的限制。
leerom
CyberQiQi
驱动牛犊
驱动牛犊
  • 注册日期2004-06-03
  • 最后登录2021-02-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望54点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2004-06-08 18:00
好傥!
游客

返回顶部