@@ -590,6 +590,10 @@ std::string PipewireEnumerator::openDeviceInput(uint32_t deviceId,
590590 PortPair& ports = m_inputs.at (input);
591591 ports.activeDevice = deviceId;
592592
593+ if (ports.active .load ()) {
594+ closePorts (ports);
595+ }
596+
593597 ChannelGroup channelGroup = input.getChannelGroup ();
594598 unsigned char channelBase = channelGroup.getChannelBase ();
595599 unsigned char channelCount = channelGroup.getChannelCount ().value ();
@@ -635,6 +639,10 @@ std::string PipewireEnumerator::openDeviceOutput(uint32_t deviceId,
635639 PortPair& ports = m_outputs.at (output);
636640 ports.activeDevice = deviceId;
637641
642+ if (ports.active .load ()) {
643+ closePorts (ports);
644+ }
645+
638646 ChannelGroup channelGroup = output.getChannelGroup ();
639647 unsigned char channelBase = channelGroup.getChannelBase ();
640648 unsigned char channelCount = channelGroup.getChannelCount ().value ();
@@ -662,40 +670,34 @@ void PipewireEnumerator::closePorts(PortPair& ports) {
662670 const Port& left = m_ports.at (ports.left .id );
663671 const Port& right = m_ports.at (ports.right .id );
664672
673+ qDebug () << " PipewireEnumerator::closePorts" << left.links .size () << right.links .size ();
674+
665675 for (uint32_t link : left.links ) {
666676 destroyLink (link);
667- qDebug () << " PipewireEnumerator::closePath left " << link;
677+ qDebug () << " PipewireEnumerator::closePorts " << link;
668678 }
669679
670680 for (uint32_t link : right.links ) {
671681 destroyLink (link);
672- qDebug () << " PipewireEnumerator::closePath right " << link;
682+ qDebug () << " PipewireEnumerator::closePorts " << link;
673683 }
674684 ports.activeDevice = 0 ;
675685}
676686
677- void PipewireEnumerator::closeDeviceInput ( uint32_t deviceId, const AudioInput& input ) {
678- qDebug () << " PipewireEnumerator::closeDevice " << deviceId;
679- VERIFY_OR_DEBUG_ASSERT (m_initialized ) {
680- qDebug () << " PipewireEnumerator::closePath called when "
681- " uninitialized, this should not happen " ;
682- return ;
687+ void PipewireEnumerator::closeDevices ( ) {
688+ for ( auto & [path, ports] : m_inputs) {
689+ if (ports. active . load () ) {
690+ qDebug () << " PipewireEnumerator::closeDevices " << path. getString ();
691+ closePorts (ports) ;
692+ }
683693 }
684694
685- PortPair& ports = m_inputs.at (input);
686- closePorts (ports);
687- }
688-
689- void PipewireEnumerator::closeDeviceOutput (uint32_t deviceId, const AudioOutput& output) {
690- qDebug () << " PipewireEnumerator::closeDevice" << deviceId;
691- VERIFY_OR_DEBUG_ASSERT (m_initialized) {
692- qDebug () << " PipewireEnumerator::closePath called when "
693- " uninitialized, this should not happen" ;
694- return ;
695+ for (auto & [path, ports] : m_outputs) {
696+ if (ports.active .load ()) {
697+ qDebug () << " PipewireEnumerator::closeDevices" << path.getString ();
698+ closePorts (ports);
699+ }
695700 }
696-
697- PortPair& ports = m_outputs.at (output);
698- closePorts (ports);
699701}
700702
701703void PipewireEnumerator::callback (const spa_io_position* pos) {
0 commit comments