[vlc-commits] mp4 mux: use block_t

Rafaël Carré git at videolan.org
Sat Aug 24 18:24:34 CEST 2013


vlc | branch: master | Rafaël Carré <funman at videolan.org> | Sat Aug 24 07:49:10 2013 +0200| [d5d904b9c7a667b7ff3a59bf55faa2e4954be2b4] | committer: Rafaël Carré

mp4 mux: use block_t

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

 modules/mux/mp4.c |  112 +++++++++++++++++------------------------------------
 1 file changed, 35 insertions(+), 77 deletions(-)

diff --git a/modules/mux/mp4.c b/modules/mux/mp4.c
index 546cc03..7b13f33 100644
--- a/modules/mux/mp4.c
+++ b/modules/mux/mp4.c
@@ -136,10 +136,8 @@ struct sout_mux_sys_t
 
 typedef struct bo_t
 {
-    int        i_buffer_size;
-    int        i_buffer;
-    uint8_t    *p_buffer;
-
+    block_t    *b;
+    size_t     len;
 } bo_t;
 
 static void bo_init     ( bo_t * );
@@ -149,7 +147,6 @@ static void bo_add_24be ( bo_t *, uint32_t );
 static void bo_add_32be ( bo_t *, uint32_t );
 static void bo_add_64be ( bo_t *, uint64_t );
 static void bo_add_fourcc(bo_t *, const char * );
-static void bo_add_bo   ( bo_t *, bo_t * );
 static void bo_add_mem  ( bo_t *, int , uint8_t * );
 static void bo_add_descr( bo_t *, uint8_t , uint32_t );
 
@@ -158,13 +155,10 @@ static void bo_fix_32be ( bo_t *, int , uint32_t );
 static bo_t *box_new     ( const char *fcc );
 static bo_t *box_full_new( const char *fcc, uint8_t v, uint32_t f );
 static void  box_fix     ( bo_t *box );
-static void  box_free    ( bo_t *box );
 static void  box_gather  ( bo_t *box, bo_t *box2 );
 
 static void box_send( sout_mux_t *p_mux,  bo_t *box );
 
-static block_t *bo_to_sout( bo_t *box );
-
 static bo_t *GetMoovBox( sout_mux_t *p_mux );
 
 static block_t *ConvertSUBT( block_t *);
@@ -211,7 +205,7 @@ static int Open( vlc_object_t *p_this )
         bo_add_fourcc( box, "qt  " );
         box_fix( box );
 
-        p_sys->i_pos += box->i_buffer;
+        p_sys->i_pos += box->len;
         p_sys->i_mdat_pos = p_sys->i_pos;
 
         box_send( p_mux, box );
@@ -225,7 +219,7 @@ static int Open( vlc_object_t *p_this )
     box = box_new( "mdat" );
     bo_add_64be  ( box, 0 ); // enough to store an extended size
 
-    p_sys->i_pos += box->i_buffer;
+    p_sys->i_pos += box->len;
 
     box_send( p_mux, box );
 
@@ -264,8 +258,8 @@ static void Close( vlc_object_t * p_this )
         bo_add_32be  ( &bo, p_sys->i_pos - p_sys->i_mdat_pos - 8 );
         bo_add_fourcc( &bo, "mdat" );
     }
-    p_hdr = bo_to_sout( &bo );
-    free( bo.p_buffer );
+    p_hdr = bo.b;
+    p_hdr->i_buffer = bo.len;
 
     sout_AccessOutSeek( p_mux->p_access, p_sys->i_mdat_pos );
     sout_AccessOutWrite( p_mux->p_access, p_hdr );
@@ -283,7 +277,7 @@ static void Close( vlc_object_t * p_this )
          * at the start */
         block_t *p_buf;
         int64_t i_chunk, i_size = p_sys->i_pos - p_sys->i_mdat_pos;
-        int i_moov_size = moov->i_buffer;
+        int i_moov_size = moov->len;
 
         while( i_size > 0 )
         {
@@ -314,7 +308,7 @@ static void Close( vlc_object_t * p_this )
             unsigned int i;
             int i_chunk;
 
-            moov->i_buffer = p_stream->i_stco_pos;
+            moov->len = p_stream->i_stco_pos;
             for( i_chunk = 0, i = 0; i < p_stream->i_entry_count; i_chunk++ )
             {
                 if( p_stream->b_stco64 )
@@ -337,7 +331,7 @@ static void Close( vlc_object_t * p_this )
             }
         }
 
-        moov->i_buffer = i_moov_size;
+        moov->len = i_moov_size;
         i_moov_pos = p_sys->i_mdat_pos;
         p_sys->b_fast_start = false;
     }
@@ -1468,7 +1462,7 @@ static bo_t *GetStblBox( sout_mux_t *p_mux, mp4_stream_t *p_stream )
     }
     box_gather( stbl, stsc );
     box_gather( stbl, stsz );
-    p_stream->i_stco_pos = stbl->i_buffer + 16;
+    p_stream->i_stco_pos = stbl->len + 16;
     box_gather( stbl, stco );
 
     /* finish stbl */
@@ -1861,22 +1855,22 @@ static bo_t *GetMoovBox( sout_mux_t *p_mux )
         stbl = GetStblBox( p_mux, p_stream );
 
         /* append stbl to minf */
-        p_stream->i_stco_pos += minf->i_buffer;
+        p_stream->i_stco_pos += minf->len;
         box_gather( minf, stbl );
 
         /* append minf to mdia */
         box_fix( minf );
