static subpicture_region_t * vout_OSDEpgText(const char *text, int x, int y, int size, uint32_t color) { video_format_t fmt; subpicture_region_t *region; if (!text) return NULL; /* Create a new subpicture region */ video_format_Init(&fmt, VLC_CODEC_TEXT); fmt.i_sar_num = 0; fmt.i_sar_den = 1; region = subpicture_region_New(&fmt); if (!region) return NULL; /* Set subpicture parameters */ region->psz_text = strdup(text); region->i_align = 0; region->i_x = x; region->i_y = y; /* Set text style */ region->p_style = text_style_New(); if (region->p_style) { region->p_style->i_font_size = size; region->p_style->i_font_color = color; region->p_style->i_font_alpha = 0; } return region; }
overlay_t *OverlayCreate( void ) { overlay_t *p_ovl = calloc( 1, sizeof( overlay_t ) ); if( p_ovl == NULL ) return NULL; p_ovl->i_x = p_ovl->i_y = 0; p_ovl->i_alpha = 0xFF; p_ovl->b_active = false; video_format_Setup( &p_ovl->format, VLC_FOURCC( '\0','\0','\0','\0') , 0, 0, 1, 1 ); p_ovl->p_fontstyle = text_style_New(); p_ovl->data.p_text = NULL; return p_ovl; }
/***************************************************************************** * CreateFilter: allocates marquee video filter *****************************************************************************/ static int CreateFilter( vlc_object_t *p_this ) { filter_t *p_filter = (filter_t *)p_this; filter_sys_t *p_sys; /* Allocate structure */ p_sys = p_filter->p_sys = malloc( sizeof( filter_sys_t ) ); if( p_sys == NULL ) return VLC_ENOMEM; vlc_mutex_init( &p_sys->lock ); p_sys->p_style = text_style_New(); config_ChainParse( p_filter, CFG_PREFIX, ppsz_filter_options, p_filter->p_cfg ); #define CREATE_VAR( stor, type, var ) \ p_sys->stor = var_CreateGet##type##Command( p_filter, var ); \ var_AddCallback( p_filter, var, MarqueeCallback, p_sys ); CREATE_VAR( i_xoff, Integer, "marq-x" ); CREATE_VAR( i_yoff, Integer, "marq-y" ); CREATE_VAR( i_timeout,Integer, "marq-timeout" ); p_sys->i_refresh = 1000 * var_CreateGetIntegerCommand( p_filter, "marq-refresh" ); var_AddCallback( p_filter, "marq-refresh", MarqueeCallback, p_sys ); CREATE_VAR( i_pos, Integer, "marq-position" ); CREATE_VAR( format, String, "marq-marquee" ); p_sys->filepath = var_InheritString( p_filter, "marq-file" ); p_sys->message = NULL; p_sys->p_style->i_font_alpha = var_CreateGetIntegerCommand( p_filter, "marq-opacity" ); var_AddCallback( p_filter, "marq-opacity", MarqueeCallback, p_sys ); CREATE_VAR( p_style->i_font_color, Integer, "marq-color" ); CREATE_VAR( p_style->i_font_size, Integer, "marq-size" ); /* Misc init */ p_filter->pf_sub_source = Filter; p_sys->last_time = 0; return VLC_SUCCESS; }
static subpicture_region_t * vout_OSDEpgText( const char *psz_string, int i_x, int i_y, int i_size, uint32_t i_color ) { video_format_t fmt; subpicture_region_t *p_region; if( !psz_string ) return NULL; /* Create a new subpicture region */ video_format_Init( &fmt, VLC_CODEC_TEXT ); fmt.i_sar_num = 0; fmt.i_sar_den = 1; p_region = subpicture_region_New( &fmt ); if( !p_region ) return NULL; /* Set subpicture parameters */ p_region->psz_text = strdup( psz_string ); p_region->i_align = 0; p_region->i_x = i_x; p_region->i_y = i_y; /* Set text style */ p_region->p_style = text_style_New(); if( p_region->p_style ) { p_region->p_style->i_font_size = i_size; p_region->p_style->i_font_color = i_color; p_region->p_style->i_font_alpha = 0; } return p_region; }
/***************************************************************************** * 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; }