]> git.sesse.net Git - vlc/commitdiff
transcode: store fmt per id/track
authorIlkka Ollakka <ileoo@videolan.org>
Fri, 23 May 2014 12:03:41 +0000 (15:03 +0300)
committerIlkka Ollakka <ileoo@videolan.org>
Fri, 23 May 2014 12:07:13 +0000 (15:07 +0300)
This helps to keep filters etc if there is for example 2 different audio
tracks with different channel count etc.

modules/stream_out/transcode/audio.c
modules/stream_out/transcode/transcode.h
modules/stream_out/transcode/video.c

index 67ff9487f17f4f10f5aea283e71155f5472f19aa..ab9dfec18cc62b9fee10dbfe3665a3484ff66553 100644 (file)
@@ -83,8 +83,8 @@ static int transcode_audio_initialize_filters( sout_stream_t *p_stream, sout_str
         id->p_decoder->p_module = NULL;
         return VLC_EGENERIC;
     }
-    p_sys->fmt_audio.i_rate = fmt_last->i_rate;
-    p_sys->fmt_audio.i_physical_channels = fmt_last->i_physical_channels;
+    id->fmt_audio.i_rate = fmt_last->i_rate;
+    id->fmt_audio.i_physical_channels = fmt_last->i_physical_channels;
     return VLC_SUCCESS;
 }
 
@@ -255,8 +255,8 @@ int transcode_audio_process( sout_stream_t *p_stream,
         }
 
         /* Check if audio format has changed, and filters need reinit */
-        if( unlikely( ( id->p_decoder->fmt_out.audio.i_rate != p_sys->fmt_audio.i_rate ) ||
-                      ( id->p_decoder->fmt_out.audio.i_physical_channels != p_sys->fmt_audio.i_physical_channels ) ) )
+        if( unlikely( ( id->p_decoder->fmt_out.audio.i_rate != id->fmt_audio.i_rate ) ||
+                      ( id->p_decoder->fmt_out.audio.i_physical_channels != id->fmt_audio.i_physical_channels ) ) )
         {
             msg_Info( p_stream, "Audio changed, trying to reinitialize filters" );
             if( id->p_af_chain != NULL )
index 61f8ef1c01876eeb673c008f55f44557030a194c..50c3d7531548ee1a87bced7e91358e761351554c 100644 (file)
@@ -26,7 +26,6 @@ struct sout_stream_sys_t
 
     /* Audio */
     vlc_fourcc_t    i_acodec;   /* codec audio (0 if not transcode) */
-    audio_sample_format_t   fmt_audio;
     char            *psz_aenc;
     char            *psz_alang;
     config_chain_t  *p_audio_cfg;
@@ -38,7 +37,6 @@ struct sout_stream_sys_t
 
     /* Video */
     vlc_fourcc_t    i_vcodec;   /* codec video (0 if not transcode) */
-    video_format_t  fmt_input_video;
     char            *psz_venc;
     config_chain_t  *p_video_cfg;
     int             i_vbitrate;
@@ -93,8 +91,14 @@ struct sout_stream_id_sys_t
          {
              filter_chain_t  *p_f_chain; /**< Video filters */
              filter_chain_t  *p_uf_chain; /**< User-specified video filters */
+             video_format_t  fmt_input_video;
          };
-         struct aout_filters *p_af_chain; /**< Audio filters */
+         struct
+         {
+             struct aout_filters    *p_af_chain; /**< Audio filters */
+             audio_format_t  fmt_audio;
+         };
+
     };
 
     /* Encoder */
index ca582d37c77d6396a653a5846fab87d9722c1e28..6f775ddfda8ed4277059f9a62f0bc5922c71c11c 100644 (file)
@@ -836,13 +836,13 @@ int transcode_video_process( sout_stream_t *p_stream, sout_stream_id_sys_t *id,
 
         if( unlikely (
              id->p_encoder->p_module &&
-             !video_format_IsSimilar( &p_sys->fmt_input_video, &id->p_decoder->fmt_out.video )
+             !video_format_IsSimilar( &id->fmt_input_video, &id->p_decoder->fmt_out.video )
             )
           )
         {
             msg_Info( p_stream, "aspect-ratio changed, reiniting. %i -> %i : %i -> %i.",
-                        p_sys->fmt_input_video.i_sar_num, id->p_decoder->fmt_out.video.i_sar_num,
-                        p_sys->fmt_input_video.i_sar_den, id->p_decoder->fmt_out.video.i_sar_den
+                        id->fmt_input_video.i_sar_num, id->p_decoder->fmt_out.video.i_sar_num,
+                        id->fmt_input_video.i_sar_den, id->p_decoder->fmt_out.video.i_sar_den
                     );
             /* Close filters */
             if( id->p_f_chain )
@@ -860,7 +860,7 @@ int transcode_video_process( sout_stream_t *p_stream, sout_stream_id_sys_t *id,
             transcode_video_filter_init( p_stream, id );
             transcode_video_encoder_init( p_stream, id );
             conversion_video_filter_append( id );
-            memcpy( &p_sys->fmt_input_video, &id->p_decoder->fmt_out.video, sizeof(video_format_t));
+            memcpy( &id->fmt_input_video, &id->p_decoder->fmt_out.video, sizeof(video_format_t));
         }
 
 
@@ -875,7 +875,7 @@ int transcode_video_process( sout_stream_t *p_stream, sout_stream_id_sys_t *id,
             transcode_video_filter_init( p_stream, id );
             transcode_video_encoder_init( p_stream, id );
             conversion_video_filter_append( id );
-            memcpy( &p_sys->fmt_input_video, &id->p_decoder->fmt_out.video, sizeof(video_format_t));
+            memcpy( &id->fmt_input_video, &id->p_decoder->fmt_out.video, sizeof(video_format_t));
 
             if( transcode_video_encoder_open( p_stream, id ) != VLC_SUCCESS )
             {