UI: Fix display of mono source with surround output
A mono input with surround output is upmixed by swresampler by routing it to FC (front center) by default which corresponds to third channel for 3.0, 4.0, 4.1, 5.0, 5.1, 7.1. (The other channels are muted.) But the volume meters are set to show the first channel for mono sources. Therefore although audio is processed, it would not show on the meter. This fixes this display issue. Closes obsproject/obs-studio#1540
This commit is contained in:
parent
494a37ec74
commit
736b7f0d35
@ -528,6 +528,8 @@ VolumeMeter::VolumeMeter(QWidget *parent, obs_volmeter_t *obs_volmeter,
|
||||
peakHoldDuration = 20.0; // 20 seconds
|
||||
inputPeakHoldDuration = 1.0; // 1 second
|
||||
|
||||
channels = (int)audio_output_get_channels(obs_get_audio());
|
||||
|
||||
handleChannelCofigurationChange();
|
||||
updateTimerRef = updateTimer.toStrongRef();
|
||||
if (!updateTimerRef) {
|
||||
@ -1007,16 +1009,22 @@ void VolumeMeter::paintEvent(QPaintEvent *event)
|
||||
|
||||
for (int channelNr = 0; channelNr < displayNrAudioChannels;
|
||||
channelNr++) {
|
||||
|
||||
int channelNrFixed = (displayNrAudioChannels == 1 &&
|
||||
channels > 2)
|
||||
? 2
|
||||
: channelNr;
|
||||
|
||||
if (vertical)
|
||||
paintVMeter(painter, channelNr * 4, 8, 3, height - 10,
|
||||
displayMagnitude[channelNr],
|
||||
displayPeak[channelNr],
|
||||
displayPeakHold[channelNr]);
|
||||
displayMagnitude[channelNrFixed],
|
||||
displayPeak[channelNrFixed],
|
||||
displayPeakHold[channelNrFixed]);
|
||||
else
|
||||
paintHMeter(painter, 5, channelNr * 4, width - 5, 3,
|
||||
displayMagnitude[channelNr],
|
||||
displayPeak[channelNr],
|
||||
displayPeakHold[channelNr]);
|
||||
displayMagnitude[channelNrFixed],
|
||||
displayPeak[channelNrFixed],
|
||||
displayPeakHold[channelNrFixed]);
|
||||
|
||||
if (idle)
|
||||
continue;
|
||||
@ -1026,10 +1034,10 @@ void VolumeMeter::paintEvent(QPaintEvent *event)
|
||||
// having too much visual impact.
|
||||
if (vertical)
|
||||
paintInputMeter(painter, channelNr * 4, 3, 3, 3,
|
||||
displayInputPeakHold[channelNr]);
|
||||
displayInputPeakHold[channelNrFixed]);
|
||||
else
|
||||
paintInputMeter(painter, 0, channelNr * 4, 3, 3,
|
||||
displayInputPeakHold[channelNr]);
|
||||
displayInputPeakHold[channelNrFixed]);
|
||||
}
|
||||
|
||||
lastRedrawTime = ts;
|
||||
|
@ -144,6 +144,7 @@ private:
|
||||
qreal inputPeakHoldDuration;
|
||||
|
||||
uint64_t lastRedrawTime = 0;
|
||||
int channels = 0;
|
||||
bool clipping = false;
|
||||
bool vertical;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user