public bool createSourceFromCaptureProcessor( object aPtrCaptureProcessor, out object aPtrPtrMediaSource) { bool lresult = false; aPtrPtrMediaSource = null; do { if (mSourceControl == null) { break; } try { ICaptureProcessor lICaptureProcessor = aPtrCaptureProcessor as ICaptureProcessor; if (lICaptureProcessor != null) { CaptureProcessor lCaptureProcessor = new CaptureProcessor(lICaptureProcessor); mSourceControl.createSourceFromCaptureProcessor( lCaptureProcessor, out aPtrPtrMediaSource); } else { var lNativeCaptureProcessor = aPtrCaptureProcessor as CaptureManagerLibrary.ICaptureProcessor; if (lNativeCaptureProcessor == null) { break; } mSourceControl.createSourceFromCaptureProcessor( lNativeCaptureProcessor, out aPtrPtrMediaSource); } lresult = true; } catch (Exception exc) { LogManager.getInstance().write(exc.Message); } } while (false); return(lresult); }
private void lButton_Click(object sender, RoutedEventArgs e) { var lButton = (Button)sender; do { if (mSourceControl == null) { return; } if (mISessions == null) { break; } if (lButton.Tag == null) { break; } int lIndex = (int)lButton.Tag; if (lButton.Content == "Stop") { if (mISessions.ContainsKey(lIndex)) { mISessions[lIndex].closeSession(); mISessions.Remove(lIndex); lButton.Content = "Start"; } break; } ICaptureProcessor lICaptureProcessor = null; try { lICaptureProcessor = IPCameraMJPEGCaptureProcessor.createCaptureProcessor(URLs[lIndex % 2]); } catch (System.Exception exc) { MessageBox.Show(exc.Message); return; } if (lICaptureProcessor == null) { return; } object lMediaSource = null; mSourceControl.createSourceFromCaptureProcessor( lICaptureProcessor, out lMediaSource); if (lMediaSource == null) { return; } object lPtrSourceNode; var lSourceControl = mCaptureManager.createSourceControl(); if (lSourceControl == null) { return; } lSourceControl.createSourceNodeFromExternalSourceWithDownStreamConnection( lMediaSource, 0, 0, mEVROutputNodes[lIndex], out lPtrSourceNode); List <object> lSourceMediaNodeList = new List <object>(); lSourceMediaNodeList.Add(lPtrSourceNode); var lSessionControl = mCaptureManager.createSessionControl(); if (lSessionControl == null) { return; } var lISession = lSessionControl.createSession( lSourceMediaNodeList.ToArray()); if (lISession == null) { return; } lISession.registerUpdateStateDelegate(UpdateStateDelegate); lISession.startSession(0, Guid.Empty); mISessions[lIndex] = lISession; lButton.Content = "Stop"; } while (false); }
public CaptureProcessor(ICaptureProcessor aICaptureProcessor) { mICaptureProcessor = aICaptureProcessor; }
private object getCompressedMediaType( ICaptureProcessor a_ICaptureProcessor, int a_StreamIndex, int a_MediaTypeIndex, XmlNode aEncoderNode, XmlNode aEncoderModeNode, int aCompressedMediaTypeIndex) { object lresult = null; do { if (aCompressedMediaTypeIndex < 0) { break; } object lMediaSource = null; mSourceControl.createSourceFromCaptureProcessor( a_ICaptureProcessor, out lMediaSource); if (lMediaSource == null) { break; } if (a_StreamIndex < 0) { break; } if (a_MediaTypeIndex < 0) { break; } if (aEncoderNode == null) { break; } if (aEncoderModeNode == null) { break; } var lEncoderGuidAttr = aEncoderNode.Attributes["CLSID"]; if (lEncoderGuidAttr == null) { break; } Guid lCLSIDEncoder; if (!Guid.TryParse(lEncoderGuidAttr.Value, out lCLSIDEncoder)) { break; } var lEncoderModeGuidAttr = aEncoderModeNode.Attributes["GUID"]; if (lEncoderModeGuidAttr == null) { break; } Guid lCLSIDEncoderMode; if (!Guid.TryParse(lEncoderModeGuidAttr.Value, out lCLSIDEncoderMode)) { break; } uint lStreamIndex = (uint)a_StreamIndex; uint lMediaTypeIndex = (uint)a_MediaTypeIndex; object lSourceMediaType = null; if (!mSourceControl.getSourceOutputMediaTypeFromMediaSource( lMediaSource, lStreamIndex, lMediaTypeIndex, out lSourceMediaType)) { break; } if (lSourceMediaType == null) { break; } IEncoderNodeFactory lEncoderNodeFactory; if (!mEncoderControl.createEncoderNodeFactory( lCLSIDEncoder, out lEncoderNodeFactory)) { break; } if (lEncoderNodeFactory == null) { break; } object lCompressedMediaType; if (!lEncoderNodeFactory.createCompressedMediaType( lSourceMediaType, lCLSIDEncoderMode, 50, (uint)aCompressedMediaTypeIndex, out lCompressedMediaType)) { break; } lresult = lCompressedMediaType; } while (false); return(lresult); }
private async void mLaunchButton_Click(object sender, RoutedEventArgs e) { if (mLaunchButton.Content == "Stop") { if (mISession != null) { mISession.closeSession(); mLaunchButton.Content = "Launch"; } mISession = null; return; } if (mISourceControl == null) { return; } ICaptureProcessor lICaptureProcessor = null; try { lICaptureProcessor = await RTSPCaptureProcessor.createCaptureProcessor(mRTSPSourceComboBox.Text); } catch (System.Exception exc) { MessageBox.Show(exc.Message); return; } if (lICaptureProcessor == null) { return; } object lMediaSource = null; mISourceControl.createSourceFromCaptureProcessor( lICaptureProcessor, out lMediaSource); if (lMediaSource == null) { return; } string lxmldoc = ""; mCaptureManager.getCollectionOfSinks(ref lxmldoc); XmlDocument doc = new XmlDocument(); doc.LoadXml(lxmldoc); var lSinkNode = doc.SelectSingleNode("SinkFactories/SinkFactory[@GUID='{2F34AF87-D349-45AA-A5F1-E4104D5C458E}']"); if (lSinkNode == null) { return; } var lContainerNode = lSinkNode.SelectSingleNode("Value.ValueParts/ValuePart[1]"); if (lContainerNode == null) { return; } IEVRSinkFactory lSinkFactory; var lSinkControl = mCaptureManager.createSinkControl(); lSinkControl.createSinkFactory( Guid.Empty, out lSinkFactory); object lEVROutputNode; lSinkFactory.createOutputNode( mVideoPanel.Handle, out lEVROutputNode); if (lEVROutputNode == null) { return; } object lPtrSourceNode; var lSourceControl = mCaptureManager.createSourceControl(); if (lSourceControl == null) { return; } lSourceControl.createSourceNodeFromExternalSourceWithDownStreamConnection( lMediaSource, 0, 0, lEVROutputNode, out lPtrSourceNode); List <object> lSourceMediaNodeList = new List <object>(); lSourceMediaNodeList.Add(lPtrSourceNode); var lSessionControl = mCaptureManager.createSessionControl(); if (lSessionControl == null) { return; } mISession = lSessionControl.createSession( lSourceMediaNodeList.ToArray()); if (mISession == null) { return; } mISession.registerUpdateStateDelegate(UpdateStateDelegate); mISession.startSession(0, Guid.Empty); mLaunchButton.Content = "Stop"; }
private async void mLaunchButton_Click(object sender, RoutedEventArgs e) { mLaunchButton.IsEnabled = false; do { if (mLaunchButton.Content == "Stop") { if (mISession != null) { await mISession.closeSessionAsync(); mLaunchButton.Content = "Launch"; } mISession = null; break; } if (mISourceControl == null) break; ICaptureProcessor lICaptureProcessor = null; try { lICaptureProcessor = IPCameraMJPEGCaptureProcessor.createCaptureProcessor(); } catch (System.Exception exc) { MessageBox.Show(exc.Message); break; } if (lICaptureProcessor == null) break; object lMediaSource = await mISourceControl.createSourceFromCaptureProcessorAsync( lICaptureProcessor); if (lMediaSource == null) break; string lxmldoc = await mCaptureManager.getCollectionOfSinksAsync(); XmlDocument doc = new XmlDocument(); doc.LoadXml(lxmldoc); var lSinkNode = doc.SelectSingleNode("SinkFactories/SinkFactory[@GUID='{2F34AF87-D349-45AA-A5F1-E4104D5C458E}']"); if (lSinkNode == null) break; var lContainerNode = lSinkNode.SelectSingleNode("Value.ValueParts/ValuePart[1]"); if (lContainerNode == null) break; var lSinkControl = await mCaptureManager.createSinkControlAsync(); var lSinkFactory = await lSinkControl.createEVRSinkFactoryAsync( Guid.Empty); object lEVROutputNode = await lSinkFactory.createOutputNodeAsync( mVideoPanel.Handle); if (lEVROutputNode == null) break; var lSourceControl = await mCaptureManager.createSourceControlAsync(); if (lSourceControl == null) break; object lPtrSourceNode = await lSourceControl.createSourceNodeFromExternalSourceWithDownStreamConnectionAsync( lMediaSource, 0, 0, lEVROutputNode); List<object> lSourceMediaNodeList = new List<object>(); lSourceMediaNodeList.Add(lPtrSourceNode); var lSessionControl = await mCaptureManager.createSessionControlAsync(); if (lSessionControl == null) break; mISession = await lSessionControl.createSessionAsync( lSourceMediaNodeList.ToArray()); if (mISession == null) break; await mISession.registerUpdateStateDelegateAsync(UpdateStateDelegate); await mISession.startSessionAsync(0, Guid.Empty); mLaunchButton.Content = "Stop"; } while (false); mLaunchButton.IsEnabled = true; }