Ejemplo n.º 1
0
        private void StartSession()
        {
            object          lPtrSourceNode = null;
            ISourceControl  sourceControl  = CaptureManager.createSourceControl();
            ISessionControl sessionControl = CaptureManager.createSessionControl();

            _EVROutputAdapter = new EVROutputAdapter(Instance, _HWND);

            if (sessionControl != null && sessionControl != null && _EVROutputAdapter.Node != null)
            {
                Session = null;

                sourceControl.createSourceNode(_SymbolicLink,
                                               _StreamIndex,
                                               _MediaTypeIndex,
                                               _EVROutputAdapter.Node,
                                               out lPtrSourceNode);

                Session = sessionControl.createSession(new object[]
                {
                    lPtrSourceNode
                });

                if (Session != null)
                {
                    Session.registerUpdateStateDelegate(HandleSessionStateChanged);
                    Session.startSession(0, Guid.Empty);
                }
            }
        }
Ejemplo n.º 2
0
        public ISessionControl createSessionControl()
        {
            ISessionControl lresult = null;

            do
            {
                try
                {
                    if (checkICaptureManagerControl())
                    {
                        break;
                    }

                    object lUnknown;

                    mICaptureManagerControl.createControl(
                        typeof(CaptureManagerLibrary.ISessionControl).GUID,
                        out lUnknown);

                    if (lUnknown == null)
                    {
                        break;
                    }

                    var lSessionControl = lUnknown as CaptureManagerLibrary.ISessionControl;

                    if (lSessionControl == null)
                    {
                        break;
                    }

                    lresult = new SessionControl(lSessionControl);
                }
                catch (Exception exc)
                {
                    LogManager.getInstance().write(exc.Message);
                }
            } while (false);

            return(lresult);
        }
Ejemplo n.º 3
0
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            try
            {
                mCaptureManager = new CaptureManager("CaptureManager.dll");
            }
            catch (System.Exception)
            {
                try
                {
                    mCaptureManager = new CaptureManager();
                }
                catch (System.Exception)
                {
                }
            }

            m_Thumbnail.mChangeState += m_Thumbnail_mChangeState;

            LogManager.getInstance().WriteDelegateEvent += MainWindow_WriteDelegateEvent;

            if (mCaptureManager == null)
            {
                return;
            }

            mSourceControl = mCaptureManager.createSourceControl();

            if (mSourceControl == null)
            {
                return;
            }

            mSinkControl = mCaptureManager.createSinkControl();

            if (mSinkControl == null)
            {
                return;
            }

            mISessionControl = mCaptureManager.createSessionControl();

            if (mISessionControl == null)
            {
                return;
            }

            mStreamControl = mCaptureManager.createStreamControl();

            if (mStreamControl == null)
            {
                return;
            }

            mStreamControl.createStreamControlNodeFactory(ref mSpreaderNodeFactory);

            if (mSpreaderNodeFactory == null)
            {
                return;
            }

            mSinkControl.createSinkFactory(Guid.Empty, out mEVRMultiSinkFactory);

            if (mEVRMultiSinkFactory == null)
            {
                return;
            }

            mSwitcherControl = mCaptureManager.createSwitcherControl();

            if (mSwitcherControl == null)
            {
                return;
            }



            XmlDataProvider lXmlDataProvider = (XmlDataProvider)this.Resources["XmlSources"];

            if (lXmlDataProvider == null)
            {
                return;
            }

            XmlDocument doc = new XmlDocument();

            string lxmldoc = "";

            mCaptureManager.getCollectionOfSources(ref lxmldoc);

            doc.LoadXml(lxmldoc);

            lXmlDataProvider.Document = doc;

            lXmlDataProvider = (XmlDataProvider)this.Resources["XmlEncoders"];

            if (lXmlDataProvider == null)
            {
                return;
            }

            doc = new XmlDocument();

            mCaptureManager.getCollectionOfEncoders(ref lxmldoc);

            doc.LoadXml(lxmldoc);

            lXmlDataProvider.Document = doc;
        }
