Commit 8a677b6a authored by Rémi Duraffort's avatar Rémi Duraffort

itml: factorize.

parent 5d81c926
...@@ -67,64 +67,56 @@ void Close_iTML( vlc_object_t *p_this ) ...@@ -67,64 +67,56 @@ void Close_iTML( vlc_object_t *p_this )
*/ */
int Demux( demux_t *p_demux ) int Demux( demux_t *p_demux )
{ {
int i_ret = VLC_SUCCESS;
xml_t *p_xml = NULL; xml_t *p_xml = NULL;
xml_reader_t *p_xml_reader = NULL; xml_reader_t *p_xml_reader = NULL;
char *psz_name = NULL; char *psz_name = NULL;
INIT_PLAYLIST_STUFF; INIT_PLAYLIST_STUFF;
p_demux->p_sys->i_ntracks = 0; p_demux->p_sys->i_ntracks = 0;
/* create new xml parser from stream */ /* create new xml parser from stream */
p_xml = xml_Create( p_demux ); p_xml = xml_Create( p_demux );
if( !p_xml ) if( !p_xml )
i_ret = VLC_ENOMOD; goto end;
else
{
p_xml_reader = xml_ReaderCreate( p_xml, p_demux->s ); p_xml_reader = xml_ReaderCreate( p_xml, p_demux->s );
if( !p_xml_reader ) if( !p_xml_reader )
i_ret = VLC_EGENERIC; goto end;
}
/* locating the root node */ /* locating the root node */
if( i_ret == VLC_SUCCESS )
{
do do
{ {
if( xml_ReaderRead( p_xml_reader ) != 1 ) if( xml_ReaderRead( p_xml_reader ) != 1 )
{ {
msg_Err( p_demux, "can't read xml stream" ); msg_Err( p_demux, "can't read xml stream" );
i_ret = VLC_EGENERIC; goto end;
}
} while( i_ret == VLC_SUCCESS &&
xml_ReaderNodeType( p_xml_reader ) != XML_READER_STARTELEM );
} }
} while( xml_ReaderNodeType( p_xml_reader ) != XML_READER_STARTELEM );
/* checking root node name */ /* checking root node name */
if( i_ret == VLC_SUCCESS )
{
psz_name = xml_ReaderName( p_xml_reader ); psz_name = xml_ReaderName( p_xml_reader );
if( !psz_name || strcmp( psz_name, "plist" ) ) if( !psz_name || strcmp( psz_name, "plist" ) )
{ {
msg_Err( p_demux, "invalid root node name: %s", psz_name ); msg_Err( p_demux, "invalid root node name: %s", psz_name );
i_ret = VLC_EGENERIC; goto end;
}
FREE_NAME();
} }
if( i_ret == VLC_SUCCESS )
{
xml_elem_hnd_t pl_elements[] = xml_elem_hnd_t pl_elements[] =
{ {"dict", COMPLEX_CONTENT, {.cmplx = parse_plist_dict} } }; { {"dict", COMPLEX_CONTENT, {.cmplx = parse_plist_dict} } };
i_ret = parse_plist_node( p_demux, p_current_input, parse_plist_node( p_demux, p_current_input, NULL, p_xml_reader, "plist",
NULL, p_xml_reader, "plist",
pl_elements ); pl_elements );
HANDLE_PLAY_AND_RELEASE; HANDLE_PLAY_AND_RELEASE;
}
end:
free( psz_name );
if( p_xml_reader ) if( p_xml_reader )
xml_ReaderDelete( p_xml, p_xml_reader ); xml_ReaderDelete( p_xml, p_xml_reader );
if( p_xml ) if( p_xml )
xml_Delete( p_xml ); xml_Delete( p_xml );
return 0; /* Needed for correct operation of go back */
/* Needed for correct operation of go back */
return 0;
} }
/** \brief dummy function for demux callback interface */ /** \brief dummy function for demux callback interface */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment