*
* Function will lock the media_player.
*/
-static void set_state( libvlc_media_player_t *p_mi, libvlc_state_t state )
-{
- lock(p_mi);
+static void set_state( libvlc_media_player_t *p_mi, libvlc_state_t state,
+ bool b_locked )
+{
+ if(!b_locked)
+ lock(p_mi);
p_mi->state = state;
libvlc_media_t *media = p_mi->p_md;
if (media)
libvlc_media_retain(media);
- unlock(p_mi);
+ if(!b_locked)
+ unlock(p_mi);
if (media) {
return VLC_SUCCESS;
}
- set_state( p_mi, libvlc_state );
+ set_state( p_mi, libvlc_state, false );
libvlc_event_send( p_mi->p_event_manager, &event );
}
else if( newval.i_int == INPUT_EVENT_ABORT )
libvlc_state_t libvlc_state = libvlc_Stopped;
event.type = libvlc_MediaPlayerStopped;
- set_state( p_mi, libvlc_state );
+ set_state( p_mi, libvlc_state, false );
libvlc_event_send( p_mi->p_event_manager, &event );
}
else if( newval.i_int == INPUT_EVENT_POSITION )
p_mi->p_input_thread &&
!p_mi->p_input_thread->b_eof &&
!p_mi->p_input_thread->b_error );
- unlock(p_mi);
-
- set_state( p_mi, libvlc_NothingSpecial );
- lock(p_mi);
+ set_state( p_mi, libvlc_NothingSpecial, true );
libvlc_media_release( p_mi->p_md );
* state. */
if( state != libvlc_Stopped )
{
- set_state( p_mi, libvlc_Stopped );
+ set_state( p_mi, libvlc_Stopped, false );
/* Construct and send the event */
libvlc_event_t event;