Ejemplo n.º 4
0
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            try
            {
                mCaptureManager = new CaptureManager("CaptureManager.dll");
            }
            catch (System.Exception)
            {
                try
                {
                    mCaptureManager = new CaptureManager();
                }
                catch (System.Exception)
                {
                }
            }

            LogManager.getInstance().WriteDelegateEvent += MainWindow_WriteDelegateEvent;

            if (mCaptureManager == null)
            {
                return;
            }

            mSourceControl = mCaptureManager.createSourceControl();

            if (mSourceControl == null)
            {
                return;
            }

            mEncoderControl = mCaptureManager.createEncoderControl();

            if (mEncoderControl == null)
            {
                return;
            }

            mSinkControl = mCaptureManager.createSinkControl();

            if (mSinkControl == null)
            {
                return;
            }

            mISessionControl = mCaptureManager.createSessionControl();

            if (mISessionControl == null)
            {
                return;
            }

            mStreamControl = mCaptureManager.createStreamControl();

            if (mStreamControl == null)
            {
                return;
            }

            mStreamControl.createStreamControlNodeFactory(ref mSpreaderNodeFactory);

            if (mSpreaderNodeFactory == null)
            {
                return;
            }

            mSinkControl.createSinkFactory(Guid.Empty, out mEVRMultiSinkFactory);

            if (mEVRMultiSinkFactory == null)
            {
                return;
            }


            XmlDataProvider lXmlDataProvider = (XmlDataProvider)this.Resources["XmlSources"];

            if (lXmlDataProvider == null)
            {
                return;
            }

            XmlDocument doc = new XmlDocument();

            string lxmldoc = "";

            mCaptureManager.getCollectionOfSources(ref lxmldoc);

            doc.LoadXml(lxmldoc);

            lXmlDataProvider.Document = doc;

            lXmlDataProvider = (XmlDataProvider)this.Resources["XmlEncoders"];

            if (lXmlDataProvider == null)
            {
                return;
            }

            doc = new XmlDocument();

            mCaptureManager.getCollectionOfEncoders(ref lxmldoc);

            doc.LoadXml(lxmldoc);

            lXmlDataProvider.Document = doc;



            mCaptureManager.getCollectionOfSinks(ref lxmldoc);


            lXmlDataProvider = (XmlDataProvider)this.Resources["XmlContainerTypeProvider"];

            if (lXmlDataProvider == null)
            {
                return;
            }

            doc = new XmlDocument();

            doc.LoadXml(lxmldoc);

            lXmlDataProvider.Document = doc;


            ProcessPriorityClass lpriority = Process.GetCurrentProcess().PriorityClass;

            Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.RealTime;
        }
        public MainWindow()
        {
            InitializeComponent();


            try
            {
                mCaptureManager = new CaptureManager("CaptureManager.dll");
            }
            catch (System.Exception)
            {
                try
                {
                    mCaptureManager = new CaptureManager();
                }
                catch (System.Exception)
                {
                }
            }

            LogManager.getInstance().WriteDelegateEvent += MainWindow_WriteDelegateEvent;

            mSourceControl = mCaptureManager.createSourceControl();

            mEncoderControl = mCaptureManager.createEncoderControl();

            mSinkControl = mCaptureManager.createSinkControl();

            mStreamControl = mCaptureManager.createStreamControl();

            mISessionControl = mCaptureManager.createSessionControl();


            mStreamControl.createStreamControlNodeFactory(ref mSpreaderNodeFactory);

            if (mSpreaderNodeFactory == null)
            {
                return;
            }

            XmlDataProvider lXmlDataProvider = (XmlDataProvider)this.Resources["XmlSources"];

            if (lXmlDataProvider == null)
            {
                return;
            }

            XmlDocument doc = new XmlDocument();

            string lxmldoc = "";

            mCaptureManager.getCollectionOfSources(ref lxmldoc);

            doc.LoadXml(lxmldoc);

            lXmlDataProvider.Document = doc;



            XmlDataProvider lXmlContainerTypeProvider = (XmlDataProvider)this.Resources["XmlContainerTypeProvider"];

            if (lXmlDataProvider == null)
            {
                return;
            }

            doc = new XmlDocument();

            lxmldoc = "";

            mCaptureManager.getCollectionOfSinks(ref lxmldoc);

            doc.LoadXml(lxmldoc);

            lXmlContainerTypeProvider.Document = doc;
        }
