在c#中的directshow.net中获取多个视频渲染器

时间:2011-03-07 14:12:32

标签: c# directshow

我有4个独立的视频设备连接到各自的视频渲染器,我想在4个独立的窗口/面板中显示视频渲染器。

使用

IVideoWindow GetSecondRenderer()
    {
        IEnumFilters enumFilters;
        ArrayList filtersArray = new ArrayList();

        IFilterGraph filterGraph = (IFilterGraph)m_FilterGraph;
        filterGraph.EnumFilters(out enumFilters);

        IBaseFilter[] filters = new IBaseFilter[1];
        IntPtr fetched = new IntPtr();

        while (enumFilters.Next(1, filters,fetched) == 0)
        {
            IVideoWindow ivw = filters[0] as IVideoWindow;
            if (ivw != null)
            {
                IntPtr outPtr = new IntPtr();
                ivw.get_Owner(out outPtr);
                if (outPtr == IntPtr.Zero)
                    return ivw;
            }
        }
        return null;
    }

然后使用videoWindow2 = GetSecondRenderer();代码我设法得到2个视频,但由于我还是很新,我似乎无法枚举其他2个视频渲染。有人可以帮助显示如何修改它以获得其他2? 谢谢。

1 个答案:

答案 0 :(得分:1)

您的代码只返回第一个找到的视频渲染器。而不是从while循环返回,创建一个IVideoWindows列表并添加找到的渲染器。然后,当循环结束时,返回整个列表。