X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fcontrol%2Frc.c;h=bb1daae18d5d42b53f2f74d74ba94c235aa5e9a5;hb=ee7537e77ae5c190881227db774a1eee6c1c7aa8;hp=b3fead07f72412f0e961708e2a06a0a51e98043f;hpb=27d483e9ef7a451397d7857251c8d67097661f1d;p=vlc diff --git a/modules/control/rc.c b/modules/control/rc.c index b3fead07f7..bb1daae18d 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 @@ -180,10 +192,10 @@ static void __msg_rc( intf_thread_t *p_intf, const char *psz_fmt, ... ) #endif vlc_module_begin(); - set_shortname( _("RC")); + set_shortname( N_("RC")); set_category( CAT_INTERFACE ); set_subcategory( SUBCAT_INTERFACE_MAIN ); - set_description( _("Remote control interface") ); + set_description( N_("Remote control interface") ); add_bool( "rc-show-pos", 0, NULL, POS_TEXT, POS_LONGTEXT, true ); #ifdef WIN32 @@ -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 ); @@ -1409,7 +1417,7 @@ static int Playlist( vlc_object_t *p_this, char const *psz_cmd, p_item = p_parent = p_playlist->items.p_elems[i_pos*2-1]; while( p_parent->p_parent ) p_parent = p_parent->p_parent; - playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, true, + playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, pl_Unlocked, p_parent, p_item ); } else @@ -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; } @@ -1537,13 +1543,13 @@ static int Intf( vlc_object_t *p_this, char const *psz_cmd, VLC_UNUSED(psz_cmd); VLC_UNUSED(oldval); VLC_UNUSED(p_data); intf_thread_t *p_newintf = NULL; - p_newintf = intf_Create( p_this->p_libvlc, newval.psz_string, 0, NULL ); + p_newintf = intf_Create( p_this->p_libvlc, newval.psz_string ); if( p_newintf ) { if( intf_RunThread( p_newintf ) ) { vlc_object_detach( p_newintf ); - intf_Destroy( p_newintf ); + vlc_object_release( p_newintf ); } } @@ -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;