#include <vlc_input.h>
#include "input_internal.h"
#include "event.h"
-
-static void Trigger( input_thread_t *p_input, int i_type );
+#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,
- 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;
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 )
{
}
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 );
}
/* 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 );
}
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 );
}
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 );
}
{
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;
{
Trigger( p_input, INPUT_EVENT_ITEM_NAME );
- /* FIXME remove this ugliness */
+ /* FIXME remove this ugliness */
vlc_event_t event;
event.type = vlc_InputItemNameChanged;
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 );
}
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 )
Trigger( p_input, INPUT_EVENT_VOUT );
}
+void input_SendEventAout( input_thread_t *p_input )
+{
+ Trigger( p_input, INPUT_EVENT_AOUT );
+}
+
/*****************************************************************************
* Event for control.c/input.c
*****************************************************************************/
{
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 );
+}
+
+