+typedef struct
+{
+ const char *psz_name;
+ vlc_callback_t callback;
+} vlc_input_callback_t;
+static void InputAddCallbacks( input_thread_t *, const vlc_input_callback_t * );
+static void InputDelCallbacks( input_thread_t *, const vlc_input_callback_t * );
+
+/* List all callbacks added by input */
+#define CALLBACK(name,cb) { name, cb }
+static const vlc_input_callback_t p_input_callbacks[] =
+{
+ CALLBACK( "state", StateCallback ),
+ CALLBACK( "rate", RateCallback ),
+ CALLBACK( "rate-slower", RateCallback ),
+ CALLBACK( "rate-faster", RateCallback ),
+ CALLBACK( "position", PositionCallback ),
+ CALLBACK( "position-offset", PositionCallback ),
+ CALLBACK( "time", TimeCallback ),
+ CALLBACK( "time-offset", TimeCallback ),
+ CALLBACK( "bookmark", BookmarkCallback ),
+ CALLBACK( "program", ProgramCallback ),
+ CALLBACK( "title", TitleCallback ),
+ CALLBACK( "chapter", SeekpointCallback ),
+ CALLBACK( "audio-delay", EsDelayCallback ),
+ CALLBACK( "spu-delay", EsDelayCallback ),
+ CALLBACK( "video-es", ESCallback ),
+ CALLBACK( "audio-es", ESCallback ),
+ CALLBACK( "spu-es", ESCallback ),
+
+ CALLBACK( NULL, NULL )
+};
+static const vlc_input_callback_t p_input_navigation_callbacks[] =
+{
+ CALLBACK( "next-title", TitleCallback ),
+ CALLBACK( "prev-title", TitleCallback ),
+
+ CALLBACK( NULL, NULL )
+};
+static const vlc_input_callback_t p_input_title_callbacks[] =
+{
+ CALLBACK( "next-chapter", SeekpointCallback ),
+ CALLBACK( "prev-chapter", SeekpointCallback ),
+
+ CALLBACK( NULL, NULL )
+};
+#undef CALLBACK
+