Example #1
0
        private IEnumerable <TrackDescription> GetDescription(IntPtr trackInfo)
        {
            if (trackInfo == IntPtr.Zero)
            {
                yield break;
            }

            libvlc_track_description_t trackDesc = (libvlc_track_description_t)Marshal.PtrToStructure(trackInfo, typeof(libvlc_track_description_t));

            do
            {
                yield return(new TrackDescription()
                {
                    Id = trackDesc.i_id,
                    Name = Marshal.PtrToStringAnsi(trackDesc.psz_name)
                });

                if (trackDesc.p_next != IntPtr.Zero)
                {
                    trackDesc = (libvlc_track_description_t)Marshal.PtrToStructure(trackDesc.p_next, typeof(libvlc_track_description_t));
                }
                else
                {
                    break;
                }
            }while (true);
            LibVlcMethods.libvlc_track_description_release(trackInfo);
        }
Example #2
0
        //==========================================================================
        public libvlc_track_description_t libvlc_video_get_track_description(IntPtr p_mi)
        {
            VerifyAccess();

            IntPtr pointer = m_libvlc_video_get_track_description(p_mi);

            if (pointer == IntPtr.Zero)
            {
                return(null);
            }

            // I still have no clue whether the returned descriptions have to be freed
            // in any way; but i assume not

            internal_libvlc_track_description_t track_description = (internal_libvlc_track_description_t)Marshal.PtrToStructure(pointer, typeof(internal_libvlc_track_description_t));
            libvlc_track_description_t          result            = new libvlc_track_description_t {
                i_id = track_description.i_id, psz_name = track_description.psz_name
            };
            libvlc_track_description_t current = result;

            while (track_description.p_next != IntPtr.Zero)
            {
                track_description = (internal_libvlc_track_description_t)Marshal.PtrToStructure(track_description.p_next, typeof(internal_libvlc_track_description_t));
                current.p_next    = new libvlc_track_description_t {
                    i_id = track_description.i_id, psz_name = track_description.psz_name
                };
                current = current.p_next;
            }
            current.p_next = null;

            m_libvlc_track_description_list_release(pointer);

            return(result);
        }
Example #3
0
        //==========================================================================
        public libvlc_track_description_t libvlc_video_get_spu_description(IntPtr p_mi)
        {
            VerifyAccess();

            IntPtr pointer = m_libvlc_video_get_spu_description(p_mi);

            if (pointer == IntPtr.Zero)
            {
                return(null);
            }

            internal_libvlc_track_description_t track_description = (internal_libvlc_track_description_t)Marshal.PtrToStructure(pointer, typeof(internal_libvlc_track_description_t));
            libvlc_track_description_t          result            = new libvlc_track_description_t {
                i_id = track_description.i_id, psz_name = track_description.psz_name
            };
            libvlc_track_description_t current = result;

            while (track_description.p_next != IntPtr.Zero)
            {
                track_description = (internal_libvlc_track_description_t)Marshal.PtrToStructure(track_description.p_next, typeof(internal_libvlc_track_description_t));
                current.p_next    = new libvlc_track_description_t {
                    i_id = track_description.i_id, psz_name = track_description.psz_name
                };
                current = current.p_next;
            }
            current.p_next = null;

            m_libvlc_track_description_list_release(pointer);

            return(result);
        }
Example #4
0
        /// <summary>
        ///
        /// </summary>
        protected void LoadTracks()
        {
            _Tracks.Clear();
            lock (Player.player_lock)
            {
                bool   done;
                IntPtr p_head = GetTrackDescInternal();
                Player.p_ex.CheckException();

                IntPtr p_track = p_head;
                do
                {
                    libvlc_track_description_t track = (libvlc_track_description_t)Marshal.PtrToStructure(p_track, typeof(libvlc_track_description_t));
                    _Tracks.Add(track.i_id, new VlcTrack(track.i_id, Marshal.PtrToStringAnsi(track.psz_name)));
                    p_track = track.p_next;
                    done    = (p_track == IntPtr.Zero);
                } while (!done);
                InteropMethods.libvlc_track_description_release(p_head);
            }
            _ReloadTracks = false;
        }
    //==========================================================================
    public libvlc_track_description_t libvlc_video_get_track_description(IntPtr p_mi)
    {
      VerifyAccess();

      IntPtr pointer = m_libvlc_video_get_track_description(p_mi);
      if(pointer == IntPtr.Zero)
        return null;

      // I still have no clue whether the returned descriptions have to be freed
      // in any way; but i assume not 

      internal_libvlc_track_description_t track_description = (internal_libvlc_track_description_t)Marshal.PtrToStructure(pointer, typeof(internal_libvlc_track_description_t));
      libvlc_track_description_t result = new libvlc_track_description_t { i_id = track_description.i_id, psz_name = track_description.psz_name };
      libvlc_track_description_t current = result;
      while(track_description.p_next != IntPtr.Zero)
      {
        track_description = (internal_libvlc_track_description_t)Marshal.PtrToStructure(track_description.p_next, typeof(internal_libvlc_track_description_t));
        current.p_next = new libvlc_track_description_t { i_id = track_description.i_id, psz_name = track_description.psz_name };
        current = current.p_next;
      }
      current.p_next = null;

      m_libvlc_track_description_list_release(pointer);

      return result;
    }
    //==========================================================================
    public libvlc_track_description_t libvlc_video_get_spu_description(IntPtr p_mi)
    {
      VerifyAccess();

      IntPtr pointer = m_libvlc_video_get_spu_description(p_mi);
      if(pointer == IntPtr.Zero)
        return null;

      internal_libvlc_track_description_t track_description = (internal_libvlc_track_description_t)Marshal.PtrToStructure(pointer, typeof(internal_libvlc_track_description_t));
      libvlc_track_description_t result = new libvlc_track_description_t { i_id = track_description.i_id, psz_name = track_description.psz_name };
      libvlc_track_description_t current = result;
      while(track_description.p_next != IntPtr.Zero)
      {
        track_description = (internal_libvlc_track_description_t)Marshal.PtrToStructure(track_description.p_next, typeof(internal_libvlc_track_description_t));
        current.p_next = new libvlc_track_description_t { i_id = track_description.i_id, psz_name = track_description.psz_name };
        current = current.p_next;
      }
      current.p_next = null;

      m_libvlc_track_description_list_release(pointer);

      return result;
    }
Example #7
0
 //==========================================================================
 public int libvlc_track_description_list_release(libvlc_track_description_t p_track_description)
 {
     return(0);
 }
 //==========================================================================
 public int libvlc_track_description_list_release(libvlc_track_description_t p_track_description)
 {
   return 0;
 }