X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_osd.h;h=2b15c39062acba5201eafeb08bb852c9876b8b16;hb=a82fd8f9dd412c48d3989bb5ae99c4153edd9ea8;hp=0eb2cb1c68cda37b05cd8398a960e2e18f084c20;hpb=d3fe7f28797d4dba65ffcdd60bf932e758a48a9e;p=vlc diff --git a/include/vlc_osd.h b/include/vlc_osd.h index 0eb2cb1c68..2b15c39062 100644 --- a/include/vlc_osd.h +++ b/include/vlc_osd.h @@ -1,7 +1,7 @@ /***************************************************************************** * vlc_osd.h - OSD menu and subpictures definitions and function prototypes ***************************************************************************** - * Copyright (Cà 1999-2006 the VideoLAN team + * Copyright (C) 1999-2006 the VideoLAN team * Copyright (C) 2004-2005 M2X * $Id$ * @@ -27,6 +27,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ +#if !defined( __LIBVLC__ ) + #error You are not libvlc or one of its plugins. You cannot include this file +#endif + #ifndef _VLC_OSD_H #define _VLC_OSD_H 1 @@ -84,6 +88,7 @@ static inline int spu_vaControl( spu_t *p_spu, int i_query, va_list args ) else return VLC_EGENERIC; } + static inline int spu_Control( spu_t *p_spu, int i_query, ... ) { va_list args; @@ -142,6 +147,12 @@ VLC_EXPORT( void, spu_RenderSubpictures, ( spu_t *, video_format_t *, picture_t * --sout='#transcode{osd}:std{access=udp,mux=ts,dst=dest_ipaddr}' * --osdmenu-file=share/osdmenu/dvd.cfg * + * An example for local usage of the OSD menu is: + * + * vlc dvdsimple:///dev/dvd --extraintf rc + * --sub-filter osdmenu + * --osdmenu-file=share/osdmenu/dvd.cfg + * * Each OSD menu element, called "action", defines a hotkey action. Each action * can have several states (unselect, select, pressed). Each state has an image * that represents the state visually. The commands "menu right", "menu left", @@ -173,8 +184,9 @@ VLC_EXPORT( void, spu_RenderSubpictures, ( spu_t *, video_format_t *, picture_t * * CONFIG_FILE = FILENAME '.cfg' * WS = [ ' ' | '\t' ]+ - * OSDMEN_PATH = PATHNAME + * OSDMENU_PATH = PATHNAME * DIR = 'dir' WS OSDMENU_PATH '\n' + * STYLE = 'style' [ 'default' | 'concat' ] '\n' * STATE = [ 'unselect' | 'select' | 'pressed' ] * HOTKEY_ACTION = 'key-' [ 'a' .. 'z', 'A' .. 'Z', '-' ]+ * @@ -238,10 +250,13 @@ struct text_style_t int i_background_alpha;/**< The transparency of the background. 0x00 is fully opaque, 0xFF fully transparent */ + int i_karaoke_background_color;/**< Background color for karaoke 0xRRGGBB */ + int i_karaoke_background_alpha;/**< The transparency of the karaoke bg. + 0x00 is fully opaque, + 0xFF fully transparent */ int i_outline_width; /**< The width of the outline in pixels */ int i_shadow_width; /**< The width of the shadow in pixels */ int i_spacing; /**< The spaceing between glyphs in pixels */ - int i_text_align; /**< An alignment hint for the text */ }; /* Style flags for \ref text_style_t */ @@ -254,9 +269,7 @@ struct text_style_t #define STYLE_STRIKEOUT 64 static const text_style_t default_text_style = { NULL, 22, 0xffffff, 0xff, STYLE_OUTLINE, - 0x000000, 0xff, 0x000000, 0xff, 0xffffff, 0x80, 1, 0, -1, 0 }; - - + 0x000000, 0xff, 0x000000, 0xff, 0xffffff, 0x80, 0xffffff, 0xff, 1, 0, -1 }; /** * OSD menu button states @@ -287,6 +300,11 @@ struct osd_state_t char *psz_state; /*< state name */ int i_state; /*< state index */ + + int i_x; /*< x-position of button state image */ + int i_y; /*< y-position of button state image */ + int i_width; /*< width of button state image */ + int i_height; /*< height of button state image */ }; /** @@ -315,12 +333,28 @@ struct osd_button_t int i_x; /*< x-position of button visible state image */ int i_y; /*< y-position of button visible state image */ + int i_width; /*< width of button visible state image */ + int i_height; /*< height of button visible state image */ /* range style button */ vlc_bool_t b_range; /*< button should be interpreted as range */ int i_ranges; /*< number of states */ }; +/** + * OSD Menu Style + * + * The images that make up an OSD menu can be created in such away that + * they contain all buttons in the same picture, with the selected one + * highlighted or being a concatenation of all the seperate images. The + * first case is the default. + * + * To change the default style the keyword 'style' should be set to 'concat'. + */ + +#define OSD_MENU_STYLE_SIMPLE 0x0 +#define OSD_MENU_STYLE_CONCAT 0x1 + /** * OSD Menu State object * @@ -359,6 +393,8 @@ struct osd_menu_t int i_y; /*< y-position of OSD Menu on the video screen */ int i_width; /*< width of OSD Menu on the video screen */ int i_height; /*< height of OSD Menu on the video screen */ + int i_style; /*< style of spu region generation */ + int i_position; /*< display position */ char *psz_path; /*< directory where OSD menu images are stored */ osd_button_t *p_button; /*< doubly linked list of buttons */ @@ -366,6 +402,11 @@ struct osd_menu_t /* quick link in the linked list. */ osd_button_t *p_last_button; /*< pointer to last button in the list */ + + /* misc parser */ + module_t *p_parser; /*< pointer to parser module */ + char *psz_file; /*< Config file name */ + image_handler_t *p_image; /*< handler to image loading and conversion libraries */ }; /** @@ -386,20 +427,23 @@ VLC_EXPORT( osd_menu_t *, __osd_MenuCreate, ( vlc_object_t *, const char * ) ); */ VLC_EXPORT( void, __osd_MenuDelete, ( vlc_object_t *, osd_menu_t * ) ); +#define osd_MenuCreate(object,file) __osd_MenuCreate( VLC_OBJECT(object), file ) +#define osd_MenuDelete(object,osd) __osd_MenuDelete( VLC_OBJECT(object), osd ) + /** - * Change state on an osd_button_t. - * - * This function selects the specified state and returns a pointer to it. The - * following states are currently supported: - * \see OSD_BUTTON_UNSELECT - * \see OSD_BUTTON_SELECT - * \see OSD_BUTTON_PRESSED + * Find OSD Menu button at position x,y */ -VLC_EXPORT( osd_state_t *, __osd_StateChange, ( osd_state_t *, const int ) ); +VLC_EXPORT( osd_button_t *, __osd_ButtonFind, ( vlc_object_t *p_this, + int, int, int, int, int, int ) ); -#define osd_MenuCreate(object,file) __osd_MenuCreate( VLC_OBJECT(object), file ) -#define osd_MenuDelete(object,osd) __osd_MenuDelete( VLC_OBJECT(object), osd ) -#define osd_StateChange(object,value) __osd_StateChange( object, value ) +#define osd_ButtonFind(object,x,y,h,w,sh,sw) __osd_ButtonFind(object,x,y,h,w,sh,sw) + +/** + * Select the button provided as the new active button + */ +VLC_EXPORT( void, __osd_ButtonSelect, ( vlc_object_t *, osd_button_t *) ); + +#define osd_ButtonSelect(object,button) __osd_ButtonSelect(object,button) /** * Show the OSD menu. @@ -551,7 +595,7 @@ static inline void osd_SetMenuUpdate( osd_menu_t *p_osd, vlc_bool_t b_value ) */ VLC_EXPORT( int, osd_ShowTextRelative, ( spu_t *, int, char *, text_style_t *, int, int, int, mtime_t ) ); VLC_EXPORT( int, osd_ShowTextAbsolute, ( spu_t *, int, char *, text_style_t *, int, int, int, mtime_t, mtime_t ) ); -VLC_EXPORT( void,osd_Message, ( spu_t *, int, char *, ... ) ); +VLC_EXPORT( void,osd_Message, ( spu_t *, int, char *, ... ) ATTRIBUTE_FORMAT( 3, 4 ) ); /** * Default feedback images @@ -564,15 +608,6 @@ VLC_EXPORT( void,osd_Message, ( spu_t *, int, char *, ... ) ); VLC_EXPORT( int, osd_Slider, ( vlc_object_t *, spu_t *, int, int, int, int, int, int, short ) ); VLC_EXPORT( int, osd_Icon, ( vlc_object_t *, spu_t *, int, int, int, int, int, short ) ); -/** - * Loading and parse the OSD Configuration file - * - * These functions load/unload the OSD menu configuration file and - * create/destroy the themable OSD menu structure on the OSD object. - */ -VLC_EXPORT( int, osd_ConfigLoader, ( vlc_object_t *, const char *, osd_menu_t ** ) ); -VLC_EXPORT( void, osd_ConfigUnload, ( vlc_object_t *, osd_menu_t ** ) ); - /** @} */ /********************************************************************** @@ -606,7 +641,7 @@ VLC_EXPORT( int, vout_ShowTextRelative, ( vout_thread_t *, int, char *, text_sty * if this is 0 the string will be shown untill the next string * is about to be shown */ -VLC_EXPORT( int, vout_ShowTextAbsolute, ( vout_thread_t *, int, char *, text_style_t *, int, int, int, mtime_t, mtime_t ) ); +VLC_EXPORT( int, vout_ShowTextAbsolute, ( vout_thread_t *, int, const char *, text_style_t *, int, int, int, mtime_t, mtime_t ) ); /** * Write an informative message at the default location, @@ -615,16 +650,13 @@ VLC_EXPORT( int, vout_ShowTextAbsolute, ( vout_thread_t *, int, char *, text_sty * \param i_channel Subpicture channel * \param psz_format printf style formatting **/ -VLC_EXPORT( void, __vout_OSDMessage, ( vlc_object_t *, int, char *, ... ) ); +VLC_EXPORT( void, __vout_OSDMessage, ( vlc_object_t *, int, const char *, ... ) ATTRIBUTE_FORMAT( 3, 4 ) ); /** * Same as __vlc_OSDMessage() but with automatic casting */ -#if defined(HAVE_VARIADIC_MACROS) -# define vout_OSDMessage( obj, chan, fmt, args...) __vout_OSDMessage( VLC_OBJECT(obj), chan, fmt, ## args ) -#else -# define vout_OSDMessage __vout_OSDMessage -#endif +#define vout_OSDMessage( obj, chan, ...) \ + __vout_OSDMessage( VLC_OBJECT(obj), chan, __VA_ARGS__ ) /** * Display a slider on the video output.