diff mencoder.c @ 15546:4ac9c227d758

preinit audio filters in order to determine the final samplerate and number of channels, or audio encoders will be initialized with the wrong parameters
author nicodvb
date Sun, 22 May 2005 15:34:23 +0000
parents 2f4125e4025e
children 7575f4b17b48
line wrap: on
line diff
--- a/mencoder.c	Sun May 22 15:11:03 2005 +0000
+++ b/mencoder.c	Sun May 22 15:34:23 2005 +0000
@@ -254,6 +254,7 @@
 #endif
 #include "vobsub.h"
 
+#include "libao2/audio_out.h"
 /* FIXME */
 static void mencoder_exit(int level, char *how)
 {
@@ -367,6 +368,7 @@
 int new_srate;
 
 unsigned int timer_start;
+ao_data_t ao_data = {0,0,0,0,OUTBURST,-1,0};
 
 audio_encoding_params_t aparams;
 audio_encoder_t *aencoder = NULL;
@@ -808,8 +810,21 @@
 
 mux_a->codec=out_audio_codec;
 
-aparams.channels = audio_output_channels ? audio_output_channels : sh_audio->channels;
-aparams.sample_rate = force_srate ? force_srate : new_srate;
+ao_data.samplerate = force_srate ? force_srate : new_srate;
+ao_data.channels = audio_output_channels ? audio_output_channels : sh_audio->channels;
+ao_data.format = audio_output_format ? audio_output_format : sh_audio->sample_format;
+if(!preinit_audio_filters(sh_audio,
+   // input:
+   new_srate,
+   sh_audio->channels, sh_audio->sample_format,
+   // output:
+   &ao_data.samplerate, &ao_data.channels, &ao_data.format)) {
+     mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_AudioFilterChainPreinitError);
+     mencoder_exit(1, NULL);
+   }
+
+aparams.channels = ao_data.channels;
+aparams.sample_rate = ao_data.samplerate;
 aparams.audio_preload = 1000 * audio_preload;
 if(mux_a->codec != ACODEC_COPY) {
     aencoder = new_audio_encoder(mux_a, &aparams);