2017-01-05 4 views
0

Windows Media Playerの中央がセカンダリモニタにドラッグされた(または開始された)とき、私のDXVA2デコーダは "空白"です。ビデオは、プライマリに戻ったときに再び表示されます。 D3DPRESENTFLAG_DEVICECLIPは設定されていません。DXVA2デコーダ複数のモニタディスプレイを持つWindows Media PlayerのMFT

ハンドリングを必要としないでこれが動作する方法を見つけるのが好きですが、DXVA2_E_NEW_VIDEO_DEVICEを返すIDirect3DDeviceManager9 :: TestDevice()でこの問題の通知を受けます。使用して(だから私は新しいDXデバイスを作成しようとしました

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

:(MSDNがすべてのことが必須であることを示しているが)

IDirect3DDeviceManager9 :: CloseDeviceHandle/OpenDeviceHandleので、私のリセットハンドラは次のようにGOEそれをカットしていませんデスクトップをhwndとして)

m_pDXManager->ResetDevice(new_device, token); 

ただし、IDirect3DDevice9 :: Reset()ではまだ喜んでいません。

私はまた、DXVA2CreateDirect3DDeviceManager9を使用して新しいIDirect3DDeviceManager9を作成しようとしましたが、役に立たないです。

ところで、私はIDirect3DDevice9を使用::リセット()私の初期化中に何の問題もなく、と後で同じ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

私は、セカンダリディスプレイ(約1秒後)でビデオを回復する作業ハンドラを持っています。誰かが私にそれを手伝ってもらうことができるのは、もちろんシームレスであることが好きです。

とにかく解決策は、絶対にすべてをリリースして復元することで自分のリセットを作成することでした。解決策は遅いですが、今のところうまくいきます。

関連する問題