/*****************************************************************************
* Preamble
*****************************************************************************/
-#include <stdlib.h>
-#include <string.h>
#include <vlc/vlc.h>
#include <vlc_vout.h>
#include <vlc_filter.h>
#endif
#define OSD_UPDATE_MIN 0
-#define OSD_UPDATE_DEFAULT 0
+#define OSD_UPDATE_DEFAULT 300
#define OSD_UPDATE_MAX 1000
vlc_module_begin();
set_description( _("On Screen Display menu") );
set_shortname( _("OSD menu") );
add_shortcut( "osdmenu" );
-/*
+
set_category( CAT_VIDEO );
set_subcategory( SUBCAT_VIDEO_SUBPIC );
-*/
+
set_callbacks( CreateFilter, DestroyFilter );
vlc_module_end();
*****************************************************************************/
struct filter_sys_t
{
- int position; /* relative positioning of SPU images */
+ int i_position; /* relative positioning of SPU images */
int i_x; /* absolute positioning of SPU images */
int i_y; /* absolute positioning of SPU images */
mtime_t i_last_date; /* last mdate SPU object has been sent to SPU subsytem */
p_sys->i_x = var_CreateGetIntegerCommand( p_this, OSD_CFG "x" );
p_sys->i_y = var_CreateGetIntegerCommand( p_this, OSD_CFG "y" );
- p_sys->position = var_CreateGetIntegerCommand( p_this, OSD_CFG "position" );
+ p_sys->i_position = var_CreateGetIntegerCommand( p_this, OSD_CFG "position" );
p_sys->i_alpha = var_CreateGetIntegerCommand( p_this, OSD_CFG "alpha" );
/* in micro seconds - divide by 2 to match user expectations */
filter_t *p_filter = (filter_t *) p_data;
p_filter->p_sys->b_visible = VLC_TRUE;
+ p_filter->p_sys->b_update = VLC_TRUE;
return VLC_SUCCESS;
}
vlc_value_t oldval, vlc_value_t newval, void *p_data )
{
filter_t *p_filter = (filter_t *) p_data;
+ filter_sys_t *p_sys = p_filter->p_sys;
- p_filter->p_sys->b_update = VLC_TRUE;
- p_filter->p_sys->i_end_date = (mtime_t) 0;
+ p_sys->b_update = p_sys->b_visible ? VLC_TRUE : VLC_FALSE;
+ p_sys->i_end_date = (mtime_t) 0;
return VLC_SUCCESS;
}
/*****************************************************************************
* create_text_region : compose a text region SPU
*****************************************************************************/
-static subpicture_region_t *create_text_region( filter_t *p_filter, subpicture_t *p_spu,
+static subpicture_region_t *create_text_region( filter_t *p_filter, subpicture_t *p_spu,
int i_width, int i_height, const char *psz_text )
{
subpicture_region_t *p_region;
return NULL;
}
p_region->psz_text = strdup( psz_text );
- p_region->i_x = 0;
+ p_region->i_x = 0;
p_region->i_y = 40;
-#if 1
- msg_Dbg( p_filter, "SPU text region position (%d,%d) (%d,%d) [%s]",
+#if 0
+ msg_Dbg( p_filter, "SPU text region position (%d,%d) (%d,%d) [%s]",
p_region->i_x, p_region->i_y,
p_region->fmt.i_width, p_region->fmt.i_height, p_region->psz_text );
#endif
p_region->i_x = 0;
p_region->i_y = 0;
- p_region->i_align = SUBPICTURE_ALIGN_LEFT;
+ p_region->i_align = p_filter->p_sys->i_position;
#if 0
msg_Dbg( p_filter, "SPU picture region position (%d,%d) (%d,%d) [%p]",
p_region->i_x, p_region->i_y,
p_spu->b_absolute = VLC_TRUE;
else
p_spu->b_absolute = p_sys->b_absolute;
- p_spu->i_flags = p_sys->position;
+ p_spu->i_flags = p_sys->i_position;
/* Determine the duration of the subpicture */
if( p_sys->i_end_date > 0 )
{
if( newval.i_int == pi_pos_values[i] )
{
- p_sys->position = newval.i_int % 11;
+ p_sys->i_position = newval.i_int % 11;
break;
}
}