]> git.sesse.net Git - vlc/blobdiff - src/control/media_descriptor.c
objects: Allow certain operations when the object refcount is zero (read, allow certa...
[vlc] / src / control / media_descriptor.c
index 2c4fee065e29f9e3103c6b977a6523a674478557..aef2b7ddd99f53f64364ecc637e7b05df9ca180c 100644 (file)
@@ -21,6 +21,8 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
 
+#include "libvlc_internal.h"
+
 #include <vlc/libvlc.h>
 #include <vlc_input.h>
 #include <vlc_meta.h>
@@ -28,8 +30,6 @@
 /* For the preparser */
 #include <vlc_playlist.h>
 
-#include "libvlc_internal.h"
-
 static const vlc_meta_type_t libvlc_to_vlc_meta[] =
 {
     [libvlc_meta_Title]        = vlc_meta_Title,
@@ -217,10 +217,6 @@ static void preparse_if_needed( libvlc_media_descriptor_t *p_md )
         playlist_PreparseEnqueue(
                 p_md->p_libvlc_instance->p_libvlc_int->p_playlist,
                 p_md->p_input_item );
-        playlist_AskForArtEnqueue(
-                p_md->p_libvlc_instance->p_libvlc_int->p_playlist,
-                p_md->p_input_item );
-
         p_md->b_preparsed = VLC_TRUE;
     }
 }
@@ -316,7 +312,7 @@ libvlc_media_descriptor_t * libvlc_media_descriptor_new_as_node(
     input_item_t * p_input_item;
     libvlc_media_descriptor_t * p_md;
 
-    p_input_item = input_ItemNew( p_instance->p_libvlc_int, "vlc:nop", psz_name );
+    p_input_item = input_ItemNew( p_instance->p_libvlc_int, "vlc://nop", psz_name );
 
     if (!p_input_item)
     {
@@ -346,7 +342,8 @@ void libvlc_media_descriptor_add_option(
                                    libvlc_exception_t *p_e )
 {
     (void)p_e;
-    input_ItemAddOptionNoDup( p_md->p_input_item, ppsz_option );
+    input_ItemAddOpt( p_md->p_input_item, ppsz_option,
+                      VLC_INPUT_OPTION_UNIQUE|VLC_INPUT_OPTION_TRUSTED );
 }
 
 /**************************************************************************
@@ -435,6 +432,8 @@ char * libvlc_media_descriptor_get_meta( libvlc_media_descriptor_t *p_md,
                                          libvlc_meta_t e_meta,
                                          libvlc_exception_t *p_e )
 {
+    VLC_UNUSED(p_e);
+
     char * psz_meta;
 
     /* XXX: locking */
@@ -443,6 +442,13 @@ char * libvlc_media_descriptor_get_meta( libvlc_media_descriptor_t *p_md,
 
     psz_meta = input_item_GetMeta( p_md->p_input_item,
                                    libvlc_to_vlc_meta[e_meta] );
+    
+    if( e_meta == libvlc_meta_ArtworkURL && !psz_meta )
+    {
+        playlist_AskForArtEnqueue(
+                p_md->p_libvlc_instance->p_libvlc_int->p_playlist,
+                p_md->p_input_item );
+    }
 
     /* Should be integrated in core */
     if( !psz_meta && e_meta == libvlc_meta_Title && p_md->p_input_item->psz_name )
@@ -497,6 +503,8 @@ void libvlc_media_descriptor_add_tag( libvlc_media_descriptor_t *p_md,
                                       const libvlc_tag_t tag,
                                       libvlc_exception_t *p_e )
 {
+    VLC_UNUSED(p_e);
+
     struct libvlc_tags_storage_t * p_ts;
 
     if( !tag || !key )
@@ -528,6 +536,8 @@ void libvlc_media_descriptor_remove_tag( libvlc_media_descriptor_t *p_md,
                                          const libvlc_tag_t tag,
                                          libvlc_exception_t *p_e )
 {
+    VLC_UNUSED(p_e);
+
     struct libvlc_tags_storage_t * p_ts;
     int i;
 
@@ -559,6 +569,8 @@ int libvlc_media_descriptor_tags_count_for_key( libvlc_media_descriptor_t *p_md,
                                                  const char * key,
                                                  libvlc_exception_t *p_e )
 {
+    VLC_UNUSED(p_e);
+
     struct libvlc_tags_storage_t * p_ts;
 
     if( !key )
@@ -580,6 +592,8 @@ libvlc_media_descriptor_tag_at_index_for_key( libvlc_media_descriptor_t *p_md,
                                               const char * key,
                                               libvlc_exception_t *p_e )
 {
+    VLC_UNUSED(p_e);
+
     struct libvlc_tags_storage_t * p_ts;
 
     if( !key )
@@ -600,6 +614,8 @@ libvlc_media_list_t *
 libvlc_media_descriptor_subitems( libvlc_media_descriptor_t * p_md,
                                   libvlc_exception_t * p_e )
 {
+    VLC_UNUSED(p_e);
+
     if( p_md->p_subitems )
         libvlc_media_list_retain( p_md->p_subitems );
     return p_md->p_subitems;
@@ -612,6 +628,8 @@ libvlc_event_manager_t *
 libvlc_media_descriptor_event_manager( libvlc_media_descriptor_t * p_md,
                                        libvlc_exception_t * p_e )
 {
+    VLC_UNUSED(p_e);
+
     return p_md->p_event_manager;
 }
 
@@ -622,6 +640,8 @@ vlc_int64_t
 libvlc_media_descriptor_get_duration( libvlc_media_descriptor_t * p_md,
                                       libvlc_exception_t * p_e )
 {
+    VLC_UNUSED(p_e);
+
     if( p_md && p_md->p_input_item)
     {
         return input_item_GetDuration( p_md->p_input_item );
@@ -635,10 +655,12 @@ libvlc_media_descriptor_get_duration( libvlc_media_descriptor_t * p_md,
 /**************************************************************************
  * Get preparsed status for media_descriptor object.
  **************************************************************************/
-vlc_bool_t
+int
 libvlc_media_descriptor_is_preparsed( libvlc_media_descriptor_t * p_md,
                                        libvlc_exception_t * p_e )
 {
+    VLC_UNUSED(p_e);
+
     if( p_md && p_md->p_input_item)
     {
         return input_item_IsPreparsed( p_md->p_input_item );
@@ -659,6 +681,8 @@ libvlc_media_descriptor_set_user_data( libvlc_media_descriptor_t * p_md,
                                        void * p_new_user_data,
                                        libvlc_exception_t * p_e )
 {
+    VLC_UNUSED(p_e);
+
     if( p_md )
     {
         p_md->p_user_data = p_new_user_data;
@@ -674,6 +698,8 @@ void *
 libvlc_media_descriptor_get_user_data( libvlc_media_descriptor_t * p_md,
                                        libvlc_exception_t * p_e )
 {
+    VLC_UNUSED(p_e);
+
     if( p_md )
     {
         return p_md->p_user_data;