-        p_stream->i_stco_pos += mdia->i_buffer;
+        p_stream->i_stco_pos += mdia->len;
         box_gather( mdia, minf );
 
         /* append mdia to trak */
         box_fix( mdia );
-        p_stream->i_stco_pos += trak->i_buffer;
+        p_stream->i_stco_pos += trak->len;
         box_gather( trak, mdia );
 
         /* append trak to moov */
         box_fix( trak );
-        p_stream->i_stco_pos += moov->i_buffer;
+        p_stream->i_stco_pos += moov->len;
         box_gather( moov, trak );
     }
 
@@ -1891,25 +1885,16 @@ static bo_t *GetMoovBox( sout_mux_t *p_mux )
 
 static void bo_init( bo_t *p_bo )
 {
-    p_bo->i_buffer_size = 1024;
-    p_bo->p_buffer = xmalloc( p_bo->i_buffer_size );
-    p_bo->i_buffer = 0;
+    p_bo->len = 0;
+    p_bo->b = block_Alloc( 1024 );
 }
 
 static void bo_add_8( bo_t *p_bo, uint8_t i )
 {
-    if( p_bo->i_buffer < p_bo->i_buffer_size )
-    {
-        p_bo->p_buffer[p_bo->i_buffer] = i;
-    }
-    else
-    {
-        p_bo->i_buffer_size += 1024;
-        p_bo->p_buffer = xrealloc( p_bo->p_buffer, p_bo->i_buffer_size );
-        p_bo->p_buffer[p_bo->i_buffer] = i;
-    }
+    if( p_bo->len >= p_bo->b->i_buffer)
+        p_bo->b = block_Realloc(p_bo->b, 0, p_bo->b->i_buffer + 1024);
 
-    p_bo->i_buffer++;
+    p_bo->b->p_buffer[p_bo->len++] = i;
 }
 
 static void bo_add_16be( bo_t *p_bo, uint16_t i )
@@ -1932,10 +1917,10 @@ static void bo_add_32be( bo_t *p_bo, uint32_t i )
 
 static void bo_fix_32be ( bo_t *p_bo, int i_pos, uint32_t i)
 {
-    p_bo->p_buffer[i_pos    ] = ( i >> 24 )&0xff;
-    p_bo->p_buffer[i_pos + 1] = ( i >> 16 )&0xff;
-    p_bo->p_buffer[i_pos + 2] = ( i >>  8 )&0xff;
-    p_bo->p_buffer[i_pos + 3] = ( i       )&0xff;
+    p_bo->b->p_buffer[i_pos    ] = ( i >> 24 )&0xff;
+    p_bo->b->p_buffer[i_pos + 1] = ( i >> 16 )&0xff;
+    p_bo->b->p_buffer[i_pos + 2] = ( i >>  8 )&0xff;
+    p_bo->b->p_buffer[i_pos + 3] = ( i       )&0xff;
 }
 
 static void bo_add_64be( bo_t *p_bo, uint64_t i )
@@ -1966,12 +1951,6 @@ static void bo_add_descr( bo_t *p_bo, uint8_t tag, uint32_t size )
     bo_add_8(p_bo, size & 0x7F);
 }
 
-static void bo_add_bo( bo_t *p_bo, bo_t *p_bo2 )
-{
-    for( int i = 0; i < p_bo2->i_buffer; i++ )
-        bo_add_8( p_bo, p_bo2->p_buffer[i] );
-}
-
 static bo_t * box_new( const char *fcc )
 {
     bo_t *box;
@@ -2006,47 +1985,26 @@ static bo_t * box_full_new( const char *fcc, uint8_t v, uint32_t f )
 
 static void box_fix( bo_t *box )
 {
-    bo_t box_tmp;
-
-    memcpy( &box_tmp, box, sizeof( bo_t ) );
-
-    box_tmp.i_buffer = 0;
-    bo_add_32be( &box_tmp, box->i_buffer );
-}
-
-static void box_free( bo_t *box )
-{
-    free( box->p_buffer );
-    free( box );
+    box->b->p_buffer[0] = box->len >> 24;
+    box->b->p_buffer[1] = box->len >> 16;
+    box->b->p_buffer[2] = box->len >>  8;
+    box->b->p_buffer[3] = box->len;
 }
 
 static void box_gather ( bo_t *box, bo_t *box2 )
 {
-    bo_add_bo( box, box2 );
-    box_free( box2 );
-}
-
-static block_t * bo_to_sout( bo_t *box )
-{
-    block_t *p_buf;
-
-    p_buf = block_Alloc( box->i_buffer );
-    if( box->i_buffer > 0 )
-    {
-        memcpy( p_buf->p_buffer, box->p_buffer, box->i_buffer );
-    }
-
-    return p_buf;
+    box->b = block_Realloc(box->b, 0, box->len + box2->len);
+    memcpy(&box->b->p_buffer[box->len], box2->b->p_buffer, box2->len);
+    box->len += box2->len;
+    block_Release(box2->b);
+    free( box2 );
 }
 
 static void box_send( sout_mux_t *p_mux,  bo_t *box )
 {
-    block_t *p_buf;
-
-    p_buf = bo_to_sout( box );
-    box_free( box );
-
-    sout_AccessOutWrite( p_mux->p_access, p_buf );
+    box->b->i_buffer = box->len;
+    sout_AccessOutWrite( p_mux->p_access, box->b );
+    free(box);
 }
 
 static int64_t get_timestamp(void)



More information about the vlc-commits mailing list