/*****************************************************************************
* Preamble
*****************************************************************************/
-#include <stdlib.h> /* malloc( ), free( ) */
-#include <string.h>
#include <vlc/vlc.h>
-#include <vlc/vout.h>
-#include "vlc_osd.h"
-#include "vlc_block.h"
-#include "vlc_filter.h"
+#include <vlc_charset.h>
+#include <vlc_vout.h>
+#include <vlc_osd.h>
+#include <vlc_block.h>
+#include <vlc_filter.h>
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
-#include <sys/stat.h>
#ifdef HAVE_UNISTD_H
# include <unistd.h>
# include <io.h>
#endif
+#include <glib.h>
+#include <glib/gstdio.h>
#include <glib-object.h> /* g_object_unref( ) */
#include <librsvg-2/librsvg/rsvg.h>
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
if( !p_sys->psz_template )
{
msg_Err( p_filter, "out of memory" );
+ free( p_sys );
return VLC_ENOMEM;
}
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 */
- g_type_init ();
+ rsvg_init( );
return VLC_SUCCESS;
}
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;
free( p_sys->psz_template );
free( p_sys );
+ rsvg_term( );
}
/*****************************************************************************
if( p_svg->p_rendition == NULL ) {
svg_RenderPicture( p_filter, p_svg );
- if( ! p_svg )
+ if( ! p_svg->p_rendition )
{
msg_Err( p_filter, "Cannot render SVG" );
return VLC_EGENERIC;
RsvgHandle *p_handle;
GError *error = NULL;
+ p_svg->p_rendition = NULL;
+
p_handle = rsvg_handle_new();
+ if( !p_handle )
+ {
+ msg_Err( p_filter, "Error creating SVG reader: %s", error->message );
+ return;
+ }
+
rsvg_handle_set_size_callback( p_handle, svg_SizeCallback, p_filter, NULL );
- rsvg_handle_write( p_handle,
- ( guchar* )p_svg->psz_text, strlen( p_svg->psz_text ) + 1,
- &error );
- if( error != NULL )
+ if( ! rsvg_handle_write( p_handle,
+ ( 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 ) );
+ return;
+ }
+
+ if( ! rsvg_handle_close( p_handle, &error ) )
+ {
+ msg_Err( p_filter, "error while rendering SVG (close): %s\n", error->message );
+ g_object_unref( G_OBJECT( p_handle ) );
return;
}
- rsvg_handle_close( p_handle, &error );
p_svg->p_rendition = rsvg_handle_get_pixbuf( p_handle );
- rsvg_handle_free( p_handle );
+
+ g_object_unref( G_OBJECT( p_handle ) );
}