X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Finput%2Fevent.c;h=f0a420518d310a87ce24f9d8fd6d3075e4c25d12;hb=HEAD;hp=8f973407bff74426f6f8404ff0cf33dcaa983d31;hpb=ba2c2b69c950f4dad5103149e9250225320bc204;p=vlc diff --git a/src/input/event.c b/src/input/event.c index 8f973407bf..f0a420518d 100644 --- a/src/input/event.c +++ b/src/input/event.c @@ -34,7 +34,17 @@ #include "event.h" #include -static void Trigger( input_thread_t *p_input, int i_type ); +/* */ +static void Trigger( input_thread_t *, int i_type ); +static void VarListAdd( input_thread_t *, + const char *psz_variable, int i_event, + int i_value, const char *psz_text ); +static void VarListDel( input_thread_t *, + const char *psz_variable, int i_event, + int i_value ); +static void VarListSelect( input_thread_t *, + const char *psz_variable, int i_event, + int i_value ); /***************************************************************************** * Event for input.c @@ -45,9 +55,12 @@ void input_SendEventDead( input_thread_t *p_input ) Trigger( p_input, INPUT_EVENT_DEAD ); } +void input_SendEventAbort( input_thread_t *p_input ) +{ + Trigger( p_input, INPUT_EVENT_ABORT ); +} -void input_SendEventTimes( input_thread_t *p_input, - double f_position, mtime_t i_time, mtime_t i_length ) +void input_SendEventPosition( input_thread_t *p_input, double f_position, mtime_t i_time ) { vlc_value_t val; @@ -59,13 +72,22 @@ void input_SendEventTimes( input_thread_t *p_input, val.i_time = i_time; var_Change( p_input, "time", VLC_VAR_SETVALUE, &val, NULL ); - /* FIXME ugly + what about meta change event ? */ - if( var_GetTime( p_input, "length" ) != i_length ) - input_item_SetDuration( p_input->p->p_item, i_length ); + Trigger( p_input, INPUT_EVENT_POSITION ); +} +void input_SendEventLength( input_thread_t *p_input, mtime_t i_length ) +{ + vlc_value_t val; + + /* FIXME ugly + what about meta change event ? */ + if( var_GetTime( p_input, "length" ) == i_length ) + return; + + input_item_SetDuration( p_input->p->p_item, i_length ); + val.i_time = i_length; var_Change( p_input, "length", VLC_VAR_SETVALUE, &val, NULL ); - Trigger( p_input, INPUT_EVENT_TIMES ); + Trigger( p_input, INPUT_EVENT_LENGTH ); } void input_SendEventStatistics( input_thread_t *p_input ) { @@ -73,29 +95,29 @@ void input_SendEventStatistics( input_thread_t *p_input ) } void input_SendEventRate( input_thread_t *p_input, int i_rate ) { - vlc_value_t val; + vlc_value_t val; - val.i_int = i_rate; - var_Change( p_input, "rate", VLC_VAR_SETVALUE, &val, NULL ); + val.f_float = (float)INPUT_RATE_DEFAULT / (float)i_rate; + var_Change( p_input, "rate", VLC_VAR_SETVALUE, &val, NULL ); Trigger( p_input, INPUT_EVENT_RATE ); } void input_SendEventAudioDelay( input_thread_t *p_input, mtime_t i_delay ) { - vlc_value_t val; + vlc_value_t val; - val.i_time = i_delay; - var_Change( p_input, "audio-delay", VLC_VAR_SETVALUE, &val, NULL ); + val.i_time = i_delay; + var_Change( p_input, "audio-delay", VLC_VAR_SETVALUE, &val, NULL ); Trigger( p_input, INPUT_EVENT_AUDIO_DELAY ); } void input_SendEventSubtitleDelay( input_thread_t *p_input, mtime_t i_delay ) { - vlc_value_t val; + vlc_value_t val; - val.i_time = i_delay; - var_Change( p_input, "spu-delay", VLC_VAR_SETVALUE, &val, NULL ); + val.i_time = i_delay; + var_Change( p_input, "spu-delay", VLC_VAR_SETVALUE, &val, NULL ); Trigger( p_input, INPUT_EVENT_SUBTITLE_DELAY ); } @@ -103,34 +125,40 @@ void input_SendEventSubtitleDelay( input_thread_t *p_input, mtime_t i_delay ) /* TODO and file name ? */ void input_SendEventRecord( input_thread_t *p_input, bool b_recording ) { - vlc_value_t val; + vlc_value_t val; - val.b_bool = b_recording; - var_Change( p_input, "record", VLC_VAR_SETVALUE, &val, NULL ); + val.b_bool = b_recording; + var_Change( p_input, "record", VLC_VAR_SETVALUE, &val, NULL ); Trigger( p_input, INPUT_EVENT_RECORD ); } void input_SendEventTitle( input_thread_t *p_input, int i_title ) { - vlc_value_t val; + vlc_value_t val; - val.i_int = i_title; - var_Change( p_input, "title", VLC_VAR_SETVALUE, &val, NULL ); + val.i_int = i_title; + var_Change( p_input, "title", VLC_VAR_SETVALUE, &val, NULL ); - input_ControlVarTitle( p_input, i_title ); + input_ControlVarTitle( p_input, i_title ); Trigger( p_input, INPUT_EVENT_TITLE ); } void input_SendEventSeekpoint( input_thread_t *p_input, int i_title, int i_seekpoint ) { - vlc_value_t val; + vlc_value_t val; + + /* "chapter" */ + val.i_int = i_seekpoint; + var_Change( p_input, "chapter", VLC_VAR_SETVALUE, &val, NULL ); - VLC_UNUSED( i_title ); - val.i_int = i_seekpoint; - var_Change( p_input, "chapter", VLC_VAR_SETVALUE, &val, NULL ); + /* "title %2i" */ + char psz_title[10]; + snprintf( psz_title, sizeof(psz_title), "title %2i", i_title ); + var_Change( p_input, psz_title, VLC_VAR_SETVALUE, &val, NULL ); + /* */ Trigger( p_input, INPUT_EVENT_CHAPTER ); } @@ -139,10 +167,10 @@ void input_SendEventSignal( input_thread_t *p_input, double f_quality, double f_ vlc_value_t val; val.f_float = f_quality; - var_Change( p_input, "signal-quality", VLC_VAR_SETVALUE, &val, NULL ); + var_Change( p_input, "signal-quality", VLC_VAR_SETVALUE, &val, NULL ); val.f_float = f_strength; - var_Change( p_input, "signal-strength", VLC_VAR_SETVALUE, &val, NULL ); + var_Change( p_input, "signal-strength", VLC_VAR_SETVALUE, &val, NULL ); Trigger( p_input, INPUT_EVENT_SIGNAL ); } @@ -162,7 +190,7 @@ void input_SendEventCache( input_thread_t *p_input, double f_level ) vlc_value_t val; val.f_float = f_level; - var_Change( p_input, "cache", VLC_VAR_SETVALUE, &val, NULL ); + var_Change( p_input, "cache", VLC_VAR_SETVALUE, &val, NULL ); Trigger( p_input, INPUT_EVENT_CACHE ); } @@ -174,19 +202,19 @@ void input_SendEventMeta( input_thread_t *p_input ) { Trigger( p_input, INPUT_EVENT_ITEM_META ); - /* FIXME remove this ugliness ? */ - vlc_event_t event; + /* FIXME remove this ugliness ? */ + vlc_event_t event; - event.type = vlc_InputItemMetaChanged; - event.u.input_item_meta_changed.meta_type = vlc_meta_ArtworkURL; - vlc_event_send( &p_input->p->p_item->event_manager, &event ); + event.type = vlc_InputItemMetaChanged; + event.u.input_item_meta_changed.meta_type = vlc_meta_ArtworkURL; + vlc_event_send( &p_input->p->p_item->event_manager, &event ); } void input_SendEventMetaInfo( input_thread_t *p_input ) { Trigger( p_input, INPUT_EVENT_ITEM_INFO ); - /* FIXME remove this ugliness */ + /* FIXME remove this ugliness */ vlc_event_t event; event.type = vlc_InputItemInfoChanged; @@ -197,7 +225,7 @@ void input_SendEventMetaName( input_thread_t *p_input, const char *psz_name ) { Trigger( p_input, INPUT_EVENT_ITEM_NAME ); - /* FIXME remove this ugliness */ + /* FIXME remove this ugliness */ vlc_event_t event; event.type = vlc_InputItemNameChanged; @@ -205,39 +233,32 @@ void input_SendEventMetaName( input_thread_t *p_input, const char *psz_name ) vlc_event_send( &p_input->p->p_item->event_manager, &event ); } +void input_SendEventMetaEpg( input_thread_t *p_input ) +{ + Trigger( p_input, INPUT_EVENT_ITEM_EPG ); +} /***************************************************************************** * Event for es_out.c *****************************************************************************/ void input_SendEventProgramAdd( input_thread_t *p_input, int i_program, const char *psz_text ) { - vlc_value_t val; - vlc_value_t text; - - val.i_int = i_program; - text.psz_string = (char*)psz_text; - - var_Change( p_input, "program", VLC_VAR_ADDCHOICE, - &val, psz_text ? &text : NULL ); - - Trigger( p_input, INPUT_EVENT_PROGRAM ); + VarListAdd( p_input, "program", INPUT_EVENT_PROGRAM, i_program, psz_text ); } void input_SendEventProgramDel( input_thread_t *p_input, int i_program ) { - vlc_value_t val; - - val.i_int = i_program; - var_Change( p_input, "program", VLC_VAR_DELCHOICE, &val, NULL ); - - Trigger( p_input, INPUT_EVENT_PROGRAM ); + VarListDel( p_input, "program", INPUT_EVENT_PROGRAM, i_program ); } void input_SendEventProgramSelect( input_thread_t *p_input, int i_program ) { - vlc_value_t val; - - val.i_int = i_program; - var_Change( p_input, "program", VLC_VAR_SETVALUE, &val, NULL ); + VarListSelect( p_input, "program", INPUT_EVENT_PROGRAM, i_program ); +} +void input_SendEventProgramScrambled( input_thread_t *p_input, int i_group, bool b_scrambled ) +{ + if( var_GetInteger( p_input, "program" ) != i_group ) + return; + var_SetBool( p_input, "program-scrambled", b_scrambled ); Trigger( p_input, INPUT_EVENT_PROGRAM ); } @@ -254,64 +275,36 @@ static const char *GetEsVarName( int i_cat ) return "spu-es"; } } -void input_SendEventEsDel( input_thread_t *p_input, int i_cat, int i_id ) +void input_SendEventEsAdd( input_thread_t *p_input, int i_cat, int i_id, const char *psz_text ) { - vlc_value_t val; - - if( i_cat == UNKNOWN_ES ) - return; - - if( i_id >= 0 ) - { - val.i_int = i_id; - var_Change( p_input, GetEsVarName( i_cat ), VLC_VAR_DELCHOICE, &val, NULL ); - } - else - { - var_Change( p_input, GetEsVarName( i_cat ), VLC_VAR_CLEARCHOICES, NULL, NULL ); - } - - Trigger( p_input, INPUT_EVENT_ES ); + if( i_cat != UNKNOWN_ES ) + VarListAdd( p_input, GetEsVarName( i_cat ), INPUT_EVENT_ES, + i_id, psz_text ); } -void input_SendEventEsAdd( input_thread_t *p_input, int i_cat, int i_id, const char *psz_text ) +void input_SendEventEsDel( input_thread_t *p_input, int i_cat, int i_id ) { - vlc_value_t val; - vlc_value_t text; - - if( i_cat == UNKNOWN_ES ) - return; - - val.i_int = i_id; - text.psz_string = (char*)psz_text; - - var_Change( p_input, GetEsVarName( i_cat ), VLC_VAR_ADDCHOICE, - &val, psz_text ? &text : NULL ); - - Trigger( p_input, INPUT_EVENT_ES ); + if( i_cat != UNKNOWN_ES ) + VarListDel( p_input, GetEsVarName( i_cat ), INPUT_EVENT_ES, i_id ); } - /* i_id == -1 will unselect */ void input_SendEventEsSelect( input_thread_t *p_input, int i_cat, int i_id ) { - vlc_value_t val; - - if( i_cat == UNKNOWN_ES ) - return; - - val.i_int = i_id; - var_Change( p_input, GetEsVarName( i_cat ), VLC_VAR_SETVALUE, &val, NULL ); - - Trigger( p_input, INPUT_EVENT_ES ); + if( i_cat != UNKNOWN_ES ) + VarListSelect( p_input, GetEsVarName( i_cat ), INPUT_EVENT_ES, i_id ); } -void input_SendEventTeletext( input_thread_t *p_input, int i_id ) +void input_SendEventTeletextAdd( input_thread_t *p_input, + int i_teletext, const char *psz_text ) { - vlc_value_t val; - - val.i_int = i_id; - var_Change( p_input, "teletext-es", VLC_VAR_SETVALUE, &val, NULL ); - - Trigger( p_input, INPUT_EVENT_TELETEXT ); + VarListAdd( p_input, "teletext-es", INPUT_EVENT_TELETEXT, i_teletext, psz_text ); +} +void input_SendEventTeletextDel( input_thread_t *p_input, int i_teletext ) +{ + VarListDel( p_input, "teletext-es", INPUT_EVENT_TELETEXT, i_teletext ); +} +void input_SendEventTeletextSelect( input_thread_t *p_input, int i_teletext ) +{ + VarListSelect( p_input, "teletext-es", INPUT_EVENT_TELETEXT, i_teletext ); } void input_SendEventVout( input_thread_t *p_input ) @@ -339,3 +332,49 @@ static void Trigger( input_thread_t *p_input, int i_type ) { var_SetInteger( p_input, "intf-event", i_type ); } +static void VarListAdd( input_thread_t *p_input, + const char *psz_variable, int i_event, + int i_value, const char *psz_text ) +{ + vlc_value_t val; + vlc_value_t text; + + val.i_int = i_value; + text.psz_string = (char*)psz_text; + + var_Change( p_input, psz_variable, VLC_VAR_ADDCHOICE, + &val, psz_text ? &text : NULL ); + + Trigger( p_input, i_event ); +} +static void VarListDel( input_thread_t *p_input, + const char *psz_variable, int i_event, + int i_value ) +{ + vlc_value_t val; + + if( i_value >= 0 ) + { + val.i_int = i_value; + var_Change( p_input, psz_variable, VLC_VAR_DELCHOICE, &val, NULL ); + } + else + { + var_Change( p_input, psz_variable, VLC_VAR_CLEARCHOICES, &val, NULL ); + } + + Trigger( p_input, i_event ); +} +static void VarListSelect( input_thread_t *p_input, + const char *psz_variable, int i_event, + int i_value ) +{ + vlc_value_t val; + + val.i_int = i_value; + var_Change( p_input, psz_variable, VLC_VAR_SETVALUE, &val, NULL ); + + Trigger( p_input, i_event ); +} + +