num_cards(num_cards),
mixer_surface(create_surface(format)),
h264_encoder_surface(create_surface(format)),
+ correlation(OUTPUT_FREQUENCY),
level_compressor(OUTPUT_FREQUENCY),
limiter(OUTPUT_FREQUENCY),
compressor(OUTPUT_FREQUENCY)
audio_level_callback(loudness_s, 20.0 * log10(peak),
loudness_i, loudness_range_low, loudness_range_high,
- gain_staging_db, 20.0 * log10(final_makeup_gain));
+ gain_staging_db, 20.0 * log10(final_makeup_gain),
+ correlation.get_correlation());
}
for (unsigned card_index = 1; card_index < num_cards; ++card_index) {
final_makeup_gain = m;
}
- // Find R128 levels.
+ // Find R128 levels and L/R correlation.
vector<float> left, right;
deinterleave_samples(samples_out, &left, &right);
float *ptrs[] = { left.data(), right.data() };
{
unique_lock<mutex> lock(compressor_mutex);
r128.process(left.size(), ptrs);
+ correlation.process_samples(samples_out);
}
// Send the samples to the sound card.
peak = 0.0f;
r128.reset();
r128.integr_start();
+ correlation.reset();
}
Mixer::OutputChannel::~OutputChannel()