+ /* if the sample rate is 'auto' and that has given us an invalid output */
+ /* rate, map it to the next highest output rate or 48K if above the highest. */
+ int rate_index = find_samplerate(audio->config.out.samplerate);
+ if ( audio->config.out.samplerate != valid_rates[rate_index] )
+ {
+ int rate = valid_rates[valid_rates[rate_index]? rate_index : rate_index - 1];
+ hb_log( "encfaac changing output samplerate from %d to %d",
+ audio->config.out.samplerate, rate );
+ audio->config.out.samplerate = rate;
+
+ /* if the new rate is over the max bandwidth per channel limit */
+ /* lower the bandwidth. */
+ double bw = audio->config.out.bitrate * 1000 / pv->out_discrete_channels;
+ if ( bw > (double)rate * (6144./1024.) )
+ {
+ int newbr = (double)rate * (6.144/1024.) * pv->out_discrete_channels;
+ hb_log( "encfaac changing output bitrate from %d to %d",
+ audio->config.out.bitrate, newbr );
+ audio->config.out.bitrate = newbr;
+ }
+ }
+
+ pv->faac = faacEncOpen( audio->config.out.samplerate, pv->out_discrete_channels,
+ &pv->input_samples, &pv->output_bytes );