vlc_osd.h
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:24k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * vlc_osd.h - OSD menu and subpictures definitions and function prototypes
  3.  *****************************************************************************
  4.  * Copyright (C) 1999-2006 the VideoLAN team
  5.  * Copyright (C) 2004-2005 M2X
  6.  * $Id: 229e3056d09784b848d8f0d37a7e1538c447ab38 $
  7.  *
  8.  * Authors: Jean-Paul Saman <jpsaman #_at_# m2x dot nl>
  9.  *          Gildas Bazin <gbazin@videolan.org>
  10.  *
  11.  * Added code from include/osd.h written by:
  12.  * Copyright (C) 2003-2005 the VideoLAN team
  13.  * Authors: Sigmund Augdal Helberg <dnumgis@videolan.org>
  14.  *
  15.  * This program is free software; you can redistribute it and/or modify
  16.  * it under the terms of the GNU General Public License as published by
  17.  * the Free Software Foundation; either version 2 of the License, or
  18.  * (at your option) any later version.
  19.  *
  20.  * This program is distributed in the hope that it will be useful,
  21.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  22.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  23.  * GNU General Public License for more details.
  24.  *
  25.  * You should have received a copy of the GNU General Public License
  26.  * along with this program; if not, write to the Free Software
  27.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  28.  *****************************************************************************/
  29. #ifndef VLC_OSD_H
  30. #define VLC_OSD_H 1
  31. #include "vlc_vout.h"
  32. # ifdef __cplusplus
  33. extern "C" {
  34. # endif
  35. /**
  36.  * file
  37.  * This file defines SPU subpicture and OSD functions and object types.
  38.  */
  39. /**********************************************************************
  40.  * Base SPU structures
  41.  **********************************************************************/
  42. /**
  43.  * defgroup spu Subpicture Unit
  44.  * This module describes the programming interface for the subpicture unit.
  45.  * It includes functions allowing to create/destroy an spu, create/destroy
  46.  * subpictures and render them.
  47.  * @{
  48.  */
  49. #include <vlc_vout.h>
  50. typedef struct spu_private_t spu_private_t;
  51. /**
  52.  * Subpicture unit descriptor
  53.  */
  54. struct spu_t
  55. {
  56.     VLC_COMMON_MEMBERS
  57.     int (*pf_control)( spu_t *, int, va_list );
  58.     spu_private_t *p;
  59. };
  60. enum spu_query_e
  61. {
  62.     SPU_CHANNEL_REGISTER,         /* arg1= int *   res=    */
  63.     SPU_CHANNEL_CLEAR             /* arg1= int     res=    */
  64. };
  65. static inline int spu_vaControl( spu_t *p_spu, int i_query, va_list args )
  66. {
  67.     if( p_spu->pf_control )
  68.         return p_spu->pf_control( p_spu, i_query, args );
  69.     else
  70.         return VLC_EGENERIC;
  71. }
  72. static inline int spu_Control( spu_t *p_spu, int i_query, ... )
  73. {
  74.     va_list args;
  75.     int i_result;
  76.     va_start( args, i_query );
  77.     i_result = spu_vaControl( p_spu, i_query, args );
  78.     va_end( args );
  79.     return i_result;
  80. }
  81. #define spu_Create(a) __spu_Create(VLC_OBJECT(a))
  82. VLC_EXPORT( spu_t *, __spu_Create, ( vlc_object_t * ) );
  83. VLC_EXPORT( int, spu_Init, ( spu_t * ) );
  84. VLC_EXPORT( void, spu_Destroy, ( spu_t * ) );
  85. void spu_Attach( spu_t *, vlc_object_t *, bool );
  86. /**
  87.  * This function sends a subpicture to the spu_t core.
  88.  * 
  89.  * You cannot use the provided subpicture anymore. The spu_t core
  90.  * will destroy it at its convenience.
  91.  */
  92. VLC_EXPORT( void, spu_DisplaySubpicture, ( spu_t *, subpicture_t * ) );
  93. /**
  94.  * This function asks the spu_t core a list of subpictures to display.
  95.  *
  96.  * The returned list can only be used by spu_RenderSubpictures.
  97.  */
  98. VLC_EXPORT( subpicture_t *, spu_SortSubpictures, ( spu_t *, mtime_t display_date, bool b_paused, bool b_subtitle_only ) );
  99. VLC_EXPORT( subpicture_t *, spu_SortSubpicturesNew, ( spu_t *, mtime_t render_subtitle_date, bool b_subtitle_only ) );
  100. /**
  101.  * This function renders a list of subpicture_t on the provided picture.
  102.  *
  103.  * param p_fmt_dst is the format of the destination picture.
  104.  * param p_fmt_src is the format of the original(source) video.
  105.  */
  106. VLC_EXPORT( void, spu_RenderSubpictures, ( spu_t *,  picture_t *, const video_format_t *p_fmt_dst, subpicture_t *p_list, const video_format_t *p_fmt_src, bool b_paused ) );
  107. VLC_EXPORT( void, spu_RenderSubpicturesNew, ( spu_t *,  picture_t *, const video_format_t *p_fmt_dst, subpicture_t *p_list, const video_format_t *p_fmt_src, mtime_t render_subtitle_date ) );
  108. /** @}*/
  109. /**********************************************************************
  110.  * OSD Menu
  111.  **********************************************************************/
  112. /**
  113.  * defgroup osdmenu OSD Menu
  114.  * The OSD menu core creates the OSD menu structure in memory. It parses a
  115.  * configuration file that defines all elements that are part of the menu. The
  116.  * core also handles all actions and menu structure updates on behalf of video
  117.  * subpicture filters.
  118.  *
  119.  * The file modules/video_filters/osdmenu.c implements a subpicture filter that
  120.  * specifies the final information on positioning of the current state image.
  121.  * A subpicture filter is called each time a video picture has to be rendered,
  122.  * it also gives a start and end date to the subpicture. The subpicture can be
  123.  * streamed if used inside a transcoding command. For example:
  124.  *
  125.  *  vlc dvdsimple:///dev/dvd --extraintf rc
  126.  *  --sout='#transcode{osd}:std{access=udp,mux=ts,dst=dest_ipaddr}'
  127.  *  --osdmenu-file=share/osdmenu/dvd.cfg
  128.  *
  129.  * An example for local usage of the OSD menu is:
  130.  *
  131.  *  vlc dvdsimple:///dev/dvd --extraintf rc
  132.  *  --sub-filter osdmenu
  133.  *  --osdmenu-file=share/osdmenu/dvd.cfg
  134.  *
  135.  * Each OSD menu element, called "action", defines a hotkey action. Each action
  136.  * can have several states (unselect, select, pressed). Each state has an image
  137.  * that represents the state visually. The commands "menu right", "menu left",
  138.  * "menu up" and "menu down" are used to navigate through the OSD menu structure.
  139.  * The commands "menu on" or "menu show" and "menu off" or "menu hide" respectively
  140.  * show and hide the OSD menu subpictures.
  141.  *
  142.  * There is one special element called "range". A range is an arbritary range
  143.  * of state images that can be browsed using "menu up" and "menu down" commands
  144.  * on the rc interface.
  145.  *
  146.  * The OSD menu configuration file uses a very simple syntax and basic parser.
  147.  * A configuration file has the ".cfg".
  148.  * An example is "share/osdmenu/dvd256.cfg".
  149.  * @{
  150.  */
  151. /**
  152.  * brief The OSD Menu configuration file format.
  153.  *
  154.  * The configuration file syntax is very basic and so is its parser. See the
  155.  * BNF formal representation below:
  156.  *
  157.  * The keywords FILENAME and PATHNAME represent the filename and pathname
  158.  * specification that is valid for the Operating System VLC is compiled for.
  159.  *
  160.  * The hotkey actions that are supported by VLC are documented in the file
  161.  * src/libvlc. The file include/vlc_keys.h defines some hotkey internals.
  162.  *
  163.  * CONFIG_FILE = FILENAME '.cfg'
  164.  * WS = [ ' ' | 't' ]+
  165.  * OSDMENU_PATH = PATHNAME
  166.  * DIR = 'dir' WS OSDMENU_PATH 'n'
  167.  * STYLE = 'style' [ 'default' | 'concat' ] 'n'
  168.  * STATE = [ 'unselect' | 'select' | 'pressed' ]
  169.  * HOTKEY_ACTION = 'key-' [ 'a' .. 'z', 'A' .. 'Z', '-' ]+
  170.  *
  171.  * ACTION_TYPE        = 'type' 'volume' 'n'
  172.  * ACTION_BLOCK_START = 'action' WS HOTKEY_ACTION WS '('POS','POS')' 'n'
  173.  * ACTION_BLOCK_END   = 'end' 'n'
  174.  * ACTION_STATE       = STATE WS FILENAME 'n'
  175.  * ACTION_RANGE_START = 'range' WS HOTKEY_ACTION WS DEFAULT_INDEX 'n'
  176.  * ACTION_RANGE_END   = 'end' 'n'
  177.  * ACTION_RANGE_STATE = FILENAME 'n'
  178.  *
  179.  * ACTION_BLOCK_RANGE = ACTION_RANGE_START [WS ACTION_RANGE_STATE]+ WS ACTION_RANGE_END
  180.  * ACTION_BLOCK = ACTION_BLOCK_START [WS ACTION_TYPE*] [ [WS ACTION_STATE]+3 | [WS ACTION_BLOCK_RANGE]+1 ] ACTION_BLOCK_END
  181.  * CONFIG_FILE_CONTENTS = DIR [ACTION_BLOCK]+
  182.  *
  183.  */
  184. /**
  185.  * OSD menu position and picture type defines
  186.  */
  187. #define OSD_ALIGN_LEFT 0x1
  188. #define OSD_ALIGN_RIGHT 0x2
  189. #define OSD_ALIGN_TOP 0x4
  190. #define OSD_ALIGN_BOTTOM 0x8
  191. #define OSD_HOR_SLIDER 1
  192. #define OSD_VERT_SLIDER 2
  193. #define OSD_PLAY_ICON 1
  194. #define OSD_PAUSE_ICON 2
  195. #define OSD_SPEAKER_ICON 3
  196. #define OSD_MUTE_ICON 4
  197. /**
  198.  * Text style
  199.  *
  200.  * A text style is used to specify the formatting of text.
  201.  * A font renderer can use the supplied information to render the
  202.  * text specified.
  203.  */
  204. struct text_style_t
  205. {
  206.     char *     psz_fontname;      /**< The name of the font */
  207.     int        i_font_size;       /**< The font size in pixels */
  208.     int        i_font_color;      /**< The color of the text 0xRRGGBB
  209.                                        (native endianness) */
  210.     int        i_font_alpha;      /**< The transparency of the text.
  211.                                        0x00 is fully opaque,
  212.                                        0xFF fully transparent */
  213.     int        i_style_flags;     /**< Formatting style flags */
  214.     int        i_outline_color;   /**< The color of the outline 0xRRGGBB */
  215.     int        i_outline_alpha;   /**< The transparency of the outline.
  216.                                        0x00 is fully opaque,
  217.                                        0xFF fully transparent */
  218.     int        i_shadow_color;    /**< The color of the shadow 0xRRGGBB */
  219.     int        i_shadow_alpha;    /**< The transparency of the shadow.
  220.                                         0x00 is fully opaque,
  221.                                         0xFF fully transparent */
  222.     int        i_background_color;/**< The color of the background 0xRRGGBB */
  223.     int        i_background_alpha;/**< The transparency of the background.
  224.                                        0x00 is fully opaque,
  225.                                        0xFF fully transparent */
  226.     int        i_karaoke_background_color;/**< Background color for karaoke 0xRRGGBB */
  227.     int        i_karaoke_background_alpha;/**< The transparency of the karaoke bg.
  228.                                        0x00 is fully opaque,
  229.                                        0xFF fully transparent */
  230.     int        i_outline_width;   /**< The width of the outline in pixels */
  231.     int        i_shadow_width;    /**< The width of the shadow in pixels */
  232.     int        i_spacing;         /**< The spaceing between glyphs in pixels */
  233. };
  234. /* Style flags for ref text_style_t */
  235. #define STYLE_BOLD        1
  236. #define STYLE_ITALIC      2
  237. #define STYLE_OUTLINE     4
  238. #define STYLE_SHADOW      8
  239. #define STYLE_BACKGROUND  16
  240. #define STYLE_UNDERLINE   32
  241. #define STYLE_STRIKEOUT   64
  242. static const text_style_t default_text_style = { NULL, 22, 0xffffff, 0xff, STYLE_OUTLINE,
  243.                 0x000000, 0xff, 0x000000, 0xff, 0xffffff, 0x80, 0xffffff, 0xff, 1, 0, -1 };
  244. /**
  245.  * OSD menu button states
  246.  *
  247.  * Every button has three states, either it is unselected, selected or pressed.
  248.  * An OSD menu skin can associate images with each state.
  249.  *
  250.  *  OSD_BUTTON_UNSELECT 0
  251.  *  OSD_BUTTON_SELECT   1
  252.  *  OSD_BUTTON_PRESSED  2
  253.  */
  254. #define OSD_BUTTON_UNSELECT 0
  255. #define OSD_BUTTON_SELECT   1
  256. #define OSD_BUTTON_PRESSED  2
  257. /**
  258.  * OSD State object
  259.  *
  260.  * The OSD state object holds the state and associated images for a
  261.  * particular state on the screen. The picture is displayed when this
  262.  * state is the active state.
  263.  */
  264. struct osd_state_t
  265. {
  266.     osd_state_t *p_next;    /*< pointer to next state */
  267.     osd_state_t *p_prev;    /*< pointer to previous state */
  268.     picture_t   *p_pic;     /*< picture of state */
  269.     char        *psz_state; /*< state name */
  270.     int          i_state;   /*< state index */
  271.     int     i_x;            /*< x-position of button state image */
  272.     int     i_y;            /*< y-position of button state image */
  273.     int     i_width;        /*< width of button state image */
  274.     int     i_height;       /*< height of button state image */
  275. };
  276. /**
  277.  * OSD Button object
  278.  *
  279.  * An OSD Button has different states. Each state has an image for display.
  280.  */
  281. struct osd_button_t
  282. {
  283.     osd_button_t *p_next;   /*< pointer to next button */
  284.     osd_button_t *p_prev;   /*< pointer to previous button */
  285.     osd_button_t *p_up;     /*< pointer to up button */
  286.     osd_button_t *p_down;   /*< pointer to down button */
  287.     osd_state_t *p_current_state; /*< pointer to current state image */
  288.     osd_state_t *p_states; /*< doubly linked list of states */
  289.     picture_t   *p_feedback; /*< feedback picture */
  290.     char    *psz_name;     /*< name of button */
  291.     /* These member should probably be a struct hotkey */
  292.     char    *psz_action;      /*< hotkey action name on button*/
  293.     char    *psz_action_down; /*< hotkey action name on range buttons
  294.                                   for command "menu down" */
  295.     /* end of hotkey specifics */
  296.     int     i_x;            /*< x-position of button visible state image */
  297.     int     i_y;            /*< y-position of button visible state image */
  298.     int     i_width;        /*< width of button visible state image */
  299.     int     i_height;       /*< height of button visible state image */
  300.     /* range style button */
  301.     bool   b_range;    /*< button should be interpreted as range */
  302.     int          i_ranges;   /*< number of states */
  303. };
  304. /**
  305.  * OSD Menu Style
  306.  *
  307.  * The images that make up an OSD menu can be created in such away that
  308.  * they contain all buttons in the same picture, with the selected one
  309.  * highlighted or being a concatenation of all the seperate images. The
  310.  * first case is the default.
  311.  *
  312.  * To change the default style the keyword 'style' should be set to 'concat'.
  313.  */
  314. #define OSD_MENU_STYLE_SIMPLE 0x0
  315. #define OSD_MENU_STYLE_CONCAT 0x1
  316. /**
  317.  * OSD Menu State object
  318.  *
  319.  * Represents the current state as displayed.
  320.  */
  321. /* Represent the menu state */
  322. struct osd_menu_state_t
  323. {
  324.     int     i_x;        /*< x position of spu region */
  325.     int     i_y;        /*< y position of spu region */
  326.     int     i_width;    /*< width of spu region */
  327.     int     i_height;   /*< height of spu region */
  328.     picture_t    *p_pic;  /*< pointer to picture to display */
  329.     osd_button_t *p_visible; /*< shortcut to visible button */
  330.     bool b_menu_visible; /*< menu currently visible? */
  331.     bool b_update;       /*< update OSD Menu when true */
  332.     /* quick hack to volume state. */
  333.     osd_button_t *p_volume; /*< pointer to volume range object. */
  334. };
  335. /**
  336.  * OSD Menu object
  337.  *
  338.  * The main OSD Menu object, which holds a linked list to all buttons
  339.  * and images that defines the menu. The p_state variable represents the
  340.  * current state of the OSD Menu.
  341.  */
  342. struct osd_menu_t
  343. {
  344.     VLC_COMMON_MEMBERS
  345.     int     i_x;        /*< x-position of OSD Menu on the video screen */
  346.     int     i_y;        /*< y-position of OSD Menu on the video screen */
  347.     int     i_width;    /*< width of OSD Menu on the video screen */
  348.     int     i_height;   /*< height of OSD Menu on the video screen */
  349.     int     i_style;    /*< style of spu region generation */
  350.     int     i_position; /*< display position */
  351.     char             *psz_path;  /*< directory where OSD menu images are stored */
  352.     osd_button_t     *p_button;  /*< doubly linked list of buttons */
  353.     osd_menu_state_t *p_state;   /*< current state of OSD menu */
  354.     /* quick link in the linked list. */
  355.     osd_button_t  *p_last_button; /*< pointer to last button in the list */
  356.     /* misc parser */
  357.     module_t        *p_parser;  /*< pointer to parser module */
  358.     char            *psz_file;  /*< Config file name */
  359.     image_handler_t *p_image;   /*< handler to image loading and conversion libraries */
  360. };
  361. /**
  362.  * Initialize an osd_menu_t object
  363.  *
  364.  * This functions has to be called before any call to other osd_menu_t*
  365.  * functions. It creates the osd_menu object and holds a pointer to it
  366.  * during its lifetime.
  367.  */
  368. VLC_EXPORT( osd_menu_t *, __osd_MenuCreate, ( vlc_object_t *, const char * ) );
  369. /**
  370.  * Delete the osd_menu_t object
  371.  *
  372.  * This functions has to be called to release the associated module and
  373.  * memory for the osdmenu. After return of this function the pointer to
  374.  * osd_menu_t* is invalid.
  375.  */
  376. VLC_EXPORT( void, __osd_MenuDelete, ( vlc_object_t *, osd_menu_t * ) );
  377. #define osd_MenuCreate(object,file) __osd_MenuCreate( VLC_OBJECT(object), file )
  378. #define osd_MenuDelete(object,osd)  __osd_MenuDelete( VLC_OBJECT(object), osd )
  379. /**
  380.  * Find OSD Menu button at position x,y
  381.  */
  382. VLC_EXPORT( osd_button_t *, __osd_ButtonFind, ( vlc_object_t *p_this,
  383.      int, int, int, int, int, int ) );
  384. #define osd_ButtonFind(object,x,y,h,w,sh,sw)  __osd_ButtonFind(object,x,y,h,w,sh,sw)
  385. /**
  386.  * Select the button provided as the new active button
  387.  */
  388. VLC_EXPORT( void, __osd_ButtonSelect, ( vlc_object_t *, osd_button_t *) );
  389. #define osd_ButtonSelect(object,button) __osd_ButtonSelect(object,button)
  390. /**
  391.  * Show the OSD menu.
  392.  *
  393.  * Show the OSD menu on the video output or mux it into the stream.
  394.  * Every change to the OSD menu will now be visible in the output. An output
  395.  * can be a video output window or a stream (see stream output)
  396.  */
  397. VLC_EXPORT( void, __osd_MenuShow, ( vlc_object_t * ) );
  398. /**
  399.  * Hide the OSD menu.
  400.  *
  401.  * Stop showing the OSD menu on the video output or mux it into the stream.
  402.  */
  403. VLC_EXPORT( void, __osd_MenuHide, ( vlc_object_t * ) );
  404. /**
  405.  * Activate the action of this OSD menu item.
  406.  *
  407.  * The rc interface command "menu select" triggers the sending of an
  408.  * hotkey action to the hotkey interface. The hotkey that belongs to
  409.  * the current highlighted OSD menu item will be used.
  410.  */
  411. VLC_EXPORT( void, __osd_MenuActivate,   ( vlc_object_t * ) );
  412. #define osd_MenuShow(object) __osd_MenuShow( VLC_OBJECT(object) )
  413. #define osd_MenuHide(object) __osd_MenuHide( VLC_OBJECT(object) )
  414. #define osd_MenuActivate(object)   __osd_MenuActivate( VLC_OBJECT(object) )
  415. /**
  416.  * Next OSD menu item
  417.  *
  418.  * Select the next OSD menu item to be highlighted.
  419.  * Note: The actual position on screen of the menu item is determined by
  420.  * the OSD menu configuration file.
  421.  */
  422. VLC_EXPORT( void, __osd_MenuNext, ( vlc_object_t * ) );
  423. /**
  424.  * Previous OSD menu item
  425.  *
  426.  * Select the previous OSD menu item to be highlighted.
  427.  * Note: The actual position on screen of the menu item is determined by
  428.  * the OSD menu configuration file.
  429.  */
  430. VLC_EXPORT( void, __osd_MenuPrev, ( vlc_object_t * ) );
  431. /**
  432.  * OSD menu item above
  433.  *
  434.  * Select the OSD menu item above the current item to be highlighted.
  435.  * Note: The actual position on screen of the menu item is determined by
  436.  * the OSD menu configuration file.
  437.  */
  438. VLC_EXPORT( void, __osd_MenuUp,   ( vlc_object_t * ) );
  439. /**
  440.  * OSD menu item below
  441.  *
  442.  * Select the next OSD menu item below the current item to be highlighted.
  443.  * Note: The actual position on screen of the menu item is determined by
  444.  * the OSD menu configuration file.
  445.  */
  446. VLC_EXPORT( void, __osd_MenuDown, ( vlc_object_t * ) );
  447. #define osd_MenuNext(object) __osd_MenuNext( VLC_OBJECT(object) )
  448. #define osd_MenuPrev(object) __osd_MenuPrev( VLC_OBJECT(object) )
  449. #define osd_MenuUp(object)   __osd_MenuUp( VLC_OBJECT(object) )
  450. #define osd_MenuDown(object) __osd_MenuDown( VLC_OBJECT(object) )
  451. /**
  452.  * Display the audio volume bitmap.
  453.  *
  454.  * Display the correct audio volume bitmap that corresponds to the
  455.  * current Audio Volume setting.
  456.  */
  457. VLC_EXPORT( void, __osd_Volume, ( vlc_object_t * ) );
  458. #define osd_Volume(object)     __osd_Volume( VLC_OBJECT(object) )
  459. /**
  460.  * Retrieve a non modifyable pointer to the OSD Menu state
  461.  *
  462.  */
  463. static inline const osd_menu_state_t *osd_GetMenuState( osd_menu_t *p_osd )
  464. {
  465.     return( p_osd->p_state );
  466. }
  467. /**
  468.  * Get the last key press received by the OSD Menu
  469.  *
  470.  * Returns 0 when no key has been pressed or the value of the key pressed.
  471.  */
  472. static inline bool osd_GetKeyPressed( osd_menu_t *p_osd )
  473. {
  474.     return( p_osd->p_state->b_update );
  475. }
  476. /**
  477.  * Set the key pressed to a value.
  478.  *
  479.  * Assign a new key value to the last key pressed on the OSD Menu.
  480.  */
  481. static inline void osd_SetKeyPressed( vlc_object_t *p_this, int i_value )
  482. {
  483.     vlc_value_t val;
  484.     val.i_int = i_value;
  485.     var_Set( p_this, "key-pressed", val );
  486. }
  487. /**
  488.  * Update the OSD Menu visibility flag.
  489.  *
  490.  * true means OSD Menu should be shown. false means OSD Menu
  491.  * should not be shown.
  492.  */
  493. static inline void osd_SetMenuVisible( osd_menu_t *p_osd, bool b_value )
  494. {
  495.     vlc_value_t val;
  496.     val.b_bool = p_osd->p_state->b_menu_visible = b_value;
  497.     var_Set( p_osd, "osd-menu-visible", val );
  498. }
  499. /**
  500.  * Update the OSD Menu update flag
  501.  *
  502.  * If the OSD Menu should be updated then set the update flag to
  503.  * true, else to false.
  504.  */
  505. static inline void osd_SetMenuUpdate( osd_menu_t *p_osd, bool b_value )
  506. {
  507.     vlc_value_t val;
  508.     val.b_bool = p_osd->p_state->b_update = b_value;
  509.     var_Set( p_osd, "osd-menu-update", val );
  510. }
  511. /**
  512.  * Textual feedback
  513.  *
  514.  * Functions that provide the textual feedback on the OSD. They are shown
  515.  * on hotkey commands. The feedback is also part of the osd_button_t
  516.  * object. The types are declared in the include file include/vlc_osd.h
  517.  * @see vlc_osd.h
  518.  */
  519. VLC_EXPORT( int, osd_ShowTextRelative, ( spu_t *, int, const char *, text_style_t *, int, int, int, mtime_t ) );
  520. VLC_EXPORT( int, osd_ShowTextAbsolute, ( spu_t *, int, const char *, text_style_t *, int, int, int, mtime_t, mtime_t ) );
  521. VLC_EXPORT( void, osd_Message, ( spu_t *, int, char *, ... ) LIBVLC_FORMAT( 3, 4 ) );
  522. /**
  523.  * Default feedback images
  524.  *
  525.  * Functions that provide the default OSD feedback images on hotkey
  526.  * commands. These feedback images are also part of the osd_button_t
  527.  * object. The types are declared in the include file include/vlc_osd.h
  528.  * @see vlc_osd.h
  529.  */
  530. VLC_EXPORT( int, osd_Slider, ( vlc_object_t *, spu_t *, int, int, int, int, int, int, short ) );
  531. VLC_EXPORT( int, osd_Icon, ( vlc_object_t *, spu_t *, int, int, int, int, int, short ) );
  532. /** @} */
  533. /**********************************************************************
  534.  * Vout text and widget overlays
  535.  **********************************************************************/
  536. /**
  537.  * Show text on the video for some time
  538.  * param p_vout pointer to the vout the text is to be showed on
  539.  * param i_channel Subpicture channel
  540.  * param psz_string The text to be shown
  541.  * param p_style Pointer to a struct with text style info
  542.  * param i_flags flags for alignment and such
  543.  * param i_hmargin horizontal margin in pixels
  544.  * param i_vmargin vertical margin in pixels
  545.  * param i_duration Amount of time the text is to be shown.
  546.  */
  547. VLC_EXPORT( int, vout_ShowTextRelative, ( vout_thread_t *, int, char *, text_style_t *, int, int, int, mtime_t ) );
  548. /**
  549.  * Show text on the video from a given start date to a given end date
  550.  * param p_vout pointer to the vout the text is to be showed on
  551.  * param i_channel Subpicture channel
  552.  * param psz_string The text to be shown
  553.  * param p_style Pointer to a struct with text style info
  554.  * param i_flags flags for alignment and such
  555.  * param i_hmargin horizontal margin in pixels
  556.  * param i_vmargin vertical margin in pixels
  557.  * param i_start the time when this string is to appear on the video
  558.  * param i_stop the time when this string should stop to be displayed
  559.  *               if this is 0 the string will be shown untill the next string
  560.  *               is about to be shown
  561.  */
  562. VLC_EXPORT( int, vout_ShowTextAbsolute, ( vout_thread_t *, int, const char *, text_style_t *, int, int, int, mtime_t, mtime_t ) );
  563. /**
  564.  * Write an informative message at the default location,
  565.  * for the default duration and only if the OSD option is enabled.
  566.  * param p_caller The object that called the function.
  567.  * param i_channel Subpicture channel
  568.  * param psz_format printf style formatting
  569.  **/
  570. VLC_EXPORT( void,  __vout_OSDMessage, ( vlc_object_t *, int, const char *, ... ) LIBVLC_FORMAT( 3, 4 ) );
  571. /**
  572.  * Same as __vlc_OSDMessage() but with automatic casting
  573.  */
  574. #define vout_OSDMessage( obj, chan, ...) 
  575.       __vout_OSDMessage( VLC_OBJECT(obj), chan, __VA_ARGS__ )
  576. /**
  577.  * Display a slider on the video output.
  578.  * param p_this    The object that called the function.
  579.  * param i_channel Subpicture channel
  580.  * param i_postion Current position in the slider
  581.  * param i_type    Types are: OSD_HOR_SLIDER and OSD_VERT_SLIDER.
  582.  * @see vlc_osd.h
  583.  */
  584. VLC_EXPORT( void, vout_OSDSlider, ( vlc_object_t *, int, int , short ) );
  585. /**
  586.  * Display an Icon on the video output.
  587.  * param p_this    The object that called the function.
  588.  * param i_channel Subpicture channel
  589.  * param i_type    Types are: OSD_PLAY_ICON, OSD_PAUSE_ICON, OSD_SPEAKER_ICON, OSD_MUTE_ICON
  590.  * @see vlc_osd.h
  591.  */
  592. VLC_EXPORT( void, vout_OSDIcon, ( vlc_object_t *, int, short ) );
  593. # ifdef __cplusplus
  594. }
  595. # endif
  596. #endif /* _VLC_OSD_H */