diff --git a/src/control/media_instance.c b/src/control/media_instance.c index ce64024f8e3ba00e5c7721add16787a4dd60f80f..366a4fed4fe5664f97bca595c3ac707f2141014e 100644 --- a/src/control/media_instance.c +++ b/src/control/media_instance.c @@ -546,10 +546,18 @@ void libvlc_media_instance_pause( libvlc_media_instance_t *p_mi, if( !p_input_thread ) return; - if( var_GetInteger( p_input_thread, "state" ) == PAUSE_S ) - input_Control( p_input_thread, INPUT_SET_STATE, PLAYING_S ); + int state = var_GetInteger( p_input_thread, "state" ); + + if( state == PLAYING_S ) + { + if( libvlc_media_instance_can_pause( p_mi, p_e ) ) + input_Control( p_input_thread, INPUT_SET_STATE, PAUSE_S ); + else + libvlc_media_instance_stop( p_mi, p_e ); + } else - input_Control( p_input_thread, INPUT_SET_STATE, PAUSE_S ); + input_Control( p_input_thread, INPUT_SET_STATE, PLAYING_S ); + vlc_object_release( p_input_thread ); }