Ejemplo n.º 6
0
        private void init()
        {
            string lScreenCaptureSymbolicLink = "CaptureManager///Software///Sources///ScreenCapture///ScreenCapture";

            string lAudioLoopBack = "CaptureManager///Software///Sources///AudioEndpointCapture///AudioLoopBack";


            // Video Source
            uint lVideoSourceIndexStream = 0;

            uint lVideoSourceIndexMediaType = 2;

            object lVideoSourceOutputMediaType;

            mSourceControl.getSourceOutputMediaType(lScreenCaptureSymbolicLink, lVideoSourceIndexStream, lVideoSourceIndexMediaType, out lVideoSourceOutputMediaType);



            Guid lH264Encoder = new Guid("6ca50344-051a-4ded-9779-a43305165e35");

            IEncoderNodeFactory lIEncoderNodeFactory;

            mEncoderControl.createEncoderNodeFactory(lH264Encoder, out lIEncoderNodeFactory);

            if (lIEncoderNodeFactory == null)
            {
                mCtrlBtn.Content = "Error";

                mCtrlBtn.IsEnabled = false;

                mState.Text = "H264 Encoder is not acessable";

                return;
            }

            object lCompressedMediaType;

            lIEncoderNodeFactory.createCompressedMediaType(
                lVideoSourceOutputMediaType,
                new Guid(0xee8c3745, 0xf45b, 0x42b3, 0xa8, 0xcc, 0xc7, 0xa6, 0x96, 0x44, 0x9, 0x55),
                75,
                0,
                out lCompressedMediaType);



            // Audio Source
            uint lAudioSourceIndexStream = 0;

            uint lAudioSourceIndexMediaType = 0;

            object lAudioSourceOutputMediaType;

            mSourceControl.getSourceOutputMediaType(lAudioLoopBack, lAudioSourceIndexStream, lAudioSourceIndexMediaType, out lAudioSourceOutputMediaType);



            Guid lAACEncoder = new Guid("93af0c51-2275-45d2-a35b-f2ba21caed00");

            IEncoderNodeFactory lAACIEncoderNodeFactory;

            mEncoderControl.createEncoderNodeFactory(lAACEncoder, out lAACIEncoderNodeFactory);

            if (lAACIEncoderNodeFactory == null)
            {
                mCtrlBtn.Content = "Error";

                mCtrlBtn.IsEnabled = false;

                mState.Text = "AAC Encoder is not acessable";

                return;
            }

            object lAACCompressedMediaType;

            lAACIEncoderNodeFactory.createCompressedMediaType(
                lAudioSourceOutputMediaType,
                new Guid(0xca37e2be, 0xbec0, 0x4b17, 0x94, 0x6d, 0x44, 0xfb, 0xc1, 0xb3, 0xdf, 0x55),
                0,
                0,
                out lAACCompressedMediaType);



            IByteStreamSinkFactory lSinkFactory;

            mSinkControl.createSinkFactory(new Guid("E80A6BFD-D9C2-4A1F-95DC-14685CACEF3E"), out lSinkFactory);

            if (lSinkFactory == null)
            {
                mCtrlBtn.Content = "Error";

                mCtrlBtn.IsEnabled = false;

                mState.Text = "MP4 ByteStream is not acessable";

                return;
            }

            mNetworkStreamControl = new NetworkStreamControl(lSinkFactory);

            List <object> lcompressesMediaTypes = new List <object>();

            lcompressesMediaTypes.Add(lAACCompressedMediaType);

            lcompressesMediaTypes.Add(lCompressedMediaType);

            var lOutputNode = mNetworkStreamControl.getOutputNode(
                lcompressesMediaTypes,
                StartSession,
                StopSession,
                WriteClientIP);

            object lVideoEncoderNode;

            lIEncoderNodeFactory.createEncoderNode(lVideoSourceOutputMediaType,
                                                   new Guid(0xee8c3745, 0xf45b, 0x42b3, 0xa8, 0xcc, 0xc7, 0xa6, 0x96, 0x44, 0x9, 0x55),
                                                   75,
                                                   0,
                                                   lOutputNode[1],
                                                   out lVideoEncoderNode);



            object lAudioEncoderNode;

            lAACIEncoderNodeFactory.createEncoderNode(
                lAudioSourceOutputMediaType,
                new Guid(0xca37e2be, 0xbec0, 0x4b17, 0x94, 0x6d, 0x44, 0xfb, 0xc1, 0xb3, 0xdf, 0x55),
                75,
                0,
                lOutputNode[0],
                out lAudioEncoderNode);


            object lVideoSourceSourceNode;

            mSourceControl.createSourceNode(
                lScreenCaptureSymbolicLink,
                lVideoSourceIndexStream,
                lVideoSourceIndexMediaType,
                lVideoEncoderNode,
                out lVideoSourceSourceNode);



            object lAudioSourceSourceNode;

            mSourceControl.createSourceNode(
                lAudioLoopBack,
                lAudioSourceIndexStream,
                lAudioSourceIndexMediaType,
                lAudioEncoderNode,
                out lAudioSourceSourceNode);


            mISessionControl = mCaptureManager.createSessionControl();

            object[] lSourceNodes = { lVideoSourceSourceNode, lAudioSourceSourceNode };

            mISession = mISessionControl.createSession(lSourceNodes);

            if (mISession != null)
            {
                mState.Text = "Ready for connection";
            }
        }
