From: Clément Stenac Date: Wed, 31 May 2006 20:40:54 +0000 (+0000) Subject: Fix playlist crasher and simplify a few things X-Git-Tag: 0.9.0-test0~11116 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=8f973a0b05db90ef8f602ca8863563e0724e8581;p=vlc Fix playlist crasher and simplify a few things (Remove ITEMPLAY method, which had become redundant) --- diff --git a/include/vlc_common.h b/include/vlc_common.h index 7c8dbb259d..661f72c39d 100644 --- a/include/vlc_common.h +++ b/include/vlc_common.h @@ -220,14 +220,11 @@ typedef struct msg_subscription_t msg_subscription_t; typedef enum { PLAYLIST_PLAY, /**< No arg. res=can fail*/ PLAYLIST_AUTOPLAY, /**< No arg. res=cant fail*/ - PLAYLIST_VIEWPLAY, /**< arg1= int, arg2= playlist_item_t*,*/ - /** arg3 = playlist_item_t* , res=can fail */ - PLAYLIST_ITEMPLAY, /** request.p_node, NULL ); -// playlist_Play( p_playlist ); } if( p_playlist ) vlc_object_release( p_playlist ); diff --git a/modules/access/cdda/info.c b/modules/access/cdda/info.c index 5d06afe899..1211850ae4 100644 --- a/modules/access/cdda/info.c +++ b/modules/access/cdda/info.c @@ -1037,7 +1037,7 @@ CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda, if( b_play ) { - playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, 0, + playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, p_playlist->status.p_item, NULL ); } diff --git a/modules/control/hotkeys.c b/modules/control/hotkeys.c index ea7c7e5a88..5f319495ab 100644 --- a/modules/control/hotkeys.c +++ b/modules/control/hotkeys.c @@ -921,7 +921,7 @@ static void PlayBookmark( intf_thread_t *p_intf, int i_num ) if( !strcmp( psz_bookmark, p_playlist->pp_items[i]->p_input->psz_uri ) ) { - playlist_LockControl( p_playlist, PLAYLIST_ITEMPLAY, + playlist_LockControl( p_playlist, PLAYLIST_VIEWPLAY, NULL, p_playlist->pp_items[i] ); break; } diff --git a/modules/control/http/macro.c b/modules/control/http/macro.c index 34795bb65c..bab1964f4d 100644 --- a/modules/control/http/macro.c +++ b/modules/control/http/macro.c @@ -195,7 +195,8 @@ void E_(MacroDo)( httpd_file_sys_t *p_args, msg_Dbg( p_intf, "requested playlist play" ); break; } - playlist_Control( p_sys->p_playlist, PLAYLIST_ITEMPLAY, + playlist_Control( p_sys->p_playlist, PLAYLIST_VIEWPLAY, + NULL, playlist_ItemGetById( p_sys->p_playlist, i_item ) ); msg_Dbg( p_intf, "requested playlist item: %i", i_item ); diff --git a/modules/control/http/rpn.c b/modules/control/http/rpn.c index 894f350981..5d857d475c 100644 --- a/modules/control/http/rpn.c +++ b/modules/control/http/rpn.c @@ -490,7 +490,8 @@ void E_(EvaluateRPN)( intf_thread_t *p_intf, mvar_t *vars, int i_id = E_(SSPopN)( st, vars ); int i_ret; - i_ret = playlist_Control( p_sys->p_playlist, PLAYLIST_ITEMPLAY, + i_ret = playlist_Control( p_sys->p_playlist, PLAYLIST_VIEWPLAY, + NULL, playlist_ItemGetById( p_sys->p_playlist, i_id ) ); msg_Dbg( p_intf, "requested playlist item: %i", i_id ); diff --git a/modules/demux/playlist/playlist.h b/modules/demux/playlist/playlist.h index 3103ae8d71..288f56cf0b 100644 --- a/modules/demux/playlist/playlist.h +++ b/modules/demux/playlist/playlist.h @@ -83,7 +83,7 @@ void E_(Close_Shoutcast) ( vlc_object_t * ); if( b_play && p_playlist->status.p_item && \ p_playlist->status.p_item->i_children > 0 ) \ { \ - playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, 1242, \ + playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, \ p_playlist->status.p_item, NULL ); \ } \ vlc_object_release( p_playlist ); diff --git a/modules/gui/macosx/playlist.m b/modules/gui/macosx/playlist.m index e884ab2ae0..bc315e084f 100644 --- a/modules/gui/macosx/playlist.m +++ b/modules/gui/macosx/playlist.m @@ -788,7 +788,7 @@ belongs to an Apple hidden private API, and then can "disapear" at any time*/ p_item = NULL; } } - playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, 0, p_node, p_item ); + playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, p_node, p_item ); } vlc_object_release( p_playlist ); } @@ -1086,7 +1086,7 @@ belongs to an Apple hidden private API, and then can "disapear" at any time*/ { playlist_item_t *p_item; p_item = playlist_ItemGetByInput( p_playlist, p_input ); - playlist_Control( p_playlist, PLAYLIST_ITEMPLAY, p_item ); + playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, NULL, p_item ); } else { @@ -1133,7 +1133,7 @@ belongs to an Apple hidden private API, and then can "disapear" at any time*/ { playlist_item_t *p_item; p_item = playlist_ItemGetByInput( p_playlist, p_input ); - playlist_Control( p_playlist, PLAYLIST_ITEMPLAY, p_item ); + playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, NULL, p_item ); } else { diff --git a/modules/gui/macosx/wizard.m b/modules/gui/macosx/wizard.m index 388c02f33c..8e6c66d07b 100644 --- a/modules/gui/macosx/wizard.m +++ b/modules/gui/macosx/wizard.m @@ -1322,7 +1322,8 @@ static VLCWizard *_o_sharedInstance = nil; { /* play the first item and add the others afterwards */ playlist_item_t *p_item = playlist_ItemGetByInput( p_playlist, p_input ); - playlist_Control( p_playlist, PLAYLIST_ITEMPLAY, p_item ); + playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, NULL, + p_item ); } x += 1; diff --git a/modules/gui/ncurses.c b/modules/gui/ncurses.c index 35f82e43dd..101d4cf01c 100644 --- a/modules/gui/ncurses.c +++ b/modules/gui/ncurses.c @@ -565,13 +565,13 @@ static int HandleKey( intf_thread_t *p_intf, int i_key ) if( p_sys->pp_plist[p_sys->i_box_plidx]->p_item->i_children == -1 ) { - playlist_Control( p_sys->p_playlist, PLAYLIST_ITEMPLAY, + playlist_Control( p_sys->p_playlist, PLAYLIST_VIEWPLAY, + NULL, p_sys->pp_plist[p_sys->i_box_plidx]->p_item ); } else { playlist_Control( p_sys->p_playlist, PLAYLIST_VIEWPLAY, - p_sys->i_current_view, p_sys->pp_plist[p_sys->i_box_plidx]->p_item, NULL ); } diff --git a/modules/gui/qt4/main_interface.cpp b/modules/gui/qt4/main_interface.cpp index 89cc9e81e1..4a5c0652b1 100644 --- a/modules/gui/qt4/main_interface.cpp +++ b/modules/gui/qt4/main_interface.cpp @@ -47,6 +47,10 @@ void MainInterface::init() QObject::connect( this, SIGNAL( inputChanged( input_thread_t * ) ), main_input_manager, SLOT( setInput( input_thread_t * ) ) ); + /* Connect the slider and the input manager */ + // both ways + + /* Connect the display and the input manager */ } MainInterface::~MainInterface() diff --git a/modules/gui/skins2/vars/playtree.cpp b/modules/gui/skins2/vars/playtree.cpp index bf12c7538a..c0bda1cd5a 100644 --- a/modules/gui/skins2/vars/playtree.cpp +++ b/modules/gui/skins2/vars/playtree.cpp @@ -119,8 +119,7 @@ void Playtree::action( VarTree *pItem ) if( p_parent ) { - playlist_Control( m_pPlaylist, PLAYLIST_VIEWPLAY, 1242, - p_parent, p_item ); + playlist_Control( m_pPlaylist, PLAYLIST_VIEWPLAY, p_parent, p_item ); } vlc_mutex_unlock( &m_pPlaylist->object_lock ); } diff --git a/modules/gui/wince/open.cpp b/modules/gui/wince/open.cpp index 44b36baab7..73ed9d2b1d 100644 --- a/modules/gui/wince/open.cpp +++ b/modules/gui/wince/open.cpp @@ -636,12 +636,16 @@ void OpenDialog::OnOk() } } - playlist_AddItem( p_playlist, p_item, - PLAYLIST_APPEND, PLAYLIST_END ); if( b_start ) { - playlist_Control( p_playlist, PLAYLIST_ITEMPLAY , p_item ); + playlist_AddItem( p_playlist, p_item, + PLAYLIST_APPEND|PLAYLIST_GO, PLAYLIST_END ); + } + else + { + playlist_AddItem( p_playlist, p_item, + PLAYLIST_APPEND, PLAYLIST_END ); } } diff --git a/modules/gui/wxwidgets/dialogs/playlist.cpp b/modules/gui/wxwidgets/dialogs/playlist.cpp index 272fdcb63a..3971ab19b3 100644 --- a/modules/gui/wxwidgets/dialogs/playlist.cpp +++ b/modules/gui/wxwidgets/dialogs/playlist.cpp @@ -1124,8 +1124,7 @@ void Playlist::OnActivateItem( wxTreeEvent& event ) if( p_parent ) { - playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, 1242, - p_parent, p_item ); + playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, p_parent, p_item ); } UnlockPlaylist( p_intf->p_sys, p_playlist ); } @@ -1522,8 +1521,8 @@ void Playlist::OnPopupPlay( wxCommandEvent& event ) if( p_popup_parent ) { - playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, 1242, - p_popup_parent, p_popup_item ); + playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, p_popup_parent, + p_popup_item ); } UnlockPlaylist( p_intf->p_sys, p_playlist ); } diff --git a/modules/video_filter/motiondetect.c b/modules/video_filter/motiondetect.c index f8347c3172..fb386be1c8 100644 --- a/modules/video_filter/motiondetect.c +++ b/modules/video_filter/motiondetect.c @@ -407,7 +407,7 @@ static void MotionDetect( vout_thread_t *p_vout, picture_t *p_inpic, msg_Dbg( p_vout, "Area(%d) matched, going to %s\n", i_area, pp_curent_area->psz_mrl ); playlist_Control( p_vout->p_sys->p_playlist, - PLAYLIST_ITEMPLAY, p_item ); + PLAYLIST_VIEWPLAY, NULL, p_item ); pp_curent_area->i_matches = 0; } } diff --git a/src/playlist/control.c b/src/playlist/control.c index 9e453490c4..82e62e322a 100644 --- a/src/playlist/control.c +++ b/src/playlist/control.c @@ -24,6 +24,7 @@ #include #include #include "vlc_playlist.h" +#include /***************************************************************************** * Local prototypes @@ -96,31 +97,15 @@ int PlaylistVAControl( playlist_t * p_playlist, int i_query, va_list args ) p_playlist->request.p_item = NULL; break; - case PLAYLIST_ITEMPLAY: - p_item = (playlist_item_t *)va_arg( args, playlist_item_t * ); - if ( p_item == NULL || p_item->p_input->psz_uri == NULL ) - return VLC_EGENERIC; - p_playlist->request.i_status = PLAYLIST_RUNNING; - p_playlist->request.i_skip = 0; - p_playlist->request.b_request = VLC_TRUE; - p_playlist->request.p_item = p_item; - p_playlist->request.p_node = p_playlist->status.p_node; - break; - + // Node can be null, it will keep the same. Use with care ... + // Item null = take the first child of node case PLAYLIST_VIEWPLAY: - i_view = (int) va_arg( args, playlist_item_t *); p_node = (playlist_item_t *)va_arg( args, playlist_item_t * ); p_item = (playlist_item_t *)va_arg( args, playlist_item_t * ); if ( p_node == NULL ) { p_node = p_playlist->status.p_node; - if( !p_node ) - { - p_playlist->status.i_status = PLAYLIST_STOPPED; - p_playlist->request.b_request = VLC_TRUE; - msg_Err( p_playlist, "null node" ); - return VLC_SUCCESS; - } + assert( p_node ); } p_playlist->request.i_status = PLAYLIST_RUNNING; p_playlist->request.i_skip = 0; @@ -130,23 +115,27 @@ int PlaylistVAControl( playlist_t * p_playlist, int i_query, va_list args ) break; case PLAYLIST_PLAY: - p_playlist->request.i_status = PLAYLIST_RUNNING; - p_playlist->request.b_request = VLC_TRUE; - if( p_playlist->p_input ) { val.i_int = PLAYING_S; var_Set( p_playlist->p_input, "state", val ); break; } - p_playlist->request.p_node = p_playlist->status.p_node; - p_playlist->request.p_item = p_playlist->status.p_item; - p_playlist->request.i_skip = 0; + else + { + p_playlist->request.i_status = PLAYLIST_RUNNING; + p_playlist->request.b_request = VLC_TRUE; + p_playlist->request.p_node = p_playlist->status.p_node; + p_playlist->request.p_item = p_playlist->status.p_item; + p_playlist->request.i_skip = 0; + } break; case PLAYLIST_AUTOPLAY: + // AUTOPLAY is an ugly hack for initial status. + // Hopefully it will disappear p_playlist->status.i_status = PLAYLIST_RUNNING; - p_playlist->status.p_node = p_playlist->p_local_category; + p_playlist->request.p_node = p_playlist->status.p_node; p_playlist->request.b_request = VLC_FALSE; break; @@ -260,7 +249,6 @@ playlist_item_t * playlist_NextItem( playlist_t *p_playlist ) vlc_bool_t b_playstop = var_GetBool( p_playlist, "play-and-stop" ); /* Handle quickly a few special cases */ - /* No items to play */ if( p_playlist->i_size == 0 ) { @@ -341,14 +329,12 @@ playlist_item_t * playlist_NextItem( playlist_t *p_playlist ) p_new = p_playlist->request.p_item; i_skip = p_playlist->request.i_skip; - p_playlist->status.p_node = p_playlist->request.p_node; + if( p_playlist->request.p_node ) + p_playlist->status.p_node = p_playlist->request.p_node; - /* If we are asked for a node, take its first item */ - if( i_skip == 0 && - ( p_new == NULL || p_new->i_children != -1 ) ) - { + /* If we are asked for a node, dont take it */ + if( i_skip == 0 && ( p_new == NULL || p_new->i_children != -1 ) ) i_skip++; - } if( i_skip > 0 ) { diff --git a/src/playlist/tree.c b/src/playlist/tree.c index 120ef09986..c54014a9c8 100644 --- a/src/playlist/tree.c +++ b/src/playlist/tree.c @@ -354,6 +354,8 @@ playlist_item_t *playlist_GetNextLeaf( playlist_t *p_playlist, { playlist_item_t *p_next; + assert( p_root && p_root->i_children != -1 ); + #ifdef PLAYLIST_DEBUG if( p_item != NULL ) msg_Dbg( p_playlist, "finding next of %s within %s", @@ -363,7 +365,6 @@ playlist_item_t *playlist_GetNextLeaf( playlist_t *p_playlist, p_root->p_input->psz_name ); #endif - assert( p_root && p_root->i_children != -1 ); /* Now, walk the tree until we find a suitable next item */ p_next = p_item;