[vlc-commits] TS mux: use calloc, don't rename i_extra/p_extra

Rafaël Carré git at videolan.org
Fri Feb 10 08:26:37 CET 2012


vlc | branch: master | Rafaël Carré <funman at videolan.org> | Thu Feb  9 22:04:26 2012 -0500| [a6c0d629090411253a5dbfb5fc8fd2ba66df41c8] | committer: Rafaël Carré

TS mux: use calloc, don't rename i_extra/p_extra

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

 modules/mux/mpeg/ts.c |   73 +++++++++++++++++++++----------------------------
 1 files changed, 31 insertions(+), 42 deletions(-)

diff --git a/modules/mux/mpeg/ts.c b/modules/mux/mpeg/ts.c
index 86f461b..63406e6 100644
--- a/modules/mux/mpeg/ts.c
+++ b/modules/mux/mpeg/ts.c
@@ -339,8 +339,8 @@ typedef struct ts_stream_t
     /* Specific to mpeg4 in mpeg2ts */
     int             i_es_id;
 
-    int             i_decoder_specific_info;
-    uint8_t         *p_decoder_specific_info;
+    int             i_extra;
+    uint8_t         *p_extra;
 
     /* language is iso639-2T */
     int             i_langs;
@@ -917,25 +917,20 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input )
     sout_mux_sys_t      *p_sys = p_mux->p_sys;
     ts_stream_t         *p_stream;
 
-    p_input->p_sys = p_stream = malloc( sizeof( ts_stream_t ) );
+    p_input->p_sys = p_stream = calloc( 1, sizeof( ts_stream_t ) );
     if( !p_input->p_sys )
         return VLC_ENOMEM;
 
-    /* Init this new stream */
     if ( p_sys->b_es_id_pid )
         p_stream->i_pid = p_input->p_fmt->i_id & 0x1fff;
     else
         p_stream->i_pid = AllocatePID( p_sys, p_input->p_fmt->i_cat );
+
     p_stream->i_codec = p_input->p_fmt->i_codec;
-    p_stream->i_continuity_counter    = 0;
-    p_stream->b_discontinuity         = false;
-    p_stream->i_decoder_specific_info = 0;
-    p_stream->p_decoder_specific_info = NULL;
 
     msg_Dbg( p_mux, "adding input codec=%4.4s pid=%d",
-             (char*)&p_input->p_fmt->i_codec, p_stream->i_pid );
+             (char*)&p_stream->i_codec, p_stream->i_pid );
 
-    /* All others fields depand on codec */
     switch( p_input->p_fmt->i_cat )
     {
     case VIDEO_ES:
@@ -1060,7 +1055,6 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input )
     p_stream->lang = malloc(p_stream->i_langs*3);
     if( !p_stream->lang )
     {
-        p_stream->i_langs = 0;
         free( p_stream );
         return VLC_ENOMEM;
     }
