2007年10月24日 星期三

[DirectShow] IID_IVMRMixerControl 回傳 E_NOINTERFACE ?

前面的建置都沒問題, S_OK, 為什麼 QueryInterface 時, 就會傳回 No Interface ?

 

兩個問題

1. 你需要先設定混合的 video stream 數量

    hr=pConfig->SetNumberOfStreams(1);
    if(FAILED(hr))
        DXShowError(hr);

2. 指定顯示的視窗

     hr=pWC->SetVideoClippingWindow(hWnd);
     if(FAILED(hr))
            DXShowError(hr);

然後, 才能取得混合控制器.

3.

     hr=m_pVR->QueryInterface(IID_IVMRMixerControl,

                                                              (LPVOID *)&m_pMixer);


所以, 請把程式放在 SetVideoClippingWindow 後面.

如:
----------------------------- code ----------------------------------
hr=AddFilterByCLSID(pBuilder,CLSID_VideoMixingRenderer9,

                                             _T("Video Render 9"),&m_pVR);
hr = m_pVR->QueryInterface(IID_IVMRFilterConfig9,

                                                                (LPVOID *)&pConfig);
hr=pConfig->SetRenderingMode(VMR9Mode_Windowless);
hr = m_pVR->QueryInterface(IID_IVMRWindowlessControl9,

                                                               (LPVOID *)&pWC);
if(hWnd !=0){ 
        hr=pConfig->SetNumberOfStreams(1);
        hr=pWC->SetVideoClippingWindow(hWnd);
        hr=pWC->SetVideoPosition(NULL,&recDec);
}
hr=m_pVR->QueryInterface(IID_IVMRMixerControl9,

                                                             (LPVOID *)&m_pMixer);

------------------ code --------------------



by Jing

沒有留言:

張貼留言