X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=audio_mixer.cpp;h=9e7dd59a0dbc64ab6398e30824c8dae6d676b912;hb=6ffaabac0a523617b686f40c154a25cb548cc561;hp=6f6190a433f20d0b84bc2f85239cbc50ae354bd1;hpb=c6ae618df75df74072f586d9df03610b4a6d353d;p=nageru diff --git a/audio_mixer.cpp b/audio_mixer.cpp index 6f6190a..9e7dd59 100644 --- a/audio_mixer.cpp +++ b/audio_mixer.cpp @@ -453,7 +453,10 @@ void AudioMixer::fill_audio_bus(const map> &samples_ca // L' = R - D // R' = L + D float w = 0.5f * stereo_width + 0.5f; - if (fabs(w) < 1e-3) { + if (bus.source_channel[0] == bus.source_channel[1]) { + // Mono anyway, so no need to bother. + w = 1.0f; + } else if (fabs(w) < 1e-3) { // Perfect inverse. swap(lsrc, rsrc); swap(lstride, rstride); @@ -1175,4 +1178,18 @@ void AudioMixer::reset_peak(unsigned bus_index) } } +bool AudioMixer::is_mono(unsigned bus_index) +{ + lock_guard lock(audio_mutex); + const InputMapping::Bus &bus = input_mapping.buses[bus_index]; + if (bus.device.type == InputSourceType::SILENCE) { + return true; + } else { + assert(bus.device.type == InputSourceType::CAPTURE_CARD || + bus.device.type == InputSourceType::ALSA_INPUT || + bus.device.type == InputSourceType::FFMPEG_VIDEO_INPUT); + return bus.source_channel[0] == bus.source_channel[1]; + } +} + AudioMixer *global_audio_mixer = nullptr;