]> git.sesse.net Git - vlc/blobdiff - src/input/event.c
Use var_Inherit* instead of var_CreateGet*.
[vlc] / src / input / event.c
index 90f029f09e0aebfb44206cebb16305719e8bbee7..f0a420518d310a87ce24f9d8fd6d3075e4c25d12 100644 (file)
 #include <vlc_input.h>
 #include "input_internal.h"
 #include "event.h"
+#include <assert.h>
+
+/* */
+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, const input_event_times_t *p_times )
+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;
 
     /* */
-    val.f_float = p_times->f_position;
+    val.f_float = f_position;
     var_Change( p_input, "position", VLC_VAR_SETVALUE, &val, NULL );
 
     /* */
-    val.i_time = p_times->i_time;
+    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" ) != p_times->i_length )
-        input_item_SetDuration( p_input->p->input.p_item, p_times->i_length );
-    val.i_time = p_times->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 );
 
-    //var_SetBool( p_input, "intf-change-times", true ); /* TODO */
-    var_TriggerCallback( p_input, "intf-change" );
+    Trigger( p_input, INPUT_EVENT_LENGTH );
 }
 void input_SendEventStatistics( input_thread_t *p_input )
 {
-    var_TriggerCallback( p_input, "stats-change" ); /* FIXME rename */
+    Trigger( p_input, INPUT_EVENT_STATISTICS );
 }
 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 );
 
-       var_TriggerCallback( p_input, "rate-change" ); /* TODO rename */
+    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 );
 
-       //var_SetBool( p_input, "intf-change-delay" ); /* TODO */
+    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 );
 
-       //var_SetBool( p_input, "intf-change-delay" ); /* TODO */
+    Trigger( p_input, INPUT_EVENT_SUBTITLE_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 );
 
-       var_TriggerCallback( p_input, "intf-change" ); /* FIXME */
+    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 ); /* FIXME ??? */
+    input_ControlVarTitle( p_input, i_title );
 
-       //var_SetBool( p_input, "intf-change-title" ); /* TODO */
+    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;
 
-       VLC_UNUSED( i_title );
-       val.i_int = i_seekpoint;
-       var_Change( p_input, "chapter", VLC_VAR_SETVALUE, &val, NULL);
+    /* "chapter" */
+    val.i_int = i_seekpoint;
+    var_Change( p_input, "chapter", VLC_VAR_SETVALUE, &val, NULL );
 
-       //var_SetBool( p_input, "intf-change-seekpoint" ); /* TODO. Merge with intf-change-title ?  */
+    /* "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 );
 }
 
 void input_SendEventSignal( input_thread_t *p_input, double f_quality, double f_strength )
 {
-       var_SetFloat( p_input, "signal-quality", f_quality );
-       var_SetFloat( p_input, "signal-strength", f_strength );
+    vlc_value_t val;
 
-       /* TODO use Change and then a intf-change-signal instead ? */
+    val.f_float = f_quality;
+    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 );
+
+    Trigger( p_input, INPUT_EVENT_SIGNAL );
 }
 
 void input_SendEventState( input_thread_t *p_input, int i_state )
@@ -139,92 +182,84 @@ void input_SendEventState( input_thread_t *p_input, int i_state )
     val.i_int = i_state;
     var_Change( p_input, "state", VLC_VAR_SETVALUE, &val, NULL );
 
-    var_TriggerCallback( p_input, "intf-change" );
+    Trigger( p_input, INPUT_EVENT_STATE );
+}
+
+void input_SendEventCache( input_thread_t *p_input, double f_level )
+{
+    vlc_value_t val;
 
-       /* FIXME remove this ugliness */
-    vlc_event_t event;
+    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 );
 }
 
-#warning "TODO meta"
 /* FIXME: review them because vlc_event_send might be
  * moved inside input_item* functions.
  */
 void input_SendEventMeta( input_thread_t *p_input )
 {
-    var_TriggerCallback( p_input, "intf-change" ); /* TODO intf-change-item-meta */
+    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 )
 {
-    var_TriggerCallback( p_input, "intf-change" ); /* TODO intf-change-item-info */
+    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 )
 {
-    var_TriggerCallback( p_input, "intf-change" ); /* TODO intf-change-item-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 );
-
-    //var_SetBool( p_input, "intf-change-program", true ); /* TODO */
-    var_TriggerCallback( p_input, "intf-change" );
+    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 );
-
-    //var_SetBool( p_input, "intf-change-program", true ); /* TODO */
-    var_TriggerCallback( p_input, "intf-change" );
+    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, "intf-change-program", true ); /* TODO */
-    var_TriggerCallback( p_input, "intf-change" );
+    var_SetBool( p_input, "program-scrambled", b_scrambled );
+    Trigger( p_input, INPUT_EVENT_PROGRAM );
 }
 
 static const char *GetEsVarName( int i_cat )
@@ -240,52 +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 );
+}
 
-    //var_SetBool( p_input, "intf-change-es", true ); /* TODO */
-    var_TriggerCallback( p_input, "intf-change" );
+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 );
 
-    //var_SetBool( p_input, "intf-change-es", true ); /* TODO */
-    var_TriggerCallback( p_input, "intf-change" );
+    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 );
+    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 );
+    }
 
-    //var_SetBool( p_input, "intf-change-es", true ); /* TODO */
-    var_TriggerCallback( p_input, "intf-change" );
+    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;
 
-    /* FIXME to remove this ugliness */
-    vlc_event_t event;
-    event.type = vlc_InputSelectedStreamChanged;
-    vlc_event_send( &p_input->p->event_manager, &event );
+    val.i_int = i_value;
+    var_Change( p_input, psz_variable, VLC_VAR_SETVALUE, &val, NULL );
+
+    Trigger( p_input, i_event );
 }
 
+