]> git.sesse.net Git - vlc/blobdiff - modules/mux/asf.c
Write aspect ratio only when defined (asf).
[vlc] / modules / mux / asf.c
index 52a455307556e33ca4e522170ae70a990d549edb..600f635aaf6356e7f84e30cb54fdd047269704d1 100644 (file)
@@ -65,33 +65,33 @@ static void Close  ( vlc_object_t * );
 #define BITRATE_LONGTEXT N_("Do not try to guess ASF bitrate. Setting this, allows you to control how Windows Media Player will cache streamed content. Set to audio+video bitrate in bytes")
 
 
-vlc_module_begin();
-    set_description( N_("ASF muxer") );
-    set_category( CAT_SOUT );
-    set_subcategory( SUBCAT_SOUT_MUX );
-    set_shortname( "ASF" );
+vlc_module_begin ()
+    set_description( N_("ASF muxer") )
+    set_category( CAT_SOUT )
+    set_subcategory( SUBCAT_SOUT_MUX )
+    set_shortname( "ASF" )
 
-    set_capability( "sout mux", 5 );
-    add_shortcut( "asf" );
-    add_shortcut( "asfh" );
-    set_callbacks( Open, Close );
+    set_capability( "sout mux", 5 )
+    add_shortcut( "asf" )
+    add_shortcut( "asfh" )
+    set_callbacks( Open, Close )
 
     add_string( SOUT_CFG_PREFIX "title", "", NULL, TITLE_TEXT, TITLE_LONGTEXT,
-                                 true );
+                                 true )
     add_string( SOUT_CFG_PREFIX "author",   "", NULL, AUTHOR_TEXT,
-                                 AUTHOR_LONGTEXT, true );
+                                 AUTHOR_LONGTEXT, true )
     add_string( SOUT_CFG_PREFIX "copyright","", NULL, COPYRIGHT_TEXT,
-                                 COPYRIGHT_LONGTEXT, true );
+                                 COPYRIGHT_LONGTEXT, true )
     add_string( SOUT_CFG_PREFIX "comment",  "", NULL, COMMENT_TEXT,
-                                 COMMENT_LONGTEXT, true );
+                                 COMMENT_LONGTEXT, true )
     add_string( SOUT_CFG_PREFIX "rating",  "", NULL, RATING_TEXT,
-                                 RATING_LONGTEXT, true );
+                                 RATING_LONGTEXT, true )
     add_integer( SOUT_CFG_PREFIX "packet-size", 4096, NULL, PACKETSIZE_TEXT,
-                                 PACKETSIZE_LONGTEXT, true );
+                                 PACKETSIZE_LONGTEXT, true )
     add_integer( SOUT_CFG_PREFIX "bitrate-override", 0, NULL, BITRATE_TEXT,
-                                 BITRATE_LONGTEXT, true );
+                                 BITRATE_LONGTEXT, true )
 
-vlc_module_end();
+vlc_module_end ()
 
 /*****************************************************************************
  * Locales prototypes
@@ -201,6 +201,8 @@ static int Open( vlc_object_t *p_this )
     p_mux->pf_mux       = Mux;
 
     p_mux->p_sys = p_sys = malloc( sizeof( sout_mux_sys_t ) );
+    if( !p_sys )
+        return VLC_ENOMEM;
     p_sys->b_asf_http = p_mux->psz_mux && !strcmp( p_mux->psz_mux, "asfh" );
     if( p_sys->b_asf_http )
     {
@@ -222,7 +224,7 @@ static int Open( vlc_object_t *p_this )
     p_sys->i_bitrate_override = config_GetInt( p_mux, "sout-asf-bitrate-override" );
     msg_Dbg( p_mux, "Packet size %d", p_sys->i_packet_size);
     if (p_sys->i_bitrate_override)
-        msg_Dbg( p_mux, "Bitrate override %d", p_sys->i_bitrate_override);
+        msg_Dbg( p_mux, "Bitrate override %"PRId64, p_sys->i_bitrate_override);
     p_sys->i_packet_count= 0;
 
     /* Generate a random fid */
@@ -294,6 +296,12 @@ static void Close( vlc_object_t * p_this )
         free( p_sys->track[i].p_extra );
         es_format_Clean( &p_sys->track[i].fmt );
     }
+
+    free( p_sys->psz_title );
+    free( p_sys->psz_author );
+    free( p_sys->psz_copyright );
+    free( p_sys->psz_comment );
+    free( p_sys->psz_rating );
     free( p_sys );
 }
 
@@ -443,6 +451,8 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input )
             tk->i_extra = sizeof( WAVEFORMATEX ) +
                           p_input->p_fmt->i_extra + i_extra;
             tk->p_extra = malloc( tk->i_extra );
+            if( !tk->p_extra )
+                return VLC_ENOMEM;
             bo_init( &bo, tk->p_extra, tk->i_extra );
             bo_addle_u16( &bo, tk->i_tag );
             bo_addle_u16( &bo, p_input->p_fmt->audio.i_channels );
@@ -489,7 +499,7 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input )
             }
             else
             {
-                p_sys->i_bitrate += 512000;
+                p_sys->i_bitrate += 128000;
             }
             if (p_sys->i_bitrate_override)
                 p_sys->i_bitrate = p_sys->i_bitrate_override;
@@ -500,6 +510,8 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input )
             tk->i_extra = 11 + sizeof( BITMAPINFOHEADER ) +
                           p_input->p_fmt->i_extra;
             tk->p_extra = malloc( tk->i_extra );
+            if( !tk->p_extra )
+                return VLC_ENOMEM;
             bo_init( &bo, tk->p_extra, tk->i_extra );
             bo_addle_u32( &bo, p_input->p_fmt->video.i_width );
             bo_addle_u32( &bo, p_input->p_fmt->video.i_height );
@@ -575,7 +587,7 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input )
             }
             else
             {
-                p_sys->i_bitrate += 1000000;
+                p_sys->i_bitrate += 512000;
             }
             if (p_sys->i_bitrate_override)
                 p_sys->i_bitrate = p_sys->i_bitrate_override;
@@ -608,14 +620,14 @@ static int DelStream( sout_mux_t *p_mux, sout_input_t *p_input )
              if( p_input->p_fmt->i_bitrate > 24000 )
                  p_sys->i_bitrate -= p_input->p_fmt->i_bitrate;
              else
-                 p_sys->i_bitrate -= 512000;
+                 p_sys->i_bitrate -= 128000;
         }
         else if(tk->i_cat == VIDEO_ES )
         {
              if( p_input->p_fmt->i_bitrate > 50000 )
                  p_sys->i_bitrate -= p_input->p_fmt->i_bitrate;
              else
-                 p_sys->i_bitrate -= 1000000;
+                 p_sys->i_bitrate -= 512000;
         }
     }
     msg_Dbg( p_mux, "removing input" );
@@ -890,7 +902,8 @@ static block_t *asf_header_create( sout_mux_t *p_mux, bool b_broadcast )
     /* size of the metadata object */
     for( i = 0; i < p_sys->i_track; i++ )
     {
-        if( p_sys->track[i].i_cat == VIDEO_ES )
+        const asf_track_t *p_track = &p_sys->track[i];
+        if( p_track->i_cat == VIDEO_ES && p_track->fmt.video.i_aspect != 0 )
         {
             i_cm_size = 26 + 2 * (16 + 2 * sizeof("AspectRatio?"));
             break;