void DeInitDirectShow() { if (mediaControl != null) { mediaControl.StopWhenReady(); } if (mediaEventEx != null) { mediaEventEx.SetNotifyWindow(IntPtr.Zero, WM_GRAPHNOTIFY, IntPtr.Zero); } if (videoWindow != null) { videoWindow.put_Visible(OABool.False); videoWindow.put_Owner(IntPtr.Zero); } Marshal.ReleaseComObject(mediaControl); mediaControl = null; Marshal.ReleaseComObject(mediaEventEx); mediaControl = null; Marshal.ReleaseComObject(videoWindow); videoWindow = null; Marshal.ReleaseComObject(graphBuilder); graphBuilder = null; Marshal.ReleaseComObject(captureGraphBuilder); captureGraphBuilder = null; Marshal.ReleaseComObject(outputRenderer); outputRenderer = null; Marshal.ReleaseComObject(aspectRatioControl); aspectRatioControl = null; Marshal.ReleaseComObject(aspectRatioControl9); aspectRatioControl9 = null; }
void InitDirectShow(IntPtr handle) { graphBuilder = (IGraphBuilder) new FilterGraph(); mediaControl = (IMediaControl)(IVideoWindow)graphBuilder; videoWindow = (IVideoWindow)(IMediaControl)graphBuilder; mediaEventEx = (IMediaEventEx)graphBuilder; captureGraphBuilder = (ICaptureGraphBuilder2) new CaptureGraphBuilder2(); outputRenderer = (IBaseFilter) new VideoMixingRenderer9(); if (outputRenderer != null) { graphBuilder.AddFilter(outputRenderer, "Output"); aspectRatioControl = outputRenderer as IVMRAspectRatioControl; aspectRatioControl9 = outputRenderer as IVMRAspectRatioControl9; } var hr = mediaEventEx.SetNotifyWindow(handle, WM_GRAPHNOTIFY, IntPtr.Zero); DsError.ThrowExceptionForHR(hr); hr = captureGraphBuilder.SetFiltergraph(graphBuilder); DsError.ThrowExceptionForHR(hr); graphBuilderRotEntry = new DsROTEntry(graphBuilder); }
// VMR windowed behaves like a real windowed renderer, i.e. it must be configured after the video is rendered (compare with VMR9 windowed) protected override void Initialize(IGraphBuilder pGraphBuilder, IntPtr hMediaWindow) { base.Initialize(pGraphBuilder, hMediaWindow); IVMRAspectRatioControl pVMRAspectRatioControl = (IVMRAspectRatioControl)BaseFilter; // will be released when we release IBaseFilter pVMRAspectRatioControl.SetAspectRatioMode(VMR_ASPECT_RATIO_MODE.VMR_ARMODE_NONE); }
public void DoTests() { arControl = (IVMRAspectRatioControl) new VideoMixingRenderer(); try { TestAspectRatioMode(); } finally { Marshal.ReleaseComObject(arControl); } }