DirectDraw多线程使用的诸多有关问题,请问DDraw高手
发布时间:2011-06-27 19:20:53 文章来源:www.iduyao.cn 采编人员:星星草
DirectDraw多线程使用的诸多问题,请教DDraw高手
我用DirectDraw来播放电影,对解码器解出的BMP图象序列写屏。
我建立了一个类,它做如下的事情:
1、初始化函数
(1)创建一个准备用于播放的窗口,它后来要么附着到主窗口内,要么作为一个
分离窗口。
(2)创建一个默认32位的主表面,并Clipper到上面的播放窗口,再创建一个离屏
表面,离屏表面将依据解码器输出的BMP宽、高和位数动态创建。
m_hPlayWnd = CreateWindow( s_szWndName, _T( " "),
WS_OVERLAPPEDWINDOW|WS_POPUP|WS_SIZEBOX,
0, 0, 320, 240, NULL, NULL, GetModuleHandle( NULL ), 0 );
DDSURFACEDESC2 ddsd;
if( FAILED( DirectDrawCreateEx( NULL, (VOID**)&m_lpDDraw,
IID_IDirectDraw7, NULL ) ) || FAILED(m_lpDDraw-> SetCooperativeLevel
( NULL, DDSCL_NORMAL )) )
return FALSE;
memset( &ddsd, 0, sizeof(ddsd) );
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY;
if( FAILED(m_lpDDraw-> CreateSurface( &ddsd, &m_lpddsPrimary, NULL )) )
return FALSE;
m_lpDDraw-> CreateClipper( 0, &m_lpddClipper, NULL );
m_lpddClipper-> SetHWnd( 0, m_hPlayWnd );
m_lpddsPrimary-> SetClipper( m_lpddClipper );
memset( &ddsd, 0, sizeof(ddsd) );
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;
ddsd.dwWidth = m_nWidth;
ddsd.dwHeight = m_nHeight;
m_lpDDraw-> CreateSurface( &ddsd, &m_lpddsBack, NULL );
2、播放BMP函数
先对离屏表面GetDC(),然后把BMP数据StretchBlt到离屏表面。
最后调用主表面的Blt,显示离屏表面内的BMP图象。
HDC hDC;
ddrval = m_lpddsBack-> GetDC( &hDC );
SetDIBitsToDevice( hDC, 0, 0, m_nWidth, m_nHeight, 0, 0, 0, m_nHeight,
m_pPicBuff, (LPBITMAPINFO)&m_biInfo, DIB_RGB_COLORS );
m_lpddsBack-> ReleaseDC( hDC );
ddrval = m_lpddsPrimary-> Blt( &dstRect, m_lpddsBack, &srcRect,
DDBLT_ASYNC, NULL );
问题之一:
解码器线程,和创建DDraw的线程,以及播放窗口不在同一个线程,也不可能在同
一个线程。这就造成了播放窗口在拖动时,整个屏幕都不停的闪烁。
试着将创建DDraw和播放窗口放入主线程,解码线程通过PostMessage往播放窗口
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
DSHOW push
推模式,ConnectDirect 的,为什么我一直反回错误
下级级用的是HAALI的一个东西,用CMemStream拉模式的时候是可以连接的
...
-
ffmpeg编码后视频速度不正确,质量也不好,求助,求助,求助,求助啊
对采集到得摄像头图像进行编码保存,发现得到的视频质量不好,而且速度不...
-
请问怎么在live555中接收jpeg
请问,我现在想接收一个服务器发送的jpeg 不知道怎么用live555做一个客户端, 接收它并显示。
请问应...
-
XP SP3 YUV420 的fiter依赖 在线等答案……
链接时媒体类型为WMMEDIASUBTYPE_I420
有的XP可以播放出来
有的就不行,请问不能播放...
-
如何获取通过麦克风来获取当前说话的音量?
使用Wave系统API采集音频输入的数据,当数据缓存区满了后,收到消息取得数据后,如何根据这里...
-
RFC3984 有没有完整的中文版本呢?
搜了几个 都是一半英文一半中文的。哎 郁闷!
------解决方案--------------------
英文的凑合...
-
介绍一个学习directshow和com、atl技术的网站
有一个学习directshow和com、atl技术的网站,还可以下视频教程,共享给大家: http://www...
-
攻击帖:jrtplib、live555是个垃圾,刚开始搞流媒体就用这玩意就是找s
不解释~
来丢我砖头吧~~
我分太多了用不完~ 支持的散分~~~
...
-
50分,寻找《Visual C++音频/视频处理技术及工程实践》的随书光盘?
急于使用其中的几个例程。若哪位好心人能够提供,非常感谢!!我的QQ:52...
-
h264的高宽比怎么获取?
我看标准里面只有样点的高宽比啊。
还有,bit rate可以读出来吗?
------解决方案--------------------
是要...