Data Structures | Defines | Functions

OSD Menu

The OSD menu core creates the OSD menu structure in memory. More...

Data Structures

struct  osd_state_t
 OSD State object. More...
struct  osd_button_t
 OSD Button object. More...
struct  osd_menu_state_t
 OSD Menu State object. More...
struct  osd_menu_t
 OSD Menu object. More...

Defines

#define OSD_BUTTON_UNSELECT   0
 The OSD Menu configuration file format.
#define OSD_BUTTON_SELECT   1
#define OSD_BUTTON_PRESSED   2
#define OSD_MENU_STYLE_SIMPLE   0x0
 OSD Menu Style.
#define OSD_MENU_STYLE_CONCAT   0x1
#define osd_MenuCreate(object, file)   osd_MenuCreate( VLC_OBJECT(object), file )
#define osd_MenuDelete(object, osd)   osd_MenuDelete( VLC_OBJECT(object), osd )
#define osd_ButtonFind(object, x, y, h, w, sh, sw)   osd_ButtonFind(object,x,y,h,w,sh,sw)
#define osd_ButtonSelect(object, button)   osd_ButtonSelect(object,button)
#define osd_MenuShow(object)   osd_MenuShow( VLC_OBJECT(object) )
#define osd_MenuHide(object)   osd_MenuHide( VLC_OBJECT(object) )
#define osd_MenuActivate(object)   osd_MenuActivate( VLC_OBJECT(object) )
#define osd_MenuNext(object)   osd_MenuNext( VLC_OBJECT(object) )
#define osd_MenuPrev(object)   osd_MenuPrev( VLC_OBJECT(object) )
#define osd_MenuUp(object)   osd_MenuUp( VLC_OBJECT(object) )
#define osd_MenuDown(object)   osd_MenuDown( VLC_OBJECT(object) )

Functions

osd_menu_tosd_MenuCreate (vlc_object_t *, const char *)
 Initialize an osd_menu_t object.
void osd_MenuDelete (vlc_object_t *, osd_menu_t *)
 Delete the osd_menu_t object.
osd_button_tosd_ButtonFind (vlc_object_t *p_this, int, int, int, int, int, int)
 Find OSD Menu button at position x,y.
void osd_ButtonSelect (vlc_object_t *, osd_button_t *)
 Select the button provided as the new active button.
void osd_MenuShow (vlc_object_t *)
 Show the OSD menu.
void osd_MenuHide (vlc_object_t *)
 Hide the OSD menu.
void osd_MenuActivate (vlc_object_t *)
 Activate the action of this OSD menu item.
void osd_MenuNext (vlc_object_t *)
 Next OSD menu item.
void osd_MenuPrev (vlc_object_t *)
 Previous OSD menu item.
void osd_MenuUp (vlc_object_t *)
 OSD menu item above.
void osd_MenuDown (vlc_object_t *)
 OSD menu item below.
static const osd_menu_state_tosd_GetMenuState (osd_menu_t *p_osd)
 Retrieve a non modifyable pointer to the OSD Menu state.
static bool osd_GetKeyPressed (osd_menu_t *p_osd)
 Get the last key press received by the OSD Menu.
static void osd_SetKeyPressed (vlc_object_t *p_this, int i_value)
 Set the key pressed to a value.
static void osd_SetMenuVisible (osd_menu_t *p_osd, bool b_value)
 Update the OSD Menu visibility flag.
static void osd_SetMenuUpdate (osd_menu_t *p_osd, bool b_value)
 Update the OSD Menu update flag.
int osd_ShowTextRelative (spu_t *, int, const char *, const text_style_t *, int, int, int, mtime_t)
 Textual feedback.
int osd_ShowTextAbsolute (spu_t *, int, const char *, const text_style_t *, int, int, int, mtime_t, mtime_t)
 Show text on the video from a given start date to a given end date.
void osd_Message (spu_t *, int, char *,...)
 Write an informative message at the default location, for the default duration and only if the OSD option is enabled.

Detailed Description

The OSD menu core creates the OSD menu structure in memory.

It parses a configuration file that defines all elements that are part of the menu. The core also handles all actions and menu structure updates on behalf of video subpicture sources.

The file modules/video_filters/osdmenu.c implements a subpicture source that specifies the final information on positioning of the current state image. A subpicture source is called each time a video picture has to be rendered, it also gives a start and end date to the subpicture. The subpicture can be streamed if used inside a transcoding command. For example:

vlc dvdsimple:///dev/dvd --extraintf rc --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-source 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", "menu up" and "menu down" are used to navigate through the OSD menu structure. The commands "menu on" or "menu show" and "menu off" or "menu hide" respectively show and hide the OSD menu subpictures.

There is one special element called "range". A range is an arbritary range of state images that can be browsed using "menu up" and "menu down" commands on the rc interface.

The OSD menu configuration file uses a very simple syntax and basic parser. A configuration file has the ".cfg". An example is "share/osdmenu/dvd256.cfg".


Define Documentation

#define OSD_BUTTON_PRESSED   2

Referenced by osd_MenuActivate().

#define OSD_BUTTON_SELECT   1
#define OSD_BUTTON_UNSELECT   0

The OSD Menu configuration file format.

The configuration file syntax is very basic and so is its parser. See the BNF formal representation below:

The keywords FILENAME and PATHNAME represent the filename and pathname specification that is valid for the Operating System VLC is compiled for.

The hotkey actions that are supported by VLC are documented in the file src/libvlc. The file include/vlc_keys.h defines some hotkey internals.

CONFIG_FILE = FILENAME '.cfg' WS = [ ' ' | '' ]+ OSDMENU_PATH = PATHNAME DIR = 'dir' WS OSDMENU_PATH '
' STYLE = 'style' [ 'default' | 'concat' ] '
' STATE = [ 'unselect' | 'select' | 'pressed' ] HOTKEY_ACTION = 'key-' [ 'a' .. 'z', 'A' .. 'Z', '-' ]+

ACTION_TYPE = 'type' 'volume' '
' ACTION_BLOCK_START = 'action' WS HOTKEY_ACTION WS '('POS','POS')' '
' ACTION_BLOCK_END = 'end' '
' ACTION_STATE = STATE WS FILENAME '
' ACTION_RANGE_START = 'range' WS HOTKEY_ACTION WS DEFAULT_INDEX '
' ACTION_RANGE_END = 'end' '
' ACTION_RANGE_STATE = FILENAME '
'

ACTION_BLOCK_RANGE = ACTION_RANGE_START [WS ACTION_RANGE_STATE]+ WS ACTION_RANGE_END ACTION_BLOCK = ACTION_BLOCK_START [WS ACTION_TYPE*] [ [WS ACTION_STATE]+3 | [WS ACTION_BLOCK_RANGE]+1 ] ACTION_BLOCK_END CONFIG_FILE_CONTENTS = DIR [ACTION_BLOCK]+ OSD menu button states Every button has three states, either it is unselected, selected or pressed. An OSD menu skin can associate images with each state.

OSD_BUTTON_UNSELECT 0 OSD_BUTTON_SELECT 1 OSD_BUTTON_PRESSED 2

Referenced by osd_ButtonSelect(), osd_MenuNext(), osd_MenuPrev(), and osd_MenuShow().

#define osd_ButtonFind (   object,
  x,
  y,
  h,
  w,
  sh,
  sw 
)    osd_ButtonFind(object,x,y,h,w,sh,sw)
#define osd_ButtonSelect (   object,
  button 
)    osd_ButtonSelect(object,button)
#define OSD_MENU_STYLE_CONCAT   0x1
#define OSD_MENU_STYLE_SIMPLE   0x0

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 separate images. The first case is the default.

To change the default style the keyword 'style' should be set to 'concat'.

