|

楼主 |
发表于 2007-8-28 11:55:00
|
显示全部楼层
Re:使用vmr9在游戏中播放多个视频
是的,我用多线程来处理.
目前我可以从把纹理先存储到内存里,再读取出来,是可以显示的,但是性能很慢,只能得到10fps,原始的应该是25fps啊
方法如下:
D3DXSaveTextureToFileInMemory(&buf,D3DXIFF_BMP,ppTextureToFilter,NULL);
D3DXCreateTextureFromFileInMemory(pd3dDevice,buf->GetBufferPointer(),320*1240,&ppTextureToFilter);
我不知道这两个处理函数内部做了什么,使得纹理与当前的设备格式兼容?
可是vmr9在初始化回调中InitializeDevice,做了兼容测试,它是兼容的texture.
hr = m_lpIVMRSurfAllocNotify->AllocateSurfaceHelper(lpAllocInfo, lpNumBuffers, & m_surfaces.at(0) );
if(FAILED(hr) && !(lpAllocInfo->dwFlags & VMR9AllocFlag_3DRenderTarget))
{
//不兼容处理
D3DDISPLAYMODE dm;
FAIL_RET( m_D3DDev->GetDisplayMode(NULL, & dm ) );
// create the private texture
FAIL_RET( m_D3DDev->CreateTexture(lpAllocInfo->dwWidth, lpAllocInfo->dwHeight,
1,
D3DUSAGE_RENDERTARGET,
dm.Format,
D3DPOOL_DEFAULT /* default pool - usually video memory */,
& m_privateTexture.p, NULL ) );
}
else
{
//格式兼容,直接从surface取数据.
}
|
|