2017-01-05 3 views
0

Mein DXVA2-Decoder "löscht", wenn die Mitte des Windows Media Player auf einen sekundären Monitor gezogen (oder gestartet) wird. Das Video wird erneut angezeigt, wenn es zurück zum primären Standort verschoben wird. Hinweis Ich habe D3DPRESENTFLAG_DEVICECLIP nicht festgelegt.DXVA2 Decoder MFT im Windows Media Player mit mehreren Monitordisplays

Obwohl ich viel lieber einen Weg finden würde, damit dies funktioniert, ohne dass ich mich behandeln lassen muss, bekomme ich eine Benachrichtigung von IDirect3DDeviceManager9 :: TestDevice(), die DXVA2_E_NEW_VIDEO_DEVICE zurückgibt.

IDirect3DDeviceManager9 :: CloseDeviceHandle/OpenDeviceHandle nicht schneiden (obwohl MSDN alles, was anzeigt, erforderlich ist), so meine Reset-Handler goe so etwas wie:

ReleaseBuffers(); // free surfaces 

SAFE_RELEASE(m_decoderService); 

hr = m_pDXManager->CloseDeviceHandle(m_hDevice); 
hr = m_pDXManager->OpenDeviceHandle(&m_hDevice); 
hr = m_pDXManager->LockDevice(m_hDevice, &pDev, true); 

hr = pDev->Reset(d3DPP); // FAILS 0x8876086c !!!! 

Also habe ich versucht, ein neues dx Gerät zu erstellen (mit Desktop als Hwnd) dann

m_pDXManager->ResetDevice(new_device, token); 

aber noch keine Freude am IDirect3DDevice9 :: (Reset).

Ich habe auch versucht, einen neuen IDirect3DDeviceManager9 mit DXVA2CreateDirect3DDeviceManager9 zu erstellen, aber ohne Erfolg.

BTW verwende ich IDirect3DDevice9 :: Reset() ohne Probleme in meiner Initialisierung, und die gleichen D3DPRESENT_PARAMETERS später verwenden, so glaube nicht, dass diese das Problem sind, aber hier sind sie (nach Aufruf)

d3DPP[n].BackBufferWidth = 1920; 
    d3DPP[n].BackBufferHeight = 1080; 
    d3DPP[n].BackBufferCount = 1; 
    d3DPP[n].BackBufferFormat = D3DFMT_X8R8G8B8; 
    d3DPP[n].SwapEffect = D3DSWAPEFFECT_DISCARD; 
    d3DPP[n].hDeviceWindow = NULL; 
    d3DPP[n].Windowed = true; 
    d3DPP[n].Flags = D3DPRESENTFLAG_VIDEO; 
    d3DPP[n].FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; 
    d3DPP[n].PresentationInterval = D3DPRESENT_INTERVAL_ONE; 

Fehlende sind Null.

Ich habe das gleiche Problem mit win8 und win10.

Jede Hilfe/Zeiger geschätzt.

Antwort

0

Ich habe einen funktionierenden Handler, der das Video auf sekundären Displays wiederherstellt (nach etwa einer Sekunde). Ich würde es natürlich vorziehen, nahtlos zu sein, wenn mir jemand dabei helfen kann.

Wie auch immer, die Lösung war, meinen eigenen Reset zu erstellen, indem ich absolut alles löste und dann wieder herstellte. Die Lösung ist langsam, aber funktioniert für jetzt ..

Verwandte Themen