Changeset 496a54201d383dc056767a10b79e2a0354512e53

Show
Ignore:
Timestamp:
10/12/06 15:00:54 (2 years ago)
Author:
Clément Stenac <zorglub@videolan.org>
git-committer:
Clément Stenac <zorglub@videolan.org> 1165759254 +0000
git-parent:

[dbcaeb30c2a9ec5ab42c7a708d873b8e9a2228de]

git-author:
Clément Stenac <zorglub@videolan.org> 1165759254 +0000
Message:

* Do not take and release the structure lock for each element of the list while

releasing it. mutex locks /= 20 on a standard preparse run

* Only create absolutely necessary variables while preparsing
--> Preparse speed *= 4 (with item in disk cache of course)

* Do not rebuild playlist too much while adding a directory. Add a new flag

to NodeCreate? and Add to control this behaviour

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • include/vlc/vlc.h

    rfbf4c80 r496a542  
    143143#define PLAYLIST_PREPARSE        0x0008 
    144144#define PLAYLIST_SPREPARSE       0x0010 
     145#define PLAYLIST_NO_REBUILD      0x0020 
    145146 
    146147#define PLAYLIST_END           -666 
  • include/vlc_playlist.h

    rfbf4c80 r496a542  
    395395 
    396396/* Node management */ 
    397 VLC_EXPORT( playlist_item_t *, playlist_NodeCreate, ( playlist_t *, const char *, playlist_item_t * p_parent ) ); 
     397VLC_EXPORT( playlist_item_t *, playlist_NodeCreate, ( playlist_t *, const char *, playlist_item_t * p_parent, int i_flags ) ); 
    398398VLC_EXPORT( int, playlist_NodeAppend, (playlist_t *,playlist_item_t*,playlist_item_t *) ); 
    399399VLC_EXPORT( int, playlist_NodeInsert, (playlist_t *,playlist_item_t*,playlist_item_t *, int) ); 
  • modules/access/directory.c

    r60672ab r496a542  
    238238                    DIRECTORY_ACTIVITY ); 
    239239 
     240    playlist_Signal( p_playlist ); 
     241 
    240242    if( psz_name ) free( psz_name ); 
    241243    vlc_object_release( p_playlist ); 
     
    434436                    msg_Dbg(p_playlist, "creading subdirectory %s", psz_uri ); 
    435437 
    436                     p_node = playlist_NodeCreate (p_playlist, entry, 
    437                                                   p_parent_category); 
     438                    p_node = playlist_NodeCreate( p_playlist, entry, 
     439                                                  p_parent_category, 
     440                                                  PLAYLIST_NO_REBUILD ); 
    438441 
    439442                    /* If we had the parent in category, the it is now node. 
     
    483486                    playlist_BothAddInput( p_playlist, p_input, 
    484487                                           p_parent_category, 
    485                                            PLAYLIST_APPEND|PLAYLIST_PREPARSE, 
     488                                           PLAYLIST_APPEND|PLAYLIST_PREPARSE| 
     489                                           PLAYLIST_NO_REBUILD, 
    486490                                           PLAYLIST_END, NULL, NULL ); 
    487491                } 
  • modules/gui/macosx/playlist.m

    r7614e4e r496a542  
    13441344    if( psz_name != NULL && psz_name != "" ) 
    13451345        p_item = playlist_NodeCreate( p_playlist, psz_name,  
    1346                                             p_playlist->p_local_category ); 
     1346                                            p_playlist->p_local_category, 0 ); 
    13471347    else 
    13481348        p_item = playlist_NodeCreate( p_playlist, _("Empty Folder"),  
    1349                                             p_playlist->p_local_category ); 
     1349                                            p_playlist->p_local_category, 0 ); 
    13501350 
    13511351    if(! p_item ) 
  • modules/gui/wxwidgets/dialogs/playlist.cpp

    rdbcaeb3 r496a542  
    16371637    p_item = playlist_ItemGetById( p_playlist, p_wxitem->i_id, VLC_TRUE ); 
    16381638 
    1639     playlist_NodeCreate( p_playlist, psz_name, p_item ); 
     1639    playlist_NodeCreate( p_playlist, psz_name, p_item, 0 ); 
    16401640 
    16411641    UnlockPlaylist( p_intf->p_sys, p_playlist ); 
  • modules/services_discovery/bonjour.c

    rd3fe7f2 r496a542  
    308308 
    309309    p_sys->p_node_cat = playlist_NodeCreate( p_sys->p_playlist, _("Bonjour"), 
    310                                              p_sys->p_playlist->p_root_category ); 
     310                                       p_sys->p_playlist->p_root_category, 0 ); 
    311311    p_sys->p_node_one = playlist_NodeCreate( p_sys->p_playlist, _("Bonjour"), 
    312                                              p_sys->p_playlist->p_root_onelevel ); 
     312                                       p_sys->p_playlist->p_root_onelevel, 0 ); 
    313313    p_sys->p_node_one->p_input->i_id = p_sys->p_node_cat->p_input->i_id; 
    314314 
  • modules/services_discovery/podcast.c

    rd3fe7f2 r496a542  
    150150 
    151151    p_sys->p_node_cat = playlist_NodeCreate( p_playlist, _("Podcast"), 
    152                                          p_playlist->p_root_category ); 
     152                                         p_playlist->p_root_category, 0 ); 
    153153    p_sys->p_node_one = playlist_NodeCreate( p_playlist, _("Podcast"), 
    154                                          p_playlist->p_root_onelevel ); 
     154                                         p_playlist->p_root_onelevel, 0 ); 
    155155    p_sys->p_node_one->p_input->i_id = p_sys->p_node_cat->p_input->i_id; 
    156156 
  • modules/services_discovery/sap.c

    rd3fe7f2 r496a542  
    803803        { 
    804804            p_child = playlist_NodeCreate( pl_Get( p_sd ), psz_value, 
    805                                            p_sys->p_node_cat ); 
     805                                           p_sys->p_node_cat, 0 ); 
    806806            p_child->i_flags &= ~PLAYLIST_SKIP_FLAG; 
    807807        } 
  • modules/services_discovery/upnp_cc.cpp

    rd3fe7f2 r496a542  
    207207    char *str = strdup( dev->getFriendlyName( ) ); 
    208208 
    209     p_item = playlist_NodeCreate( p_sys->p_playlist, str, p_sys->p_node_cat ); 
     209    p_item = playlist_NodeCreate( p_sys->p_playlist, str, p_sys->p_node_cat,0 ); 
    210210    p_item->i_flags &= ~PLAYLIST_SKIP_FLAG; 
    211211    msg_Dbg( p_sd, "device %s added", str ); 
     
    248248        char* p_name = strdup(title); /* See other comment on strdup */ 
    249249        playlist_item_t* p_node = playlist_NodeCreate( p_sys->p_playlist, 
    250                                                        p_name, p_parent ); 
     250                                                       p_name, p_parent, 0 ); 
    251251        free(p_name); 
    252252 
  • modules/services_discovery/upnp_intel.cpp

    rd3fe7f2 r496a542  
    855855 
    856856        char* title = strdup( container->getTitle() ); 
    857         playlist_item_t* node = playlist_NodeCreate( p_playlist, title, parentNode ); 
     857        playlist_item_t* node = playlist_NodeCreate( p_playlist, title, parentNode, 0 ); 
    858858        free( title ); 
    859859 
     
    917917    playlist_item_t* node = playlist_NodeCreate( pl_Get( _cookie->serviceDiscovery ), 
    918918                                                 name, 
    919                                           _cookie->serviceDiscovery->p_sys->p_node_cat ); 
     919                                          _cookie->serviceDiscovery->p_sys->p_node_cat, 0 ); 
    920920    free( name ); 
    921921    s->setPlaylistNode( node ); 
  • src/input/es_out.c

    rd3fe7f2 r496a542  
    178178    p_sys->i_sub_last = val.i_int; 
    179179 
    180     var_Get( p_input, "audio-language", &val ); 
    181     p_sys->ppsz_audio_language = LanguageSplit(val.psz_string); 
    182     if( p_sys->ppsz_audio_language ) 
    183     { 
    184         for( i = 0; p_sys->ppsz_audio_language[i]; i++ ) 
    185             msg_Dbg( p_input, "selected audio language[%d] %s", 
    186                      i, p_sys->ppsz_audio_language[i] ); 
    187     } 
    188     if( val.psz_string ) free( val.psz_string ); 
    189  
    190     var_Get( p_input, "sub-language", &val ); 
    191     p_sys->ppsz_sub_language = LanguageSplit(val.psz_string); 
    192     if( p_sys->ppsz_sub_language ) 
    193     { 
    194         for( i = 0; p_sys->ppsz_sub_language[i]; i++ ) 
    195             msg_Dbg( p_input, "selected subtitle language[%d] %s", 
    196                      i, p_sys->ppsz_sub_language[i] ); 
    197     } 
    198     if( val.psz_string ) free( val.psz_string ); 
     180    if( !p_input->b_preparsing ) 
     181    { 
     182        var_Get( p_input, "audio-language", &val ); 
     183        p_sys->ppsz_audio_language = LanguageSplit(val.psz_string); 
     184        if( p_sys->ppsz_audio_language ) 
     185        { 
     186            for( i = 0; p_sys->ppsz_audio_language[i]; i++ ) 
     187                msg_Dbg( p_input, "selected audio language[%d] %s", 
     188                         i, p_sys->ppsz_audio_language[i] ); 
     189        } 
     190        if( val.psz_string ) free( val.psz_string ); 
     191 
     192        var_Get( p_input, "sub-language", &val ); 
     193        p_sys->ppsz_sub_language = LanguageSplit(val.psz_string); 
     194        if( p_sys->ppsz_sub_language ) 
     195        { 
     196            for( i = 0; p_sys->ppsz_sub_language[i]; i++ ) 
     197                msg_Dbg( p_input, "selected subtitle language[%d] %s", 
     198                         i, p_sys->ppsz_sub_language[i] ); 
     199        } 
     200        if( val.psz_string ) free( val.psz_string ); 
     201    } 
     202    else 
     203    { 
     204        p_sys->ppsz_sub_language = NULL; 
     205        p_sys->ppsz_audio_language = NULL; 
     206    } 
    199207 
    200208    var_Get( p_input, "audio-track-id", &val ); 
  • src/input/input.c

    r7c8c88f r496a542  
    198198 
    199199    /* Create Objects variables for public Get and Set */ 
    200     input_ControlVarInit( p_input ); 
     200    if( !p_input->b_preparsing ) 
     201        input_ControlVarInit( p_input ); 
     202 
    201203    p_input->p->input.i_cr_average = var_GetInteger( p_input, "cr-average" ); 
    202204 
     
    11481150 
    11491151    /* Clean control variables */ 
    1150     input_ControlVarClean( p_input ); 
     1152    if( !p_input->b_preparsing ) 
     1153        input_ControlVarClean( p_input ); 
    11511154 
    11521155    /* Clean up master */ 
  • src/input/var.c

    rd3fe7f2 r496a542  
    387387 
    388388    /* Create Object Variables for private use only */ 
    389     var_Create( p_input, "video", VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); 
    390     var_Create( p_input, "audio", VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); 
    391     var_Create( p_input, "spu", VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); 
    392  
    393     var_Create( p_input, "audio-track", VLC_VAR_INTEGER|VLC_VAR_DOINHERIT ); 
    394     var_Create( p_input, "sub-track", VLC_VAR_INTEGER|VLC_VAR_DOINHERIT ); 
    395  
    396     var_Create( p_input, "audio-language", VLC_VAR_STRING|VLC_VAR_DOINHERIT ); 
    397     var_Create( p_input, "sub-language", VLC_VAR_STRING|VLC_VAR_DOINHERIT ); 
    398  
    399     var_Create( p_input, "audio-track-id", VLC_VAR_INTEGER|VLC_VAR_DOINHERIT ); 
    400     var_Create( p_input, "sub-track-id", VLC_VAR_INTEGER|VLC_VAR_DOINHERIT ); 
    401  
    402     var_Create( p_input, "sub-file", VLC_VAR_FILE | VLC_VAR_DOINHERIT ); 
    403     var_Create( p_input, "sub-autodetect-file", VLC_VAR_BOOL | 
    404                 VLC_VAR_DOINHERIT ); 
    405     var_Create( p_input, "sub-autodetect-path", VLC_VAR_STRING | 
    406                 VLC_VAR_DOINHERIT ); 
    407     var_Create( p_input, "sub-autodetect-fuzzy", VLC_VAR_INTEGER | 
    408                 VLC_VAR_DOINHERIT ); 
    409  
    410     var_Create( p_input, "sout", VLC_VAR_STRING | VLC_VAR_DOINHERIT ); 
    411     var_Create( p_input, "sout-all",   VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); 
    412     var_Create( p_input, "sout-audio", VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); 
    413     var_Create( p_input, "sout-video", VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); 
    414     var_Create( p_input, "sout-spu", VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); 
    415     var_Create( p_input, "sout-keep",  VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); 
    416  
    417     var_Create( p_input, "input-repeat", VLC_VAR_INTEGER|VLC_VAR_DOINHERIT ); 
    418  
    419     var_Create( p_input, "start-time", VLC_VAR_INTEGER|VLC_VAR_DOINHERIT ); 
    420     var_Create( p_input, "stop-time", VLC_VAR_INTEGER|VLC_VAR_DOINHERIT ); 
    421  
    422     var_Create( p_input, "minimize-threads", VLC_VAR_BOOL|VLC_VAR_DOINHERIT ); 
     389 
     390    if( !p_input->b_preparsing ) 
     391    { 
     392        var_Create( p_input, "video", VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); 
     393        var_Create( p_input, "audio", VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); 
     394        var_Create( p_input, "spu", VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); 
     395 
     396        var_Create( p_input, "audio-track", VLC_VAR_INTEGER|VLC_VAR_DOINHERIT ); 
     397        var_Create( p_input, "sub-track", VLC_VAR_INTEGER|VLC_VAR_DOINHERIT ); 
     398 
     399        var_Create( p_input, "audio-language", 
     400                    VLC_VAR_STRING|VLC_VAR_DOINHERIT ); 
     401        var_Create( p_input, "sub-language", 
     402                    VLC_VAR_STRING|VLC_VAR_DOINHERIT ); 
     403 
     404        var_Create( p_input, "audio-track-id", 
     405                    VLC_VAR_INTEGER|VLC_VAR_DOINHERIT ); 
     406        var_Create( p_input, "sub-track-id", 
     407                    VLC_VAR_INTEGER|VLC_VAR_DOINHERIT ); 
     408 
     409        var_Create( p_input, "sub-file", VLC_VAR_FILE | VLC_VAR_DOINHERIT ); 
     410        var_Create( p_input, "sub-autodetect-file", VLC_VAR_BOOL | 
     411                    VLC_VAR_DOINHERIT ); 
     412        var_Create( p_input, "sub-autodetect-path", VLC_VAR_STRING | 
     413                    VLC_VAR_DOINHERIT ); 
     414        var_Create( p_input, "sub-autodetect-fuzzy", VLC_VAR_INTEGER | 
     415                    VLC_VAR_DOINHERIT ); 
     416 
     417        var_Create( p_input, "sout", VLC_VAR_STRING | VLC_VAR_DOINHERIT ); 
     418        var_Create( p_input, "sout-all",   VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); 
     419        var_Create( p_input, "sout-audio", VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); 
     420        var_Create( p_input, "sout-video", VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); 
     421        var_Create( p_input, "sout-spu", VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); 
     422        var_Create( p_input, "sout-keep",  VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); 
     423 
     424        var_Create( p_input, "input-repeat", 
     425                    VLC_VAR_INTEGER|VLC_VAR_DOINHERIT ); 
     426        var_Create( p_input, "start-time", VLC_VAR_INTEGER|VLC_VAR_DOINHERIT ); 
     427        var_Create( p_input, "stop-time", VLC_VAR_INTEGER|VLC_VAR_DOINHERIT ); 
     428 
     429        var_Create( p_input, "input-slave", 
     430                    VLC_VAR_STRING | VLC_VAR_DOINHERIT ); 
     431 
     432        var_Create( p_input, "minimize-threads", 
     433                    VLC_VAR_BOOL|VLC_VAR_DOINHERIT ); 
     434 
     435        var_Create( p_input, "audio-desync", 
     436                    VLC_VAR_INTEGER | VLC_VAR_DOINHERIT ); 
     437        var_Create( p_input, "cr-average", 
     438                    VLC_VAR_INTEGER | VLC_VAR_DOINHERIT ); 
     439        var_Create( p_input, "clock-synchro", 
     440                    VLC_VAR_INTEGER | VLC_VAR_DOINHERIT); 
     441    } 
    423442 
    424443    var_Create( p_input, "demuxed-id3", VLC_VAR_BOOL ); /* FIXME beurk */ 
     
    426445    var_Change( p_input, "demuxed-id3", VLC_VAR_SETVALUE, &val, NULL ); 
    427446 
    428     var_Create( p_input, "audio-desync", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT ); 
    429  
    430     var_Create( p_input, "cr-average", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT ); 
    431     var_Create( p_input, "clock-synchro", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT); 
    432  
    433447    var_Create( p_input, "seekable", VLC_VAR_BOOL ); 
    434448    val.b_bool = VLC_TRUE; /* Fixed later*/ 
    435449    var_Change( p_input, "seekable", VLC_VAR_SETVALUE, &val, NULL ); 
    436  
    437     var_Create( p_input, "input-slave", VLC_VAR_STRING | VLC_VAR_DOINHERIT ); 
    438450 
    439451    /* */ 
  • src/libvlc-common.c

    r6c464c3 r496a542  
    580580        DBusConnection  *p_conn; 
    581581        DBusError       dbus_error; 
    582         int             i_dbus_service; 
    583582 
    584583        dbus_threads_init_default(); 
  • src/misc/objects.c

    r696f7c1 r496a542  
    853853    int i_index; 
    854854 
     855    vlc_mutex_lock( &structure_lock ); 
    855856    for( i_index = 0; i_index < p_list->i_count; i_index++ ) 
    856857    { 
    857         vlc_mutex_lock( &structure_lock ); 
    858  
    859858        p_list->p_values[i_index].p_object->i_refcount--; 
    860  
    861         vlc_mutex_unlock( &structure_lock ); 
    862     } 
     859    } 
     860    vlc_mutex_unlock( &structure_lock ); 
    863861 
    864862    free( p_list->p_values ); 
  • src/playlist/engine.c

    rd3fe7f2 r496a542  
    9595                        var_CreateGetBool( p_playlist, "auto-preparse") ; 
    9696 
    97     p_playlist->p_root_category = playlist_NodeCreate( p_playlist, NULL, NULL); 
    98     p_playlist->p_root_onelevel = playlist_NodeCreate( p_playlist, NULL, NULL); 
     97    p_playlist->p_root_category = playlist_NodeCreate( p_playlist, NULL, NULL, 
     98                                                       0 ); 
     99    p_playlist->p_root_onelevel = playlist_NodeCreate( p_playlist, NULL, NULL, 
     100                                                       0 ); 
    99101 
    100102    if( !p_playlist->p_root_category || !p_playlist->p_root_onelevel ) 
     
    103105    /* Create playlist and media library */ 
    104106    p_playlist->p_local_category = playlist_NodeCreate( p_playlist, 
    105                                  _( "Playlist" ),p_playlist->p_root_category ); 
     107                              _( "Playlist" ),p_playlist->p_root_category, 0 ); 
    106108    p_playlist->p_local_onelevel =  playlist_NodeCreate( p_playlist, 
    107                                 _( "Playlist" ), p_playlist->p_root_onelevel ); 
     109                              _( "Playlist" ), p_playlist->p_root_onelevel, 0 ); 
    108110    p_playlist->p_local_category->i_flags |= PLAYLIST_RO_FLAG; 
    109111    p_playlist->p_local_onelevel->i_flags |= PLAYLIST_RO_FLAG; 
     
    121123    { 
    122124        p_playlist->p_ml_category =   playlist_NodeCreate( p_playlist, 
    123                            _( "Media Library" ), p_playlist->p_root_category ); 
     125                         _( "Media Library" ), p_playlist->p_root_category, 0 ); 
    124126        p_playlist->p_ml_onelevel =  playlist_NodeCreate( p_playlist, 
    125                            _( "Media Library" ), p_playlist->p_root_onelevel ); 
     127                         _( "Media Library" ), p_playlist->p_root_onelevel, 0 ); 
    126128 
    127129        if(!p_playlist->p_ml_category || !p_playlist->p_ml_onelevel) 
  • src/playlist/item.c

    rd3fe7f2 r496a542  
    2727#include "playlist_internal.h" 
    2828 
    29 void AddItem( playlist_t *p_playlist, playlist_item_t *p_item, 
    30               playlist_item_t *p_node, int i_pos ); 
    31 void GoAndPreparse( playlist_t *p_playlist, int i_mode, 
    32                     playlist_item_t *, playlist_item_t * ); 
    33 void ChangeToNode( playlist_t *p_playlist, playlist_item_t *p_item ); 
    34 int DeleteInner( playlist_t * p_playlist, playlist_item_t *p_item, 
    35                           vlc_bool_t b_stop ); 
     29static void AddItem( playlist_t *p_playlist, playlist_item_t *p_item, 
     30                     playlist_item_t *p_node, int i_mode, int i_pos ); 
     31static void GoAndPreparse( playlist_t *p_playlist, int i_mode, 
     32                           playlist_item_t *, playlist_item_t * ); 
     33static void ChangeToNode( playlist_t *p_playlist, playlist_item_t *p_item ); 
     34static int DeleteInner( playlist_t * p_playlist, playlist_item_t *p_item, 
     35                        vlc_bool_t b_stop ); 
    3636 
    3737/***************************************************************************** 
     
    207207    AddItem( p_playlist, p_item_one, 
    208208             b_playlist ? p_playlist->p_local_onelevel : 
    209                           p_playlist->p_ml_onelevel , i_pos ); 
     209                          p_playlist->p_ml_onelevel , i_mode, i_pos ); 
    210210 
    211211    /* Add to CATEGORY */ 
     
    214214    AddItem( p_playlist, p_item_cat, 
    215215             b_playlist ? p_playlist->p_local_category : 
    216                           p_playlist->p_ml_category , i_pos ); 
     216                          p_playlist->p_ml_category , i_mode, i_pos ); 
    217217 
    218218    GoAndPreparse( p_playlist, i_mode, p_item_cat, p_item_one ); 
     
    238238    p_item_cat = playlist_ItemNewFromInput( p_playlist, p_input ); 
    239239    if( p_item_cat == NULL ) return VLC_EGENERIC; 
    240     AddItem( p_playlist, p_item_cat, p_direct_parent, i_pos ); 
     240    AddItem( p_playlist, p_item_cat, p_direct_parent, i_mode, i_pos ); 
    241241 
    242242    /* Add to onelevel */ 
     
    256256        { 
    257257            AddItem( p_playlist, p_item_one, 
    258                      p_playlist->p_root_onelevel->pp_children[i_top], i_pos ); 
     258                     p_playlist->p_root_onelevel->pp_children[i_top], 
     259                     i_mode, i_pos ); 
    259260            break; 
    260261        } 
     
    283284    p_item = playlist_ItemNewFromInput( p_playlist, p_input ); 
    284285    if( p_item == NULL ) return NULL; 
    285     AddItem( p_playlist, p_item, p_parent, i_pos ); 
     286    AddItem( p_playlist, p_item, p_parent, i_mode, i_pos ); 
    286287 
    287288    vlc_mutex_unlock( &p_playlist->object_lock ); 
     
    476477/** Send a notification that an item has been added to a node */ 
    477478void playlist_SendAddNotify( playlist_t *p_playlist, int i_item_id, 
    478                              int i_node_id
     479                             int i_node_id, vlc_bool_t b_signal
    479480{ 
    480481    vlc_value_t val; 
     
    484485    val.p_address = p_add; 
    485486    p_playlist->b_reset_currently_playing = VLC_TRUE; 
    486     vlc_cond_signal( &p_playlist->object_wait ); 
     487    if( b_signal ) 
     488        vlc_cond_signal( &p_playlist->object_wait ); 
    487489    var_Set( p_playlist, "item-append", val ); 
    488490    free( p_add ); 
     
    510512 
    511513/* Enqueue an item for preparsing, and play it, if needed */ 
    512 void GoAndPreparse( playlist_t *p_playlist, int i_mode, 
    513                     playlist_item_t *p_item_cat, playlist_item_t *p_item_one ) 
     514static void GoAndPreparse( playlist_t *p_playlist, int i_mode, 
     515                           playlist_item_t *p_item_cat, 
     516                           playlist_item_t *p_item_one ) 
    514517{ 
    515518    if( (i_mode & PLAYLIST_GO ) ) 
     
    557560 
    558561/* Add the playlist item to the requested node and fire a notification */ 
    559 void AddItem( playlist_t *p_playlist, playlist_item_t *p_item, 
    560               playlist_item_t *p_node, int i_pos ) 
     562static void AddItem( playlist_t *p_playlist, playlist_item_t *p_item, 
     563                     playlist_item_t *p_node, int i_mode, int i_pos ) 
    561564{ 
    562565    ARRAY_APPEND(p_playlist->items, p_item); 
     
    570573 
    571574    if( !p_playlist->b_doing_ml ) 
    572         playlist_SendAddNotify( p_playlist, p_item->i_id, p_node->i_id ); 
     575        playlist_SendAddNotify( p_playlist, p_item->i_id, p_node->i_id, 
     576                                 !( i_mode & PLAYLIST_NO_REBUILD ) ); 
    573577} 
    574578 
    575579/* Actually convert an item to a node */ 
    576 void ChangeToNode( playlist_t *p_playlist, playlist_item_t *p_item ) 
     580static void ChangeToNode( playlist_t *p_playlist, playlist_item_t *p_item ) 
    577581{ 
    578582    int i; 
     
    587591 
    588592/* Do the actual removal */ 
    589 int DeleteInner( playlist_t * p_playlist, playlist_item_t *p_item, 
    590                 vlc_bool_t b_stop ) 
     593static int DeleteInner( playlist_t * p_playlist, playlist_item_t *p_item, 
     594                        vlc_bool_t b_stop ) 
    591595{ 
    592596    int i; 
  • src/playlist/playlist_internal.h

    rd3fe7f2 r496a542  
    9292 **********************************************************************/ 
    9393 
    94 void playlist_SendAddNotify( playlist_t *p_playlist, int i_item_id, int i_node_id ); 
     94void playlist_SendAddNotify( playlist_t *p_playlist, int i_item_id, 
     95                             int i_node_id, vlc_bool_t b_signal ); 
    9596 
    9697/* Tree walking */ 
  • src/playlist/tree.c

    rd3fe7f2 r496a542  
    4747 * \paam psz_name the name of the node 
    4848 * \param p_parent the parent node to attach to or NULL if no attach 
     49 * \param p_flags miscellaneous flags 
    4950 * \return the new node 
    5051 */ 
    51 playlist_item_t * playlist_NodeCreate( playlist_t *p_playlist, const char *psz_name, 
    52                                        playlist_item_t *p_parent ) 
     52playlist_item_t * playlist_NodeCreate( playlist_t *p_playlist, 
     53                                       const char *psz_name, 
     54                                       playlist_item_t *p_parent, int i_flags ) 
    5355{ 
    5456    input_item_t *p_input; 
     
    6971        playlist_NodeAppend( p_playlist, p_item, p_parent ); 
    7072    playlist_SendAddNotify( p_playlist, p_item->i_id, 
    71                             p_parent ? p_parent->i_id : -1 ); 
     73                            p_parent ? p_parent->i_id : -1, 
     74                            !( i_flags & PLAYLIST_NO_REBUILD )); 
    7275    return p_item; 
    7376} 
     
    290293{ 
    291294    *pp_node_cat = playlist_NodeCreate( p_playlist, psz_name, 
    292                                         p_playlist->p_root_category ); 
     295                                        p_playlist->p_root_category, 0 ); 
    293296    *pp_node_one = playlist_NodeCreate( p_playlist, psz_name, 
    294                                         p_playlist->p_root_onelevel ); 
     297                                        p_playlist->p_root_onelevel, 0 ); 
    295298    (*pp_node_one)->p_input->i_id = (*pp_node_cat)->p_input->i_id; 
    296299    if( b_for_sd )