int OverlayDestroy( overlay_t *p_ovl ) { free( p_ovl->data.p_text ); text_style_Delete( p_ovl->p_fontstyle ); return VLC_SUCCESS; }
/***************************************************************************** * DestroyFilter: destroy marquee video filter *****************************************************************************/ static void DestroyFilter( vlc_object_t *p_this ) { filter_t *p_filter = (filter_t *)p_this; filter_sys_t *p_sys = p_filter->p_sys; /* Delete the marquee variables */ #define DEL_VAR(var) \ var_DelCallback( p_filter, var, MarqueeCallback, p_sys ); \ var_Destroy( p_filter, var ); DEL_VAR( "marq-x" ); DEL_VAR( "marq-y" ); DEL_VAR( "marq-timeout" ); DEL_VAR( "marq-refresh" ); DEL_VAR( "marq-position" ); DEL_VAR( "marq-marquee" ); DEL_VAR( "marq-opacity" ); DEL_VAR( "marq-color" ); DEL_VAR( "marq-size" ); vlc_mutex_destroy( &p_sys->lock ); text_style_Delete( p_sys->p_style ); free( p_sys->format ); free( p_sys->filepath ); free( p_sys->message ); free( p_sys ); }
void text_segment_Delete( text_segment_t* segment ) { if ( segment != NULL ) { free( segment->psz_text ); text_style_Delete( segment->style ); free( segment ); } }
/***************************************************************************** * DestroyFilter: destroy RSS video filter *****************************************************************************/ static void DestroyFilter( vlc_object_t *p_this ) { filter_t *p_filter = (filter_t *)p_this; filter_sys_t *p_sys = p_filter->p_sys; vlc_timer_destroy( p_sys->timer ); vlc_mutex_destroy( &p_sys->lock ); text_style_Delete( p_sys->p_style ); free( p_sys->psz_marquee ); FreeRSS( p_sys->p_feeds, p_sys->i_feeds ); free( p_sys ); }
void subpicture_region_Delete( subpicture_region_t *p_region ) { if( !p_region ) return; if( p_region->p_private ) subpicture_region_private_Delete( p_region->p_private ); if( p_region->p_picture ) picture_Release( p_region->p_picture ); free( p_region->fmt.p_palette ); free( p_region->psz_text ); free( p_region->psz_html ); if( p_region->p_style ) text_style_Delete( p_region->p_style ); free( p_region ); }
/***************************************************************************** * CloseDecoder: clean up the decoder *****************************************************************************/ static void CloseDecoder( vlc_object_t *p_this ) { decoder_t *p_dec = (decoder_t *)p_this; decoder_sys_t *p_sys = p_dec->p_sys; if( p_sys->pp_ssa_styles ) { int i; for( i = 0; i < p_sys->i_ssa_styles; i++ ) { if( !p_sys->pp_ssa_styles[i] ) continue; free( p_sys->pp_ssa_styles[i]->psz_stylename ); text_style_Delete( p_sys->pp_ssa_styles[i]->p_style ); free( p_sys->pp_ssa_styles[i] ); } TAB_CLEAN( p_sys->i_ssa_styles, p_sys->pp_ssa_styles ); } if( p_sys->pp_images ) { int i; for( i = 0; i < p_sys->i_images; i++ ) { if( !p_sys->pp_images[i] ) continue; if( p_sys->pp_images[i]->p_pic ) picture_Release( p_sys->pp_images[i]->p_pic ); free( p_sys->pp_images[i]->psz_filename ); free( p_sys->pp_images[i] ); } TAB_CLEAN( p_sys->i_images, p_sys->pp_images ); } free( p_sys ); }
static bool SegmentSplit( tx3g_segment_t *p_prev, tx3g_segment_t **pp_segment, const uint16_t i_start, const uint16_t i_end, const text_style_t *p_styles ) { tx3g_segment_t *p_segment_left = NULL, *p_segment_middle = NULL, *p_segment_right = NULL; if ( (*pp_segment)->i_size == 0 ) return false; if ( i_start > i_end ) return false; if ( (size_t)(i_end - i_start) > (*pp_segment)->i_size - 1 ) return false; if ( i_end > (*pp_segment)->i_size - 1 ) return false; SegmentDoSplit( *pp_segment, i_start, i_end, &p_segment_left, &p_segment_middle, &p_segment_right ); if ( !p_segment_middle ) { /* Failed */ text_segment_Delete( p_segment_left->s ); free( p_segment_left ); text_segment_Delete( p_segment_right->s ); free( p_segment_right ); return false; } tx3g_segment_t *p_next3g = (*pp_segment)->p_next3g; text_segment_Delete( (*pp_segment)->s ); free( *pp_segment ); *pp_segment = ( p_segment_left ) ? p_segment_left : p_segment_middle ; if ( p_prev ) p_prev->p_next3g = *pp_segment; if ( p_segment_right ) p_segment_right->p_next3g = p_next3g; else p_segment_middle->p_next3g = p_next3g; text_style_Delete( p_segment_middle->s->style ); p_segment_middle->s->style = text_style_Duplicate( p_styles ); return true; }
/***************************************************************************** * CreateFilter: allocates RSS video filter *****************************************************************************/ static int CreateFilter( vlc_object_t *p_this ) { filter_t *p_filter = (filter_t *)p_this; filter_sys_t *p_sys; char *psz_urls; int i_ttl; /* Allocate structure */ p_sys = p_filter->p_sys = (filter_sys_t *)malloc( sizeof( filter_sys_t ) ); // sunqueen modify if( p_sys == NULL ) return VLC_ENOMEM; config_ChainParse( p_filter, CFG_PREFIX, ppsz_filter_options, p_filter->p_cfg ); /* Get the urls to parse: must be non empty */ psz_urls = var_CreateGetNonEmptyString( p_filter, CFG_PREFIX "urls" ); if( !psz_urls ) { msg_Err( p_filter, "The list of urls must not be empty" ); free( p_sys ); return VLC_EGENERIC; } /* Fill the p_sys structure with the configuration */ p_sys->i_title = var_CreateGetInteger( p_filter, CFG_PREFIX "title" ); p_sys->i_cur_feed = 0; p_sys->i_cur_item = p_sys->i_title == scroll_title ? -1 : 0; p_sys->i_cur_char = 0; p_sys->i_feeds = 0; p_sys->p_feeds = NULL; p_sys->i_speed = var_CreateGetInteger( p_filter, CFG_PREFIX "speed" ); p_sys->i_length = var_CreateGetInteger( p_filter, CFG_PREFIX "length" ); p_sys->b_images = var_CreateGetBool( p_filter, CFG_PREFIX "images" ); i_ttl = __MAX( 0, var_CreateGetInteger( p_filter, CFG_PREFIX "ttl" ) ); p_sys->psz_marquee = (char *)malloc( p_sys->i_length + 1 ); // sunqueen modify if( p_sys->psz_marquee == NULL ) { free( psz_urls ); free( p_sys ); return VLC_ENOMEM; } p_sys->psz_marquee[p_sys->i_length] = '\0'; p_sys->p_style = text_style_New(); if( p_sys->p_style == NULL ) goto error; p_sys->i_xoff = var_CreateGetInteger( p_filter, CFG_PREFIX "x" ); p_sys->i_yoff = var_CreateGetInteger( p_filter, CFG_PREFIX "y" ); p_sys->i_pos = var_CreateGetInteger( p_filter, CFG_PREFIX "position" ); p_sys->p_style->i_font_alpha = 255 - var_CreateGetInteger( p_filter, CFG_PREFIX "opacity" ); p_sys->p_style->i_font_color = var_CreateGetInteger( p_filter, CFG_PREFIX "color" ); p_sys->p_style->i_font_size = var_CreateGetInteger( p_filter, CFG_PREFIX "size" ); if( p_sys->b_images && p_sys->p_style->i_font_size == -1 ) { msg_Warn( p_filter, "rss-size wasn't specified. Feed images will thus be displayed without being resized" ); } /* Parse the urls */ if( ParseUrls( p_filter, psz_urls ) ) goto error; /* Misc init */ vlc_mutex_init( &p_sys->lock ); p_filter->pf_sub_source = Filter; p_sys->last_date = (mtime_t)0; p_sys->b_fetched = false; /* Create and arm the timer */ if( vlc_timer_create( &p_sys->timer, Fetch, p_filter ) ) { vlc_mutex_destroy( &p_sys->lock ); goto error; } vlc_timer_schedule( p_sys->timer, false, 1, (mtime_t)(i_ttl)*1000000 ); free( psz_urls ); return VLC_SUCCESS; error: if( p_sys->p_style ) text_style_Delete( p_sys->p_style ); free( p_sys->psz_marquee ); free( psz_urls ); free( p_sys ); return VLC_ENOMEM; }