急~~为什么用DirectShow开发的程序必须禁用DirectDraw加速才可显示出图象?

北方大冬瓜 2006-02-22 09:48:32
如果不禁用DirectDraw加速经常的显示不出来图象,但是声音是有的。
...全文
313 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cx0928 2006-02-25
  • 打赏
  • 举报
回复
HRESULT hr=0;
// Create the video render filter
hr = CoCreateInstance(CLSID_VideoMixingRenderer9, NULL, CLSCTX_INPROC,
IID_IBaseFilter, (void **)&m_pRenderer);
if (FAILED(hr))
return E_NOINTERFACE;
// Add the video render filter to the graph
hr = m_pGB->AddFilter(m_pRenderer, L"Video Render9");
if (FAILED(hr))
return hr;
//先将VMR9加入,然后在filter连接时将优先使用VMR9

北方大冬瓜 2006-02-24
  • 打赏
  • 举报
回复
请问使用 VMR9 如何连接,如果能给出示例代码感激不尽!
cx0928 2006-02-24
  • 打赏
  • 举报
回复
不要让graph自动找render,使用VMR9手动连接
matrass_zhao 2006-02-24
  • 打赏
  • 举报
回复
试一下我的方法,80%管用。
视频的owner窗口(m_hOwner)设置WS_CLIPCHILDREN属性试试。如果是对话框的话可以在资源管理器中设置。

vmr9的使用可以参考sdk附带的sample。
matrass_zhao 2006-02-23
  • 打赏
  • 举报
回复
视频的owner窗口(m_hOwner)设置WS_CLIPCHILDREN属性试试。如果是对话框的话可以在资源管理器中设置。
北方大冬瓜 2006-02-23
  • 打赏
  • 举报
回复
...
hr = m_pGB->QueryInterface(IID_IVideoWindow, (void **)&m_pVW);
...
hr = m_pVW->put_Visible(OAFALSE);

hr = m_pVW->put_Owner((OAHWND)m_hOwner);
hr = m_pVW->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN );
hr = m_pVW->SetWindowPosition(m_nLeft, m_nTop, m_nWidth, m_nHeight);
// Enable the parent window to get the mouse and keyboard event in the video window
hr = m_pVW->put_Visible(OATRUE);
hr = m_pVW->SetWindowForeground(-1);
...

Render 的代码如下:
...
hr = ConnectFilters(m_pGB, m_pSourceReader->GetPin(0), pMpeg);
if(FAILED(hr))
{
m_bInit = false;
}
IPin *pPin;
while(GetUnconnectedPin(pMpeg,PINDIR_OUTPUT, &pPin) == S_OK)
{
//pPin->AddRef();

hr = m_pGB->Render(pPin);
if (FAILED(hr))
{
m_bInit = false;
}
...

多谢高手指教!
DentistryDoctor 2006-02-22
  • 打赏
  • 举报
回复
你的代码?
北方大冬瓜 2006-02-22
  • 打赏
  • 举报
回复
但是用 MediaPlayer 没问题,我是在 DirectShow 中把视频 Render 到一个 CDialog 中,好几台机器都有这问题。
zhaojian999 2006-02-22
  • 打赏
  • 举报
回复

DirectShow使用Microsoft DirectDraw和Microsoft DirectSound的可用硬件兼容性。 如果没有可用的硬件,DirectShow使用GDI来绘写视频,并使用waveOut 。当视频和音频 的硬件加速可用时,它能够自动检测并进行使用,同时也支持没有硬件加速的系统。
这个可能是和你的显卡有关系,有的时候只有禁用ddraw加速才可以截图,但是使用ddraw加速能够获得更好的视频显示效果,总之个人认为是因为你的显卡的问题。

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