X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fplaylist%2Fcontrol.c;h=1f10fb71d7dee518cb2638bd95c1d862c4decc81;hb=b34c73d1aa7bc237e5b6bfcf3961493575e28691;hp=a3f87c61eafff68e70f7c2dee5b51de6d0f403c7;hpb=e966180ec9241fa44ba95cb0d911c68319992683;p=vlc diff --git a/src/playlist/control.c b/src/playlist/control.c index a3f87c61ea..1f10fb71d7 100644 --- a/src/playlist/control.c +++ b/src/playlist/control.c @@ -66,6 +66,21 @@ void __pl_Release( vlc_object_t *p_this ) vlc_object_release( pl ); } +void playlist_Lock( playlist_t *pl ) +{ + vlc_mutex_lock( &pl_priv(pl)->lock ); +} + +void playlist_Unlock( playlist_t *pl ) +{ + vlc_mutex_unlock( &pl_priv(pl)->lock ); +} + +void playlist_AssertLocked( playlist_t *pl ) +{ + vlc_assert_locked( &pl_priv(pl)->lock ); +} + int playlist_Control( playlist_t * p_playlist, int i_query, bool b_locked, ... ) { @@ -83,14 +98,13 @@ int playlist_Control( playlist_t * p_playlist, int i_query, static int PlaylistVAControl( playlist_t * p_playlist, int i_query, va_list args ) { playlist_item_t *p_item, *p_node; - vlc_value_t val; PL_ASSERT_LOCKED; if( !vlc_object_alive( p_playlist ) ) return VLC_EGENERIC; - if( playlist_IsEmpty( p_playlist ) ) + if( playlist_IsEmpty( p_playlist ) && i_query != PLAYLIST_STOP ) return VLC_EGENERIC; switch( i_query ) @@ -123,8 +137,7 @@ static int PlaylistVAControl( playlist_t * p_playlist, int i_query, va_list args case PLAYLIST_PLAY: if( pl_priv(p_playlist)->p_input ) { - val.i_int = PLAYING_S; - var_Set( pl_priv(p_playlist)->p_input, "state", val ); + var_SetInteger( pl_priv(p_playlist)->p_input, "state", PLAYING_S ); break; } else @@ -138,27 +151,21 @@ static int PlaylistVAControl( playlist_t * p_playlist, int i_query, va_list args break; case PLAYLIST_PAUSE: - val.i_int = 0; - if( pl_priv(p_playlist)->p_input ) - var_Get( pl_priv(p_playlist)->p_input, "state", &val ); + if( !pl_priv(p_playlist)->p_input ) + { /* FIXME: is this really useful without input? */ + pl_priv(p_playlist)->status.i_status = PLAYLIST_PAUSED; + break; + } - if( val.i_int == PAUSE_S ) + if( var_GetInteger( pl_priv(p_playlist)->p_input, "state" ) == PAUSE_S ) { pl_priv(p_playlist)->status.i_status = PLAYLIST_RUNNING; - if( pl_priv(p_playlist)->p_input ) - { - val.i_int = PLAYING_S; - var_Set( pl_priv(p_playlist)->p_input, "state", val ); - } + var_SetInteger( pl_priv(p_playlist)->p_input, "state", PLAYING_S ); } else { pl_priv(p_playlist)->status.i_status = PLAYLIST_PAUSED; - if( pl_priv(p_playlist)->p_input ) - { - val.i_int = PAUSE_S; - var_Set( pl_priv(p_playlist)->p_input, "state", val ); - } + var_SetInteger( pl_priv(p_playlist)->p_input, "state", PAUSE_S ); } break;