vlc | branch: master | Jean-Baptiste Kempf <[email protected]> | Thu Sep 26 21:23:43 2013 +0200| [634111a2d1c2e5275e91bb4fbabd01212b1a062b] | committer: Jean-Baptiste Kempf
Freetype: split freetype init from Create Signed-off-by: Jean-Baptiste Kempf <[email protected]> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=634111a2d1c2e5275e91bb4fbabd01212b1a062b --- modules/text_renderer/freetype.c | 103 ++++++++++++++++++++++---------------- 1 file changed, 61 insertions(+), 42 deletions(-) diff --git a/modules/text_renderer/freetype.c b/modules/text_renderer/freetype.c index baeeb96..28f09eb 100644 --- a/modules/text_renderer/freetype.c +++ b/modules/text_renderer/freetype.c @@ -2195,6 +2195,65 @@ static int RenderHtml( filter_t *p_filter, subpicture_region_t *p_region_out, ***************************************************************************** * This function allocates and initializes a Clone vout method. *****************************************************************************/ +static int Init_FT( vlc_object_t *p_this, + const char *psz_fontfile, + const int fontindex, + const float f_outline_thickness) +{ + filter_t *p_filter = (filter_t *)p_this; + filter_sys_t *p_sys = p_filter->p_sys; + + /* */ + int i_error = FT_Init_FreeType( &p_sys->p_library ); + if( i_error ) + { + msg_Err( p_filter, "couldn't initialize freetype" ); + goto error; + } + + i_error = FT_New_Face( p_sys->p_library, psz_fontfile ? psz_fontfile : "", + fontindex, &p_sys->p_face ); + + if( i_error == FT_Err_Unknown_File_Format ) + { + msg_Err( p_filter, "file %s have unknown format", + psz_fontfile ? psz_fontfile : "(null)" ); + goto error; + } + else if( i_error ) + { + msg_Err( p_filter, "failed to load font file %s", + psz_fontfile ? psz_fontfile : "(null)" ); + goto error; + } + + i_error = FT_Select_Charmap( p_sys->p_face, ft_encoding_unicode ); + if( i_error ) + { + msg_Err( p_filter, "font has no unicode translation table" ); + goto error; + } + + if( SetFontSize( p_filter, 0 ) != VLC_SUCCESS ) goto error; + + p_sys->p_stroker = NULL; + if( f_outline_thickness > 0.001 ) + { + i_error = FT_Stroker_New( p_sys->p_library, &p_sys->p_stroker ); + if( i_error ) + msg_Err( p_filter, "Failed to create stroker for outlining" ); + } + + return VLC_SUCCESS; + +error: + if( p_sys->p_face ) FT_Done_Face( p_sys->p_face ); + if( p_sys->p_library ) FT_Done_FreeType( p_sys->p_library ); + + return VLC_EGENERIC; +} + + static int Create( vlc_object_t *p_this ) { filter_t *p_filter = (filter_t *)p_this; @@ -2203,7 +2262,7 @@ static int Create( vlc_object_t *p_this ) char *psz_fontname = NULL; char *psz_monofontfile = NULL; char *psz_monofontfamily = NULL; - int i_error = 0, fontindex = 0, monofontindex = 0; + int fontindex = 0, monofontindex = 0; /* Allocate structure */ p_filter->p_sys = p_sys = malloc( sizeof(*p_sys) ); @@ -2314,46 +2373,8 @@ static int Create( vlc_object_t *p_this ) #endif p_sys->style.psz_monofontname = psz_monofontfamily; - /* */ - i_error = FT_Init_FreeType( &p_sys->p_library ); - if( i_error ) - { - msg_Err( p_filter, "couldn't initialize freetype" ); - goto error; - } - - i_error = FT_New_Face( p_sys->p_library, psz_fontfile ? psz_fontfile : "", - fontindex, &p_sys->p_face ); - - if( i_error == FT_Err_Unknown_File_Format ) - { - msg_Err( p_filter, "file %s have unknown format", - psz_fontfile ? psz_fontfile : "(null)" ); - goto error; - } - else if( i_error ) - { - msg_Err( p_filter, "failed to load font file %s", - psz_fontfile ? psz_fontfile : "(null)" ); - goto error; - } - - i_error = FT_Select_Charmap( p_sys->p_face, ft_encoding_unicode ); - if( i_error ) - { - msg_Err( p_filter, "font has no unicode translation table" ); + if( Init_FT( p_this, psz_fontname, fontindex, f_outline_thickness ) != VLC_SUCCESS ) goto error; - } - - if( SetFontSize( p_filter, 0 ) != VLC_SUCCESS ) goto error; - - p_sys->p_stroker = NULL; - if( f_outline_thickness > 0.001 ) - { - i_error = FT_Stroker_New( p_sys->p_library, &p_sys->p_stroker ); - if( i_error ) - msg_Err( p_filter, "Failed to create stroker for outlining" ); - } p_sys->pp_font_attachments = NULL; p_sys->i_font_attachments = 0; @@ -2371,8 +2392,6 @@ static int Create( vlc_object_t *p_this ) return VLC_SUCCESS; error: - if( p_sys->p_face ) FT_Done_Face( p_sys->p_face ); - if( p_sys->p_library ) FT_Done_FreeType( p_sys->p_library ); #ifdef HAVE_STYLES free( psz_fontfile ); free( psz_monofontfile ); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
