Beispiel #1
0
        /**
         * Create a new media list item for a give native media instance.
         *
         * @param mediaInstance native media instance
         * @return media list item
         */
        private MediaListItem NewMediaListItem(IntPtr mediaInstance)
        {
            string name = NativeString.GetNativeString(LibVlc.libvlc_media_get_meta(mediaInstance, (int)libvlc_meta_e.libvlc_meta_Title));
            string mrl  = NativeString.GetNativeString(LibVlc.libvlc_media_get_mrl(mediaInstance));
            List <MediaListItem> subItems;
            IntPtr subItemList = LibVlc.libvlc_media_subitems(mediaInstance);

            if (subItemList != IntPtr.Zero)
            {
                try {
                    LibVlc.libvlc_media_list_lock(subItemList);
                    subItems = new List <MediaListItem>();
                    for (int i = 0; i < LibVlc.libvlc_media_list_count(subItemList); i++)
                    {
                        IntPtr subItemInstance = LibVlc.libvlc_media_list_item_at_index(subItemList, i);
                        subItems.Add(NewMediaListItem(subItemInstance));
                        LibVlc.libvlc_media_release(subItemInstance);
                    }
                }
                finally {
                    LibVlc.libvlc_media_list_unlock(subItemList);
                }
                LibVlc.libvlc_media_list_release(subItemList);
            }
            else
            {
                subItems = new List <MediaListItem>(0);
            }
            return(new MediaListItem(name, mrl, subItems));
        }
Beispiel #2
0
 /**
  * Get the number of items currently in the list.
  *
  * @return item count
  */
 public int Size()
 {
     Logger.Debug("Size()");
     try {
         LockList();
         int size = LibVlc.libvlc_media_list_count(mediaListInstance);
         return(size);
     }
     finally {
         UnlockList();
     }
 }
Beispiel #3
0
 /**
  * Clear the list.
  */
 public void Clear()
 {
     Logger.Debug("Clear()");
     try {
         LockList();
         // Traverse the list from the end back to the start...
         for (int i = LibVlc.libvlc_media_list_count(mediaListInstance) - 1; i >= 0; i--)
         {
             LibVlc.libvlc_media_list_remove_index(mediaListInstance, i);
         }
     }
     finally {
         UnlockList();
     }
 }
Beispiel #4
0
        /**
         * Get the list of items.
         *
         * @return list of items
         */
        // FIXME readonly collection?
        public List <MediaListItem> Items()
        {
            Logger.Debug("Items()");
            List <MediaListItem> result = new List <MediaListItem>();

            try {
                LockList();
                for (int i = 0; i < LibVlc.libvlc_media_list_count(mediaListInstance); i++)
                {
                    IntPtr mediaInstance = LibVlc.libvlc_media_list_item_at_index(mediaListInstance, i);
                    result.Add(NewMediaListItem(mediaInstance));
                }
            }
            finally {
                UnlockList();
            }
            return(result);
        }