* input defines/constants.
*****************************************************************************/
-/* "state" value */
-/* NOTE: you need to update ppsz_input_state in the RC interface
- * if you modify this list. */
-typedef enum input_state_e
-{
- INIT_S = 0,
- OPENING_S,
- BUFFERING_S,
- PLAYING_S,
- PAUSE_S,
- STOP_S,
- END_S,
- ERROR_S,
-} input_state_e;
-
-/* "rate" default, min/max
- * A rate below 1000 plays the movie faster,
- * A rate above 1000 plays the movie slower.
- */
-#define INPUT_RATE_DEFAULT 1000
-#define INPUT_RATE_MIN 32 /* Up to 32/1 */
-#define INPUT_RATE_MAX 32000 /* Up to 1/32 */
-
/* i_update field of access_t/demux_t */
#define INPUT_UPDATE_NONE 0x0000
#define INPUT_UPDATE_SIZE 0x0001
input_thread_private_t *p;
};
+/*****************************************************************************
+ * Input events and variables
+ *****************************************************************************/
+
+/**
+ * \defgroup inputvariable Input variables
+ *
+ * The input provides multiples variable you can write to and/or read from.
+ *
+ * TODO complete the documentation.
+ * The read only variables are:
+ * - "length"
+ * - "bookmarks"
+ * - "seekable (if you can seek, it doesn't say if 'bar display' has be shown FIXME rename can-seek
+ * or not, for that check position != 0.0)
+ * - "can-pause"
+ * - "can-rewind"
+ * - "can-record" (if a stream can be recorded while playing)
+ * - "teletext-es" to get the index of spu track that is teletext --1 if no teletext)
+ *
+ * The read-write variables are:
+ * - state (\see input_state_e)
+ * - rate, rate-slower, rate-faster
+ * - position, position-offset
+ * - time, time-offset
+ * - title,title-next,title-prev
+ * - chapter,chapter-next, chapter-prev
+ * - program, audio-es, video-es, spu-es
+ * - audio-delay, spu-delay
+ * - bookmark
+ * - TODO add special titles variables
+ *
+ * The variable used for event is
+ * - intf-event (\see input_event_type_e)
+ *
+ * The legacy variable used for event are
+ * - intf-change
+ * - intf-change-vout
+ * - rate-change
+ * - stats-change
+ * You are advised to change to intf-event as soon as possible.
+ */
+
+/**
+ * Input state
+ *
+ * This enum is used by the variable "state"
+ *
+ * NOTE: you need to update ppsz_input_state in the RC interface
+ * if you modify this list.
+ */
+typedef enum input_state_e
+{
+ INIT_S = 0,
+ OPENING_S,
+ BUFFERING_S,
+ PLAYING_S,
+ PAUSE_S,
+ STOP_S,
+ END_S,
+ ERROR_S,
+} input_state_e;
+
+/**
+ * Input rate.
+ *
+ * It is an integer used by the variable "rate" in the
+ * range [INPUT_RATE_MIN, INPUT_RATE_MAX] the default value
+ * being INPUT_RATE_DEFAULT.
+ *
+ * A value lower than INPUT_RATE_DEFAULT plays faster.
+ * A value higher than INPUT_RATE_DEFAULT plays slower.
+ */
+
+/**
+ * Default rate value
+ */
+#define INPUT_RATE_DEFAULT 1000
+/**
+ * Minimal rate value
+ */
+#define INPUT_RATE_MIN 32 /* Up to 32/1 */
+/**
+ * Maximal rate value
+ */
+#define INPUT_RATE_MAX 32000 /* Up to 1/32 */
+
+/**
+ * Input events
+ *
+ * You can catch input event by adding a callback on the variable "intf-event".
+ * This variable is an integer that will hold a input_event_type_e value.
+ */
+typedef enum input_event_type_e
+{
+ /* "state" has changed */
+ INPUT_EVENT_STATE,
+ /* "rate" has changed */
+ INPUT_EVENT_RATE,
+ /* At least one of "position" or "time" or "length" has changed */
+ INPUT_EVENT_TIMES,
+
+ /* A title has been added or removed or selected.
+ * It imply that chapter has changed (not chapter event is sent) */
+ INPUT_EVENT_TITLE,
+ /* A chapter has been added or removed or selected. */
+ INPUT_EVENT_CHAPTER,
+
+ /* A program has been added or removed or selected */
+ INPUT_EVENT_PROGRAM,
+ /* A ES has been added or removed or selected */
+ INPUT_EVENT_ES,
+
+ /* "record" has changed */
+ INPUT_EVENT_RECORD,
+
+ /* A vout has been created/deleted by *the input*
+ * FIXME some event are not detected yet (audio visualisation) */
+ INPUT_EVENT_VOUT,
+
+ /* input_item_t media has changed */
+ INPUT_EVENT_ITEM_META,
+ /* input_item_t info has changed */
+ INPUT_EVENT_ITEM_INFO,
+ /* input_item_t name has changed */
+ INPUT_EVENT_ITEM_NAME,
+
+ /* Input statistics have been updated */
+ INPUT_EVENT_STATISTICS,
+ /* At least one of "signal-quality" or "signal-strength" has changed */
+ INPUT_EVENT_SIGNAL,
+
+ /* "audio-delay" has changed */
+ INPUT_EVENT_AUDIO_DELAY,
+ /* "spu-delay" has changed */
+ INPUT_EVENT_SUBTITLE_DELAY,
+
+} input_event_type_e;
+
+/** @}*/
+
/*****************************************************************************
* Prototypes
*****************************************************************************/
#include "input_internal.h"
#include "event.h"
+static void Trigger( input_thread_t *p_input, int i_type );
+
/*****************************************************************************
* Event for input.c
*****************************************************************************/
val.i_time = p_times->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_TIMES );
}
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 )
{
val.i_int = 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 )
{
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 )
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 ? */
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 )
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_UNUSED( i_title );
val.i_int = i_seekpoint;
- var_Change( p_input, "chapter", VLC_VAR_SETVALUE, &val, NULL);
+ var_Change( p_input, "chapter", VLC_VAR_SETVALUE, &val, NULL );
- //var_SetBool( p_input, "intf-change-seekpoint" ); /* TODO. Merge with intf-change-title ? */
+ 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;
+
+ val.f_float = f_quality;
+ var_Change( p_input, "signal-quality", VLC_VAR_SETVALUE, &val, NULL );
- /* TODO use Change and then a intf-change-signal instead ? */
+ 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 )
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 );
/* FIXME remove this ugliness */
vlc_event_t event;
vlc_event_send( &p_input->p->event_manager, &event );
}
-#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;
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 */
vlc_event_t 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 */
vlc_event_t event;
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" );
+ Trigger( p_input, INPUT_EVENT_PROGRAM );
}
void input_SendEventProgramDel( input_thread_t *p_input, int i_program )
{
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" );
+ Trigger( p_input, INPUT_EVENT_PROGRAM );
}
void input_SendEventProgramSelect( input_thread_t *p_input, int i_program )
{
val.i_int = i_program;
var_Change( p_input, "program", VLC_VAR_SETVALUE, &val, NULL );
- //var_SetBool( p_input, "intf-change-program", true ); /* TODO */
- var_TriggerCallback( p_input, "intf-change" );
+ Trigger( p_input, INPUT_EVENT_PROGRAM );
}
static const char *GetEsVarName( int i_cat )
var_Change( p_input, GetEsVarName( i_cat ), VLC_VAR_CLEARCHOICES, NULL, NULL );
}
- //var_SetBool( p_input, "intf-change-es", true ); /* TODO */
- var_TriggerCallback( p_input, "intf-change" );
+ Trigger( p_input, INPUT_EVENT_ES );
}
void input_SendEventEsAdd( input_thread_t *p_input, int i_cat, int i_id, const char *psz_text )
{
var_Change( p_input, GetEsVarName( i_cat ), 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, INPUT_EVENT_ES );
}
/* i_id == -1 will unselect */
val.i_int = i_id;
var_Change( p_input, GetEsVarName( i_cat ), VLC_VAR_SETVALUE, &val, NULL );
- //var_SetBool( p_input, "intf-change-es", true ); /* TODO */
- var_TriggerCallback( p_input, "intf-change" );
+ Trigger( p_input, INPUT_EVENT_ES );
/* FIXME to remove this ugliness */
vlc_event_t event;
vlc_event_send( &p_input->p->event_manager, &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 );
+}