Ejemplo n.º 7
0
        public Recording()
        {
            InitializeComponent();

            try
            {
                mCaptureManager = new CaptureManager("CaptureManager.dll");
            }
            catch (System.Exception exc)
            {
                try
                {
                    mCaptureManager = new CaptureManager();
                }
                catch (System.Exception exc1)
                {
                }
            }

            if (mCaptureManager == null)
            {
                return;
            }


            mSourceControl = mCaptureManager.createSourceControl();

            mISessionControl = mCaptureManager.createSessionControl();

            mSinkControl = mCaptureManager.createSinkControl();

            mEncoderControl = mCaptureManager.createEncoderControl();

            System.Xml.XmlDocument doc = new System.Xml.XmlDocument();

            string lxmldoc = "";

            mCaptureManager.getCollectionOfSources(ref lxmldoc);

            if (string.IsNullOrEmpty(lxmldoc))
            {
                return;
            }

            doc.LoadXml(lxmldoc);

            var lSourceNodes = doc.DocumentElement.ChildNodes;// .SelectNodes("//*[Source.Attributes/Attribute[@Name='MF_DEVSOURCE_ATTRIBUTE_MEDIA_TYPE']/Value.ValueParts/ValuePart[@Value='MFMediaType_Video']]");

            if (lSourceNodes != null)
            {
                foreach (var item in lSourceNodes)
                {
                    var lNode = (XmlNode)item;

                    if (lNode != null)
                    {
                        var lvalueNode = lNode.SelectSingleNode("Source.Attributes/Attribute[@Name='MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME']/SingleValue/@Value");

                        ContainerItem lSourceItem = new ContainerItem()
                        {
                            mFriendlyName = lvalueNode.Value,
                            mXmlNode      = lNode
                        };

                        sourceComboBox.Items.Add(lSourceItem);
                    }
                }
            }
        }
