X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fmisc%2Fsvg.c;h=e059ea3f7ac4f14f5306dd9b196bba5bc62e28a6;hb=b774d66a9a2a48e42fc20c54a16e12ae840d1a83;hp=f4dae4c512cbe2cdd80c1fd41a154fa948c27a62;hpb=1685c92307787c48715d390192596f36ce21d791;p=vlc diff --git a/modules/misc/svg.c b/modules/misc/svg.c index f4dae4c512..e059ea3f7a 100644 --- a/modules/misc/svg.c +++ b/modules/misc/svg.c @@ -24,14 +24,18 @@ /***************************************************************************** * Preamble *****************************************************************************/ -#include /* malloc( ), free( ) */ -#include -#include -#include -#include "vlc_osd.h" -#include "vlc_block.h" -#include "vlc_filter.h" +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include #ifdef HAVE_SYS_TYPES_H # include @@ -57,7 +61,7 @@ static int Create ( vlc_object_t * ); static void Destroy ( vlc_object_t * ); static int RenderText( filter_t *p_filter, subpicture_region_t *p_region_out, subpicture_region_t *p_region_in ); - +static char *svg_GetTemplate( vlc_object_t *p_this ); /***************************************************************************** * Module descriptor @@ -72,7 +76,7 @@ vlc_module_begin(); set_category( SUBCAT_INPUT_SCODEC ); set_capability( "text renderer", 99 ); add_shortcut( "svg" ); - add_string( "svg-template-file", "", NULL, TEMPLATE_TEXT, TEMPLATE_LONGTEXT, VLC_TRUE ); + add_string( "svg-template-file", "", NULL, TEMPLATE_TEXT, TEMPLATE_LONGTEXT, true ); set_callbacks( Create, Destroy ); vlc_module_end(); @@ -127,16 +131,13 @@ static int Create( vlc_object_t *p_this ) /* Allocate structure */ p_sys = malloc( sizeof( filter_sys_t ) ); if( !p_sys ) - { - msg_Err( p_filter, "out of memory" ); return VLC_ENOMEM; - } /* Initialize psz_template */ p_sys->psz_template = svg_GetTemplate( p_this ); if( !p_sys->psz_template ) { - msg_Err( p_filter, "out of memory" ); + free( p_sys ); return VLC_ENOMEM; } @@ -144,6 +145,7 @@ static int Create( vlc_object_t *p_this ) p_sys->i_height = p_filter->fmt_out.video.i_height; p_filter->pf_render_text = RenderText; + p_filter->pf_render_html = NULL; p_filter->p_sys = p_sys; /* MUST call this before any RSVG funcs */ @@ -160,7 +162,7 @@ static char *svg_GetTemplate( vlc_object_t *p_this ) FILE *file; psz_filename = config_GetPsz( p_filter, "svg-template-file" ); - if( !psz_filename || psz_filename[0] == 0 ) + if( !psz_filename || (psz_filename[0] == 0) ) { /* No filename. Use a default value. */ psz_template = NULL; @@ -178,10 +180,8 @@ static char *svg_GetTemplate( vlc_object_t *p_this ) else { struct stat s; - int i_ret; - i_ret = utf8_stat( psz_filename, &s ); - if( i_ret ) + if( fstat( fileno( file ), &s ) ) { /* Problem accessing file information. Should not happen as we could open it. */ @@ -201,13 +201,13 @@ static char *svg_GetTemplate( vlc_object_t *p_this ) psz_template = malloc( ( s.st_size + 42 ) * sizeof( char ) ); if( !psz_template ) { - msg_Err( p_filter, "out of memory" ); + fclose( file ); return NULL; } memset( psz_template, 0, s.st_size + 1 ); fread( psz_template, s.st_size, 1, file ); - fclose( file ); } + fclose( file ); } } if( !psz_template ) @@ -412,8 +412,8 @@ static void svg_RenderPicture( filter_t *p_filter, rsvg_handle_set_size_callback( p_handle, svg_SizeCallback, p_filter, NULL ); if( ! rsvg_handle_write( p_handle, - ( guchar* )p_svg->psz_text, strlen( p_svg->psz_text ), - &error ) ) + ( guchar* )p_svg->psz_text, strlen( p_svg->psz_text ), + &error ) ) { msg_Err( p_filter, "error while rendering SVG: %s\n", error->message ); g_object_unref( G_OBJECT( p_handle ) ); @@ -447,10 +447,7 @@ static int RenderText( filter_t *p_filter, subpicture_region_t *p_region_out, p_svg = ( svg_rendition_t * )malloc( sizeof( svg_rendition_t ) ); if( !p_svg ) - { - msg_Err( p_filter, "out of memory" ); return VLC_ENOMEM; - } p_region_out->i_x = p_region_in->i_x; p_region_out->i_y = p_region_in->i_y; @@ -463,7 +460,6 @@ static int RenderText( filter_t *p_filter, subpicture_region_t *p_region_out, p_svg->psz_text = strdup( psz_string ); if( !p_svg->psz_text ) { - msg_Err( p_filter, "out of memory" ); free( p_svg ); return VLC_ENOMEM; } @@ -478,7 +474,6 @@ static int RenderText( filter_t *p_filter, subpicture_region_t *p_region_out, p_svg->psz_text = malloc( ( length + 1 ) * sizeof( char ) ); if( !p_svg->psz_text ) { - msg_Err( p_filter, "out of memory" ); free( p_svg ); return VLC_ENOMEM; } @@ -502,8 +497,7 @@ static int RenderText( filter_t *p_filter, subpicture_region_t *p_region_out, static void FreeString( svg_rendition_t *p_svg ) { - if( p_svg->psz_text ) - free( p_svg->psz_text ); + free( p_svg->psz_text ); /* p_svg->p_rendition is a GdkPixbuf, and its allocation is managed through ref. counting */ if( p_svg->p_rendition )