[vlc-devel] [PATCH 16/19] ttml codec: sending a duplicate of the style instead of the original
Stanislas Plessia
stplessia at gmail.com
Mon Aug 29 16:01:14 CEST 2016
The functions which use the styles will merge their
attributes, and to avoid consequences of these merges on the
original styles, we work with duplicates.
---
modules/codec/substtml.c | 32 ++++++++++++++++++++++++++++++--
1 file changed, 30 insertions(+), 2 deletions(-)
diff --git a/modules/codec/substtml.c b/modules/codec/substtml.c
index f53c897..f20eb19 100644
--- a/modules/codec/substtml.c
+++ b/modules/codec/substtml.c
@@ -99,6 +99,30 @@ static void MergeTTMLStyle( ttml_style_t *p_dst, const ttml_style_t *p_src)
p_dst->i_margin_percent_v = p_src->i_margin_percent_v;
}
+static ttml_style_t* DuplicateStyle( ttml_style_t* p_style_src )
+{
+ ttml_style_t* p_style = calloc( 1, sizeof( *p_style ) );
+ if( unlikely( p_style == NULL ) )
+ return NULL;
+
+ *p_style = *p_style_src;
+ p_style->psz_styleid = strdup( p_style_src->psz_styleid );
+ if( unlikely( p_style->psz_styleid == NULL ) )
+ {
+ free( p_style );
+ return NULL;
+ }
+
+ p_style->font_style = text_style_Duplicate( p_style_src->font_style );
+ if( unlikely( p_style->font_style == NULL ) )
+ {
+ free( p_style->psz_styleid );
+ free( p_style );
+ return NULL;
+ }
+ return p_style;
+}
+
static void CleanupStyle( ttml_style_t* p_ttml_style )
{
text_style_Delete( p_ttml_style->font_style );
@@ -113,7 +137,8 @@ static ttml_style_t *FindTextStyle( decoder_t *p_dec, const char *psz_style )
for( size_t i = 0; i < p_sys->i_styles; i++ )
{
if( !strcmp( p_sys->pp_styles[i]->psz_styleid, psz_style ) )
- return p_sys->pp_styles[i];
+ return DuplicateStyle( p_sys->pp_styles[i] );
+
}
return NULL;
}
@@ -193,7 +218,10 @@ static ttml_style_t* ParseTTMLStyle( decoder_t *p_dec, xml_reader_t* p_reader, c
{
if( !strcasecmp( p_sys->pp_styles[i]->psz_styleid, val ) )
{
- p_base_style = p_sys->pp_styles[i];
+ p_base_style = DuplicateStyle( p_sys->pp_styles[i] );
+ if( unlikely( p_base_style == NULL ) )
+ return NULL;
+
break;
}
}
--
2.7.4
More information about the vlc-devel
mailing list