#define osd_MenuActivate (   object  )     osd_MenuActivate( VLC_OBJECT(object) )
#define osd_MenuCreate (   object,
  file 
)    osd_MenuCreate( VLC_OBJECT(object), file )
#define osd_MenuDelete (   object,
  osd 
)    osd_MenuDelete( VLC_OBJECT(object), osd )

Referenced by osd_MenuCreate().

#define osd_MenuDown (   object  )     osd_MenuDown( VLC_OBJECT(object) )

Referenced by osd_MenuActivate().

#define osd_MenuHide (   object  )     osd_MenuHide( VLC_OBJECT(object) )
#define osd_MenuNext (   object  )     osd_MenuNext( VLC_OBJECT(object) )
#define osd_MenuPrev (   object  )     osd_MenuPrev( VLC_OBJECT(object) )
#define osd_MenuShow (   object  )     osd_MenuShow( VLC_OBJECT(object) )
#define osd_MenuUp (   object  )     osd_MenuUp( VLC_OBJECT(object) )

Referenced by osd_MenuActivate().


Function Documentation

osd_button_t* osd_ButtonFind ( vlc_object_t p_this,
int  ,
int  ,
int  ,
int  ,
int  ,
int   
)
void osd_ButtonSelect ( vlc_object_t ,
osd_button_t  
)
static bool osd_GetKeyPressed ( osd_menu_t p_osd  )  [inline, static]

Get the last key press received by the OSD Menu.

Returns 0 when no key has been pressed or the value of the key pressed.

References osd_menu_state_t::b_update, and osd_menu_t::p_state.

static const osd_menu_state_t* osd_GetMenuState ( osd_menu_t p_osd  )  [inline, static]

Retrieve a non modifyable pointer to the OSD Menu state.

References osd_menu_t::p_state.

void osd_MenuActivate ( vlc_object_t  ) 
osd_menu_t* osd_MenuCreate ( vlc_object_t ,
const char *   
)
void osd_MenuDelete ( vlc_object_t ,
osd_menu_t  
)

Delete the osd_menu_t object.

This functions has to be called to release the associated module and memory for the osdmenu. After return of this function the pointer to osd_menu_t* is invalid.

References osd_mutex, osd_ParserUnload(), vlc_object_t::p_libvlc, var_Destroy, var_SetAddress, vlc_internals, vlc_mutex_lock(), vlc_mutex_unlock(), VLC_OBJECT, and vlc_object_release.

void osd_MenuDown ( vlc_object_t  ) 
void osd_MenuHide ( vlc_object_t  ) 

Hide the OSD menu.

Stop showing the OSD menu on the video output or mux it into the stream.

References osd_menu_state_t::i_x, osd_menu_state_t::i_y, msg_Dbg, msg_Err, osd_Find, osd_mutex, osd_SetMenuUpdate(), osd_UpdateState(), osd_menu_t::p_state, and vlc_mutex_unlock().

void osd_MenuNext ( vlc_object_t  ) 
void osd_MenuPrev ( vlc_object_t  ) 
void osd_MenuShow ( vlc_object_t  ) 

Show the OSD menu.

Show the OSD menu on the video output or mux it into the stream. Every change to the OSD menu will now be visible in the output. An output can be a video output window or a stream (

See also:
Stream output)

References osd_button_t::b_range, osd_state_t::i_height, osd_state_t::i_width, osd_button_t::i_x, osd_button_t::i_y, msg_Dbg, msg_Err, OSD_BUTTON_SELECT, OSD_BUTTON_UNSELECT, osd_Find, osd_mutex, osd_SetMenuUpdate(), osd_SetMenuVisible(), osd_StateChange(), osd_UpdateState(), osd_menu_t::p_button, osd_button_t::p_current_state, osd_state_t::p_pic, osd_menu_t::p_state, osd_menu_state_t::p_visible, and vlc_mutex_unlock().

void osd_MenuUp ( vlc_object_t  ) 
void osd_Message ( spu_t p_spu,
int  i_channel,
char *  psz_format,
  ... 
)

Write an informative message at the default location, for the default duration and only if the OSD option is enabled.

