Example #1
0
        private void DoSetRate(double newRate)
        {
            int           hr;
            IMediaControl mc = (IMediaControl)currentFilterGraph;

            // Stop
            hr = mc.Stop();
            DsError.ThrowExceptionForHR(hr);
            // Stop ASFWriter
            hr = currentOutputFilter.Stop();
            DsError.ThrowExceptionForHR(hr);

            if (UsingSBEFilter)
            {
                IStreamBufferMediaSeeking mSeek = (IStreamBufferMediaSeeking)currentSBEfilter;
                DsLong lDouble = DsLong.FromInt64(Convert.ToInt64(newRate));
                hr = mSeek.SetRate(lDouble);
                DsError.ThrowExceptionForHR(hr);
            }
            else
            {
                // IMediaSeeking is used on the filter graph which distributes the calls
                IMediaSeeking mSeek = (IMediaSeeking)currentFilterGraph;
                hr = mSeek.SetRate(newRate);
                DsError.ThrowExceptionForHR(hr);
            }

            // Start ASF
            hr = currentOutputFilter.Run(0);
            DsError.ThrowExceptionForHR(hr);
            // Run again
            hr = mc.Run();
            DsError.ThrowExceptionForHR(hr);
        }
        void ITimeShifting.SetRate(double rate)
        {
            if (rate >= 0 && rate < 0.1)
            {
                rate = 0.1;
            }
            else if (rate < 0 && rate > -0.1)
            {
                rate = -0.1;
            }

            int hr = 0;

            IStreamBufferMediaSeeking2 mediaSeeking2 = this.streamBufferSource as IStreamBufferMediaSeeking2;

            if (mediaSeeking2 != null)
            {
                //mediaSeeking2.SetRateEx(rate, 25);
                hr = mediaSeeking2.SetRateEx(rate, 25);
                if (hr == 0)
                {
                    return;
                }
            }

            IStreamBufferMediaSeeking mediaSeeking1 = this.streamBufferSource as IStreamBufferMediaSeeking;

            if (mediaSeeking1 != null)
            {
                hr = mediaSeeking1.SetRate(rate);
                if (hr == 0)
                {
                    return;
                }
            }

            IMediaSeeking mediaSeeking0 = this.graphBuilder2 as IMediaSeeking;

            if (mediaSeeking0 != null)
            {
                hr = mediaSeeking0.SetRate(rate);
                if (hr == 0)
                {
                    return;
                }
            }
        }