*/
typedef struct
{
- char *psz_file; /* candidate for deletion -- not needed */
int i_delay; /* -1 means use default delay */
int i_alpha; /* -1 means use default alpha */
picture_t *p_pic;
int i_delay; /* default delay (0 - 60000 ms) */
int i_alpha; /* default alpha */
- char *psz_filename; /* --logo-file string ( is it really useful
- * to store it ? ) */
} logo_list_t;
/**
static int LogoCallback( vlc_object_t *, char const *,
vlc_value_t, vlc_value_t, void * );
-static void LogoListLoad( vlc_object_t *, logo_list_t * );
+static void LogoListLoad( vlc_object_t *, logo_list_t *, const char * );
static void LogoListUnload( logo_list_t * );
static logo_t *LogoListNext( logo_list_t *p_list, mtime_t i_date );
static logo_t *LogoListCurrent( logo_list_t *p_list );
{
filter_t *p_filter = (filter_t *)p_this;
filter_sys_t *p_sys;
+ char *psz_filename;
/* */
if( !b_sub && !es_format_IsSimilar( &p_filter->fmt_in, &p_filter->fmt_out ) )
/* */
logo_list_t *p_list = &p_sys->list;
- p_list->psz_filename =
- var_CreateGetStringCommand( p_filter, "logo-file" );
- if( !p_list->psz_filename )
+ psz_filename = var_CreateGetStringCommand( p_filter, "logo-file" );
+ if( !psz_filename )
{
if( p_sys->p_blend )
filter_DeleteBlend( p_sys->p_blend );
free( p_sys );
return VLC_ENOMEM;
}
- if( *p_list->psz_filename == '\0' )
+ if( *psz_filename == '\0' )
msg_Warn( p_this, "no logo file specified" );
p_list->i_alpha = var_CreateGetIntegerCommand( p_filter,
p_sys->i_pos = 0;
vlc_mutex_init( &p_sys->lock );
- LogoListLoad( p_this, p_list );
+ LogoListLoad( p_this, p_list, psz_filename );
p_sys->b_spu_update = true;
p_sys->b_mouse_grab = false;
p_filter->pf_mouse = Mouse;
}
+ free( psz_filename );
return VLC_SUCCESS;
}
if( !strcmp( psz_var, "logo-file" ) )
{
LogoListUnload( p_list );
- p_list->psz_filename = strdup( newval.psz_string );
- if( !p_list->psz_filename )
- abort();
- LogoListLoad( p_this, p_list );
+ LogoListLoad( p_this, p_list, newval.psz_string );
}
else if ( !strcmp( psz_var, "logo-x" ) )
{
/**
* It loads the logo image into memory.
*/
-static picture_t *LoadImage( vlc_object_t *p_this, char *psz_filename )
+static picture_t *LoadImage( vlc_object_t *p_this, const char *psz_filename )
{
if( !psz_filename )
return NULL;
* without a stated time or transparency will use the logo-delay and
* logo-transparency values.
*/
-static void LogoListLoad( vlc_object_t *p_this, logo_list_t *p_logo_list )
+static void LogoListLoad( vlc_object_t *p_this, logo_list_t *p_logo_list,
+ const char *psz_filename )
{
char *psz_list; /* the list: <logo>[,[<delay>[,[<alpha>]]]][;...] */
+ char *psz_original;
unsigned int i;
logo_t *p_logo; /* the parsing's result */
p_logo_list->i_counter = 0;
p_logo_list->i_next_pic = 0;
- psz_list = strdup( p_logo_list->psz_filename );
+ psz_original = psz_list = strdup( psz_filename );
if( !psz_list )
abort();
*p_c = '\0';
}
- p_logo[i].psz_file = strdup( psz_list );
- p_logo[i].p_pic = LoadImage( p_this, p_logo[i].psz_file );
-
+ msg_Dbg( p_this, "logo file name %s, delay %d, alpha %d",
+ psz_list, p_logo[i].i_delay, p_logo[i].i_alpha );
+ p_logo[i].p_pic = LoadImage( p_this, psz_list );
if( !p_logo[i].p_pic )
{
msg_Warn( p_this, "error while loading logo %s, will be skipped",
- p_logo[i].psz_file );
+ psz_list );
}
if( p_c )
psz_list = &p_c[1];
}
- for( i = 0; i < p_logo_list->i_count; i++ )
- {
- msg_Dbg( p_this, "logo file name %s, delay %d, alpha %d",
- p_logo[i].psz_file, p_logo[i].i_delay, p_logo[i].i_alpha );
- }
-
/* initialize so that on the first update it will wrap back to 0 */
p_logo_list->i_counter = p_logo_list->i_count - 1;
+
+ free( psz_original );
}
/**
*/
static void LogoListUnload( logo_list_t *p_list )
{
- free( p_list->psz_filename );
-
for( unsigned i = 0; i < p_list->i_count; i++ )
{
logo_t *p_logo = &p_list->p_logo[i];
- free( p_logo->psz_file );
if( p_logo->p_pic )
- {
picture_Release( p_logo->p_pic );
- p_logo->p_pic = NULL;
- }
- free( p_logo );
}
+ free( p_list->p_logo );
}
/**