Проблема:
Есть VMR9 в графе.
Если он не в Renderless mode, то всё ок.
Если он на win7, то всё ок.
Если он на XP, то проц грузит на 100%.
Комп неслабый, все плеера нормально отображают и БД на 1080р с загрузкой проца не более 60%.
Тут тебе на 100% загрузки проца, 50% потерянные кадры в VMR9, и это только на 720р...
Замечу, что НЕ Renderless работает нормально в GraphEdit.
Привожу примеры из кода кастомного презентатора-алокатора:
//чёткий метод презентации, да? 100% проца)
HRESULT STDMETHODCALLTYPE c_Texture_VMR9::PresentImage(DWORD_PTR dwUserID, VMR9PresentationInfo *lpPresInfo)
{
return S_OK;
}
//стандартная инициализации, ничего особенного, вроде как
HRESULT STDMETHODCALLTYPE c_Texture_VMR9::InitializeDevice(DWORD_PTR dwUserID, VMR9AllocationInfo *lpAllocInfo, DWORD *lpNumBuffers)
{
m_pSurfaceWork = NULL;
HRESULT Result = E_FAIL;
if(lpNumBuffers == NULL)
return E_POINTER;
if(!mpVMRSurfaceAllocatorNotify || !m_pDirect3D || !mpDevice)
return E_NOINTERFACE;
Width = lpAllocInfo->dwWidth;
Height = lpAllocInfo->dwHeight;
if (d3dCaps.TextureCaps & D3DPTEXTURECAPS_POW2)
{
lpAllocInfo->dwWidth = 1;
lpAllocInfo->dwHeight = 1;
while(lpAllocInfo->dwWidth < Width )
lpAllocInfo->dwWidth = lpAllocInfo->dwWidth << 1;
while(lpAllocInfo->dwHeight < Height)
lpAllocInfo->dwHeight = lpAllocInfo->dwHeight << 1;
};
//Тут я баловался и так и сяк- не выходит никак.
//lpAllocInfo->Pool = D3DPOOL_DEFAULT;
//lpAllocInfo->dwFlags = VMR9AllocFlag_OffscreenSurface;
//lpAllocInfo->dwFlags |= VMR9AllocFlag_TextureSurface;
//lpAllocInfo->Format = d3ddm.Format;
UINT i;
for (i = 0; i < mSurfaces.size(); ++i)
{
if (mSurfaces[i] != NULL)
{
mSurfaces[i]->Release();
mSurfaces[i] = NULL;
};
};
mSurfaces.resize(*lpNumBuffers);
for (i = 0; i < mSurfaces.size(); ++i)
{
mSurfaces[i] = NULL;
};
Result = mpVMRSurfaceAllocatorNotify->AllocateSurfaceHelper(lpAllocInfo, lpNumBuffers, &(mSurfaces[0]));
texWidth = lpAllocInfo->dwWidth;
texHeight = lpAllocInfo->dwHeight;
return Result;
}
Замечу ещё, что пример из пакета "DX Extras" DX Extras 2004\Extras\DirectShow\Samples\C++\DirectShow\VMR9\VMR9Allocator\ без всяких моих вмешательств грузит проц на 100% всё равно.
Повторюсь, комп нормальный (НЕ Renderless — ок), тестировалось не на одной машине В итоге XP, Vista — проц 100%.
Всеми возможными путями было установлено, что это именно VMR9 Renderless грузит, от того и кадры пропускает.
Это какой-то полный бред...
Есть ли у кого какие мысли?
Мб, кто уже заводил VMR9 в Renderless?