"If you only have one file, simply enter its filename.")
#define REPEAT_TEXT N_("Logo animation # of loops")
#define REPEAT_LONGTEXT N_("Number of loops for the logo animation." \
- "1 = continuous, 0 = disabled")
+ "-1 = continuous, 0 = disabled")
#define DELAY_TEXT N_("Logo individual image time in ms")
#define DELAY_LONGTEXT N_("Individual image display time of 0 - 60000 ms.")
"(0=center, 1=left, 2=right, 4=top, 8=bottom, you can " \
"also use combinations of these values, eg 6 = top-right).")
+#define CFG_PREFIX "logo-"
+
static int pi_pos_values[] = { 0, 1, 2, 4, 8, 5, 6, 9, 10 };
static char *ppsz_pos_descriptions[] =
{ N_("Center"), N_("Left"), N_("Right"), N_("Top"), N_("Bottom"),
vlc_module_begin();
set_description( _("Logo video filter") );
set_capability( "video filter", 0 );
- set_shortname( N_("Logo overlay") );
+ set_shortname( _("Logo overlay") );
set_category( CAT_VIDEO );
set_subcategory( SUBCAT_VIDEO_SUBPIC );
add_shortcut( "logo" );
set_callbacks( Create, Destroy );
- add_file( "logo-file", NULL, NULL, FILE_TEXT, FILE_LONGTEXT, VLC_FALSE );
- add_integer( "logo-x", -1, NULL, POSX_TEXT, POSX_LONGTEXT, VLC_TRUE );
- add_integer( "logo-y", 0, NULL, POSY_TEXT, POSY_LONGTEXT, VLC_TRUE );
+ add_file( CFG_PREFIX "file", NULL, NULL, FILE_TEXT, FILE_LONGTEXT, VLC_FALSE );
+ add_integer( CFG_PREFIX "x", -1, NULL, POSX_TEXT, POSX_LONGTEXT, VLC_TRUE );
+ add_integer( CFG_PREFIX "y", 0, NULL, POSY_TEXT, POSY_LONGTEXT, VLC_TRUE );
/* default to 1000 ms per image, continuously cycle through them */
- add_integer( "logo-delay", 1000, NULL, DELAY_TEXT, DELAY_LONGTEXT, VLC_TRUE );
- add_integer( "logo-repeat", -1, NULL, REPEAT_TEXT, REPEAT_LONGTEXT, VLC_TRUE );
- add_integer_with_range( "logo-transparency", 255, 0, 255, NULL,
+ add_integer( CFG_PREFIX "delay", 1000, NULL, DELAY_TEXT, DELAY_LONGTEXT, VLC_TRUE );
+ add_integer( CFG_PREFIX "repeat", -1, NULL, REPEAT_TEXT, REPEAT_LONGTEXT, VLC_TRUE );
+ add_integer_with_range( CFG_PREFIX "transparency", 255, 0, 255, NULL,
TRANS_TEXT, TRANS_LONGTEXT, VLC_FALSE );
- add_integer( "logo-position", 6, NULL, POS_TEXT, POS_LONGTEXT, VLC_FALSE );
+ add_integer( CFG_PREFIX "position", 6, NULL, POS_TEXT, POS_LONGTEXT, VLC_FALSE );
change_integer_list( pi_pos_values, ppsz_pos_descriptions, 0 );
/* subpicture filter submodule */
add_shortcut( "logo" );
vlc_module_end();
+static const char *ppsz_filter_options[] = {
+ "file", "x", "y", "delay", "repeat", "transparency", "position", NULL
+};
+
/*****************************************************************************
* Structure to hold the set of individual logo image names, times,
* transparencies
if( !p_logo[i].p_pic )
{
- msg_Warn( p_this, "Error while loading logo %s. It will be skipped",
+ msg_Warn( p_this, "error while loading logo %s, will be skipped",
p_logo[i].psz_file );
}
/*****************************************************************************
* FreeLogoList
*****************************************************************************/
-#define FREE( a ) free(a);a=NULL;
void FreeLogoList( logo_list_t *p_logo_list )
{
unsigned int i;
- if( p_logo_list->psz_filename ) FREE( p_logo_list->psz_filename );
+ FREENULL( p_logo_list->psz_filename );
for( i = 0; i < p_logo_list->i_count; i++ )
{
logo_t *p_logo = &p_logo_list->p_logo[i];
- if( p_logo[i].psz_file ) FREE( p_logo[i].psz_file );
+ FREENULL( p_logo[i].psz_file );
if( p_logo[i].p_pic )
{
p_logo[i].p_pic->pf_release( p_logo[i].p_pic );
}
}
}
-#undef FREE
/*****************************************************************************
* vout_sys_t: logo video output method descriptor
{
filter_t *p_filter = (filter_t *)p_this;
filter_sys_t *p_sys;
- vlc_object_t *p_input;
logo_list_t *p_logo_list;
/* Allocate structure */
return VLC_ENOMEM;
}
- /* Hook used for callback variables */
- p_input = vlc_object_find( p_this, VLC_OBJECT_INPUT, FIND_PARENT );
- if( !p_input )
- {
- free( p_sys );
- free( p_logo_list );
- return VLC_ENOOBJ;
- }
+ config_ChainParse( p_filter, CFG_PREFIX, ppsz_filter_options,
+ p_filter->p_cfg );
+
+ /* Hook used for callback variables */
p_logo_list->psz_filename =
- var_CreateGetString( p_input->p_libvlc , "logo-file" );
+ var_CreateGetString( p_filter->p_libvlc_global , "logo-file" );
if( !p_logo_list->psz_filename || !*p_logo_list->psz_filename )
{
msg_Err( p_this, "logo file not specified" );
- vlc_object_release( p_input );
- //if( p_sys->psz_filename ) free( p_sys->psz_filename );
free( p_sys );
free( p_logo_list );
return VLC_EGENERIC;
}
- p_sys->posx = var_CreateGetInteger( p_input->p_libvlc , "logo-x" );
- p_sys->posy = var_CreateGetInteger( p_input->p_libvlc , "logo-y" );
- p_sys->pos = var_CreateGetInteger( p_input->p_libvlc , "logo-position" );
+ p_sys->posx = var_CreateGetInteger( p_filter->p_libvlc_global , "logo-x" );
+ p_sys->posy = var_CreateGetInteger( p_filter->p_libvlc_global , "logo-y" );
+ p_sys->pos = var_CreateGetInteger( p_filter->p_libvlc_global , "logo-position" );
p_logo_list->i_alpha = __MAX( __MIN( var_CreateGetInteger(
- p_input->p_libvlc, "logo-transparency"), 255 ), 0 );
+ p_filter->p_libvlc_global, "logo-transparency"), 255 ), 0 );
p_logo_list->i_delay =
- var_CreateGetInteger( p_input->p_libvlc , "logo-delay" );
+ var_CreateGetInteger( p_filter->p_libvlc_global , "logo-delay" );
p_logo_list->i_repeat =
- var_CreateGetInteger( p_input->p_libvlc , "logo-repeat" );
+ var_CreateGetInteger( p_filter->p_libvlc_global , "logo-repeat" );
- var_AddCallback( p_input->p_libvlc, "logo-file", LogoCallback, p_sys );
- var_AddCallback( p_input->p_libvlc, "logo-x", LogoCallback, p_sys );
- var_AddCallback( p_input->p_libvlc, "logo-y", LogoCallback, p_sys );
- var_AddCallback( p_input->p_libvlc, "logo-position", LogoCallback, p_sys );
- var_AddCallback( p_input->p_libvlc, "logo-transparency", LogoCallback, p_sys );
- var_AddCallback( p_input->p_libvlc, "logo-repeat", LogoCallback, p_sys );
- vlc_object_release( p_input );
+ var_AddCallback( p_filter->p_libvlc_global, "logo-file", LogoCallback, p_sys );
+ var_AddCallback( p_filter->p_libvlc_global, "logo-x", LogoCallback, p_sys );
+ var_AddCallback( p_filter->p_libvlc_global, "logo-y", LogoCallback, p_sys );
+ var_AddCallback( p_filter->p_libvlc_global, "logo-position", LogoCallback, p_sys );
+ var_AddCallback( p_filter->p_libvlc_global, "logo-transparency", LogoCallback, p_sys );
+ var_AddCallback( p_filter->p_libvlc_global, "logo-repeat", LogoCallback, p_sys );
vlc_mutex_init( p_filter, &p_logo_list->lock );
vlc_mutex_lock( &p_logo_list->lock );
{
filter_t *p_filter = (filter_t *)p_this;
filter_sys_t *p_sys = p_filter->p_sys;
- vlc_object_t *p_input;
vlc_mutex_destroy( &p_sys->p_logo_list->lock );
FreeLogoList( p_sys->p_logo_list );
free( p_sys );
/* Delete the logo variables from INPUT */
- p_input = vlc_object_find( p_this, VLC_OBJECT_INPUT, FIND_PARENT );
- if( !p_input ) return;
-
- var_Destroy( p_input->p_libvlc , "logo-file" );
- var_Destroy( p_input->p_libvlc , "logo-x" );
- var_Destroy( p_input->p_libvlc , "logo-y" );
- var_Destroy( p_input->p_libvlc , "logo-delay" );
- var_Destroy( p_input->p_libvlc , "logo-repeat" );
- var_Destroy( p_input->p_libvlc , "logo-position" );
- var_Destroy( p_input->p_libvlc , "logo-transparency" );
- vlc_object_release( p_input );
+ var_Destroy( p_filter->p_libvlc_global , "logo-file" );
+ var_Destroy( p_filter->p_libvlc_global , "logo-x" );
+ var_Destroy( p_filter->p_libvlc_global , "logo-y" );
+ var_Destroy( p_filter->p_libvlc_global , "logo-delay" );
+ var_Destroy( p_filter->p_libvlc_global , "logo-repeat" );
+ var_Destroy( p_filter->p_libvlc_global , "logo-position" );
+ var_Destroy( p_filter->p_libvlc_global , "logo-transparency" );
}
/*****************************************************************************