/**************************************************************************
* Preparse if not already done (Private)
**************************************************************************/
-static void preparse_if_needed( libvlc_media_descriptor_t *p_media_desc )
+static void preparse_if_needed( libvlc_media_descriptor_t *p_md )
{
/* XXX: need some locking here */
- if (!p_media_desc->b_preparsed)
+ if (!p_md->b_preparsed)
{
- input_Preparse( p_media_desc->p_libvlc_instance->p_libvlc_int,
- p_media_desc->p_input_item );
- p_media_desc->b_preparsed = VLC_TRUE;
+ input_Preparse( p_md->p_libvlc_instance->p_libvlc_int,
+ p_md->p_input_item );
+ p_md->b_preparsed = VLC_TRUE;
}
}
libvlc_exception_t *p_e )
{
input_item_t * p_input_item;
- libvlc_media_descriptor_t * p_media_desc;
+ libvlc_media_descriptor_t * p_md;
p_input_item = input_ItemNew( p_instance->p_libvlc_int, psz_mrl, psz_mrl );
return NULL;
}
- p_media_desc = malloc( sizeof(libvlc_media_descriptor_t) );
- p_media_desc->p_libvlc_instance = p_instance;
- p_media_desc->p_input_item = p_input_item;
- p_media_desc->b_preparsed = VLC_FALSE;
+ p_md = malloc( sizeof(libvlc_media_descriptor_t) );
+ p_md->p_libvlc_instance = p_instance;
+ p_md->p_input_item = p_input_item;
+ p_md->b_preparsed = VLC_FALSE;
+
+ vlc_gc_incref( p_md->p_input_item );
- return p_media_desc;
+ return p_md;
}
/**************************************************************************
input_item_t *p_input_item,
libvlc_exception_t *p_e )
{
- libvlc_media_descriptor_t * p_media_desc;
+ libvlc_media_descriptor_t * p_md;
if (!p_input_item)
{
return NULL;
}
- p_media_desc = malloc( sizeof(libvlc_media_descriptor_t) );
- p_media_desc->p_libvlc_instance = p_instance;
- p_media_desc->p_input_item = p_input_item;
- p_media_desc->b_preparsed = VLC_TRUE;
+ p_md = malloc( sizeof(libvlc_media_descriptor_t) );
+ p_md->p_libvlc_instance = p_instance;
+ p_md->p_input_item = p_input_item;
+ p_md->b_preparsed = VLC_TRUE;
+
+ vlc_gc_incref( p_md->p_input_item );
- return p_media_desc;
+ return p_md;
}
/**************************************************************************
return;
/* XXX: locking */
+ vlc_gc_decref( p_md->p_input_item );
- /* XXX: here we don't clean the item, because we can't properly track
- * if it is needed by some other object. This is a leak(!). */
- /* input_ItemClean( p_md->p_input_item ); */
-
free( p_md );
}
p_md = malloc( sizeof(libvlc_media_descriptor_t) );
memcpy( p_md, p_md_orig, sizeof(libvlc_media_descriptor_t) );
+ vlc_gc_incref( p_md->p_input_item );
+
return p_md;
}
[libvlc_meta_Artist] = 1
};
-char * libvlc_media_descriptor_get_meta( libvlc_media_descriptor_t *p_meta_desc,
+char * libvlc_media_descriptor_get_meta( libvlc_media_descriptor_t *p_md,
libvlc_meta_t e_meta,
libvlc_exception_t *p_e )
{
/* XXX: locking */
- preparse_if_needed( p_meta_desc );
+ preparse_if_needed( p_md );
- ppsz_meta = (char**)p_meta_desc->p_input_item->p_meta;
+ ppsz_meta = (char**)p_md->p_input_item->p_meta;
ppz_meta = ppsz_meta[ meta_conversion[e_meta] ];
if( !ppz_meta )
return strdup( ppz_meta );
}
+