Ejemplo n.º 8
0
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            var t = new Thread(

                delegate()
            {
                try
                {
                    mCaptureManager = Program.mCaptureManager;

                    LogManager.getInstance().WriteDelegateEvent += MainWindow_WriteDelegateEvent;

                    if (mCaptureManager == null)
                    {
                        return;
                    }

                    mSourceControl = mCaptureManager.createSourceControl();

                    if (mSourceControl == null)
                    {
                        return;
                    }

                    mEncoderControl = mCaptureManager.createEncoderControl();

                    if (mEncoderControl == null)
                    {
                        return;
                    }

                    mSinkControl = mCaptureManager.createSinkControl();

                    if (mSinkControl == null)
                    {
                        return;
                    }

                    mISessionControl = mCaptureManager.createSessionControl();

                    if (mISessionControl == null)
                    {
                        return;
                    }

                    mStreamControl = mCaptureManager.createStreamControl();

                    if (mStreamControl == null)
                    {
                        return;
                    }

                    mStreamControl.createStreamControlNodeFactory(ref mSpreaderNodeFactory);

                    if (mSpreaderNodeFactory == null)
                    {
                        return;
                    }

                    mSinkControl.createSinkFactory(Guid.Empty, out mEVRMultiSinkFactory);

                    if (mEVRMultiSinkFactory == null)
                    {
                        return;
                    }

                    mSinkControl.createSinkFactory(Guid.Empty, out mEVRSinkFactory);

                    if (mEVRSinkFactory == null)
                    {
                        return;
                    }



                    XmlDataProvider lXmlDataProvider = (XmlDataProvider)this.Resources["XmlSources"];

                    if (lXmlDataProvider == null)
                    {
                        return;
                    }

                    XmlDocument doc = new XmlDocument();

                    string lxmldoc = "";

                    mCaptureManager.getCollectionOfSources(ref lxmldoc);

                    doc.LoadXml(lxmldoc);

                    lXmlDataProvider.Document = doc;

                    lXmlDataProvider = (XmlDataProvider)this.Resources["XmlEncoders"];

                    if (lXmlDataProvider == null)
                    {
                        return;
                    }

                    doc = new XmlDocument();

                    mCaptureManager.getCollectionOfEncoders(ref lxmldoc);

                    doc.LoadXml(lxmldoc);

                    lXmlDataProvider.Document = doc;



                    mCaptureManager.getCollectionOfSinks(ref lxmldoc);


                    lXmlDataProvider = (XmlDataProvider)this.Resources["XmlContainerTypeProvider"];

                    if (lXmlDataProvider == null)
                    {
                        return;
                    }

                    doc = new XmlDocument();

                    doc.LoadXml(lxmldoc);

                    lXmlDataProvider.Document = doc;
                }
                catch (Exception ex)
                {
                }
                finally
                {
                }
            });

            t.SetApartmentState(ApartmentState.MTA);

            t.Start();
        }
