X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Finput%2Fevent.c;h=f0a420518d310a87ce24f9d8fd6d3075e4c25d12;hb=fb92e7a0440af1dcb237479702e559e0278a8bca;hp=2fe986d5819ba468effcd11e8f563eeb6815137a;hpb=e827c77316e1c7c3fbbcbd65958c00a657eace99;p=vlc diff --git a/src/input/event.c b/src/input/event.c index 2fe986d581..f0a420518d 100644 --- a/src/input/event.c +++ b/src/input/event.c @@ -32,14 +32,35 @@ #include #include "input_internal.h" #include "event.h" - -static void Trigger( input_thread_t *p_input, int i_type ); +#include + +/* */ +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 *****************************************************************************/ -void input_SendEventTimes( input_thread_t *p_input, - double f_position, mtime_t i_time, mtime_t i_length ) +void input_SendEventDead( input_thread_t *p_input ) +{ + p_input->b_dead = true; + + Trigger( p_input, INPUT_EVENT_DEAD ); +} +void input_SendEventAbort( input_thread_t *p_input ) +{ + Trigger( p_input, INPUT_EVENT_ABORT ); +} + +void input_SendEventPosition( input_thread_t *p_input, double f_position, mtime_t i_time ) { vlc_value_t val; @@ -51,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->input.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 ) { @@ -65,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 ); } @@ -95,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 ); } @@ -131,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 ); } @@ -147,13 +183,16 @@ void input_SendEventState( input_thread_t *p_input, int i_state ) var_Change( p_input, "state", VLC_VAR_SETVALUE, &val, NULL ); Trigger( p_input, INPUT_EVENT_STATE ); +} - /* FIXME remove this ugliness */ - vlc_event_t event; +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 ); - event.type = vlc_InputStateChanged; - event.u.input_state_changed.new_state = i_state; - vlc_event_send( &p_input->p->event_manager, &event ); + Trigger( p_input, INPUT_EVENT_CACHE ); } /* FIXME: review them because vlc_event_send might be @@ -163,70 +202,63 @@ 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->input.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; - vlc_event_send( &p_input->p->input.p_item->event_manager, &event ); + vlc_event_send( &p_input->p->p_item->event_manager, &event ); } 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; event.u.input_item_name_changed.new_name = psz_name; - vlc_event_send( &p_input->p->input.p_item->event_manager, &event ); + 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 ); } @@ -243,71 +275,106 @@ static const char *GetEsVarName( int i_cat ) return "spu-es"; } } +void input_SendEventEsAdd( input_thread_t *p_input, int i_cat, int i_id, const char *psz_text ) +{ + if( i_cat != UNKNOWN_ES ) + VarListAdd( p_input, GetEsVarName( i_cat ), INPUT_EVENT_ES, + i_id, psz_text ); +} void input_SendEventEsDel( input_thread_t *p_input, int i_cat, int i_id ) { - vlc_value_t val; + 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 ) +{ + if( i_cat != UNKNOWN_ES ) + VarListSelect( p_input, GetEsVarName( i_cat ), INPUT_EVENT_ES, i_id ); +} - 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 ); - } +void input_SendEventTeletextAdd( input_thread_t *p_input, + int i_teletext, const char *psz_text ) +{ + 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 ); +} - Trigger( p_input, INPUT_EVENT_ES ); +void input_SendEventVout( input_thread_t *p_input ) +{ + Trigger( p_input, INPUT_EVENT_VOUT ); } -void input_SendEventEsAdd( input_thread_t *p_input, int i_cat, int i_id, const char *psz_text ) + +void input_SendEventAout( input_thread_t *p_input ) +{ + Trigger( p_input, INPUT_EVENT_AOUT ); +} + +/***************************************************************************** + * Event for control.c/input.c + *****************************************************************************/ +void input_SendEventBookmark( input_thread_t *p_input ) +{ + Trigger( p_input, INPUT_EVENT_BOOKMARK ); +} + +/***************************************************************************** + * + *****************************************************************************/ +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_id; + val.i_int = i_value; text.psz_string = (char*)psz_text; - var_Change( p_input, GetEsVarName( i_cat ), VLC_VAR_ADDCHOICE, + var_Change( p_input, psz_variable, VLC_VAR_ADDCHOICE, &val, psz_text ? &text : NULL ); - Trigger( p_input, INPUT_EVENT_ES ); + Trigger( p_input, i_event ); } - -/* i_id == -1 will unselect */ -void input_SendEventEsSelect( input_thread_t *p_input, int i_cat, int i_id ) +static void VarListDel( input_thread_t *p_input, + const char *psz_variable, int i_event, + int i_value ) { vlc_value_t val; - 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_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 ); + } - /* FIXME to remove this ugliness */ - vlc_event_t event; - event.type = vlc_InputSelectedStreamChanged; - vlc_event_send( &p_input->p->event_manager, &event ); + Trigger( p_input, i_event ); } - -void input_SendEventTeletext( input_thread_t *p_input, int i_id ) +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_id; - var_Change( p_input, "teletext-es", VLC_VAR_SETVALUE, &val, NULL ); + val.i_int = i_value; + var_Change( p_input, psz_variable, VLC_VAR_SETVALUE, &val, NULL ); - Trigger( p_input, INPUT_EVENT_TELETEXT ); + Trigger( p_input, i_event ); } -void input_SendEventVout( input_thread_t *p_input ) -{ - Trigger( p_input, INPUT_EVENT_VOUT ); -} -/***************************************************************************** - * - *****************************************************************************/ -static void Trigger( input_thread_t *p_input, int i_type ) -{ - var_SetInteger( p_input, "intf-event", i_type ); -}