public virtual bool SetPlaybackRate(double value) { if (_graphBuilder == null) { return(false); } IMediaSeeking mediaSeeking = _graphBuilder as IMediaSeeking; if (mediaSeeking == null) { return(false); } double currentRate; if (mediaSeeking.GetRate(out currentRate) == 0 && currentRate != value) { bool result = mediaSeeking.SetRate(value) == 0; if (result) { FirePlaybackStateChanged(); } return(result); } return(false); }
public CAviDS(string filename, double playSpeed) { builder = new FilterGraph() as IGraphBuilder; grabber = new SampleGrabber() as ISampleGrabber; mediaType = new AMMediaType(); mediaType.majorType = MediaType.Video; mediaType.subType = MediaSubType.RGB32; mediaType.formatType = FormatType.VideoInfo; DsError.ThrowExceptionForHR(grabber.SetMediaType(mediaType)); DsError.ThrowExceptionForHR(builder.AddFilter(grabber as IBaseFilter, "Sample Grabber(DTXMania)")); DsError.ThrowExceptionForHR(builder.RenderFile(filename, null)); CDirectShow.ConnectNullRendererFromSampleGrabber(builder, grabber as IBaseFilter); if (builder is IVideoWindow videoWindow) { videoWindow.put_AutoShow(OABool.False); } DsError.ThrowExceptionForHR(grabber.GetConnectedMediaType(mediaType)); videoInfo = (VideoInfoHeader)Marshal.PtrToStructure(mediaType.formatPtr, typeof(VideoInfoHeader)); nWidth = videoInfo.BmiHeader.Width; nHeight = videoInfo.BmiHeader.Height; seeker = builder as IMediaSeeking; DsError.ThrowExceptionForHR(seeker.GetDuration(out nMediaLength)); DsError.ThrowExceptionForHR(seeker.SetRate(playSpeed / 20.0)); control = builder as IMediaControl; filter = builder as IMediaFilter; grabber.SetBufferSamples(BufferThem: true); Run(); Pause(); bPlaying = false; bPause = false; }
public void SetSpeed(double rate) { if (ms != null) { ms.SetRate(rate); } }
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; } } }
public virtual bool SetPlaybackRate(double value) { if (_graphBuilder == null || _ms == null) { return(false); } double currentRate; if (_ms.GetRate(out currentRate) == 0 && currentRate != value) { bool result = _ms.SetRate(value) == 0; if (result) { FirePlaybackStateChanged(); } return(result); } return(false); }
/// <summary> /// Test Get/Set Rate /// </summary> void TestRate() { int hr; double dRate1, dRate2; // Read the current play rate hr = m_ims.GetRate(out dRate1); Marshal.ThrowExceptionForHR(hr); // Change the rate hr = m_ims.SetRate(dRate1 + 1); Marshal.ThrowExceptionForHR(hr); // Re-read the rate hr = m_ims.GetRate(out dRate2); Marshal.ThrowExceptionForHR(hr); // See if we got the right answer Debug.Assert(dRate1 + 1 == dRate2, "Get/Set Rate"); }
private void open() { int hr; if (this.GraphBuilder == null) { this.GraphBuilder = (IGraphBuilder) new FilterGraph(); hr = GraphBuilder.RenderFile(file, null);//读取文件 DsError.ThrowExceptionForHR(hr); this.MediaControl = (IMediaControl)this.GraphBuilder; this.MediaEventEx = (IMediaEventEx)this.GraphBuilder; MediaSeeking = (IMediaSeeking)this.GraphBuilder; MediaSeeking.SetTimeFormat(TIME_FORMAT_FRAME); MediaSeeking.SetRate(0.3); this.VideoFrameStep = (IVideoFrameStep)this.GraphBuilder; // MediaPosition= (IMediaPosition)this.GraphBuilder; this.VideoWindow = this.GraphBuilder as IVideoWindow; this.BasicVideo = this.GraphBuilder as IBasicVideo; this.BasicAudio = this.GraphBuilder as IBasicAudio; hr = this.MediaEventEx.SetNotifyWindow(this.Handle, WM_GRAPHNOTIFY, IntPtr.Zero); DsError.ThrowExceptionForHR(hr); hr = this.VideoWindow.put_Owner(this.Handle); DsError.ThrowExceptionForHR(hr); hr = this.VideoWindow.put_WindowStyle(WindowStyle.Child | WindowStyle.ClipSiblings | WindowStyle.ClipChildren); DsError.ThrowExceptionForHR(hr); this.Focus(); hr = InitVideoWindow(1, 1); DsError.ThrowExceptionForHR(hr); long time; MediaSeeking.GetDuration(out time); label20.Text = time.ToString(); trackBar1.SetRange(0, (int)time); t = new Thread(new ThreadStart(updateTimeBarThread)); } }
protected virtual HRESULT PreparePlayback() { m_MediaControl = (IMediaControl)m_GraphBuilder; m_BasicVideo = (IBasicVideo)m_GraphBuilder; m_MediaSeeking = (IMediaSeeking)m_GraphBuilder; m_VideoWindow = (IVideoWindow)m_GraphBuilder; m_MediaEventEx = (IMediaEventEx)m_GraphBuilder; m_FrameStep = (IVideoFrameStep)m_GraphBuilder; m_MediaPosition = (IMediaPosition)m_GraphBuilder; SettingUpVideoWindow(); int hr = m_MediaEventEx.SetNotifyWindow(m_EventControl.Handle, WM_GRAPHNOTIFY, Marshal.GetIUnknownForObject(this)); Debug.Assert(hr == 0); SetVolume(m_bMute ? -10000 : m_iVolume); if (m_dRate != 1.0) { m_MediaSeeking.SetRate(m_dRate); m_MediaSeeking.GetRate(out m_dRate); } OnPlaybackReady?.Invoke(this, EventArgs.Empty); return((HRESULT)hr); }
void IPlayer.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; IMediaSeeking mediaSeeking = this.graphBuilder as IMediaSeeking; if (mediaSeeking != null) { hr = mediaSeeking.SetRate(rate); if (hr == 0) { return; } } }
public CAviDS(string filename, double playSpeed) { int hr = 0x0; builder = (IGraphBuilder) new FilterGraph(); #region [Sample Grabber] { grabber = new SampleGrabber() as ISampleGrabber; mediaType = new AMMediaType(); mediaType.majorType = MediaType.Video; mediaType.subType = MediaSubType.RGB32; mediaType.formatType = FormatType.VideoInfo; hr = grabber.SetMediaType(mediaType); DsError.ThrowExceptionForHR(hr); hr = builder.AddFilter((IBaseFilter)grabber, "Sample Grabber"); DsError.ThrowExceptionForHR(hr); } #endregion hr = builder.RenderFile(filename, null); DsError.ThrowExceptionForHR(hr); // Null レンダラに接続しないとウィンドウが表示される。 // また、レンダリングを行わないため処理速度を向上できる。 CDirectShow.ConnectNullRendererFromSampleGrabber(builder, grabber as IBaseFilter); CDirectShow.tグラフを解析しデバッグ出力する(builder); IVideoWindow videoWindow = builder as IVideoWindow; if (videoWindow != null) { videoWindow.put_AutoShow(OABool.False); } #region [Video Info] { hr = grabber.GetConnectedMediaType(mediaType); DsError.ThrowExceptionForHR(hr); videoInfo = (VideoInfoHeader)Marshal.PtrToStructure(mediaType.formatPtr, typeof(VideoInfoHeader)); nWidth = videoInfo.BmiHeader.Width; nHeight = videoInfo.BmiHeader.Height; } #endregion #region [ Seeker ] { seeker = builder as IMediaSeeking; hr = seeker.GetDuration(out nMediaLength); DsError.ThrowExceptionForHR(hr); hr = seeker.SetRate(playSpeed / 20); DsError.ThrowExceptionForHR(hr); } #endregion #region [Control] { control = builder as IMediaControl; } #endregion #region [Filter] { filter = builder as IMediaFilter; } #endregion grabber.SetBufferSamples(true); this.Run(); this.Pause(); bPlaying = false; bPause = false; // 外見えには演奏停止している。PAUSE中として外に見せないこと。 }
protected virtual HRESULT PreparePlayback() { m_MediaControl = (IMediaControl)m_GraphBuilder; m_BasicVideo = (IBasicVideo)m_GraphBuilder; m_MediaSeeking = (IMediaSeeking)m_GraphBuilder; m_VideoWindow = (IVideoWindow)m_GraphBuilder; m_MediaEventEx = (IMediaEventEx)m_GraphBuilder; m_FrameStep = (IVideoFrameStep)m_GraphBuilder; SettingUpVideoWindow(); int hr = m_MediaEventEx.SetNotifyWindow(m_EventControl.Handle, WM_GRAPHNOTIFY, Marshal.GetIUnknownForObject(this)); Debug.Assert(hr == 0); SetVolume(m_bMute ? -10000 : m_iVolume); if (m_dRate != 1.0) { m_MediaSeeking.SetRate(m_dRate); m_MediaSeeking.GetRate(out m_dRate); } if (OnPlaybackReady != null) OnPlaybackReady(this, EventArgs.Empty); return (HRESULT)hr; }