@@ -1130,13 +1124,11 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input )
     /* Create decoder specific info for subt */
     if( p_stream->i_codec == VLC_CODEC_SUBT )
     {
-        uint8_t *p;
-
-        p_stream->i_decoder_specific_info = 55;
-        p_stream->p_decoder_specific_info = p =
-            malloc( p_stream->i_decoder_specific_info );
-        if( p )
+        p_stream->i_extra = 55;
+        p_stream->p_extra = malloc( p_stream->i_extra );
+        if( p_stream->p_extra )
         {
+            uint8_t *p = p_stream->p_extra;
             p[0] = 0x10;    /* textFormat, 0x10 for 3GPP TS 26.245 */
             p[1] = 0x00;    /* flags: 1b: associated video info flag
                                     3b: reserved
@@ -1175,32 +1167,29 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input )
             *p++ = 9;                       /* font name length */
             memcpy( p, "Helvetica", 9 );    /* font name */
         }
-        else p_stream->i_decoder_specific_info = 0;
+        else
+            p_stream->i_extra = 0;
     }
     else
     {
         /* Copy extra data (VOL for MPEG-4 and extra BitMapInfoHeader for VFW */
-        p_stream->i_decoder_specific_info = p_input->p_fmt->i_extra;
-        if( p_stream->i_decoder_specific_info > 0 )
+        p_stream->i_extra = p_input->p_fmt->i_extra;
+        if( p_stream->i_extra > 0 )
         {
-            p_stream->p_decoder_specific_info =
-                malloc( p_stream->i_decoder_specific_info );
-            if( p_stream->p_decoder_specific_info )
+            p_stream->p_extra = malloc( p_stream->i_extra );
+            if( p_stream->p_extra )
             {
-                memcpy( p_stream->p_decoder_specific_info,
+                memcpy( p_stream->p_extra,
                         p_input->p_fmt->p_extra,
                         p_input->p_fmt->i_extra );
             }
-            else p_stream->i_decoder_specific_info = 0;
+            else
+                p_stream->i_extra = 0;
         }
     }
 
     /* Init pes chain */
     BufferChainInit( &p_stream->chain_pes );
-    p_stream->i_pes_dts    = 0;
-    p_stream->i_pes_length = 0;
-    p_stream->i_pes_used   = 0;
-    p_stream->b_key_frame  = 0;
 
     /* We only change PMT version (PAT isn't changed) */
     p_sys->i_pmt_version_number = ( p_sys->i_pmt_version_number + 1 )%32;
@@ -1273,7 +1262,7 @@ static int DelStream( sout_mux_t *p_mux, sout_input_t *p_input )
     BufferChainClean( &p_stream->chain_pes );
 
     free(p_stream->lang);
-    free( p_stream->p_decoder_specific_info );
+    free( p_stream->p_extra );
     if( p_stream->i_stream_id == 0xfa ||
         p_stream->i_stream_id == 0xfb ||
         p_stream->i_stream_id == 0xfe )
@@ -2390,17 +2379,17 @@ static void GetPMT( sout_mux_t *p_mux, sout_buffer_chain_t *c )
                 bits_write( &bits, 32,  0x7fffffff );   /* maxBitrate */
                 bits_write( &bits, 32,  0 );            /* avgBitrate */
 
-                if( p_stream->i_decoder_specific_info > 0 )
+                if( p_stream->i_extra > 0 )
                 {
                     /* DecoderSpecificInfo */
                     bits_align( &bits );
                     bits_write( &bits, 8,   0x05 ); /* tag */
                     bits_write( &bits, 24, GetDescriptorLength24b(
-                                p_stream->i_decoder_specific_info ) );
-                    for (int i = 0; i < p_stream->i_decoder_specific_info; i++ )
+                                p_stream->i_extra ) );
+                    for (int i = 0; i < p_stream->i_extra; i++ )
                     {
                         bits_write( &bits, 8,
-                            ((uint8_t*)p_stream->p_decoder_specific_info)[i] );
+                            ((uint8_t*)p_stream->p_extra)[i] );
                     }
                 }
                 /* fix Decoder length */
@@ -2466,7 +2455,7 @@ static void GetPMT( sout_mux_t *p_mux, sout_buffer_chain_t *c )
         else if( p_stream->i_stream_type == 0xa0 )
         {
             uint8_t data[512];
-            int i_extra = __MIN( p_stream->i_decoder_specific_info, 502 );
+            int i_extra = __MIN( p_stream->i_extra, 502 );
 
             /* private DIV3 descripor */
             memcpy( &data[0], &p_stream->i_bih_codec, 4 );
@@ -2478,7 +2467,7 @@ static void GetPMT( sout_mux_t *p_mux, sout_buffer_chain_t *c )
             data[9] = ( i_extra      )&0xff;
             if( i_extra > 0 )
             {
-                memcpy( &data[10], p_stream->p_decoder_specific_info, i_extra );
+                memcpy( &data[10], p_stream->p_extra, i_extra );
             }
 
             /* 0xa0 is private */
@@ -2513,23 +2502,23 @@ static void GetPMT( sout_mux_t *p_mux, sout_buffer_chain_t *c )
         }
         else if( p_stream->i_codec == VLC_CODEC_TELETEXT )
         {
-            if( p_stream->i_decoder_specific_info )
+            if( p_stream->i_extra )
             {
                 dvbpsi_PMTESAddDescriptor( p_es, 0x56,
-                                           p_stream->i_decoder_specific_info,
-                                           p_stream->p_decoder_specific_info );
+                                           p_stream->i_extra,
+                                           p_stream->p_extra );
             }
             continue;
         }
         else if( p_stream->i_codec == VLC_CODEC_DVBS )
         {
             /* DVB subtitles */
-            if( p_stream->i_decoder_specific_info )
+            if( p_stream->i_extra )
             {
                 /* pass-through from the TS demux */
                 dvbpsi_PMTESAddDescriptor( p_es, 0x59,
-                                           p_stream->i_decoder_specific_info,
-                                           p_stream->p_decoder_specific_info );
+                                           p_stream->i_extra,
+                                           p_stream->p_extra );
             }
             else
             {



More information about the vlc-commits mailing list