SetRate(0.5)不起作用

时间:2015-02-10 15:01:46

标签: c# winapi directshow directshow.net

我试图在directshow中设置播放速率,并且所有过滤器都说它可以设置它,当我这样做,然后得到速率,它似乎应用但播放速率不反映这种变化我和#39;我不确定为什么。

rate = 0.5;
mediaSeek.SetRate(rate);
mediaSeek.GetRate(out rate);
// rate = 0.5.

我已经在另一个图表中完成了这个操作,我手动连接过滤器并且它工作正常但是这次我将图表设置为:

filterGraph = graph as IFilterGraph2;

if (filterGraph != null)
{
    IBaseFilter sourceFilter;
    filterGraph.AddSourceFilter(source, source, out sourceFilter);

    IEnumPins pinEnum;
    sourceFilter.EnumPins(out pinEnum);

    var fetched = IntPtr.Zero;
    IPin[] pins = { null };

    while (pinEnum.Next(pins.Length, pins, fetched) == 0)
    {
        filterGraph.RenderEx(pins[0], AMRenderExFlags.RenderToExistingRenderers, IntPtr.Zero);
        Marshal.ReleaseComObject(pins[0]);
    }

    Marshal.ReleaseComObject(pinEnum);
    Marshal.ReleaseComObject(sourceFilter);
}

1 个答案:

答案 0 :(得分:1)

SetRate以及定位和IMediaSeeking / IMediaPosition功能的其他各个方面取决于过滤器图和各个过滤器如何一起处理所有处理。

过滤器图形管理器接受您的请求并在参与图形的过滤器之间进行分配,以特定方式执行:rednerers正在接收来自过滤器图形管理器的请求,然后他们负责通过其他过滤器转发该上游。基本上,图中任何错误处理请求的过滤器都可能会破坏整个过程。

因此,您的症状在很大程度上取决于参与图表的过滤器。可能有一个或几个适用:

  • 某些过滤器未正确转发
  • 解复用器过滤器处理速率变化不正确
  • 处理剥离时间戳,使其无法以适当的方式安排有效负载呈现