Parameters:
p_caller The object that called the function.
i_channel Subpicture channel
psz_format printf style formatting

References osd_ShowTextRelative(), SUBPICTURE_ALIGN_RIGHT, SUBPICTURE_ALIGN_TOP, and vasprintf().

static void osd_SetKeyPressed ( vlc_object_t p_this,
int  i_value 
) [inline, static]

Set the key pressed to a value.

Assign a new key value to the last key pressed on the OSD Menu.

References vlc_value_t::i_int, and var_Set.

Referenced by osd_MenuActivate(), osd_MenuDown(), and osd_MenuUp().

static void osd_SetMenuUpdate ( osd_menu_t p_osd,
bool  b_value 
) [inline, static]

Update the OSD Menu update flag.

If the OSD Menu should be updated then set the update flag to true, else to false.

References vlc_value_t::b_bool, osd_menu_state_t::b_update, osd_menu_t::p_state, and var_Set.

Referenced by osd_ButtonSelect(), osd_MenuActivate(), osd_MenuDown(), osd_MenuHide(), osd_MenuNext(), osd_MenuPrev(), osd_MenuShow(), and osd_MenuUp().

static void osd_SetMenuVisible ( osd_menu_t p_osd,
bool  b_value 
) [inline, static]

Update the OSD Menu visibility flag.

true means OSD Menu should be shown. false means OSD Menu should not be shown.

References vlc_value_t::b_bool, osd_menu_state_t::b_menu_visible, osd_menu_t::p_state, and var_Set.

Referenced by osd_MenuActivate(), and osd_MenuShow().

int osd_ShowTextAbsolute ( spu_t p_spu_channel,
int  i_channel,
const char *  psz_string,
const text_style_t p_style,
int  i_flags,
int  i_hmargin,
int  i_vmargin,
mtime_t  i_start,
mtime_t  i_stop 
)

Show text on the video from a given start date to a given end date.

Parameters:
p_spu pointer to the subpicture queue the text is to be showed on
i_channel Subpicture channel
psz_string The text to be shown
p_style Pointer to a struct with text style info (it is duplicated)
i_flags flags for alignment and such
i_hmargin horizontal margin in pixels
i_vmargin vertical margin in pixels
i_start the time when this string is to appear on the video
i_stop the time when this string should stop to be displayed if this is 0 the string will be shown untill the next string is about to be shown

< Unspecified error

< Unspecified error

< Unspecified error

< Align the subpicture, but not the text inside

< No error

References subpicture_t::b_absolute, subpicture_t::b_ephemer, subpicture_region_t::i_align, subpicture_t::i_channel, video_format_t::i_chroma, video_format_t::i_height, subpicture_t::i_start, subpicture_t::i_stop, video_format_t::i_width, subpicture_region_t::i_x, video_format_t::i_x_offset, subpicture_region_t::i_y, video_format_t::i_y_offset, msg_Err, subpicture_t::p_region, subpicture_region_t::psz_text, spu_PutSubpicture(), strdup(), subpicture_Delete(), subpicture_New(), and subpicture_region_New().

Referenced by osd_ShowTextRelative().

int osd_ShowTextRelative ( spu_t p_spu,
int  i_channel,
const char *  psz_string,
const text_style_t p_style,
int  i_flags,
int  i_hmargin,
int  i_vmargin,
mtime_t  i_duration 
)

Textual feedback.

Functions that provide the textual feedback on the OSD. They are shown on hotkey commands. The feedback is also part of the osd_button_t object. The types are declared in the include file include/vlc_osd.h

See also:
vlc_osd.h

Textual feedback.

Parameters:
p_spu pointer to the subpicture queue the text is to be showed on
i_channel Subpicture channel
psz_string The text to be shown
p_style Pointer to a struct with text style info (it is duplicated)
i_flags flags for alignment and such
i_hmargin horizontal margin in pixels
i_vmargin vertical margin in pixels
i_duration Amount of time the text is to be shown.

References mdate(), and osd_ShowTextAbsolute().

Referenced by osd_Message().

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines