📄 rc.c
字号:
vlc_mutex_unlock( &p_intf->p_sys->status_lock ); return VLC_SUCCESS;}/******************************************************************** * Command routines ********************************************************************/static int Input( vlc_object_t *p_this, char const *psz_cmd, vlc_value_t oldval, vlc_value_t newval, void *p_data ){ intf_thread_t *p_intf = (intf_thread_t*)p_this; input_thread_t *p_input; vlc_value_t val; p_input = vlc_object_find( p_this, VLC_OBJECT_INPUT, FIND_ANYWHERE ); if( !p_input ) return VLC_ENOOBJ; var_Get( p_input, "state", &val ); if( ( ( val.i_int == PAUSE_S ) || ( val.i_int == PLAYLIST_PAUSED ) ) && ( strcmp( psz_cmd, "pause" ) != 0 ) ) { msg_rc( _("Press menu select or pause to continue.") ); vlc_object_release( p_input ); return VLC_EGENERIC; } /* Parse commands that only require an input */ if( !strcmp( psz_cmd, "pause" ) ) { val.i_int = config_GetInt( p_intf, "key-play-pause" ); var_Set( p_intf->p_vlc, "key-pressed", val ); vlc_object_release( p_input ); return VLC_SUCCESS; } else if( !strcmp( psz_cmd, "seek" ) ) { if( strlen( newval.psz_string ) > 0 && newval.psz_string[strlen( newval.psz_string ) - 1] == '%' ) { val.f_float = (float)atoi( newval.psz_string ) / 100.0; var_Set( p_input, "position", val ); } else { val.i_time = ((int64_t)atoi( newval.psz_string )) * 1000000; var_Set( p_input, "time", val ); } vlc_object_release( p_input ); return VLC_SUCCESS; } else if ( !strcmp( psz_cmd, "fastforward" ) ) { val.i_int = config_GetInt( p_intf, "key-jump+extrashort" ); var_Set( p_intf->p_vlc, "key-pressed", val ); vlc_object_release( p_input ); return VLC_SUCCESS; } else if ( !strcmp( psz_cmd, "rewind" ) ) { val.i_int = config_GetInt( p_intf, "key-jump-extrashort" ); var_Set( p_intf->p_vlc, "key-pressed", val ); vlc_object_release( p_input ); return VLC_SUCCESS; } else if ( !strcmp( psz_cmd, "faster" ) ) { val.b_bool = VLC_TRUE; var_Set( p_input, "rate-faster", val ); vlc_object_release( p_input ); return VLC_SUCCESS; } else if ( !strcmp( psz_cmd, "slower" ) ) { val.b_bool = VLC_TRUE; var_Set( p_input, "rate-slower", val ); vlc_object_release( p_input ); return VLC_SUCCESS; } else if ( !strcmp( psz_cmd, "normal" ) ) { val.i_int = INPUT_RATE_DEFAULT; var_Set( p_input, "rate", val ); vlc_object_release( p_input ); return VLC_SUCCESS; } else if( !strcmp( psz_cmd, "chapter" ) || !strcmp( psz_cmd, "chapter_n" ) || !strcmp( psz_cmd, "chapter_p" ) ) { if( !strcmp( psz_cmd, "chapter" ) ) { if ( *newval.psz_string ) { /* Set. */ val.i_int = atoi( newval.psz_string ); var_Set( p_input, "chapter", val ); } else { vlc_value_t val_list; /* Get. */ var_Get( p_input, "chapter", &val ); var_Change( p_input, "chapter", VLC_VAR_GETCHOICES, &val_list, NULL ); msg_rc( "Currently playing chapter %d/%d.", val.i_int, val_list.p_list->i_count ); var_Change( p_this, "chapter", VLC_VAR_FREELIST, &val_list, NULL ); } } else if( !strcmp( psz_cmd, "chapter_n" ) ) { val.b_bool = VLC_TRUE; var_Set( p_input, "next-chapter", val ); } else if( !strcmp( psz_cmd, "chapter_p" ) ) { val.b_bool = VLC_TRUE; var_Set( p_input, "prev-chapter", val ); } vlc_object_release( p_input ); return VLC_SUCCESS; } else if( !strcmp( psz_cmd, "title" ) || !strcmp( psz_cmd, "title_n" ) || !strcmp( psz_cmd, "title_p" ) ) { if( !strcmp( psz_cmd, "title" ) ) { if ( *newval.psz_string ) { /* Set. */ val.i_int = atoi( newval.psz_string ); var_Set( p_input, "title", val ); } else { vlc_value_t val_list; /* Get. */ var_Get( p_input, "title", &val ); var_Change( p_input, "title", VLC_VAR_GETCHOICES, &val_list, NULL ); msg_rc( "Currently playing title %d/%d.", val.i_int, val_list.p_list->i_count ); var_Change( p_this, "title", VLC_VAR_FREELIST, &val_list, NULL ); } } else if( !strcmp( psz_cmd, "title_n" ) ) { val.b_bool = VLC_TRUE; var_Set( p_input, "next-title", val ); } else if( !strcmp( psz_cmd, "title_p" ) ) { val.b_bool = VLC_TRUE; var_Set( p_input, "prev-title", val ); } vlc_object_release( p_input ); return VLC_SUCCESS; } else if( !strcmp( psz_cmd, "atrack" ) || !strcmp( psz_cmd, "vtrack" ) || !strcmp( psz_cmd, "strack" ) ) { char *psz_variable; vlc_value_t val_name; int i_error; if( !strcmp( psz_cmd, "atrack" ) ) { psz_variable = "audio-es"; } else if( !strcmp( psz_cmd, "vtrack" ) ) { psz_variable = "video-es"; } else { psz_variable = "spu-es"; } /* Get the descriptive name of the variable */ var_Change( p_input, psz_variable, VLC_VAR_GETTEXT, &val_name, NULL ); if( !val_name.psz_string ) val_name.psz_string = strdup(psz_variable); if( newval.psz_string && *newval.psz_string ) { /* set */ vlc_value_t val; val.i_int = atoi( newval.psz_string ); i_error = var_Set( p_input, psz_variable, val ); } else { /* get */ vlc_value_t val, text; int i, i_value; if ( var_Get( p_input, psz_variable, &val ) < 0 ) { vlc_object_release( p_input ); return VLC_EGENERIC; } i_value = val.i_int; if ( var_Change( p_input, psz_variable, VLC_VAR_GETLIST, &val, &text ) < 0 ) { vlc_object_release( p_input ); return VLC_EGENERIC; } msg_rc( "+----[ %s ]", val_name.psz_string ); for ( i = 0; i < val.p_list->i_count; i++ ) { if ( i_value == val.p_list->p_values[i].i_int ) msg_rc( "| %i - %s *", val.p_list->p_values[i].i_int, text.p_list->p_values[i].psz_string ); else msg_rc( "| %i - %s", val.p_list->p_values[i].i_int, text.p_list->p_values[i].psz_string ); } var_Change( p_input, psz_variable, VLC_VAR_FREELIST, &val, &text ); msg_rc( "+----[ end of %s ]", val_name.psz_string ); if( val_name.psz_string ) free( val_name.psz_string ); i_error = VLC_SUCCESS; } vlc_object_release( p_input ); return i_error; } /* Never reached. */ vlc_object_release( p_input ); return VLC_EGENERIC;}static int Playlist( vlc_object_t *p_this, char const *psz_cmd, vlc_value_t oldval, vlc_value_t newval, void *p_data ){ vlc_value_t val; intf_thread_t *p_intf = (intf_thread_t*)p_this; playlist_t *p_playlist; p_playlist = vlc_object_find( p_this, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); if( !p_playlist ) { return VLC_ENOOBJ; } if( p_playlist->p_input ) { vlc_value_t val; var_Get( p_playlist->p_input, "state", &val ); if( ( val.i_int == PAUSE_S ) || ( val.i_int == PLAYLIST_PAUSED ) ) { msg_rc( _("Type 'menu select' or 'pause' to continue.") ); vlc_object_release( p_playlist ); return VLC_EGENERIC; } } /* Parse commands that require a playlist */ if( !strcmp( psz_cmd, "prev" ) ) { playlist_Prev( p_playlist ); } else if( !strcmp( psz_cmd, "next" ) ) { playlist_Next( p_playlist ); } else if( !strcmp( psz_cmd, "play" ) ) { if( p_playlist->p_input ) { vlc_value_t val; var_Get( p_playlist->p_input, "rate", &val ); if( val.i_int != INPUT_RATE_DEFAULT ) { val.i_int = INPUT_RATE_DEFAULT; var_Set( p_playlist->p_input, "rate", val ); } else { playlist_Play( p_playlist ); } } } else if (!strcmp( psz_cmd, "goto" ) ) { if( strlen( newval.psz_string ) > 0) { val.i_int = atoi( newval.psz_string ); playlist_Goto( p_playlist, val.i_int); } } else if( !strcmp( psz_cmd, "stop" ) ) { playlist_Stop( p_playlist ); } else if( !strcmp( psz_cmd, "clear" ) ) { playlist_Stop( p_playlist ); vlc_mutex_lock( &p_playlist->object_lock ); playlist_Clear( p_playlist ); vlc_mutex_unlock( &p_playlist->object_lock ); } else if( !strcmp( psz_cmd, "add" ) && newval.psz_string && *newval.psz_string ) { playlist_item_t *p_item = parse_MRL( p_intf, newval.psz_string ); if( p_item ) { msg_rc( "Trying to add %s to playlist.", newval.psz_string ); playlist_AddItem( p_playlist, p_item, PLAYLIST_GO|PLAYLIST_APPEND, PLAYLIST_END ); } } else if( !strcmp( psz_cmd, "enqueue" ) && newval.psz_string && *newval.psz_string ) { playlist_item_t *p_item = parse_MRL( p_intf, newval.psz_string ); if( p_item ) { msg_rc( "trying to enqueue %s to playlist", newval.psz_string ); playlist_AddItem( p_playlist, p_item, PLAYLIST_APPEND, PLAYLIST_END ); } } else if( !strcmp( psz_cmd, "playlist" ) ) { int i; for ( i = 0; i < p_playlist->i_size; i++ ) { msg_rc( "|%s%s %s|%s|", i == p_playlist->i_index ? "*" : " ", p_playlist->pp_items[i]->input.psz_name, p_playlist->pp_items[i]->input.psz_uri, p_playlist->pp_items[i]->i_parents > 0 ? p_playlist->pp_items[i]->pp_parents[0]->p_parent->input.psz_name : "" ); } if ( i == 0 ) { msg_rc( "| no entries" ); } } else if( !strcmp( psz_cmd, "status" ) ) { if( p_playlist->p_input ) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -