diff --git a/TODO b/TODO
index a1129e4ab2fd65ca6a02132446f7ecb0b99e0c74..7436d70cdb656e8d5bf96f0fcbfd25fc10143e67 100644
--- a/TODO
+++ b/TODO
@@ -114,7 +114,6 @@ Think playlist within playlist, directory structures, SAP section, TV channels l
50% done.
Todo:
- Core support
- - *** Fix meta-information (author and duration)
- *** Improve random mode and fix loop
- * "Name finder"
- * "Protocol rollover" node
@@ -123,8 +122,6 @@ Todo:
- Helper modules
- ** ASX and B4S parsers (see below)
- * Rewrite SLP announce discovery
- - ** Adapt CDDAX
- - ** Fix MP4, LIVE.COM
- *** Implement in MacOS X and Skins 2 interfaces
- wx implementation :
- *** Investigate bug with wxImageList
diff --git a/modules/demux/mp4/mp4.c b/modules/demux/mp4/mp4.c
index 5b76eead962b8382250f38006222bfdf41475fcb..667eb014f487d3662a6b2466b3cbe5f5450054f1 100644
--- a/modules/demux/mp4/mp4.c
+++ b/modules/demux/mp4/mp4.c
@@ -326,8 +326,10 @@ static int Open( vlc_object_t * p_this )
if( ( p_rmra = MP4_BoxGet( p_sys->p_root, "/moov/rmra" ) ) )
{
playlist_t *p_playlist;
+ playlist_item_t *p_item;
int i_count = MP4_BoxCount( p_rmra, "rmda" );
int i;
+ vlc_bool_t b_play = VLC_FALSE;
msg_Dbg( p_demux, "detected playlist mov file (%d ref)", i_count );
@@ -337,13 +339,15 @@ static int Open( vlc_object_t * p_this )
FIND_ANYWHERE );
if( p_playlist )
{
- //p_playlist->pp_items[p_playlist->i_index]->b_autodeletion = VLC_TRUE;
+ p_item = playlist_ItemGetByInput( p_playlist,
+ ((input_thread_t *)p_demux->p_parent)->input.p_item );
+ playlist_ItemToNode( p_playlist, p_item );
+
for( i = 0; i < i_count; i++ )
{
MP4_Box_t *p_rdrf = MP4_BoxGet( p_rmra, "rmda[%d]/rdrf", i );
char *psz_ref;
uint32_t i_ref_type;
- int i_position = p_playlist->i_index;
if( !p_rdrf || !( psz_ref = p_rdrf->data.p_rdrf->psz_ref ) )
{
@@ -365,8 +369,21 @@ static int Open( vlc_object_t * p_this )
!strncmp( psz_ref, "rtsp://", 7 ) )
{
msg_Dbg( p_demux, "adding ref = `%s'", psz_ref );
- playlist_Add( p_playlist, psz_ref, psz_ref,
- PLAYLIST_APPEND, i_position );
+ if( p_item )
+ {
+ playlist_item_t *p_child =
+ playlist_ItemNew( p_playlist,
+ psz_ref, psz_ref );
+ if( p_child )
+ {
+ playlist_NodeAddItem( p_playlist, p_child,
+ p_item->pp_parents[0]->i_view,
+ p_item, PLAYLIST_APPEND,
+ PLAYLIST_END );
+ playlist_CopyParents( p_item, p_child );
+ b_play = VLC_TRUE;
+ }
+ }
}
else
{
@@ -388,8 +405,22 @@ static int Open( vlc_object_t * p_this )
}
strcat( psz_absolute, psz_ref );
msg_Dbg( p_demux, "adding ref = `%s'", psz_absolute );
- playlist_Add( p_playlist, psz_absolute, psz_absolute,
- PLAYLIST_APPEND, i_position );
+ if( p_item )
+ {
+ playlist_item_t *p_child =
+ playlist_ItemNew( p_playlist,
+ psz_absolute,
+ psz_absolute );
+ if( p_child )
+ {
+ playlist_NodeAddItem( p_playlist, p_child,
+ p_item->pp_parents[0]->i_view,
+ p_item, PLAYLIST_APPEND,
+ PLAYLIST_END );
+ playlist_CopyParents( p_item, p_child );
+ b_play = VLC_TRUE;
+ }
+ }
}
}
else
@@ -398,6 +429,12 @@ static int Open( vlc_object_t * p_this )
(char*)&p_rdrf->data.p_rdrf->i_ref_type );
}
}
+ if( b_play == VLC_TRUE )
+ {
+ playlist_Control( p_playlist, PLAYLIST_VIEWPLAY,
+ p_playlist->status.i_view,
+ p_playlist->status.p_item, NULL );
+ }
vlc_object_release( p_playlist );
}
else