2017-01-05 12 views
0

Мой декодер DXVA2 «заготовки», когда центр проигрывателя Windows Media перетаскивается в (или запускается) на дополнительном мониторе. При повторном обращении к основному видео появится снова. Примечание. У меня нет набора D3DPRESENTFLAG_DEVICECLIP.DXVA2 Декодер MFT в проигрывателе Windows Media с несколькими мониторами

Хотя я бы предпочел найти способ для этого работать без обработки, я получаю уведомление об этой проблеме с помощью IDirect3DDeviceManager9 :: TestDevice(), возвращающего DXVA2_E_NEW_VIDEO_DEVICE.

IDirect3DDeviceManager9 :: CloseDeviceHandle/OpenDeviceHandle не режет его (хотя MSDN показывает все, что требуется), поэтому мой обработчик сброса GOE что-то вроде:

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 !!!! 

Так что я попытался создать новое устройство йх (с использованием рабочий стол, как HWND), то

m_pDXManager->ResetDevice(new_device, token); 

, но до сих пор нет радости на IDirect3DDevice9 нет :: Reset().

Я также попытался создать новый IDirect3DDeviceManager9, используя DXVA2CreateDirect3DDeviceManager9, но безрезультатно.

BTW Я использую IDirect3DDevice9 :: Reset() без проблем в моей инициализации, и использовать те же D3DPRESENT_PARAMETERS позже, так что не думаю, что это проблема, но здесь они (после вызова)

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; 

Любой отсутствующий равны нулю.

У меня такая же проблема с win8 и win10.

Любая помощь/указатели оценили.

ответ

0

У меня есть рабочий обработчик, который восстанавливает видео на дополнительных дисплеях (примерно через секунду). Я бы предпочел, чтобы это было легко, если кто-нибудь может мне помочь.

В любом случае решение заключалось в создании моего собственного Сброса, выпуская абсолютно все, а затем восстанавливая. Решение идет медленно, но работает на данный момент.