public override void Setup() { base.Setup(); //create bridge controller _bridgeController = new GMFBridgeController(); //add a video stream to the bridge //1 = Video stream 0 = Audio stream, format type, 1 = dispose stream going into disconnected sink 0 = buffer stream going into disconnected sink _bridgeController.AddStream(1, eFormatType.eAny, 1); _netSrcMediaType = new AMMediaType(); _netSrcMediaType.majorType = MediaType.Stream; // _netSrcMediaType.subType = new Guid(0x5fe31118, 0x25fb, 0x4d77, 0xbc, 0x62, 0x3d, 0x9c, 0xc3, 0x2b, 0xbe, 0x67); _netSrcMediaType.subType = Guid.Empty; AddSourceFilter(); //insert Infinite Pin Tee into playback graph _infPinTee = AddFilterByName(_graphBuilder, FilterCategory.LegacyAmFilterCategory, "Infinite Pin Tee Filter"); //add a bridge sink to the playback graph _bridgeSink = (IBaseFilter)_bridgeController.InsertSinkFilter(_graphBuilder); _videoCallbackFilter = AddFilterByName(_graphBuilder, FilterCategory.LegacyAmFilterCategory, "LEAD Video Callback Filter (2.0)"); _callback = (ILMVCallback)_videoCallbackFilter; _callback.CallInSameThread = false; _callback.ReceiveProcObj = this; RenderSource(); }
private void AddCallback(object pCallback) { try { if (_lmvCallBkPlay == null) { foreach (Processor vp in _captureCtrl.VideoProcessors) { if (vp.FriendlyName.Equals("LEAD Video Callback Filter (2.0)")) { _captureCtrl.SelectedVideoProcessors.Add(vp); _lmvCallBkPlay = _captureCtrl.GetSubObject(CaptureObject.SelVideoProcessor) as ILMVCallback; _lmvCallBkPlay.ReceiveProcObj = pCallback; } } } else { _lmvCallBkPlay.ReceiveProcObj = pCallback; } } catch (Exception ex) { MessageBox.Show(ex.Message); } }