[vlc-commits] codec: substtml: don't copy buffer

Francois Cartegnie git at videolan.org
Fri Jan 6 18:15:55 CET 2017


vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Wed Jan  4 19:41:48 2017 +0100| [b2bab51460ddbbd6f6cbb90f2f854817a2a6cb9f] | committer: Francois Cartegnie

codec: substtml: don't copy buffer

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=b2bab51460ddbbd6f6cbb90f2f854817a2a6cb9f
---

 modules/codec/substtml.c | 21 +++++++--------------
 1 file changed, 7 insertions(+), 14 deletions(-)

diff --git a/modules/codec/substtml.c b/modules/codec/substtml.c
index 9986f29..0e29353 100644
--- a/modules/codec/substtml.c
+++ b/modules/codec/substtml.c
@@ -47,7 +47,8 @@
 static int  OpenDecoder   ( vlc_object_t * );
 static void CloseDecoder  ( vlc_object_t * );
 
-static text_segment_t *ParseTTMLSubtitles( decoder_t *, subpicture_updater_sys_t *, char * );
+static text_segment_t *ParseTTMLSubtitles( decoder_t *, subpicture_updater_sys_t *,
+                                           const uint8_t *, size_t );
 
 vlc_module_begin ()
     set_capability( "decoder", 10 )
@@ -565,7 +566,8 @@ static void ParseTTMLStyles( decoder_t* p_dec )
     vlc_stream_Delete( p_stream );
 }
 
-static text_segment_t *ParseTTMLSubtitles( decoder_t *p_dec, subpicture_updater_sys_t *p_update_sys, char *psz_subtitle )
+static text_segment_t *ParseTTMLSubtitles( decoder_t *p_dec, subpicture_updater_sys_t *p_update_sys,
+                                           const uint8_t *p_buffer, size_t i_buffer )
 {
     stream_t*       p_sub = NULL;
     xml_reader_t*   p_xml_reader = NULL;
@@ -574,7 +576,7 @@ static text_segment_t *ParseTTMLSubtitles( decoder_t *p_dec, subpicture_updater_
     style_stack_t*  p_style_stack = NULL;
     ttml_style_t*   p_style = NULL;
 
-    p_sub = vlc_stream_MemoryNew( p_dec, (uint8_t*)psz_subtitle, strlen( psz_subtitle ), true );
+    p_sub = vlc_stream_MemoryNew( p_dec, (uint8_t*) p_buffer, i_buffer, true );
     if( unlikely( p_sub == NULL ) )
         return NULL;
 
@@ -753,7 +755,6 @@ static subpicture_t *ParseText( decoder_t *p_dec, block_t *p_block )
 {
     decoder_sys_t *p_sys = p_dec->p_sys;
     subpicture_t *p_spu = NULL;
-    char *psz_subtitle = NULL;
 
     if( p_block->i_flags & BLOCK_FLAG_CORRUPTED )
         return NULL;
@@ -775,18 +776,11 @@ static subpicture_t *ParseText( decoder_t *p_dec, block_t *p_block )
         return NULL;
     }
 
-    psz_subtitle = malloc( p_block->i_buffer );
-    if( unlikely( psz_subtitle == NULL ) )
-        return NULL;
-    memcpy( psz_subtitle, p_block->p_buffer, p_block->i_buffer );
-
     /* Create the subpicture unit */
     p_spu = decoder_NewSubpictureText( p_dec );
     if( !p_spu )
-    {
-        free( psz_subtitle );
         return NULL;
-    }
+
     p_spu->i_start    = p_block->i_pts;
     p_spu->i_stop     = p_block->i_pts + p_block->i_length;
     p_spu->b_ephemer  = (p_block->i_length == 0);
@@ -795,8 +789,7 @@ static subpicture_t *ParseText( decoder_t *p_dec, block_t *p_block )
     subpicture_updater_sys_t *p_spu_sys = p_spu->updater.p_sys;
 
     p_spu_sys->align = SUBPICTURE_ALIGN_BOTTOM | p_sys->i_align;
-    p_spu_sys->p_segments = ParseTTMLSubtitles( p_dec, p_spu_sys, psz_subtitle );
-    free( psz_subtitle );
+    p_spu_sys->p_segments = ParseTTMLSubtitles( p_dec, p_spu_sys, p_block->p_buffer, p_block->i_buffer );
 
     return p_spu;
 }



More information about the vlc-commits mailing list