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; } } }