summaryrefslogtreecommitdiff
path: root/include/xine.h.in
diff options
context:
space:
mode:
Diffstat (limited to 'include/xine.h.in')
-rw-r--r--include/xine.h.in930
1 files changed, 930 insertions, 0 deletions
diff --git a/include/xine.h.in b/include/xine.h.in
new file mode 100644
index 000000000..7ad0caf7c
--- /dev/null
+++ b/include/xine.h.in
@@ -0,0 +1,930 @@
+/*
+ * Copyright (C) 2000-2002 the xine project
+ *
+ * This file is part of xine, a free video player.
+ *
+ * xine is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * xine is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ *
+ * $Id: xine.h.in,v 1.2 2002/09/04 23:31:06 guenter Exp $
+ *
+ * public xine-lib (libxine) interface and documentation
+ *
+ */
+
+#ifndef HAVE_XINE_H
+#define HAVE_XINE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <sys/types.h>
+#include <unistd.h>
+#include <inttypes.h>
+
+/*
+ * xine opaque data types
+ */
+
+typedef struct xine_s xine_t;
+typedef struct xine_ao_driver_s xine_ao_driver_t;
+typedef struct xine_vo_driver_s xine_vo_driver_t;
+
+/*
+ * pre-init the xine engine
+ *
+ * will first malloc and init a xine_t, create an empty config
+ * system, then scan through all installed plugins and add them
+ * to an internal list for later use.
+ *
+ * to fully init the xine engine, you have to load config values
+ * (either using your own storage method and calling
+ * xine_config_register_entry, or by using the xine_load_config
+ * utility function - see below) and then call xine_open_audio
+ * and xine_open_video to obtain audio/video pointers which
+ * you then pass to the xine_init function.
+ */
+
+xine_t *xine_new (void);
+
+/*
+ * helper functions to find and init audio/video drivers
+ * from xine's plugin collection
+ *
+ * id : identifier of the driver, may be NULL for auto-detection
+ * data : special data struct for ui/driver communications, depends
+ * on driver
+ * visual: video driver flavor selector, constants see below
+ *
+ * both functions may return NULL if driver failed to load, was not
+ * found ...
+ */
+
+xine_ao_driver_t *xine_open_audio_driver (xine_t *self, char *id,
+ void *data);
+
+xine_vo_driver_t *xine_open_video_driver (xine_t *self, char *id,
+ int visual, void *data);
+
+/*
+ * post_init the xine engine, specify audio and video drivers to use
+ */
+
+void xine_init (xine_t *self, xine_ao_driver_t *ao,
+ xine_vo_driver_t *vo);
+
+/*
+ * open a stream
+ *
+ * look for input / demuxer plugins, find out about the format
+ * see if it is supported
+ *
+ * returns 1 if OK, 0 on error (use xine_get_error for details)
+ */
+int xine_open (xine_t *self, char *MRL);
+
+/*
+ * play a stream from a given position
+ * if both start position parameters are != 0 start_pos will be used
+ * for non-seekable streams both values will be ignored
+ *
+ * returns 1 if OK, 0 on error (use xine_get_error for details)
+ */
+int xine_play (xine_t *self, int start_pos, int start_time);
+
+/*
+ * set xine to a trick mode for fast forward, backwards playback,
+ * low latency seeking. Please note that this works only with some
+ * input plugins. mode constants see below.
+ *
+ * returns 1 if OK, 0 on error (use xine_get_error for details)
+ */
+int xine_trick_mode (xine_t *self, int mode, int value);
+
+/*
+ * get information about the stream such as
+ * video width/height, codecs, audio format, ...
+ *
+ * constants see below
+ */
+
+uint32_t xine_get_stream_info (xine_t *self, int info);
+
+/*
+ * stop playback
+ */
+void xine_stop (xine_t *self);
+
+/*
+ * ask current/recent input plugin to eject media - may or may not work,
+ * depending on input plugin capabilities
+ */
+int xine_eject(xine_t *self);
+
+/*
+ * free all resources, close all plugins, close engine.
+ * self pointer is no longer valid after this call.
+ */
+void xine_exit (xine_t *self);
+
+/*
+ * error handling / engine status
+ */
+
+/* return last error */
+int xine_get_error (xine_t *self);
+
+/* get current xine engine status (constants see below) */
+int xine_get_status (xine_t *self);
+
+/*
+ * set/get xine engine parameters
+ * e.g. playback speed, constants see below
+ */
+
+void xine_set_param (xine_t *self, int param, int value);
+int xine_get_param (xine_t *self, int param);
+
+/*
+ * try to find out audio/spu language of given channel
+ * (use -1 for current channel)
+ * returns 1 if ok, 0 on failure
+ */
+int xine_get_audio_lang (xine_t *self, int channel, char *str);
+int xine_get_spu_lang (xine_t *self, int channel, char *str);
+
+/*
+ * check if the stream is seekable (at the moment).
+ * this state may change during playback
+ */
+int xine_is_stream_seekable (xine_t *self);
+
+/*
+ * get position / length information
+ *
+ * depending of the nature and system layer of the stream,
+ * some or all of this information may be unavailable or incorrect
+ * (e.g. live network streams may not have a valid length)
+ */
+
+int xine_get_pos_length (xine_t *self,
+ int *pos_stream, /* 0..65535 */
+ int *pos_time, /* milliseconds */
+ int *length_time);/* milliseconds */
+
+
+/*
+ * snapshot function
+ *
+ * image format can be YUV 4:2:0 or 4:2:2
+ * will copy the image data into memory that <img> points to
+ * (interleaved for yuv 4:2:2 or planary for 4:2:0)
+ *
+ * returns 1 on success, 0 failure.
+ */
+int xine_get_current_frame (xine_t *self, int *width, int *height,
+ int *ratio_code, int *format,
+ uint8_t *img);
+
+/* xine image formats */
+
+#define XINE_IMGFMT_YV12 0x32315659
+#define XINE_IMGFMT_YUY2 (('2'<<24)|('Y'<<16)|('U'<<8)|'Y')
+
+
+/*
+ * xine log functions
+ *
+ * frontends can display xine log output using these functions
+ */
+
+int xine_get_log_section_count(xine_t *self);
+
+/* return a NULL terminated array of log sections names
+ note: do not free returned pointer */
+char **xine_get_log_names(xine_t *self);
+
+/* print some log information to <buf> section */
+void xine_log (xine_t *self, int buf,
+ const char *format, ...);
+
+/* get log messages of specified section
+ note: do not free returned pointer */
+char **xine_get_log (xine_t *self, int buf);
+
+/* log callback will be called whenever something is logged */
+typedef void (*xine_log_cb_t) (void *user_data, int section);
+void xine_register_log_cb (xine_t *self, xine_log_cb_t *cb, void *user_data);
+
+/*
+ * codec reporting callback.
+ *
+ * codec_type : type of codec being reported
+ * (XINE_CODEC_AUDIO/XINE_CODEC_VIDEO)
+ * fourcc : codec identifier (fourcc) in machine endianness
+ * (only valid if description is empty FIXME: why?)
+ * description : description or human readable codec name ("" if unkown)
+ * handled : if true, the plugin exist and will be used
+ * otherwise it's an error condition
+ * (plugin not found or codec unknown)
+ */
+
+#define XINE_CODEC_AUDIO 0
+#define XINE_CODEC_VIDEO 1
+
+typedef void (*xine_report_codec_cb_t) (void *user_data, int codec_type,
+ uint32_t fourcc, char *description,
+ int handled);
+/*
+ * register an codec reporting callback
+ *
+ * report_codec : callback function (see above)
+ * user_data : will be used as first parameter to callback
+ *
+ * returns 1 if the callback was registerd, 0 if it could not.
+ */
+int xine_register_report_codec_cb(xine_t *self,
+ xine_report_codec_cb_t report_codec,
+ void *user_data);
+
+
+/*
+ * xine error codes
+ */
+
+#define XINE_ERROR_NONE 0
+#define XINE_ERROR_NO_INPUT_PLUGIN 1
+#define XINE_ERROR_NO_DEMUXER_PLUGIN 2
+#define XINE_ERROR_DEMUXER_FAILED 3
+
+/*
+ * xine engine parameters
+ */
+
+#define XINE_PARAM_SPEED 1
+#define XINE_PARAM_AV_OFFSET 2
+#define XINE_PARAM_AUDIO_CHANNEL_LOGICAL 3
+#define XINE_PARAM_SPU_CHANNEL 4
+#define XINE_PARAM_VIDEO_CHANNEL 5
+
+/* stream format detection strategies */
+
+/* recognize stream type first by content then by extension. */
+#define XINE_DEMUX_DEFAULT_STRATEGY 0
+/* recognize stream type first by extension then by content. */
+#define XINE_DEMUX_REVERT_STRATEGY 1
+/* recognize stream type by content only. */
+#define XINE_DEMUX_CONTENT_STRATEGY 2
+/* recognize stream type by extension only. */
+#define XINE_DEMUX_EXTENSION_STRATEGY 3
+
+/*
+ * engine status codes
+ */
+
+#define XINE_STATUS_STOP 0
+#define XINE_STATUS_PLAY 1
+#define XINE_STATUS_QUIT 2
+#define XINE_STATUS_LOGO 3
+
+
+/* speed values */
+#define XINE_SPEED_PAUSE 0
+#define XINE_SPEED_SLOW_4 1
+#define XINE_SPEED_SLOW_2 2
+#define XINE_SPEED_NORMAL 4
+#define XINE_SPEED_FAST_2 8
+#define XINE_SPEED_FAST_4 16
+
+/* trick modes */
+
+#define XINE_TRICK_MODE_OFF 0
+#define XINE_TRICK_MODE_SEEK_TO_POSITION 1
+#define XINE_TRICK_MODE_SEEK_TO_TIME 2
+#define XINE_TRICK_MODE_FAST_FORWARD 3
+#define XINE_TRICK_MODE_FAST_REWIND 4
+
+/* xine_get_stream_info */
+
+#define XINE_STREAM_INFO_WIDTH 0
+#define XINE_STREAM_INFO_HEIGHT 1
+#define XINE_STREAM_INFO_SEEKABLE 2
+#define XINE_STREAM_INFO_VIDEO_FOURCC 3
+#define XINE_STREAM_INFO_VIDEO_CHANNELS 4
+#define XINE_STREAM_INFO_VIDEO_STREAMS 5
+#define XINE_STREAM_INFO_AUDIO_FOURCC 6
+#define XINE_STREAM_INFO_AUDIO_CHANNELS 7
+#define XINE_STREAM_INFO_AUDIO_BITS 8
+#define XINE_STREAM_INFO_AUDIO_SAMPLERATE 9
+
+/*
+ * video stuff
+ */
+
+/* valid visual types */
+
+#define XINE_VISUAL_TYPE_X11 1
+#define XINE_VISUAL_TYPE_AA 2
+#define XINE_VISUAL_TYPE_FB 3
+#define XINE_VISUAL_TYPE_GTK 4
+#define XINE_VISUAL_TYPE_DFB 5
+
+/* video parameters */
+#define XINE_PARAM_VO_DEINTERLACE 0x01000001
+#define XINE_PARAM_VO_ASPECT_RATIO 0x01000002
+#define XINE_PARAM_VO_HUE 0x01000003
+#define XINE_PARAM_VO_SATURATION 0x01000004
+#define XINE_PARAM_VO_CONTRAST 0x01000005
+#define XINE_PARAM_VO_BRIGHTNESS 0x01000006
+#define XINE_PARAM_VO_ZOOM 0x01000007
+#define XINE_PARAM_VO_PAN_SCAN 0x01000008
+#define XINE_PARAM_VO_TVMODE 0x01000009
+
+#define XINE_VO_ZOOM_STEP 100
+#define XINE_VO_ZOOM_MAX 400
+#define XINE_VO_ZOOM_MIN -85
+
+
+/* possible ratios for XINE_PARAM_VO_ASPECT_RATIO */
+#define XINE_VO_ASPECT_AUTO 0
+#define XINE_VO_ASPECT_ANAMORPHIC 1 /* 16:9 */
+#define XINE_VO_ASPECT_4_3 2 /* 4:3 */
+#define XINE_VO_ASPECT_DVB 3 /* 1:2 */
+#define XINE_VO_ASPECT_SQUARE 4 /* 1:1 */
+#define XINE_VO_ASPECT_NUM_RATIOS 5
+#define XINE_VO_ASPECT_PAN_SCAN 41
+#define XINE_VO_ASPECT_DONT_TOUCH 42
+
+/*
+ * audio stuff
+ */
+
+#define XINE_PARAM_AO_MIXER_VOL 0x02000001
+#define XINE_PARAM_AO_PCM_VOL 0x02000002
+#define XINE_PARAM_AO_MUTE 0x02000003
+
+/*
+ * autoplay / mrl browsing
+ */
+
+typedef struct {
+ char *origin; /* file plugin: path */
+ char *mrl; /* <type>://<location> */
+ char *link;
+ uint32_t type; /* see below */
+ off_t size; /* size of this source, may be 0 */
+} xine_mrl_t;
+
+/* mrl types */
+
+#define XINE_MRL_TYPE_unknown (0 << 0)
+#define XINE_MRL_TYPE_dvd (1 << 0)
+#define XINE_MRL_TYPE_vcd (1 << 1)
+#define XINE_MRL_TYPE_net (1 << 2)
+#define XINE_MRL_TYPE_rtp (1 << 3)
+#define XINE_MRL_TYPE_stdin (1 << 4)
+#define XINE_MRL_TYPE_cda (1 << 5)
+#define XINE_MRL_TYPE_file (1 << 6)
+#define XINE_MRL_TYPE_file_fifo (1 << 7)
+#define XINE_MRL_TYPE_file_chardev (1 << 8)
+#define XINE_MRL_TYPE_file_directory (1 << 9)
+#define XINE_MRL_TYPE_file_blockdev (1 << 10)
+#define XINE_MRL_TYPE_file_normal (1 << 11)
+#define XINE_MRL_TYPE_file_symlink (1 << 12)
+#define XINE_MRL_TYPE_file_sock (1 << 13)
+#define XINE_MRL_TYPE_file_exec (1 << 14)
+#define XINE_MRL_TYPE_file_backup (1 << 15)
+#define XINE_MRL_TYPE_file_hidden (1 << 16)
+
+/* get a list of browsable input plugin ids */
+char **xine_get_browsable_input_plugin_ids (xine_t *self) ;
+
+
+/*
+ * ask input plugin named <plugin_id> to return
+ * a list of available MRLs in domain/directory <start_mrl>.
+ *
+ * <start_mrl> may be NULL indicating the toplevel domain/dir
+ * returns <start_mrl> if <start_mrl> is a valid MRL, not a directory
+ * returns NULL if <start_mrl> is an invalid MRL, not even a directory.
+ */
+xine_mrl_t **xine_get_browse_mrls (xine_t *self, char *plugin_id,
+ char *start_mrl,
+ int *num_mrls);
+
+/* get a list of plugins that support the autoplay feature */
+char **xine_get_autoplay_input_plugin_ids (xine_t *self);
+
+/* get autoplay MRL list from input plugin named <plugin_id> */
+char **xine_get_autoplay_mrls (xine_t *self, char *plugin_id, int *num_mrls);
+
+/*
+ * visual specific gui <-> xine engine communication
+ */
+
+/* talk to video output driver */
+int xine_gui_send_vo_data (xine_t *self,
+ int type, void *data);
+
+typedef struct {
+
+ /* area of that drawable to be used by video */
+ int x,y,w,h;
+
+} x11_rectangle_t;
+
+/*
+ * this is the visual data struct any x11 gui
+ * must supply to the xine_open_video_driver call
+ * ("data" parameter)
+ */
+
+typedef struct {
+
+ /* some information about the display */
+ void *display; /* Display* */
+ int screen;
+
+ /* drawable to display the video in/on */
+ unsigned long d; /* Drawable */
+
+ void *user_data;
+
+ /*
+ * dest size callback
+ *
+ * this will be called by the video driver to find out
+ * how big the video output area size will be for a
+ * given video size. The ui should _not_ adjust it's
+ * video out area, just do some calculations and return
+ * the size. This will be called for every frame, ui
+ * implementation should be fast.
+ * dest_pixel_aspect should be set to the used display pixel aspect.
+ * NOTE: Semantics has changed: video_width and video_height
+ * are no longer pixel aspect corrected. Get the old semantics
+ * in the UI with
+ * *dest_pixel_aspect = display_pixel_aspect;
+ * if (video_pixel_aspect >= display_pixel_aspect)
+ * video_width = video_width * video_pixel_aspect / display_pixel_aspect + .5;
+ * else
+ * video_height = video_height * display_pixel_aspect / video_pixel_aspect + .5;
+ */
+ void (*dest_size_cb) (void *user_data,
+ int video_width, int video_height,
+ double video_pixel_aspect,
+ int *dest_width, int *dest_height,
+ double *dest_pixel_aspect);
+
+ /*
+ * frame output callback
+ *
+ * this will be called by the video driver for every frame
+ * it's about to draw. ui can adapt it's size if necessary
+ * here.
+ * note: the ui doesn't have to adjust itself to this
+ * size, this is just to be taken as a hint.
+ * ui must return the actual size of the video output
+ * area and the video output driver will do it's best
+ * to adjust the video frames to that size (while
+ * preserving aspect ratio and stuff).
+ * dest_x, dest_y: offset inside window
+ * dest_width, dest_height: available drawing space
+ * dest_pixel_aspect: display pixel aspect
+ * win_x, win_y: window absolute screen position
+ * NOTE: Semantics has changed: video_width and video_height
+ * are no longer pixel aspect corrected. Get the old semantics
+ * in the UI with
+ * *dest_pixel_aspect = display_pixel_aspect;
+ * if (video_pixel_aspect >= display_pixel_aspect)
+ * video_width = video_width * video_pixel_aspect / display_pixel_aspect + .5;
+ * else
+ * video_height = video_height * display_pixel_aspect / video_pixel_aspect + .5;
+ */
+ void (*frame_output_cb) (void *user_data,
+ int video_width, int video_height,
+ double video_pixel_aspect,
+ int *dest_x, int *dest_y,
+ int *dest_width, int *dest_height,
+ double *dest_pixel_aspect,
+ int *win_x, int *win_y);
+
+} x11_visual_t;
+
+/*
+ * "type" constants for xine_gui_send_vo_data (...)
+ */
+
+/* xevent *data */
+#define XINE_GUI_SEND_COMPLETION_EVENT 1
+/* Drawable has changed */
+#define XINE_GUI_SEND_DRAWABLE_CHANGED 2
+/* xevent *data */
+#define XINE_GUI_SEND_EXPOSE_EVENT 3
+/* x11_rectangle_t *data */
+#define XINE_GUI_SEND_TRANSLATE_GUI_TO_VIDEO 4
+/* int *data */
+#define XINE_GUI_SEND_VIDEOWIN_VISIBLE 5
+
+/* *data contains chosen visual, select a new one or change it to NULL
+ * to indicate the visual to use or that no visual will work */
+/* XVisualInfo **data */
+#define XINE_GUI_SEND_SELECT_VISUAL 8
+
+/*
+ * xine-config stuff
+ */
+
+/*
+ * config entry data types
+ */
+
+#define XINE_CONFIG_TYPE_UNKNOWN 0
+#define XINE_CONFIG_TYPE_RANGE 1
+#define XINE_CONFIG_TYPE_STRING 2
+#define XINE_CONFIG_TYPE_ENUM 3
+#define XINE_CONFIG_TYPE_NUM 4
+#define XINE_CONFIG_TYPE_BOOL 5
+
+typedef struct xine_cfg_entry_s xine_cfg_entry_t;
+
+typedef void (*xine_config_cb_t) (void *user_data,
+ xine_cfg_entry_t *entry);
+struct xine_cfg_entry_s {
+ char *key; /* unique id (example: gui.logo_mrl) */
+
+ int type;
+
+ /* type unknown */
+ char *unknown_value;
+
+ /* type string */
+ char *str_value;
+ char *str_default;
+ char *str_sticky;
+
+ /* common to range, enum, num, bool: */
+ int num_value;
+ int num_default;
+
+ /* type range specific: */
+ int range_min;
+ int range_max;
+
+ /* type enum specific: */
+ char **enum_values;
+
+ /* help info for the user */
+ char *description;
+ char *help;
+
+ /* user experience level */
+ int exp_level; /* 0 => beginner,
+ 10 => advanced user,
+ 20 => expert */
+
+ /* callback function and data for live changeable values */
+ xine_config_cb_t callback;
+ void *callback_data;
+
+};
+
+char* xine_config_register_string (xine_t *self,
+ char *key,
+ char *def_value,
+ char *description,
+ char *help,
+ int exp_level,
+ xine_config_cb_t changed_cb,
+ void *cb_data);
+
+int xine_config_register_range (xine_t *self,
+ char *key,
+ int def_value,
+ int min, int max,
+ char *description,
+ char *help,
+ int exp_level,
+ xine_config_cb_t changed_cb,
+ void *cb_data);
+
+int xine_config_register_enum (xine_t *self,
+ char *key,
+ int def_value,
+ char **values,
+ char *description,
+ char *help,
+ int exp_level,
+ xine_config_cb_t changed_cb,
+ void *cb_data);
+
+int xine_config_register_num (xine_t *self,
+ char *key,
+ int def_value,
+ char *description,
+ char *help,
+ int exp_level,
+ xine_config_cb_t changed_cb,
+ void *cb_data);
+
+int xine_config_register_bool (xine_t *self,
+ char *key,
+ int def_value,
+ char *description,
+ char *help,
+ int exp_level,
+ xine_config_cb_t changed_cb,
+ void *cb_data);
+
+/*
+ * get first config item
+ */
+xine_cfg_entry_t *xine_config_get_first_entry (xine_t *self);
+
+/*
+ * get next config item (iterate through the items)
+ * this will return NULL when called after returning the last item
+ */
+xine_cfg_entry_t *xine_config_get_next_entry (xine_t *self);
+
+/*
+ * search for a config entry by key
+ */
+
+xine_cfg_entry_t *xine_config_lookup_entry (xine_t *self,
+ char *key);
+
+/*
+ * update a config entry (which was returned from lookup_entry() )
+ */
+void xine_config_update_entry (xine_t *self,
+ xine_cfg_entry_t *entry);
+
+/*
+ * load/save config data from/to afile (e.g. $HOME/.xine/config)
+ */
+void xine_load_config (xine_t *self,
+ char *cfg_filename);
+void xine_save_config (xine_t *self,
+ char *cfg_filename);
+void xine_reset_config (xine_t *self);
+
+/*
+ * xine event mechanism
+ *
+ * WARNING: events can be used to break all abstraction
+ * layers in xine. they also are likely to cause
+ * deadlocks - so handle with care.
+ */
+
+/* event types */
+
+#define XINE_EVENT_MOUSE_BUTTON 1
+#define XINE_EVENT_MOUSE_MOVE 2
+#define XINE_EVENT_SPU_BUTTON 3
+#define XINE_EVENT_SPU_CLUT 4
+#define XINE_EVENT_UI_CHANNELS_CHANGED 5 /* inform ui that new channel info is available */
+#define XINE_EVENT_UI_SET_TITLE 6 /* request title display change in ui */
+#define XINE_EVENT_INPUT_MENU1 7
+#define XINE_EVENT_INPUT_MENU2 8
+#define XINE_EVENT_INPUT_MENU3 9
+#define XINE_EVENT_INPUT_UP 10
+#define XINE_EVENT_INPUT_DOWN 11
+#define XINE_EVENT_INPUT_LEFT 12
+#define XINE_EVENT_INPUT_RIGHT 13
+#define XINE_EVENT_INPUT_SELECT 14
+#define XINE_EVENT_PLAYBACK_FINISHED 15
+#define XINE_EVENT_BRANCHED 16
+#define XINE_EVENT_NEED_NEXT_MRL 17
+#define XINE_EVENT_INPUT_NEXT 18
+#define XINE_EVENT_INPUT_PREVIOUS 19
+#define XINE_EVENT_INPUT_ANGLE_NEXT 20
+#define XINE_EVENT_INPUT_ANGLE_PREVIOUS 21
+#define XINE_EVENT_SPU_FORCEDISPLAY 22
+#define XINE_EVENT_FRAME_CHANGE 23
+#define XINE_EVENT_CLOSED_CAPTION 24
+#define XINE_EVENT_INPUT_BUTTON_FORCE 25
+#define XINE_EVENT_INPUT_MENU4 26
+#define XINE_EVENT_INPUT_MENU5 27
+#define XINE_EVENT_INPUT_MENU6 28
+#define XINE_EVENT_INPUT_MENU7 29
+
+#define XINE_EVENT_INPUT_NUMBER_0 30
+#define XINE_EVENT_INPUT_NUMBER_1 31
+#define XINE_EVENT_INPUT_NUMBER_2 32
+#define XINE_EVENT_INPUT_NUMBER_3 33
+#define XINE_EVENT_INPUT_NUMBER_4 34
+#define XINE_EVENT_INPUT_NUMBER_5 35
+#define XINE_EVENT_INPUT_NUMBER_6 36
+#define XINE_EVENT_INPUT_NUMBER_7 37
+#define XINE_EVENT_INPUT_NUMBER_8 38
+#define XINE_EVENT_INPUT_NUMBER_9 39
+#define XINE_EVENT_INPUT_NUMBER_10_ADD 40
+
+#define XINE_EVENT_ASPECT_CHANGE 41 /* Generally should be viewed as a hint to the GUI */
+#define XINE_EVENT_OUTPUT_VIDEO 42
+#define XINE_EVENT_OUTPUT_NO_VIDEO 43
+
+/*
+ * generic event type.
+ */
+typedef struct {
+ uint32_t type; /* The event type (determines remainder of struct) */
+
+ /* Event dependent data goes after this. */
+} xine_event_t;
+
+/*
+ * input events
+ */
+typedef struct {
+ xine_event_t event;
+ uint8_t button; /* Generally 1 = left, 2 = mid, 3 = right */
+ uint16_t x,y; /* In Image space */
+} xine_input_event_t;
+
+/*
+ * Menu events
+ */
+typedef struct {
+ xine_event_t event;
+ uint8_t button; /* Generally 1 = left, 2 = mid, 3 = right */
+ uint16_t status; /* 0:no status, 1:selected, 2:actioned */
+ uint8_t command[8]; /* DVD virtual machine command. */
+} xine_menu_event_t;
+
+/*
+ * SPU event - send control events to the spu decoder
+ */
+typedef struct {
+ xine_event_t event;
+ void *data;
+} xine_spu_event_t;
+
+/*
+ * UI event - send information to/from UI.
+ */
+
+typedef struct {
+ xine_event_t event;
+ void *data;
+ uint32_t data_len;
+ int handled;
+} xine_ui_event_t;
+
+/*
+ * next_mrl
+ */
+typedef struct {
+ xine_event_t event;
+ char *mrl;
+ int handled;
+} xine_next_mrl_event_t;
+
+/*
+ * notify frame change
+ */
+typedef struct {
+ xine_event_t event;
+ int width;
+ int height;
+ int aspect;
+} xine_frame_change_event_t;
+
+/*
+ * closed caption
+ */
+typedef struct {
+ xine_event_t event;
+ uint8_t *buffer;
+ uint32_t buf_len;
+ int64_t pts;
+ uint32_t scr;
+} xine_closed_caption_event_t;
+
+/* event listener callback */
+typedef void (*xine_event_listener_cb_t) (void *user_data,
+ xine_event_t *event);
+
+/* register an event listener callback */
+int xine_register_event_listener (xine_t *self,
+ xine_event_listener_cb_t listener,
+ void *user_data);
+
+int xine_remove_event_listener (xine_t *self,
+ xine_event_listener_cb_t listener);
+
+/* send an event to all event listeners */
+void xine_send_event (xine_t *self, xine_event_t *event);
+
+
+
+/*
+ * OSD (on screen display)
+ */
+
+#define XINE_TEXT_PALETTE_SIZE 11
+
+#define XINE_OSD_TEXT1 (0 * XINE_TEXT_PALETTE_SIZE)
+#define XINE_OSD_TEXT2 (1 * XINE_TEXT_PALETTE_SIZE)
+#define XINE_OSD_TEXT3 (2 * XINE_TEXT_PALETTE_SIZE)
+#define XINE_OSD_TEXT4 (3 * XINE_TEXT_PALETTE_SIZE)
+#define XINE_OSD_TEXT5 (4 * XINE_TEXT_PALETTE_SIZE)
+#define XINE_OSD_TEXT6 (5 * XINE_TEXT_PALETTE_SIZE)
+#define XINE_OSD_TEXT7 (6 * XINE_TEXT_PALETTE_SIZE)
+#define XINE_OSD_TEXT8 (7 * XINE_TEXT_PALETTE_SIZE)
+#define XINE_OSD_TEXT9 (8 * XINE_TEXT_PALETTE_SIZE)
+#define XINE_OSD_TEXT10 (9 * XINE_TEXT_PALETTE_SIZE)
+
+/* white text, black border, transparent background */
+#define XINE_TEXTPALETTE_WHITE_BLACK_TRANSPARENT 0
+/* white text, noborder, transparent background */
+#define XINE_TEXTPALETTE_WHITE_NONE_TRANSPARENT 1
+/* white text, no border, translucid background */
+#define XINE_TEXTPALETTE_WHITE_NONE_TRANSLUCID 2
+/* yellow text, black border, transparent background */
+#define XINE_TEXTPALETTE_YELLOW_BLACK_TRANSPARENT 3
+
+typedef struct xine_osd_s xine_osd_t;
+
+xine_osd_t *xine_osd_new (xine_t *self, int x, int y,
+ int width, int height);
+void xine_osd_draw_point (xine_osd_t *self, int x, int y, int color);
+
+void xine_osd_draw_line (xine_osd_t *self, int x1, int y1,
+ int x2, int y2, int color);
+void xine_osd_draw_rect (xine_osd_t *self, int x1, int y1,
+ int x2, int y2,
+ int color, int filled );
+void xine_osd_draw_text (xine_osd_t *self, int x1, int y1,
+ char *text, int color_base);
+void xine_osd_get_text_size (xine_osd_t *self, char *text,
+ int *width, int *height);
+void xine_osd_set_font (xine_osd_t *self, char *fontname,
+ int size);
+/* set position were overlay will be blended */
+void xine_osd_set_position (xine_osd_t *osd, int x, int y);
+void xine_osd_show (xine_osd_t *self, int64_t vpts);
+void xine_osd_hide (xine_osd_t *self, int64_t vpts);
+/* empty drawing area */
+void xine_osd_clear (xine_osd_t *self);
+/*
+ * close osd rendering engine
+ * loaded fonts are unloaded
+ * osd objects are closed
+ */
+void xine_osd_free (xine_osd_t *self);
+void xine_osd_set_palette (xine_osd_t *self, uint32_t *color,
+ uint8_t *trans );
+/*
+ * set on existing text palette
+ * (-1 to set used specified palette)
+ *
+ * color_base specifies the first color index to use for this text
+ * palette. The OSD palette is then modified starting at this
+ * color index, up to the size of the text palette.
+ *
+ * Use OSD_TEXT1, OSD_TEXT2, ... for some preasssigned color indices.
+ */
+void xine_osd_set_text_palette (xine_osd_t *osd,
+ int palette_number,
+ int color_base );
+/* get palette (color and transparency) */
+void xine_osd_get_palette (xine_osd_t *osd, uint32_t *color,
+ uint8_t *trans);
+
+
+/*
+ * version information
+ */
+
+/* dynamic info from actually linked libxine */
+
+void xine_get_version (int *major, int *minor, int *sub);
+
+/* compare given version to libxine version,
+ return 1 if compatible, 0 otherwise */
+int xine_check_version(int major, int minor, int sub) ;
+
+/* static info - which libxine release this header came from */
+
+#define XINE_MAJOR_VERSION @XINE_MAJOR@
+#define XINE_MINOR_VERSION @XINE_MINOR@
+#define XINE_SUB_VERSION @XINE_SUB@
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif