vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Sun May 14 13:53:29 2017 +0300| [9c77c04437f26bcaab0008e868e3aa565239732e] | committer: Rémi Denis-Courmont
playlist: allocate the root item statically This allocates space for the root playlist item directly inside the playlist structure. Creation of that item required a special case anyway as it was the only item without a parent. As a consequence, one unhandled error case is removed. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=9c77c04437f26bcaab0008e868e3aa565239732e --- include/vlc_playlist.h | 6 +++--- modules/control/oldrc.c | 4 ++-- modules/gui/macosx/VLCMainWindow.m | 2 +- modules/gui/ncurses.c | 4 ++-- modules/gui/qt/components/playlist/selector.cpp | 2 +- modules/gui/qt/dialogs/messages.cpp | 2 +- modules/gui/skins2/commands/cmd_playtree.cpp | 2 +- modules/gui/skins2/vars/playtree.cpp | 4 ++-- modules/lua/libs/playlist.c | 10 ++++----- src/playlist/engine.c | 28 +++++++++++++++++-------- src/playlist/services_discovery.c | 4 ++-- src/playlist/tree.c | 3 +-- 12 files changed, 40 insertions(+), 31 deletions(-) diff --git a/include/vlc_playlist.h b/include/vlc_playlist.h index b2adb3d2b8..ebd078404b 100644 --- a/include/vlc_playlist.h +++ b/include/vlc_playlist.h @@ -158,9 +158,9 @@ struct playlist_t int i_current_index; /**< Index in current array */ /* Predefined items */ - playlist_item_t * p_root; - playlist_item_t * p_playing; - playlist_item_t * p_media_library; + playlist_item_t root; + playlist_item_t *p_playing; + playlist_item_t *p_media_library; }; /* A bit of macro magic to generate an enum out of the following list, diff --git a/modules/control/oldrc.c b/modules/control/oldrc.c index d33a74c62c..37eea02a0f 100644 --- a/modules/control/oldrc.c +++ b/modules/control/oldrc.c @@ -1323,14 +1323,14 @@ static int Playlist( vlc_object_t *p_this, char const *psz_cmd, else if( !strcmp( psz_cmd, "playlist" ) ) { msg_rc( "+----[ Playlist ]" ); - print_playlist( p_intf, p_playlist->p_root, 0 ); + print_playlist( p_intf, &p_playlist->root, 0 ); msg_rc( "+----[ End of playlist ]" ); } else if( !strcmp( psz_cmd, "sort" )) { PL_LOCK; - playlist_RecursiveNodeSort( p_playlist, p_playlist->p_root, + playlist_RecursiveNodeSort( p_playlist, &p_playlist->root, SORT_ARTIST, ORDER_NORMAL ); PL_UNLOCK; } diff --git a/modules/gui/macosx/VLCMainWindow.m b/modules/gui/macosx/VLCMainWindow.m index c9622c0588..bb960e82b8 100644 --- a/modules/gui/macosx/VLCMainWindow.m +++ b/modules/gui/macosx/VLCMainWindow.m @@ -1145,7 +1145,7 @@ static const float f_min_window_height = 307.; } } else { PL_LOCK; - playlist_item_t *pl_item = playlist_ChildSearchName(p_playlist->p_root, [[item untranslatedTitle] UTF8String]); + playlist_item_t *pl_item = playlist_ChildSearchName(&p_playlist->root, [[item untranslatedTitle] UTF8String]); if (pl_item != NULL) [[[[VLCMain sharedInstance] playlist] model] changeRootItem:pl_item]; diff --git a/modules/gui/ncurses.c b/modules/gui/ncurses.c index dd45ee82ce..0d5370425d 100644 --- a/modules/gui/ncurses.c +++ b/modules/gui/ncurses.c @@ -416,7 +416,7 @@ static void PlaylistRebuild(intf_thread_t *intf) playlist_t *p_playlist = pl_Get(intf); PlaylistDestroy(sys); - PlaylistAddNode(sys, p_playlist->p_root, ""); + PlaylistAddNode(sys, &p_playlist->root, ""); } static int ItemChanged(vlc_object_t *p_this, const char *variable, @@ -1341,7 +1341,7 @@ static bool HandlePlaylistKey(intf_thread_t *intf, int key) case 'o': case 'O': playlist_Lock(p_playlist); - playlist_RecursiveNodeSort(p_playlist, p_playlist->p_root, + playlist_RecursiveNodeSort(p_playlist, &p_playlist->root, SORT_TITLE_NODES_FIRST, (key == 'o')? ORDER_NORMAL : ORDER_REVERSE); sys->need_update = true; diff --git a/modules/gui/qt/components/playlist/selector.cpp b/modules/gui/qt/components/playlist/selector.cpp index c02a024b24..1d41f7f6af 100644 --- a/modules/gui/qt/components/playlist/selector.cpp +++ b/modules/gui/qt/components/playlist/selector.cpp @@ -390,7 +390,7 @@ void PLSelector::setSource( QTreeWidgetItem *item ) { /* Find the right item for the SD */ /* FIXME: searching by name - what could possibly go wrong? */ - pl_item = playlist_ChildSearchName( THEPL->p_root, + pl_item = playlist_ChildSearchName( &(THEPL->root), vlc_gettext(qtu(item->data(0, LONGNAME_ROLE).toString())) ); /* Podcasts */ diff --git a/modules/gui/qt/dialogs/messages.cpp b/modules/gui/qt/dialogs/messages.cpp index b959622e04..d6a0ecc992 100644 --- a/modules/gui/qt/dialogs/messages.cpp +++ b/modules/gui/qt/dialogs/messages.cpp @@ -378,7 +378,7 @@ void MessagesDialog::updatePLTree() { vlc_playlist_locker pl_lock ( THEPL ); - pldebugTree->addTopLevelItem( PLWalk( p_playlist->p_root ) ); + pldebugTree->addTopLevelItem( PLWalk( &p_playlist->root ) ); } pldebugTree->expandAll(); diff --git a/modules/gui/skins2/commands/cmd_playtree.cpp b/modules/gui/skins2/commands/cmd_playtree.cpp index dbbfd2c975..626ba09b03 100644 --- a/modules/gui/skins2/commands/cmd_playtree.cpp +++ b/modules/gui/skins2/commands/cmd_playtree.cpp @@ -38,7 +38,7 @@ void CmdPlaytreeSort::execute() /// \todo Choose the correct view playlist_t *p_playlist = getPL(); PL_LOCK; - playlist_RecursiveNodeSort( p_playlist, p_playlist->p_root, + playlist_RecursiveNodeSort( p_playlist, &p_playlist->root, SORT_TITLE, ORDER_NORMAL ); PL_UNLOCK; diff --git a/modules/gui/skins2/vars/playtree.cpp b/modules/gui/skins2/vars/playtree.cpp index 90012db9d5..768dd24907 100644 --- a/modules/gui/skins2/vars/playtree.cpp +++ b/modules/gui/skins2/vars/playtree.cpp @@ -256,9 +256,9 @@ void Playtree::buildTree() clear(); playlist_Lock( m_pPlaylist ); - for( int i = 0; i < m_pPlaylist->p_root->i_children; i++ ) + for( int i = 0; i < m_pPlaylist->root.i_children; i++ ) { - buildNode( m_pPlaylist->p_root->pp_children[i], *this ); + buildNode( m_pPlaylist->root.pp_children[i], *this ); } playlist_Unlock( m_pPlaylist ); diff --git a/modules/lua/libs/playlist.c b/modules/lua/libs/playlist.c index 989ea36dc8..f7770e8a38 100644 --- a/modules/lua/libs/playlist.c +++ b/modules/lua/libs/playlist.c @@ -296,11 +296,11 @@ static int vlclua_playlist_get( lua_State *L ) || !strcasecmp( psz_what, "media library" ) ) p_item = p_playlist->p_media_library; else if( !strcasecmp( psz_what, "root" ) ) - p_item = p_playlist->p_root; + p_item = &p_playlist->root; else { /* currently, psz_what must be SD module's longname! */ - p_item = playlist_ChildSearchName( p_playlist->p_root, psz_what ); + p_item = playlist_ChildSearchName( &p_playlist->root, psz_what ); if( !p_item ) { @@ -311,7 +311,7 @@ static int vlclua_playlist_get( lua_State *L ) } else { - p_item = p_playlist->p_root; + p_item = &p_playlist->root; } push_playlist_item( L, p_item ); PL_UNLOCK; @@ -323,8 +323,8 @@ static int vlclua_playlist_search( lua_State *L ) playlist_t *p_playlist = vlclua_get_playlist_internal( L ); const char *psz_string = luaL_optstring( L, 1, "" ); PL_LOCK; - playlist_LiveSearchUpdate( p_playlist, p_playlist->p_root, psz_string, true ); - push_playlist_item( L, p_playlist->p_root ); + playlist_LiveSearchUpdate( p_playlist, &p_playlist->root, psz_string, true ); + push_playlist_item( L, &p_playlist->root ); PL_UNLOCK; return 1; } diff --git a/src/playlist/engine.c b/src/playlist/engine.c index a295b80cba..3fbf9dad41 100644 --- a/src/playlist/engine.c +++ b/src/playlist/engine.c @@ -233,24 +233,31 @@ playlist_t *playlist_Create( vlc_object_t *p_parent ) pl_priv(p_playlist)->b_tree = var_InheritBool( p_parent, "playlist-tree" ); pl_priv(p_playlist)->b_preparse = var_InheritBool( p_parent, "auto-preparse" ); + p_playlist->root.p_input = NULL; + p_playlist->root.pp_children = NULL; + p_playlist->root.i_children = 0; + p_playlist->root.i_nb_played = 0; + p_playlist->root.i_id = 0; + p_playlist->root.i_flags = 0; + /* Create the root, playing items and meida library nodes */ - playlist_item_t *root, *playing, *ml; + playlist_item_t *playing, *ml; PL_LOCK; - root = playlist_NodeCreate( p_playlist, NULL, NULL, PLAYLIST_END, 0 ); - playing = playlist_NodeCreate( p_playlist, _( "Playlist" ), root, - PLAYLIST_END, PLAYLIST_RO_FLAG | PLAYLIST_NO_INHERIT_FLAG ); + playing = playlist_NodeCreate( p_playlist, _( "Playlist" ), + &p_playlist->root, PLAYLIST_END, + PLAYLIST_RO_FLAG|PLAYLIST_NO_INHERIT_FLAG ); if( var_InheritBool( p_parent, "media-library") ) - ml = playlist_NodeCreate( p_playlist, _( "Media Library" ), root, - PLAYLIST_END, PLAYLIST_RO_FLAG | PLAYLIST_NO_INHERIT_FLAG ); + ml = playlist_NodeCreate( p_playlist, _( "Media Library" ), + &p_playlist->root, PLAYLIST_END, + PLAYLIST_RO_FLAG|PLAYLIST_NO_INHERIT_FLAG ); else ml = NULL; PL_UNLOCK; - if( unlikely(root == NULL || playing == NULL) ) + if( unlikely(playing == NULL) ) abort(); - p_playlist->p_root = root; p_playlist->p_playing = playing; p_playlist->p_media_library = ml; @@ -333,7 +340,10 @@ void playlist_Destroy( playlist_t *p_playlist ) ARRAY_RESET( p_playlist->current ); /* Remove all remaining items */ - playlist_NodeDelete( p_playlist, p_playlist->p_root, true ); + if( p_playlist->p_media_library != NULL ) + playlist_NodeDelete( p_playlist, p_playlist->p_media_library, true ); + playlist_NodeDelete( p_playlist, p_playlist->p_playing, true ); + assert( p_playlist->root.i_children <= 0 ); PL_UNLOCK; vlc_cond_destroy( &p_sys->signal ); diff --git a/src/playlist/services_discovery.c b/src/playlist/services_discovery.c index 1b4ed14c6c..0435a9fc0c 100644 --- a/src/playlist/services_discovery.c +++ b/src/playlist/services_discovery.c @@ -54,7 +54,7 @@ static void playlist_sd_item_added(services_discovery_t *sd, playlist_Lock(playlist); if (sds->node == NULL) - sds->node = playlist_NodeCreate(playlist, longname, playlist->p_root, + sds->node = playlist_NodeCreate(playlist, longname, &playlist->root, PLAYLIST_END, PLAYLIST_RO_FLAG|PLAYLIST_SKIP_FLAG); @@ -137,7 +137,7 @@ int playlist_ServicesDiscoveryAdd(playlist_t *playlist, const char *chain) * has not discovered any item. */ if (sds->node == NULL && sds->sd->description != NULL) sds->node = playlist_NodeCreate(playlist, sds->sd->description, - playlist->p_root, PLAYLIST_END, + &playlist->root, PLAYLIST_END, PLAYLIST_RO_FLAG|PLAYLIST_SKIP_FLAG); TAB_APPEND(pl_priv(playlist)->i_sds, pl_priv(playlist)->pp_sds, sds); diff --git a/src/playlist/tree.c b/src/playlist/tree.c index 10f3be994a..697e918d65 100644 --- a/src/playlist/tree.c +++ b/src/playlist/tree.c @@ -75,8 +75,7 @@ playlist_item_t * playlist_NodeCreate( playlist_t *p_playlist, if( p_item == NULL ) return NULL; - if( p_parent != NULL ) - playlist_NodeInsert( p_parent, p_item, i_pos ); + playlist_NodeInsert( p_parent, p_item, i_pos ); playlist_SendAddNotify( p_playlist, p_item ); p_item->i_flags |= i_flags; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
