X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fdemux%2Fplaylist%2Fxspf.c;h=42c1ed6e0d388007b1250ff1b30d09b1a0594922;hb=79bc7d59facaeafe140ecc924b04c9cb6310df61;hp=5d908628960a640b701cf5d5929c009470f5f806;hpb=449fd28aaf007c6411251dae9d0dbfdc65b135d1;p=vlc diff --git a/modules/demux/playlist/xspf.c b/modules/demux/playlist/xspf.c index 5d90862896..42c1ed6e0d 100644 --- a/modules/demux/playlist/xspf.c +++ b/modules/demux/playlist/xspf.c @@ -30,18 +30,17 @@ # include "config.h" #endif -#include +#include #include -#include "playlist.h" -#include "vlc_xml.h" -#include "vlc_strings.h" -#include "vlc_url.h" +#include +#include +#include #include "xspf.h" +#include "playlist.h" struct demux_sys_t { - playlist_item_t *p_item_in_category; input_item_t **pp_tracklist; int i_tracklist_entries; int i_identifier; @@ -54,14 +53,14 @@ static int Demux( demux_t * ); /** * \brief XSPF submodule initialization function */ -int E_(Import_xspf)( vlc_object_t *p_this ) +int Import_xspf( vlc_object_t *p_this ) { DEMUX_BY_EXTENSION_OR_FORCED_MSG( ".xspf", "xspf-open", "using XSPF playlist reader" ); return VLC_SUCCESS; } -void E_(Close_xspf)( vlc_object_t *p_this ) +void Close_xspf( vlc_object_t *p_this ) { demux_t *p_demux = (demux_t *)p_this; FREENULL( p_demux->p_sys->pp_tracklist ); @@ -121,7 +120,7 @@ int Demux( demux_t *p_demux ) } if( i_ret == 1 ) - i_ret = parse_playlist_node( p_demux, p_playlist, p_current_input, + i_ret = parse_playlist_node( p_demux, p_current_input, p_xml_reader, "playlist" ) ? 0 : -1; int i; @@ -152,7 +151,6 @@ static int Control( demux_t *p_demux, int i_query, va_list args ) /** * \brief parse the root node of a XSPF playlist * \param p_demux demuxer instance - * \param p_playlist playlist instance * \param p_input_item current input item * \param p_xml_reader xml reader instance * \param psz_element name of element to parse @@ -250,7 +248,6 @@ static bool parse_playlist_node COMPLEX_INTERFACE if( p_handler->type == COMPLEX_CONTENT ) { if( p_handler->pf_handler.cmplx( p_demux, - p_playlist, p_input_item, p_xml_reader, p_handler->name ) ) @@ -356,7 +353,7 @@ static bool parse_tracklist_node COMPLEX_INTERFACE FREE_NAME(); /* parse the track data in a separate function */ - if( parse_track_node( p_demux, p_playlist, p_input_item, + if( parse_track_node( p_demux, p_input_item, p_xml_reader,"track" ) == true ) i_ntracks++; } @@ -410,7 +407,7 @@ static bool parse_track_node COMPLEX_INTERFACE {"duration", SIMPLE_CONTENT, {.smpl = set_item_info} }, {"link", SIMPLE_CONTENT, {NULL} }, {"meta", SIMPLE_CONTENT, {NULL} }, - {"extension", COMPLEX_CONTENT, {.cmplx = skip_element} }, + {"extension", COMPLEX_CONTENT, {.cmplx = parse_extension_node} }, {NULL, UNKNOWN_CONTENT, {NULL} } }; @@ -454,7 +451,6 @@ static bool parse_track_node COMPLEX_INTERFACE return false; } if( p_handler->pf_handler.cmplx( p_demux, - p_playlist, p_new_input, p_xml_reader, p_handler->name ) ) @@ -549,16 +545,13 @@ static bool parse_track_node COMPLEX_INTERFACE strlen(p_demux->p_sys->psz_base) + strlen(psz_uri) +1 ); if( !psz_tmp ) - { - msg_Err( p_demux, "out of memory"); return false; - } sprintf( psz_tmp, "%s%s", p_demux->p_sys->psz_base, psz_uri ); free( psz_uri ); psz_uri = psz_tmp; } - p_new_input = input_ItemNewExt( p_playlist, psz_uri, + p_new_input = input_ItemNewExt( p_demux, psz_uri, NULL, 0, NULL, -1 ); free( psz_uri ); input_ItemCopyOptions( p_input_item, p_new_input ); @@ -660,6 +653,22 @@ static bool set_item_info SIMPLE_INTERFACE return true; } +/** + * \brief handles the