private object createImageSource() { object l_source = null; do { var lOpenFileDialog = new Microsoft.Win32.OpenFileDialog(); lOpenFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); lOpenFileDialog.Filter = "Image files (*.png, *.gif)|*.png;*.gif"; bool l_result = (bool)lOpenFileDialog.ShowDialog(); if (l_result && File.Exists(lOpenFileDialog.FileName)) { var lICaptureProcessor = ImageCaptureProcessor.createCaptureProcessor(lOpenFileDialog.FileName); if (lICaptureProcessor == null) { break; } object lImageSourceSource = null; mSourceControl.createSourceFromCaptureProcessor( lICaptureProcessor, out lImageSourceSource); l_source = lImageSourceSource; } } while (false); return(l_source); }
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); }
private void MAddImageBtn_Click(object sender, RoutedEventArgs e) { if (mAddImageSession != null) { mAddImageSession.stopSession(); mAddImageSession.closeSession(); mAddImageSession = null; mAddImageTxtBlk.Text = "Add Image"; mVideoTopologyInputMixerNodes.Add(mImageVideoTopologyInputMixerNode); var lVideoMixerControlRelease = mCaptureManager.createVideoMixerControl(); if (lVideoMixerControlRelease != null) { lVideoMixerControlRelease.flush(mImageVideoTopologyInputMixerNode); } mImageVideoTopologyInputMixerNode = null; m_CameraPanel.IsEnabled = true; return; } var lOpenFileDialog = new Microsoft.Win32.OpenFileDialog(); lOpenFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); lOpenFileDialog.Filter = "Image files (*.png, *.gif)|*.png;*.gif"; bool l_result = (bool)lOpenFileDialog.ShowDialog(); if (l_result && File.Exists(lOpenFileDialog.FileName)) { var lICaptureProcessor = ImageCaptureProcessor.createCaptureProcessor(lOpenFileDialog.FileName); if (lICaptureProcessor == null) { return; } object lImageSourceSource = null; mSourceControl.createSourceFromCaptureProcessor( lICaptureProcessor, out lImageSourceSource); var lVideoTopologyInputMixerNode = mVideoTopologyInputMixerNodes[0]; mImageVideoTopologyInputMixerNode = lVideoTopologyInputMixerNode; mVideoTopologyInputMixerNodes.RemoveAt(0); object lImageSourceSourceNode = null; mSourceControl.createSourceNodeFromExternalSourceWithDownStreamConnection( lImageSourceSource, 0, 0, lVideoTopologyInputMixerNode, out lImageSourceSourceNode); object[] lSourceNodes = { lImageSourceSourceNode }; mAddImageSession = mISessionControl.createSession(lSourceNodes); if (mAddImageSession != null) { mAddImageTxtBlk.Text = "Remove Camera"; } mAddImageSession.startSession(0, Guid.Empty); var lVideoMixerControl = mCaptureManager.createVideoMixerControl(); if (lVideoMixerControl != null) { lVideoMixerControl.setPosition(lVideoTopologyInputMixerNode, 0.5f, 1.0f, 0.0f, 0.5f); } //if (lVideoMixerControl != null) // lVideoMixerControl.setSrcPosition(lVideoTopologyInputMixerNode, 0.0f, 0.5f, 0.0f, 0.5f); if (lVideoMixerControl != null) { lVideoMixerControl.setOpacity(lVideoTopologyInputMixerNode, 0.5f); } m_CameraPanel.IsEnabled = false; } }
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"; }