[vlc-devel] commit: Check against a few libass errors in AssHandleYield. ( Laurent Aimar )
git version control
git at videolan.org
Sat Aug 9 02:21:03 CEST 2008
vlc | branch: master | Laurent Aimar <fenrir at videolan.org> | Tue Aug 5 00:10:05 2008 +0200| [ae39fb41d1e40a260211acfd79a2d2116f138ba3] | committer: Laurent Aimar
Check against a few libass errors in AssHandleYield.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ae39fb41d1e40a260211acfd79a2d2116f138ba3
---
modules/codec/libass.c | 28 +++++++++++++++++++++-------
1 files changed, 21 insertions(+), 7 deletions(-)
diff --git a/modules/codec/libass.c b/modules/codec/libass.c
index 1c5eaec..15f0be3 100644
--- a/modules/codec/libass.c
+++ b/modules/codec/libass.c
@@ -629,13 +629,11 @@ static ass_handle_t *AssHandleYield( decoder_t *p_dec )
{
vlc_mutex_t *p_lock = var_AcquireMutex( "libass" );
- ass_handle_t *p_ass;
- ass_library_t *p_library;
- ass_renderer_t *p_renderer;
+ ass_handle_t *p_ass = NULL;
+ ass_library_t *p_library = NULL;
+ ass_renderer_t *p_renderer = NULL;
vlc_value_t val;
- VLC_UNUSED(p_dec);
-
var_Create( p_dec->p_libvlc, "libass-handle", VLC_VAR_ADDRESS );
if( var_Get( p_dec->p_libvlc, "libass-handle", &val ) )
val.p_address = NULL;
@@ -650,10 +648,11 @@ static ass_handle_t *AssHandleYield( decoder_t *p_dec )
return p_ass;
}
- msg_Err( p_dec, "--------------------- ALLOC ASS CONTEXt" );
-
/* */
p_ass = malloc( sizeof(*p_ass) );
+ if( !p_ass )
+ goto error;
+
/* */
p_ass->p_libvlc = VLC_OBJECT(p_dec->p_libvlc);
p_ass->p_lock = p_lock;
@@ -661,6 +660,8 @@ static ass_handle_t *AssHandleYield( decoder_t *p_dec )
/* Create libass library */
p_ass->p_library = p_library = ass_library_init();
+ if( !p_library )
+ goto error;
ass_set_fonts_dir( p_library, "/usr/share/fonts" ); // FIXME
ass_set_extract_fonts( p_library, true );
@@ -668,6 +669,9 @@ static ass_handle_t *AssHandleYield( decoder_t *p_dec )
/* Create the renderer */
p_ass->p_renderer = p_renderer = ass_renderer_init( p_library );
+ if( !p_renderer )
+ goto error;
+
ass_set_use_margins( p_renderer, false);
//if( false )
// ass_set_margins( p_renderer, int t, int b, int l, int r);
@@ -692,6 +696,16 @@ static ass_handle_t *AssHandleYield( decoder_t *p_dec )
/* */
vlc_mutex_unlock( p_ass->p_lock );
return p_ass;
+
+error:
+ if( p_renderer )
+ ass_renderer_done( p_renderer );
+ if( p_library )
+ ass_library_done( p_library );
+
+ free( p_ass );
+ vlc_mutex_unlock( p_lock );
+ return NULL;
}
static void AssHandleRelease( ass_handle_t *p_ass )
{
More information about the vlc-devel
mailing list