簡體   English   中英

VMR9與EVR:如何將ImageCompositor與EVR一起使用?

[英]VMR9 vs EVR : How to use ImageCompositor with EVR?

我編寫了一個PixelShader編譯器/測試器,可以在使用DirectShow.Net + VMR9播放的圖像或視頻源上實時工作。

這一切都很好,直到我決定讓它成為一個真正的視頻播放器,並開始調整它的每一點工作應該(標題等)。

然后我發現在帶有ATI gpus的Windows7上,視頻非常像素化(插值不良)。 解決方案是與EVR一起使用。 我做到了。 除了一些背景閃爍和調整緩慢的故障,我將嘗試用自定義演示者解決它看起來都很好。

但...

我失去了將像素着色應用於輸出視頻的能力,因為EVR FilterConfig界面上沒有SetImageCompositor方法。

這是EVR界面:

[SuppressUnmanagedCodeSecurity]
[Guid("83E91E85-82C1-4ea7-801D-85DC50B75086")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IEVRFilterConfig
{
    void GetNumberOfStreams(out int pdwMaxStreams);
    void SetNumberOfStreams(int dwMaxStreams);
}

這是VMR9接口:

[Guid("5a804648-4f66-4867-9c43-4f5c822cf1b8")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[SuppressUnmanagedCodeSecurity]
public interface IVMRFilterConfig9
{
    int GetNumberOfStreams(out int pdwMaxStreams);
    int GetRenderingMode(out VMR9Mode Mode);
    int GetRenderingPrefs(out VMR9RenderPrefs pdwRenderFlags);
    int SetImageCompositor(IVMRImageCompositor9 lpVMRImgCompositor);
    int SetNumberOfStreams(int dwMaxStreams);
    int SetRenderingMode(VMR9Mode Mode);
    int SetRenderingPrefs(VMR9RenderPrefs dwRenderFlags);
}

我一直在使用這種方法與自定義圖像合成器應用像素着色器:

    IVMRFilterConfig9 filterConfig = (IVMRFilterConfig9)vmr9;
    // frameManager is my custom class implementing IVMRImageCompositor9
    hr = filterConfig.SetImageCompositor(frameManager);
    DsError.ThrowExceptionForHR(hr);

我現在不可以...

使用:VS2010,C#,DirectShow.NET,Mediafoundation.NET,托管DX9。

這個問題的解決方案是什么? 如何使用EVR進行指導?

非常感謝你!

由於沒有人提出建議,我挖了一點,並認為我已經找到了可能的解決方案:

http://msdn.microsoft.com/en-us/library/bb530107(v=vs.85).aspx

現在應該在自定義演示者中完成...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM