Pass "native" filter chain sample format to audio encoder.
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>
Sun, 12 Jun 2011 00:28:51 +0000 (00:28 +0000)
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>
Sun, 12 Jun 2011 00:28:51 +0000 (00:28 +0000)
Make ae_lavc try to match this format.

git-svn-id: svn://git.mplayerhq.hu/mplayer/trunk@33592 b3059339-0415-0410-9bf9-f77b7e298cf2

libmpcodecs/ae.h
libmpcodecs/ae_lavc.c
mencoder.c

index 440e4dd..f5caaa7 100644 (file)
@@ -38,6 +38,7 @@ typedef struct {
        int bitrate;
        int samples_per_frame;
        int audio_preload;
+       int sample_format;
 } audio_encoding_params_t;
 
 typedef struct audio_encoder_s {
index 86757a2..683d8c0 100644 (file)
@@ -193,7 +193,7 @@ int mpae_init_lavc(audio_encoder_t *encoder)
                const enum AVSampleFormat *fmts;
                lavc_actx->sample_fmt = lavc_acodec->sample_fmts[0]; // fallback to first format
                for (fmts = lavc_acodec->sample_fmts; *fmts != AV_SAMPLE_FMT_NONE; fmts++) {
-                       if (*fmts == AV_SAMPLE_FMT_S16) { // preferred format found
+                       if (samplefmt2affmt(*fmts) == encoder->params.sample_format) { // preferred format found
                                lavc_actx->sample_fmt = *fmts;
                                break;
                        }
index 4c1ea32..ba2138a 100644 (file)
@@ -157,7 +157,7 @@ static int skip_limit=-1;
 float playback_speed=1.0;
 
 static int force_srate=0;
-static int audio_output_format=0;
+static int audio_output_format=AF_FORMAT_UNKNOWN;
 
 char *vobsub_out=NULL;
 unsigned int vobsub_out_index=0;
@@ -1071,6 +1071,7 @@ if(!init_audio_filters(sh_audio,
 
 aparams.channels = ao_data.channels;
 aparams.sample_rate = ao_data.samplerate;
+aparams.sample_format = ao_data.format;
 aparams.audio_preload = 1000 * audio_preload;
 if(mux_a->codec != ACODEC_COPY) {
     aencoder = new_audio_encoder(mux_a, &aparams);
@@ -1082,6 +1083,9 @@ if(mux_a->codec != ACODEC_COPY) {
       mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_NoMatchingFilter);
       mencoder_exit(1,NULL);
     }
+    ao_data.format = aencoder->input_format;
+    ao_data.channels = aparams.channels;
+    ao_data.samplerate = aparams.sample_rate;
 }
 switch(mux_a->codec){
 case ACODEC_COPY: