Skip to content

Commit

Permalink
Merge pull request #2056 from mxi-box/audio
Browse files Browse the repository at this point in the history
Fix audio sink/source mapping
  • Loading branch information
f4exb committed Apr 7, 2024
2 parents 631f55e + 32aee52 commit 98f5e61
Showing 1 changed file with 21 additions and 7 deletions.
28 changes: 21 additions & 7 deletions sdrbase/audio/audiodevicemanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -339,11 +339,17 @@ void AudioDeviceManager::addAudioSink(AudioFifo* audioFifo, MessageQueue *sample

if (audioOutputDeviceIndex != outputDeviceIndex) // change of audio device
{
removeAudioSink(audioFifo); // remove from current
// remove from current
m_audioOutputs[audioOutputDeviceIndex]->removeFifo(audioFifo);
if ((audioOutputDeviceIndex != -1) && (m_audioOutputs[audioOutputDeviceIndex]->getNbFifos() == 0)) {
stopAudioOutput(audioOutputDeviceIndex);
}

m_audioOutputs[outputDeviceIndex]->addFifo(audioFifo); // add to new
m_audioSinkFifos[audioFifo] = outputDeviceIndex; // new index
m_outputDeviceSinkMessageQueues[audioOutputDeviceIndex].removeOne(sampleSinkMessageQueue);
m_outputDeviceSinkMessageQueues[audioOutputDeviceIndex].removeOne(m_audioFifoToSinkMessageQueues[audioFifo]);
m_outputDeviceSinkMessageQueues[outputDeviceIndex].append(sampleSinkMessageQueue);
m_audioFifoToSinkMessageQueues[audioFifo] = sampleSinkMessageQueue;
}
}
}
Expand Down Expand Up @@ -416,21 +422,29 @@ void AudioDeviceManager::addAudioSource(AudioFifo* audioFifo, MessageQueue *samp
if (m_audioSourceFifos.find(audioFifo) == m_audioSourceFifos.end()) // new FIFO
{
m_audioInputs[inputDeviceIndex]->addFifo(audioFifo);
m_audioSourceFifos[audioFifo] = inputDeviceIndex; // register audio FIFO
m_audioFifoToSourceMessageQueues[audioFifo] = sampleSourceMessageQueue;
m_inputDeviceSourceMessageQueues[inputDeviceIndex].append(sampleSourceMessageQueue);
}
else
{
int audioInputDeviceIndex = m_audioSourceFifos[audioFifo];

if (audioInputDeviceIndex != inputDeviceIndex) // change of audio device
{
removeAudioSource(audioFifo); // remove from current
// remove from current
m_audioInputs[audioInputDeviceIndex]->removeFifo(audioFifo);
if ((audioInputDeviceIndex != -1) && (m_audioInputs[audioInputDeviceIndex]->getNbFifos() == 0)) {
stopAudioInput(audioInputDeviceIndex);
}

m_audioInputs[inputDeviceIndex]->addFifo(audioFifo); // add to new
m_audioSourceFifos[audioFifo] = inputDeviceIndex; // new index
m_outputDeviceSinkMessageQueues[audioInputDeviceIndex].removeOne(m_audioFifoToSourceMessageQueues[audioFifo]);
m_inputDeviceSourceMessageQueues[inputDeviceIndex].append(sampleSourceMessageQueue);
m_audioFifoToSourceMessageQueues[audioFifo] = sampleSourceMessageQueue;
}
}

m_audioSourceFifos[audioFifo] = inputDeviceIndex; // register audio FIFO
m_audioFifoToSourceMessageQueues[audioFifo] = sampleSourceMessageQueue;
m_outputDeviceSinkMessageQueues[inputDeviceIndex].append(sampleSourceMessageQueue);
}

void AudioDeviceManager::removeAudioSource(AudioFifo* audioFifo)
Expand Down

0 comments on commit 98f5e61

Please sign in to comment.