public int SetMediaTime(DsLong pTimeStart, DsLong pTimeEnd) { m_MediaTimeStart = pTimeStart.ToInt64(); m_MediaTimeEnd = pTimeEnd.ToInt64(); m_HasMediaTime = true; return(0); }
// Set the position of the graph to a specified TimeSpan protected void SeekGraphToTime(TimeSpan seekTime) { SendDebugMessage("Seeking graph to time..."); int hr; IMediaControl mc = (IMediaControl)currentFilterGraph; // Stop graph if not stopped FilterState fs; mc.GetState(50, out fs); if (fs != FilterState.Stopped) { if (fs != FilterState.Stopped) { mc.Stop(); } } long timeInSeconds = (long)seekTime.TotalSeconds; DsLong dsTimeIn100NanoSeconds = DsLong.FromInt64(timeInSeconds * 10000000); SendDebugMessage("Setting position to " + dsTimeIn100NanoSeconds.ToInt64().ToString()); long pos; if (UsingSBEFilter) { // IStreamBufferMediaSeeking is used directly on the source filter http://msdn.microsoft.com/en-us/library/dd694950(v=vs.85).aspx IStreamBufferMediaSeeking mSeek = (IStreamBufferMediaSeeking)currentSBEfilter; hr = mSeek.SetPositions(dsTimeIn100NanoSeconds, AMSeekingSeekingFlags.AbsolutePositioning, 0, AMSeekingSeekingFlags.NoPositioning); DsError.ThrowExceptionForHR(hr); mSeek.GetCurrentPosition(out pos); } else { // IMediaSeeking is used on the filter graph which distributes the calls IMediaSeeking mSeek = (IMediaSeeking)currentFilterGraph; hr = mSeek.SetPositions(dsTimeIn100NanoSeconds, AMSeekingSeekingFlags.AbsolutePositioning, 0, AMSeekingSeekingFlags.NoPositioning); DsError.ThrowExceptionForHR(hr); mSeek.GetCurrentPosition(out pos); } SendDebugMessage("New pos is " + pos.ToString()); }
public int SetTime(DsLong pTimeStart, DsLong pTimeEnd) { m_TimeStart = pTimeStart.ToInt64(); m_TimeEnd = pTimeEnd.ToInt64(); return(0); }