X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fcontrol%2Fmedia.c;h=9a893b012a0df495ceea67175f4f435ca26bd65f;hb=dacbb93b54623c1fbabdc4c4ebcb0b0a430f197f;hp=c7e64d4db42658d216f2ecaba942585ce81069b5;hpb=6ebae83db81a80cdc3cead264455074702223ac0;p=vlc diff --git a/src/control/media.c b/src/control/media.c index c7e64d4db4..9a893b012a 100644 --- a/src/control/media.c +++ b/src/control/media.c @@ -21,14 +21,26 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ -#include "libvlc_internal.h" -#include "libvlc.h" +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + #include +#include +#include // For the subitems, here for convenience +#include + +#include #include #include +#include /* For the preparser */ + +#include "libvlc.h" -/* For the preparser */ -#include +#include "libvlc_internal.h" +#include "media_internal.h" static const vlc_meta_type_t libvlc_to_vlc_meta[] = { @@ -216,7 +228,7 @@ static void preparse_if_needed( libvlc_media_t *p_md ) { playlist_PreparseEnqueue( libvlc_priv (p_md->p_libvlc_instance->p_libvlc_int)->p_playlist, - p_md->p_input_item ); + p_md->p_input_item, pl_Unlocked ); p_md->b_preparsed = true; } } @@ -235,14 +247,16 @@ libvlc_media_t * libvlc_media_new_from_input_item( if (!p_input_item) { - libvlc_exception_raise( p_e, "No input item given" ); + libvlc_exception_raise( p_e ); + libvlc_printerr( "No input item given" ); return NULL; } p_md = malloc( sizeof(libvlc_media_t) ); if( !p_md ) { - libvlc_exception_raise( p_e, "Not enough memory" ); + libvlc_exception_raise( p_e ); + libvlc_printerr( "Not enough memory" ); return NULL; } @@ -288,11 +302,12 @@ libvlc_media_t * libvlc_media_new( input_item_t * p_input_item; libvlc_media_t * p_md; - p_input_item = input_ItemNew( p_instance->p_libvlc_int, psz_mrl, NULL ); + p_input_item = input_item_New( p_instance->p_libvlc_int, psz_mrl, NULL ); if (!p_input_item) { - libvlc_exception_raise( p_e, "Can't create md's input_item" ); + libvlc_exception_raise( p_e ); + libvlc_printerr( "Not enough memory" ); return NULL; } @@ -316,11 +331,12 @@ libvlc_media_t * libvlc_media_new_as_node( input_item_t * p_input_item; libvlc_media_t * p_md; - p_input_item = input_ItemNew( p_instance->p_libvlc_int, "vlc://nop", psz_name ); + p_input_item = input_item_New( p_instance->p_libvlc_int, "vlc://nop", psz_name ); if (!p_input_item) { - libvlc_exception_raise( p_e, "Can't create md's input_item" ); + libvlc_exception_raise( p_e ); + libvlc_printerr( "Not enough memory" ); return NULL; } @@ -341,13 +357,23 @@ libvlc_media_t * libvlc_media_new_as_node( * The options are detailled in vlc --long-help, for instance "--sout-all" **************************************************************************/ void libvlc_media_add_option( + libvlc_media_t * p_md, + const char * psz_option ) +{ + input_item_AddOption( p_md->p_input_item, psz_option, + VLC_INPUT_OPTION_UNIQUE|VLC_INPUT_OPTION_TRUSTED ); +} + +/************************************************************************** + * Same as libvlc_media_add_option but with configurable flags. + **************************************************************************/ +void libvlc_media_add_option_flag( libvlc_media_t * p_md, const char * ppsz_option, - libvlc_exception_t *p_e ) + libvlc_media_option_t i_flags ) { - VLC_UNUSED(p_e); - input_ItemAddOpt( p_md->p_input_item, ppsz_option, - VLC_INPUT_OPTION_UNIQUE|VLC_INPUT_OPTION_TRUSTED ); + input_item_AddOption( p_md->p_input_item, ppsz_option, + i_flags ); } /************************************************************************** @@ -387,9 +413,7 @@ void libvlc_media_release( libvlc_media_t *p_md ) **************************************************************************/ void libvlc_media_retain( libvlc_media_t *p_md ) { - if (!p_md) - return; - + assert (p_md); p_md->i_refcount++; } @@ -407,10 +431,9 @@ libvlc_media_duplicate( libvlc_media_t *p_md_orig ) * Get mrl from a media descriptor object **************************************************************************/ char * -libvlc_media_get_mrl( libvlc_media_t * p_md, - libvlc_exception_t * p_e ) +libvlc_media_get_mrl( libvlc_media_t * p_md ) { - VLC_UNUSED(p_e); + assert( p_md ); return input_item_GetURI( p_md->p_input_item ); } @@ -418,13 +441,11 @@ libvlc_media_get_mrl( libvlc_media_t * p_md, * Getter for meta information **************************************************************************/ -char * libvlc_media_get_meta( libvlc_media_t *p_md, - libvlc_meta_t e_meta, - libvlc_exception_t *p_e ) +char *libvlc_media_get_meta( libvlc_media_t *p_md, libvlc_meta_t e_meta ) { char * psz_meta; - VLC_UNUSED(p_e); + assert( p_md ); /* XXX: locking */ preparse_if_needed( p_md ); @@ -436,7 +457,7 @@ char * libvlc_media_get_meta( libvlc_media_t *p_md, { playlist_AskForArtEnqueue( libvlc_priv(p_md->p_libvlc_instance->p_libvlc_int)->p_playlist, - p_md->p_input_item ); + p_md->p_input_item, pl_Unlocked ); } /* Should be integrated in core */ @@ -455,10 +476,9 @@ char * libvlc_media_get_meta( libvlc_media_t *p_md, **************************************************************************/ libvlc_state_t -libvlc_media_get_state( libvlc_media_t *p_md, - libvlc_exception_t *p_e ) +libvlc_media_get_state( libvlc_media_t *p_md ) { - VLC_UNUSED(p_e); + assert( p_md ); return p_md->state; } @@ -468,11 +488,9 @@ libvlc_media_get_state( libvlc_media_t *p_md, void libvlc_media_set_state( libvlc_media_t *p_md, - libvlc_state_t state, - libvlc_exception_t *p_e ) + libvlc_state_t state ) { libvlc_event_t event; - VLC_UNUSED(p_e); p_md->state = state; @@ -488,11 +506,8 @@ libvlc_media_set_state( libvlc_media_t *p_md, * subitems **************************************************************************/ libvlc_media_list_t * -libvlc_media_subitems( libvlc_media_t * p_md, - libvlc_exception_t * p_e ) +libvlc_media_subitems( libvlc_media_t * p_md ) { - VLC_UNUSED(p_e); - if( p_md->p_subitems ) libvlc_media_list_retain( p_md->p_subitems ); return p_md->p_subitems; @@ -502,46 +517,41 @@ libvlc_media_subitems( libvlc_media_t * p_md, * event_manager **************************************************************************/ libvlc_event_manager_t * -libvlc_media_event_manager( libvlc_media_t * p_md, - libvlc_exception_t * p_e ) +libvlc_media_event_manager( libvlc_media_t * p_md ) { - VLC_UNUSED(p_e); + assert( p_md ); return p_md->p_event_manager; } /************************************************************************** - * Get duration of media object. + * Get duration of media object (in ms) **************************************************************************/ int64_t -libvlc_media_get_duration( libvlc_media_t * p_md, - libvlc_exception_t * p_e ) +libvlc_media_get_duration( libvlc_media_t * p_md, libvlc_exception_t *p_e ) { - VLC_UNUSED(p_e); + assert( p_md ); - if( !p_md || !p_md->p_input_item) + if( !p_md->p_input_item ) { - libvlc_exception_raise( p_e, "No input item" ); + libvlc_exception_raise( p_e ); + libvlc_printerr( "No input item" ); return -1; } - return input_item_GetDuration( p_md->p_input_item ); + return input_item_GetDuration( p_md->p_input_item ) / 1000; } /************************************************************************** * Get preparsed status for media object. **************************************************************************/ int -libvlc_media_is_preparsed( libvlc_media_t * p_md, - libvlc_exception_t * p_e ) +libvlc_media_is_preparsed( libvlc_media_t * p_md ) { - VLC_UNUSED(p_e); + assert( p_md ); - if( !p_md || !p_md->p_input_item) - { - libvlc_exception_raise( p_e, "No input item" ); + if( !p_md->p_input_item ) return false; - } return input_item_IsPreparsed( p_md->p_input_item ); } @@ -552,16 +562,10 @@ libvlc_media_is_preparsed( libvlc_media_t * p_md, * an native object that references a libvlc_media_t pointer **************************************************************************/ void -libvlc_media_set_user_data( libvlc_media_t * p_md, - void * p_new_user_data, - libvlc_exception_t * p_e ) +libvlc_media_set_user_data( libvlc_media_t * p_md, void * p_new_user_data ) { - VLC_UNUSED(p_e); - - if( p_md ) - { - p_md->p_user_data = p_new_user_data; - } + assert( p_md ); + p_md->p_user_data = p_new_user_data; } /************************************************************************** @@ -570,17 +574,8 @@ libvlc_media_set_user_data( libvlc_media_t * p_md, * an native object that references a libvlc_media_t pointer **************************************************************************/ void * -libvlc_media_get_user_data( libvlc_media_t * p_md, - libvlc_exception_t * p_e ) +libvlc_media_get_user_data( libvlc_media_t * p_md ) { - VLC_UNUSED(p_e); - - if( p_md ) - { - return p_md->p_user_data; - } - else - { - return NULL; - } + assert( p_md ); + return p_md->p_user_data; }