vlc | branch: master | Francois Cartegnie <[email protected]> | Thu Jan 18 14:21:32 2018 +0100| [20ae636613401ede9727778f611b3d52bada283a] | committer: Francois Cartegnie
codec: webvtt: refactor segment chaining > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=20ae636613401ede9727778f611b3d52bada283a --- modules/codec/webvtt/subsvtt.c | 64 ++++++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 28 deletions(-) diff --git a/modules/codec/webvtt/subsvtt.c b/modules/codec/webvtt/subsvtt.c index aa4453bb15..ed787c8257 100644 --- a/modules/codec/webvtt/subsvtt.c +++ b/modules/codec/webvtt/subsvtt.c @@ -1425,6 +1425,41 @@ static text_segment_t *ConvertCueToSegments( decoder_t *p_dec, return ConvertNodesToSegments( p_dec, p_vars, p_cue, p_cue->p_child ); } +static void ChainCueSegments( const webvtt_dom_cue_t *p_cue, text_segment_t *p_new, + text_segment_t **pp_append ) +{ + if( p_new ) + { + bool b_newline = *pp_append; + + while( *pp_append ) + pp_append = &((*pp_append)->p_next); + + if( b_newline ) /* auto newlines */ + { + *pp_append = text_segment_New( "\n" ); + if( *pp_append ) + pp_append = &((*pp_append)->p_next); + } + + if( p_cue->settings.vertical == WEBVTT_ALIGN_LEFT ) /* LTR */ + { + *pp_append = text_segment_New( "\u2067" ); + if( *pp_append ) + pp_append = &((*pp_append)->p_next); + } + + *pp_append = p_new; + + if( p_cue->settings.vertical == WEBVTT_ALIGN_LEFT ) + { + *pp_append = text_segment_New( "\u2069" ); + if( *pp_append ) + pp_append = &((*pp_append)->p_next); + } + } +} + static text_segment_t * ConvertCuesToSegments( decoder_t *p_dec, mtime_t i_start, mtime_t i_stop, struct render_variables_s *p_vars, const webvtt_dom_cue_t *p_cue ) @@ -1442,34 +1477,7 @@ static text_segment_t * ConvertCuesToSegments( decoder_t *p_dec, mtime_t i_start continue; text_segment_t *p_new = ConvertCueToSegments( p_dec, p_vars, p_cue ); - if( p_new ) - { - while( *pp_append ) - pp_append = &((*pp_append)->p_next); - - if( p_segments ) /* auto newlines */ - { - *pp_append = text_segment_New( "\n" ); - if( *pp_append ) - pp_append = &((*pp_append)->p_next); - } - - if( p_cue->settings.vertical == WEBVTT_ALIGN_LEFT ) /* LTR */ - { - *pp_append = text_segment_New( "\u2067" ); - if( *pp_append ) - pp_append = &((*pp_append)->p_next); - } - - *pp_append = p_new; - - if( p_cue->settings.vertical == WEBVTT_ALIGN_LEFT ) - { - *pp_append = text_segment_New( "\u2069" ); - if( *pp_append ) - pp_append = &((*pp_append)->p_next); - } - } + ChainCueSegments( p_cue, p_new, pp_append ); } return p_segments; } _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