Ejemplo n.º 9
0
        public MainWindow()
        {
            InitializeComponent();

            try
            {
                mCaptureManager = new CaptureManager("CaptureManager.dll");
            }
            catch (System.Exception)
            {
                try
                {
                    mCaptureManager = new CaptureManager();
                }
                catch (System.Exception)
                {
                }
            }

            if (mCaptureManager == null)
            {
                return;
            }

            XmlDataProvider lXmlDataProvider = (XmlDataProvider)this.Resources["XmlLogProvider"];

            if (lXmlDataProvider == null)
            {
                return;
            }

            System.Xml.XmlDocument doc = new System.Xml.XmlDocument();

            string lxmldoc = "";

            mCaptureManager.getCollectionOfSources(ref lxmldoc);

            doc.LoadXml(lxmldoc);

            lXmlDataProvider.Document = doc;

            mSourceControl = mCaptureManager.createSourceControl();



            mCaptureManager.getCollectionOfSinks(ref lxmldoc);


            lXmlDataProvider = (XmlDataProvider)this.Resources["XmlSinkFactoryCollectionProvider"];

            if (lXmlDataProvider == null)
            {
                return;
            }

            doc = new System.Xml.XmlDocument();

            doc.LoadXml(lxmldoc);

            lXmlDataProvider.Document = doc;


            mISessionControl = mCaptureManager.createSessionControl();

            mSinkControl = mCaptureManager.createSinkControl();

            mEncoderControl = mCaptureManager.createEncoderControl();

            mEncodersComboBox.SelectionChanged += delegate
            {
                do
                {
                    if (mEncoderControl == null)
                    {
                        break;
                    }

                    var lselectedNode = mEncodersComboBox.SelectedItem as XmlNode;

                    if (lselectedNode == null)
                    {
                        break;
                    }

                    var lEncoderNameAttr = lselectedNode.Attributes["Title"];

                    if (lEncoderNameAttr == null)
                    {
                        break;
                    }

                    var lCLSIDEncoderAttr = lselectedNode.Attributes["CLSID"];

                    if (lCLSIDEncoderAttr == null)
                    {
                        break;
                    }

                    Guid lCLSIDEncoder;

                    if (!Guid.TryParse(lCLSIDEncoderAttr.Value, out lCLSIDEncoder))
                    {
                        break;
                    }



                    var lSourceNode = mSourcesComboBox.SelectedItem as XmlNode;

                    if (lSourceNode == null)
                    {
                        return;
                    }

                    var lNode = lSourceNode.SelectSingleNode(
                        "Source.Attributes/Attribute" +
                        "[@Name='MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK' or @Name='MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_SYMBOLIC_LINK']" +
                        "/SingleValue/@Value");

                    if (lNode == null)
                    {
                        return;
                    }

                    string lSymbolicLink = lNode.Value;

                    lSourceNode = mStreamsComboBox.SelectedItem as XmlNode;

                    if (lSourceNode == null)
                    {
                        return;
                    }

                    lNode = lSourceNode.SelectSingleNode("@Index");

                    if (lNode == null)
                    {
                        return;
                    }

                    uint lStreamIndex = 0;

                    if (!uint.TryParse(lNode.Value, out lStreamIndex))
                    {
                        return;
                    }

                    lSourceNode = mMediaTypesComboBox.SelectedItem as XmlNode;

                    if (lSourceNode == null)
                    {
                        return;
                    }

                    lNode = lSourceNode.SelectSingleNode("@Index");

                    if (lNode == null)
                    {
                        return;
                    }

                    uint lMediaTypeIndex = 0;

                    if (!uint.TryParse(lNode.Value, out lMediaTypeIndex))
                    {
                        return;
                    }



                    object lOutputMediaType;

                    if (mSourceControl == null)
                    {
                        return;
                    }

                    mSourceControl.getSourceOutputMediaType(
                        lSymbolicLink,
                        lStreamIndex,
                        lMediaTypeIndex,
                        out lOutputMediaType);

                    string lMediaTypeCollection;

                    if (!mEncoderControl.getMediaTypeCollectionOfEncoder(
                            lOutputMediaType,
                            lCLSIDEncoder,
                            out lMediaTypeCollection))
                    {
                        break;
                    }



                    XmlDataProvider lXmlEncoderModeDataProvider = (XmlDataProvider)this.Resources["XmlEncoderModeProvider"];

                    if (lXmlEncoderModeDataProvider == null)
                    {
                        return;
                    }

                    XmlDocument lEncoderModedoc = new XmlDocument();

                    lEncoderModedoc.LoadXml(lMediaTypeCollection);

                    lXmlEncoderModeDataProvider.Document = lEncoderModedoc;
                } while (false);
            };


            mEncodingModeComboBox.SelectionChanged += delegate
            {
                do
                {
                    if (mEncoderControl == null)
                    {
                        break;
                    }

                    var lselectedNode = mEncodingModeComboBox.SelectedItem as XmlNode;

                    if (lselectedNode == null)
                    {
                        break;
                    }

                    var lGUIDEncodingModeAttr = lselectedNode.Attributes["GUID"];

                    if (lGUIDEncodingModeAttr == null)
                    {
                        break;
                    }

                    Guid lGUIDEncodingMode;

                    if (!Guid.TryParse(lGUIDEncodingModeAttr.Value, out lGUIDEncodingMode))
                    {
                        break;
                    }

                    var lConstantMode = Guid.Parse("{CA37E2BE-BEC0-4B17-946D-44FBC1B3DF55}");

                    XmlDataProvider lXmlMediaTypeProvider = (XmlDataProvider)this.Resources["XmlMediaTypesCollectionProvider"];

                    if (lXmlMediaTypeProvider == null)
                    {
                        return;
                    }

                    XmlDocument lMediaTypedoc = new XmlDocument();

                    var lClonedMediaTypesNode = lMediaTypedoc.ImportNode(lselectedNode, true);

                    lMediaTypedoc.AppendChild(lClonedMediaTypesNode);

                    lXmlMediaTypeProvider.Document = lMediaTypedoc;
                } while (false);
            };

            mSinkFactoryComboBox.SelectionChanged += delegate
            {
                do
                {
                    if (mEncoderControl == null)
                    {
                        break;
                    }

                    var lselectedNode = mSinkFactoryComboBox.SelectedItem as XmlNode;

                    if (lselectedNode == null)
                    {
                        break;
                    }

                    var lAttr = lselectedNode.Attributes["GUID"];

                    if (lAttr == null)
                    {
                        throw new System.Exception("GUID is empty");
                    }

                    mContainerTypeComboBox.IsEnabled = false;

                    mSinkType = SinkType.Node;

                    if (lAttr.Value == "{D6E342E3-7DDD-4858-AB91-4253643864C2}")
                    {
                        mContainerTypeComboBox.IsEnabled = true;

                        mSinkType = SinkType.File;
                    }
                    else if (lAttr.Value == "{2E891049-964A-4D08-8F36-95CE8CB0DE9B}")
                    {
                        mContainerTypeComboBox.IsEnabled = true;

                        mSinkType = SinkType.BitStream;
                    }
                    else if (lAttr.Value == "{759D24FF-C5D6-4B65-8DDF-8A2B2BECDE39}")
                    {
                    }
                    else if (lAttr.Value == "{3D64C48E-EDA4-4EE1-8436-58B64DD7CF13}")
                    {
                    }
                    else if (lAttr.Value == "{2F34AF87-D349-45AA-A5F1-E4104D5C458E}")
                    {
                    }

                    XmlDataProvider lXmlMediaTypeProvider = (XmlDataProvider)this.Resources["XmlContainerTypeProvider"];

                    if (lXmlMediaTypeProvider == null)
                    {
                        return;
                    }

                    XmlDocument lMediaTypedoc = new XmlDocument();

                    var lClonedMediaTypesNode = lMediaTypedoc.ImportNode(lselectedNode, true);

                    lMediaTypedoc.AppendChild(lClonedMediaTypesNode);

                    lXmlMediaTypeProvider.Document = lMediaTypedoc;
                } while (false);
            };
        }
        public MainWindow()
        {
            InitializeComponent();

            try
            {
                mCaptureManager = new CaptureManager("CaptureManager.dll");
            }
            catch (Exception)
            {
                mCaptureManager = new CaptureManager();
            }

            LogManager.getInstance().WriteDelegateEvent += MainWindow_WriteDelegateEvent;

            if (mCaptureManager == null)
            {
                return;
            }

            mSourceControl = mCaptureManager.createSourceControl();

            if (mSourceControl == null)
            {
                return;
            }

            mSinkControl = mCaptureManager.createSinkControl();

            if (mSinkControl == null)
            {
                return;
            }

            mISessionControl = mCaptureManager.createSessionControl();

            if (mISessionControl == null)
            {
                return;
            }

            mISARVolumeControl = mCaptureManager.createSARVolumeControl();

            if (mISARVolumeControl == null)
            {
                return;
            }

            mRVolume.ValueChanged += (s, ev) => {
                if (mSARSinkOutputNode != null)
                {
                    mISARVolumeControl.setChannelVolume(mSARSinkOutputNode, 0, (float)ev.NewValue);
                }
            };

            mLVolume.ValueChanged += (s, ev) => {
                if (mSARSinkOutputNode != null)
                {
                    mISARVolumeControl.setChannelVolume(mSARSinkOutputNode, 1, (float)ev.NewValue);
                }
            };


            XmlDataProvider lXmlDataProvider = (XmlDataProvider)this.Resources["XmlSources"];

            if (lXmlDataProvider == null)
            {
                return;
            }

            XmlDocument doc = new XmlDocument();

            string lxmldoc = "";

            mCaptureManager.getCollectionOfSources(ref lxmldoc);

            doc.LoadXml(lxmldoc);

            lXmlDataProvider.Document = doc;



            mSinkControl.createSinkFactory(Guid.Empty, out mSARSinkFactory);
        }
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            try
            {
                mCaptureManager = Program.mCaptureManager;

                App.mHotKeyHost = new HotKeyHost((HwndSource)HwndSource.FromVisual(App.Current.MainWindow));

                App.mHotKeyHost.AddHotKey(new CustomHotKey("Record",
                                                           new Action(() =>
                {
                    App.Current.Dispatcher.BeginInvoke(DispatcherPriority.Background, (ThreadStart) delegate()
                    {
                        mStartStop_Click(null, null);
                    });
                }
                                                                      ), Key.P, ModifierKeys.Control | ModifierKeys.Shift, true));
            }
            catch (System.Exception)
            {
                try
                {
                    mCaptureManager = new CaptureManager();
                }
                catch (System.Exception)
                {
                }
            }

            LogManager.getInstance().WriteDelegateEvent += MainWindow_WriteDelegateEvent;

            if (mCaptureManager == null)
            {
                return;
            }


            var t = new Thread(

                delegate()
            {
                try
                {
                    mSourceControl = mCaptureManager.createSourceControl();

                    if (mSourceControl == null)
                    {
                        return;
                    }

                    mEncoderControl = mCaptureManager.createEncoderControl();

                    if (mEncoderControl == null)
                    {
                        return;
                    }

                    mSinkControl = mCaptureManager.createSinkControl();

                    if (mSinkControl == null)
                    {
                        return;
                    }

                    mISessionControl = mCaptureManager.createSessionControl();

                    if (mISessionControl == null)
                    {
                        return;
                    }

                    mStreamControl = mCaptureManager.createStreamControl();

                    if (mStreamControl == null)
                    {
                        return;
                    }

                    mStreamControl.createStreamControlNodeFactory(ref mSpreaderNodeFactory);

                    if (mSpreaderNodeFactory == null)
                    {
                        return;
                    }

                    mSinkControl.createSinkFactory(Guid.Empty, out mEVRMultiSinkFactory);

                    if (mEVRMultiSinkFactory == null)
                    {
                        return;
                    }


                    XmlDataProvider lXmlDataProvider = (XmlDataProvider)this.Resources["XmlSources"];

                    if (lXmlDataProvider == null)
                    {
                        return;
                    }

                    XmlDocument doc = new XmlDocument();

                    string lxmldoc = "";

                    mCaptureManager.getCollectionOfSources(ref lxmldoc);

                    doc.LoadXml(lxmldoc);

                    lXmlDataProvider.Document = doc;

                    lXmlDataProvider = (XmlDataProvider)this.Resources["XmlEncoders"];

                    if (lXmlDataProvider == null)
                    {
                        return;
                    }

                    doc = new XmlDocument();

                    mCaptureManager.getCollectionOfEncoders(ref lxmldoc);

                    doc.LoadXml(lxmldoc);

                    lXmlDataProvider.Document = doc;



                    mCaptureManager.getCollectionOfSinks(ref lxmldoc);


                    lXmlDataProvider = (XmlDataProvider)this.Resources["XmlContainerTypeProvider"];

                    if (lXmlDataProvider == null)
                    {
                        return;
                    }

                    doc = new XmlDocument();

                    doc.LoadXml(lxmldoc);

                    lXmlDataProvider.Document = doc;
                }
                catch (Exception)
                {
                }
                finally
                {
                }
            });

            t.SetApartmentState(ApartmentState.MTA);

            t.Start();
        }