Прокрутка видео DirectShow

Здравствуйте.
Что за странности такие творятся…
Сделал проигрыватель на DirectShow. Все нормально. Но вот странность есть.
Допустим я поставил видео на паузу, затем изменил позицию на середину файла.
Нажимаю проигрывать и первый кадр мне прилетает только через несколько секунд.

Но есть не дергать позицию и нажимать плей - пауза - плей… то ползунок начинает идти прям сразу после нажатия кнопки.

image
Вот позиция при начале проигрывания.

А вот колбэк прилетел первый через 3 сек.
image

Пробовал перелистывать с флагом релатив. Но там вообще даже в кадры не попадает. Хотя по логике вроде правильно делал. Разницу между текущим и новым положением задавал.

   public void SetRelativePos(double NeededPos)
        {
            var relative = Position - NeededPos;

            Task.Factory.StartNew(() => seek.SetPositions(new DsLong((long)(relative * 10000000.0)), AMSeekingSeekingFlags.RelativePositioning, new DsLong(0), DirectShowLib.AMSeekingSeekingFlags.NoPositioning));
        }

Сам граф строю вот так:

   internal static ICaptureGraphBuilder2 BuildGraph(CodecTypes ctp, IGraphBuilder pGraph, Func<IGraphBuilder, IBaseFilter> SourceFilterProvider, IBaseFilter pSampleGrabber, IBaseFilter pNullRenderer, ISampleGrabberCB CBObject)
        {
            int hr = 0;

            //graph builder
            ICaptureGraphBuilder2 pBuilder = (ICaptureGraphBuilder2)new CaptureGraphBuilder2();
            hr = pBuilder.SetFiltergraph(pGraph);
            checkHR(hr, "Can't SetFiltergraph");

            IBaseFilter sourceFilter = SourceFilterProvider(pGraph);

            IBaseFilter pVideoDecoder = GetVideoDecoder(ctp);

            hr = pGraph.AddFilter(pVideoDecoder, "Video Decoder");
            checkHR(hr, "Can't add Video Decoder to graph");

            //connect Camera and Decoder
            hr = pBuilder.RenderStream(null, MediaType.Video, sourceFilter, null, pVideoDecoder);
            checkHR(hr, "Can't connect Source and Video Decoder");

            BuildSampleGrabber(pBuilder, pGraph, pVideoDecoder, pSampleGrabber, pNullRenderer, CBObject);
            return pBuilder;
        }

ДЛя SourceFilterProvider такая вот функция:

        internal static IBaseFilter CreateFileSource(IGraphBuilder pGraph, string srcFile)
        {
            int hr = 0;
            //add LAV Splitter Source
            IBaseFilter SplitterSource = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_LAVMediaSplitter));
            hr = pGraph.AddFilter(SplitterSource, "Splitter Source");
            checkHR(hr, "Can't add Splitter Source to graph");

            //set source filename
            IFileSourceFilter pSplitterSource_src = SplitterSource as IFileSourceFilter;
            if (pSplitterSource_src == null)
            {
                checkHR(unchecked((int)0x80004002), "Can't get IFileSourceFilter");
            }

            hr = pSplitterSource_src.Load(srcFile, null);
            checkHR(hr, "Can't load file");

            return SplitterSource;
        }

Че за фигня то??