X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fcontrol%2Frc.c;h=c78fd9c180aa795f9c1811b857293ae1ac897bea;hb=15aaa8cbccef8a95dfc7b3bff937c70b4c459c34;hp=b16130b22bd2c7cf976ff8ae6d34c09bf74fd2b3;hpb=26c146e8ac44d1e23d57c1e950578768c85e4465;p=vlc diff --git a/modules/control/rc.c b/modules/control/rc.c index b16130b22b..c78fd9c180 100644 --- a/modules/control/rc.c +++ b/modules/control/rc.c @@ -29,7 +29,7 @@ # include "config.h" #endif -#include +#include #include #include /* ENOMEM */ @@ -67,7 +67,19 @@ #define MAX_LINE_LENGTH 256 #define STATUS_CHANGE "status change: " -static const char *ppsz_input_state[] = { N_("Initializing"), N_("Opening"), N_("Buffer"), N_("Play"), N_("Pause"), N_("Stop"), N_("Error") }; +/* input_state_e from */ +static const char *ppsz_input_state[] = { + N_("Initializing"), + N_("Opening"), + N_("Buffer"), + N_("Play"), + N_("Pause"), + N_("Stop"), + N_("Forward"), + N_("Backward"), + N_("End"), + N_("Error"), +}; /***************************************************************************** * Local prototypes @@ -499,14 +511,13 @@ static void Run( intf_thread_t *p_intf ) FIND_ANYWHERE ); if( p_input ) { - p_playlist = vlc_object_find( p_input, VLC_OBJECT_PLAYLIST, - FIND_PARENT ); + p_playlist = pl_Yield( p_input ); } } /* New input has been registered */ if( p_input ) { - if( !p_input->b_dead || !p_input->b_die ) + if( !p_input->b_dead || vlc_object_alive (p_input) ) { char *psz_uri = input_item_GetURI( input_GetItem( p_input ) ); @@ -536,17 +547,17 @@ static void Run( intf_thread_t *p_intf ) if( p_playlist ) { - vlc_mutex_lock( &p_playlist->object_lock ); + vlc_object_lock( p_playlist ); p_intf->p_sys->i_last_state = (int) PLAYLIST_STOPPED; msg_rc( STATUS_CHANGE "( stop state: 0 )" ); - vlc_mutex_unlock( &p_playlist->object_lock ); + vlc_object_unlock( p_playlist ); } } - if( (p_input != NULL) && !p_input->b_dead && !p_input->b_die && + if( (p_input != NULL) && !p_input->b_dead && vlc_object_alive (p_input) && (p_playlist != NULL) ) { - vlc_mutex_lock( &p_playlist->object_lock ); + vlc_object_lock( p_playlist ); if( (p_intf->p_sys->i_last_state != p_playlist->status.i_status) && (p_playlist->status.i_status == PLAYLIST_STOPPED) ) { @@ -567,7 +578,7 @@ static void Run( intf_thread_t *p_intf ) p_intf->p_sys->i_last_state = p_playlist->status.i_status; msg_rc( STATUS_CHANGE "( pause state: 4 )" ); } - vlc_mutex_unlock( &p_playlist->object_lock ); + vlc_object_unlock( p_playlist ); } if( p_input && b_showpos ) @@ -984,29 +995,26 @@ static int StateChanged( vlc_object_t *p_this, char const *psz_cmd, p_input = vlc_object_find( p_intf, VLC_OBJECT_INPUT, FIND_ANYWHERE ); if( p_input ) { - p_playlist = vlc_object_find( p_input, VLC_OBJECT_PLAYLIST, FIND_PARENT ); - if( p_playlist ) + p_playlist = pl_Yield( p_input ); + char cmd[6]; + switch( p_playlist->status.i_status ) { - char cmd[6]; - switch( p_playlist->status.i_status ) - { - case PLAYLIST_STOPPED: - strcpy( cmd, "stop" ); - break; - case PLAYLIST_RUNNING: - strcpy( cmd, "play" ); - break; - case PLAYLIST_PAUSED: - strcpy( cmd, "pause" ); - break; - default: - cmd[0] = '\0'; - } /* var_GetInteger( p_input, "state" ) */ - msg_rc( STATUS_CHANGE "( %s state: %d ): %s", - &cmd[0], newval.i_int, - ppsz_input_state[ newval.i_int ] ); - vlc_object_release( p_playlist ); - } + case PLAYLIST_STOPPED: + strcpy( cmd, "stop" ); + break; + case PLAYLIST_RUNNING: + strcpy( cmd, "play" ); + break; + case PLAYLIST_PAUSED: + strcpy( cmd, "pause" ); + break; + default: + cmd[0] = '\0'; + } /* var_GetInteger( p_input, "state" ) */ + msg_rc( STATUS_CHANGE "( %s state: %d ): %s", + cmd, newval.i_int, + ppsz_input_state[ newval.i_int ] ); + vlc_object_release( p_playlist ); vlc_object_release( p_input ); } vlc_mutex_unlock( &p_intf->p_sys->status_lock ); @@ -1521,12 +1529,10 @@ static int Quit( vlc_object_t *p_this, char const *psz_cmd, VLC_UNUSED(oldval); VLC_UNUSED(newval); playlist_t *p_playlist; - p_playlist = vlc_object_find( p_this, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); - if( p_playlist ) - { - playlist_Stop( p_playlist ); - vlc_object_release( p_playlist ); - } + p_playlist = pl_Yield( p_this ); + playlist_Stop( p_playlist ); + vlc_object_release( p_playlist ); + vlc_object_kill( p_this->p_libvlc ); return VLC_SUCCESS; } @@ -1900,19 +1906,17 @@ static int Menu( vlc_object_t *p_this, char const *psz_cmd, VLC_UNUSED(psz_cmd); VLC_UNUSED(oldval); VLC_UNUSED(p_data); intf_thread_t *p_intf = (intf_thread_t*)p_this; playlist_t *p_playlist = NULL; + int i_error = VLC_SUCCESS; vlc_value_t val; - int i_error = VLC_EGENERIC; if ( !*newval.psz_string ) { msg_rc( _("Please provide one of the following parameters:") ); msg_rc( "[on|off|up|down|left|right|select]" ); - return i_error; + return VLC_EGENERIC; } - p_playlist = vlc_object_find( p_this, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); - if( !p_playlist ) - return VLC_ENOOBJ; + p_playlist = pl_Yield( p_this ); if( p_playlist->p_input ) { @@ -1928,9 +1932,12 @@ static int Menu( vlc_object_t *p_this, char const *psz_cmd, vlc_object_release( p_playlist ); val.psz_string = strdup( newval.psz_string ); + if( !val.psz_string ) + return VLC_ENOMEM; if( !strcmp( val.psz_string, "on" ) || !strcmp( val.psz_string, "show" )) osd_MenuShow( p_this ); - else if( !strcmp( val.psz_string, "off" ) || !strcmp( val.psz_string, "hide" ) ) + else if( !strcmp( val.psz_string, "off" ) + || !strcmp( val.psz_string, "hide" ) ) osd_MenuHide( p_this ); else if( !strcmp( val.psz_string, "up" ) ) osd_MenuUp( p_this ); @@ -1946,11 +1953,9 @@ static int Menu( vlc_object_t *p_this, char const *psz_cmd, { msg_rc( _("Please provide one of the following parameters:") ); msg_rc( "[on|off|up|down|left|right|select]" ); - free( val.psz_string ); - return i_error; + i_error = VLC_EGENERIC; } - i_error = VLC_SUCCESS; free( val.psz_string ); return i_error; } @@ -2139,7 +2144,7 @@ bool ReadCommand( intf_thread_t *p_intf, char *p_buffer, int *pi_size ) { /* Standard input closed: exit */ vlc_value_t empty; - Quit( p_intf, NULL, empty, empty, NULL ); + Quit( VLC_OBJECT(p_intf), NULL, empty, empty, NULL ); } p_buffer[ *pi_size ] = 0;