📄 var.c
字号:
for( i = 0; i < t->i_seekpoint; i++ ) { vlc_value_t text; val.i_int = i; if( t->seekpoint[i]->psz_name == NULL || *t->seekpoint[i]->psz_name == '\0' ) { /* Default value */ asprintf( &text.psz_string, _("Chapter %i"), i + p_input->i_seekpoint_offset ); } else { text.psz_string = strdup( t->seekpoint[i]->psz_name ); } var_Change( p_input, "chapter", VLC_VAR_ADDCHOICE, &val, &text ); if( text.psz_string ) free( text.psz_string ); }}/***************************************************************************** * input_ConfigVarInit: * Create all config object variables *****************************************************************************/void input_ConfigVarInit ( input_thread_t *p_input ){ vlc_value_t val; /* Create Object Variables for private use only */ var_Create( p_input, "video", VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); var_Create( p_input, "audio", VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); var_Create( p_input, "spu", VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); var_Create( p_input, "audio-track", VLC_VAR_INTEGER|VLC_VAR_DOINHERIT ); var_Create( p_input, "sub-track", VLC_VAR_INTEGER|VLC_VAR_DOINHERIT ); var_Create( p_input, "audio-language", VLC_VAR_STRING|VLC_VAR_DOINHERIT ); var_Create( p_input, "sub-language", VLC_VAR_STRING|VLC_VAR_DOINHERIT ); var_Create( p_input, "audio-track-id", VLC_VAR_INTEGER|VLC_VAR_DOINHERIT ); var_Create( p_input, "sub-track-id", VLC_VAR_INTEGER|VLC_VAR_DOINHERIT ); var_Create( p_input, "sub-file", VLC_VAR_FILE | VLC_VAR_DOINHERIT ); var_Create( p_input, "sub-autodetect-file", VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); var_Create( p_input, "sub-autodetect-path", VLC_VAR_STRING | VLC_VAR_DOINHERIT ); var_Create( p_input, "sub-autodetect-fuzzy", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT ); var_Create( p_input, "sout", VLC_VAR_STRING | VLC_VAR_DOINHERIT ); var_Create( p_input, "sout-all", VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); var_Create( p_input, "sout-audio", VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); var_Create( p_input, "sout-video", VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); var_Create( p_input, "sout-spu", VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); var_Create( p_input, "sout-keep", VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); var_Create( p_input, "input-repeat", VLC_VAR_INTEGER|VLC_VAR_DOINHERIT ); var_Create( p_input, "start-time", VLC_VAR_INTEGER|VLC_VAR_DOINHERIT ); var_Create( p_input, "stop-time", VLC_VAR_INTEGER|VLC_VAR_DOINHERIT ); var_Create( p_input, "minimize-threads", VLC_VAR_BOOL|VLC_VAR_DOINHERIT ); var_Create( p_input, "demuxed-id3", VLC_VAR_BOOL ); /* FIXME beurk */ val.b_bool = VLC_FALSE; var_Change( p_input, "demuxed-id3", VLC_VAR_SETVALUE, &val, NULL ); var_Create( p_input, "audio-desync", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT ); var_Create( p_input, "cr-average", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT ); var_Create( p_input, "clock-synchro", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT); var_Create( p_input, "seekable", VLC_VAR_BOOL ); val.b_bool = VLC_TRUE; /* Fixed later*/ var_Change( p_input, "seekable", VLC_VAR_SETVALUE, &val, NULL ); var_Create( p_input, "input-slave", VLC_VAR_STRING | VLC_VAR_DOINHERIT ); /* */ var_Create( p_input, "access-filter", VLC_VAR_STRING | VLC_VAR_DOINHERIT ); var_Create( p_input, "access", VLC_VAR_STRING | VLC_VAR_DOINHERIT ); var_Create( p_input, "demux", VLC_VAR_STRING | VLC_VAR_DOINHERIT ); /* Meta */ var_Create( p_input, "meta-title", VLC_VAR_STRING | VLC_VAR_DOINHERIT ); var_Create( p_input, "meta-author", VLC_VAR_STRING | VLC_VAR_DOINHERIT ); var_Create( p_input, "meta-artist", VLC_VAR_STRING | VLC_VAR_DOINHERIT ); var_Create( p_input, "meta-genre", VLC_VAR_STRING | VLC_VAR_DOINHERIT ); var_Create( p_input, "meta-copyright", VLC_VAR_STRING | VLC_VAR_DOINHERIT); var_Create( p_input, "meta-description", VLC_VAR_STRING|VLC_VAR_DOINHERIT); var_Create( p_input, "meta-date", VLC_VAR_STRING | VLC_VAR_DOINHERIT ); var_Create( p_input, "meta-url", VLC_VAR_STRING | VLC_VAR_DOINHERIT );}/***************************************************************************** * All Callbacks: *****************************************************************************/static int StateCallback( vlc_object_t *p_this, char const *psz_cmd, vlc_value_t oldval, vlc_value_t newval, void *p_data ){ input_thread_t *p_input = (input_thread_t*)p_this; if( newval.i_int == PLAYING_S || newval.i_int == PAUSE_S ) { input_ControlPush( p_input, INPUT_CONTROL_SET_STATE, &newval ); return VLC_SUCCESS; } return VLC_EGENERIC;}static int RateCallback( vlc_object_t *p_this, char const *psz_cmd, vlc_value_t oldval, vlc_value_t newval, void *p_data ){ input_thread_t *p_input = (input_thread_t*)p_this; /* Problem with this way: the "rate" variable is update after the input thread do the change */ if( !strcmp( psz_cmd, "rate-slower" ) ) { input_ControlPush( p_input, INPUT_CONTROL_SET_RATE_SLOWER, NULL ); } else if( !strcmp( psz_cmd, "rate-faster" ) ) { input_ControlPush( p_input, INPUT_CONTROL_SET_RATE_FASTER, NULL ); } else { input_ControlPush( p_input, INPUT_CONTROL_SET_RATE, &newval ); } return VLC_SUCCESS;}static int PositionCallback( vlc_object_t *p_this, char const *psz_cmd, vlc_value_t oldval, vlc_value_t newval, void *p_data ){ input_thread_t *p_input = (input_thread_t*)p_this; vlc_value_t val, length; if( !strcmp( psz_cmd, "position-offset" ) ) { input_ControlPush( p_input, INPUT_CONTROL_SET_POSITION_OFFSET, &newval ); val.f_float = var_GetFloat( p_input, "position" ) + newval.f_float; if( val.f_float < 0.0 ) val.f_float = 0.0; if( val.f_float > 1.0 ) val.f_float = 1.0; var_Change( p_input, "position", VLC_VAR_SETVALUE, &val, NULL ); } else { val.f_float = newval.f_float; input_ControlPush( p_input, INPUT_CONTROL_SET_POSITION, &newval ); } /* Update "position" for better intf behavour */ var_Get( p_input, "length", &length ); if( length.i_time > 0 && val.f_float >= 0.0 && val.f_float <= 1.0 ) { val.i_time = length.i_time * val.f_float; var_Change( p_input, "time", VLC_VAR_SETVALUE, &val, NULL ); } return VLC_SUCCESS;}static int TimeCallback( vlc_object_t *p_this, char const *psz_cmd, vlc_value_t oldval, vlc_value_t newval, void *p_data ){ input_thread_t *p_input = (input_thread_t*)p_this; vlc_value_t val, length; if( !strcmp( psz_cmd, "time-offset" ) ) { input_ControlPush( p_input, INPUT_CONTROL_SET_TIME_OFFSET, &newval ); val.i_time = var_GetTime( p_input, "time" ) + newval.i_time; if( val.i_time < 0 ) val.i_time = 0; /* TODO maybe test against i_length ? */ var_Change( p_input, "time", VLC_VAR_SETVALUE, &val, NULL ); } else { val.i_time = newval.i_time; input_ControlPush( p_input, INPUT_CONTROL_SET_TIME, &newval ); } /* Update "position" for better intf behavour */ var_Get( p_input, "length", &length ); if( length.i_time > 0 && val.i_time >= 0 && val.i_time <= length.i_time ) { val.f_float = (double)val.i_time/(double)length.i_time; var_Change( p_input, "position", VLC_VAR_SETVALUE, &val, NULL ); } return VLC_SUCCESS;}static int ProgramCallback( vlc_object_t *p_this, char const *psz_cmd, vlc_value_t oldval, vlc_value_t newval, void *p_data ){ input_thread_t *p_input = (input_thread_t*)p_this; input_ControlPush( p_input, INPUT_CONTROL_SET_PROGRAM, &newval ); return VLC_SUCCESS;}static int TitleCallback( vlc_object_t *p_this, char const *psz_cmd, vlc_value_t oldval, vlc_value_t newval, void *p_data ){ input_thread_t *p_input = (input_thread_t*)p_this; vlc_value_t val, count; if( !strcmp( psz_cmd, "next-title" ) ) { input_ControlPush( p_input, INPUT_CONTROL_SET_TITLE_NEXT, NULL ); val.i_int = var_GetInteger( p_input, "title" ) + 1; var_Change( p_input, "title", VLC_VAR_CHOICESCOUNT, &count, NULL ); if( val.i_int < count.i_int ) var_Change( p_input, "title", VLC_VAR_SETVALUE, &val, NULL ); } else if( !strcmp( psz_cmd, "prev-title" ) ) { input_ControlPush( p_input, INPUT_CONTROL_SET_TITLE_PREV, NULL ); val.i_int = var_GetInteger( p_input, "title" ) - 1; if( val.i_int >= 0 ) var_Change( p_input, "title", VLC_VAR_SETVALUE, &val, NULL ); } else { input_ControlPush( p_input, INPUT_CONTROL_SET_TITLE, &newval ); } return VLC_SUCCESS;}static int SeekpointCallback( vlc_object_t *p_this, char const *psz_cmd, vlc_value_t oldval, vlc_value_t newval, void *p_data ){ input_thread_t *p_input = (input_thread_t*)p_this; vlc_value_t val, count; if( !strcmp( psz_cmd, "next-chapter" ) ) { input_ControlPush( p_input, INPUT_CONTROL_SET_SEEKPOINT_NEXT, NULL ); val.i_int = var_GetInteger( p_input, "chapter" ) + 1; var_Change( p_input, "chapter", VLC_VAR_CHOICESCOUNT, &count, NULL ); if( val.i_int < count.i_int ) var_Change( p_input, "chapter", VLC_VAR_SETVALUE, &val, NULL ); } else if( !strcmp( psz_cmd, "prev-chapter" ) ) { input_ControlPush( p_input, INPUT_CONTROL_SET_SEEKPOINT_PREV, NULL ); val.i_int = var_GetInteger( p_input, "chapter" ) - 1; if( val.i_int >= 0 ) var_Change( p_input, "chapter", VLC_VAR_SETVALUE, &val, NULL ); } else { input_ControlPush( p_input, INPUT_CONTROL_SET_SEEKPOINT, &newval ); } return VLC_SUCCESS;}static int NavigationCallback( vlc_object_t *p_this, char const *psz_cmd, vlc_value_t oldval, vlc_value_t newval, void *p_data ){ input_thread_t *p_input = (input_thread_t*)p_this; vlc_value_t val; /* Issue a title change */ val.i_int = (int)p_data; input_ControlPush( p_input, INPUT_CONTROL_SET_TITLE, &val ); var_Change( p_input, "title", VLC_VAR_SETVALUE, &val, NULL ); /* And a chapter change */ input_ControlPush( p_input, INPUT_CONTROL_SET_SEEKPOINT, &newval ); var_Change( p_input, "chapter", VLC_VAR_SETVALUE, &newval, NULL ); return VLC_SUCCESS;}static int ESCallback( vlc_object_t *p_this, char const *psz_cmd, vlc_value_t oldval, vlc_value_t newval, void *p_data ){ input_thread_t *p_input = (input_thread_t*)p_this; if( newval.i_int < 0 ) { vlc_value_t v; /* Hack */ if( !strcmp( psz_cmd, "audio-es" ) ) v.i_int = -AUDIO_ES; else if( !strcmp( psz_cmd, "video-es" ) ) v.i_int = -VIDEO_ES; else if( !strcmp( psz_cmd, "spu-es" ) ) v.i_int = -SPU_ES; else v.i_int = 0; if( v.i_int != 0 ) input_ControlPush( p_input, INPUT_CONTROL_SET_ES, &v ); } else { input_ControlPush( p_input, INPUT_CONTROL_SET_ES, &newval ); } return VLC_SUCCESS;}static int EsDelayCallback ( vlc_object_t *p_this, char const *psz_cmd, vlc_value_t oldval, vlc_value_t newval, void *p ){ input_thread_t *p_input = (input_thread_t*)p_this; if( !strcmp( psz_cmd, "audio-delay" ) ) { /*Change i_pts_delay to make sure es are decoded in time*/ if (newval.i_int < 0 || oldval.i_int < 0 ) { p_input->i_pts_delay -= newval.i_int - oldval.i_int; } input_ControlPush( p_input, INPUT_CONTROL_SET_AUDIO_DELAY, &newval ); } else if( !strcmp( psz_cmd, "spu-delay" ) ) input_ControlPush( p_input, INPUT_CONTROL_SET_SPU_DELAY, &newval ); return VLC_SUCCESS;}static int BookmarkCallback( vlc_object_t *p_this, char const *psz_cmd, vlc_value_t oldval, vlc_value_t newval, void *p_data ){ input_thread_t *p_input = (input_thread_t*)p_this; input_ControlPush( p_input, INPUT_CONTROL_SET_BOOKMARK, &newval ); return VLC_SUCCESS;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -