Мой декодер 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.
Любая помощь/указатели оценили.