Exemple #1
0
        private static void RefreshSources()
        {
            var numSources = 0;
            var ndiSources = Ndi.NDIlib_find_get_current_sources(NdiFindInstance, ref numSources);

            if (numSources <= 0)
            {
                return;
            }
            var sourceSizeInBytes = Marshal.SizeOf(typeof(NDIlib_source_t));
            var sources           = new Dictionary <string, NDIlib_source_t>();

            for (var i = 0; i < numSources; i++)
            {
                var p       = IntPtr.Add(ndiSources, (i * sourceSizeInBytes));
                var src     = (NDIlib_source_t)Marshal.PtrToStructure(p, typeof(NDIlib_source_t));
                var ndiName = Ndi.Utf8ToString(src.p_ndi_name);
                sources.Add(ndiName, src);
                Debug.WriteLine($"Added source name:{Ndi.Utf8ToString(src.p_ndi_name)} address :{Ndi.Utf8ToString(src.p_ip_address)}");
            }
            _ndiSources = sources;
            SourceRefreshed?.Invoke(null, EventArgs.Empty);
        }
Exemple #2
0
 private void RefreshSources(object obj)
 {
     if (_ndiFindInstance != IntPtr.Zero)
     {
         int numSources  = 0;
         var ndi_sources = Ndi.NDIlib_find_get_current_sources(_ndiFindInstance, ref numSources);
         if (numSources > 0)
         {
             int SourceSizeInBytes = System.Runtime.InteropServices.Marshal.SizeOf(typeof(NDIlib_source_t));
             Dictionary <string, NDIlib_source_t> sources = new Dictionary <string, NDIlib_source_t>();
             for (int i = 0; i < numSources; i++)
             {
                 IntPtr          p       = IntPtr.Add(ndi_sources, (i * SourceSizeInBytes));
                 NDIlib_source_t src     = (NDIlib_source_t)System.Runtime.InteropServices.Marshal.PtrToStructure(p, typeof(NDIlib_source_t));
                 var             ndiName = Ndi.Utf8ToString(src.p_ndi_name);
                 sources.Add(ndiName, src);
                 Debug.WriteLine($"Added source name:{Ndi.Utf8ToString(src.p_ndi_name)} address :{Ndi.Utf8ToString(src.p_ip_address)}");
             }
             // removing non-existing sources
             var notExistingSources = _videoSources.Where(s => !(sources.ContainsKey(s) || s == Common.Properties.Resources._none_)).ToArray();
             foreach (var source in notExistingSources)
             {
                 _videoSources.Remove(source);
             }
             //adding new sources
             foreach (var source in sources)
             {
                 if (!_videoSources.Contains(source.Key))
                 {
                     _videoSources.Add(source.Key);
                 }
             }
             _ndiSources = sources;
         }
     }
 }