@@ -394,6 +394,8 @@ void MediaPanel::Play(bool e)
394
394
auto output_dev = QAudioDevice (QMediaDevices::defaultAudioOutput ());
395
395
auto fmt = output_dev.preferredFormat ();
396
396
397
+ ClearAudioSinks ();
398
+
397
399
for (auto it=m_mediaInstances.cbegin (); it!=m_mediaInstances.cend (); it++) {
398
400
auto m = *it;
399
401
@@ -407,7 +409,6 @@ void MediaPanel::Play(bool e)
407
409
auto out = new QAudioSink (output_dev, fmt, this );
408
410
out->setVolume (m->GetVolume ());
409
411
out->start (m);
410
- connect (out, &QAudioSink::stateChanged, this , &MediaPanel::AudioStateChanged);
411
412
m_audioSinks.push_back (out);
412
413
has_audio = true ;
413
414
}
@@ -449,9 +450,7 @@ void MediaPanel::TimerUpdate()
449
450
}
450
451
451
452
if (all_eof) {
452
- // Detach audio output so that it flushes itself
453
- m_audioSinks.clear ();
454
-
453
+ ClearAudioSinks ();
455
454
Play (false );
456
455
m_PlayheadSlider->setValue (m_PlayheadSlider->maximum ());
457
456
}
@@ -506,17 +505,13 @@ void MediaPanel::LabelContextMenuTriggered(const QPoint &pos)
506
505
m.exec (static_cast <QWidget*>(sender ())->mapToGlobal (pos));
507
506
}
508
507
509
- void MediaPanel::AudioStateChanged (QAudio::State newState )
508
+ void MediaPanel::ClearAudioSinks ( )
510
509
{
511
- if (newState == QAudio::IdleState) {
512
- auto out = static_cast <QAudioSink*>(sender ());
510
+ if (m_audioSinks.size () != 0 ) {
511
+ for (auto s : m_audioSinks)
512
+ delete s;
513
513
514
- auto it = std::find (m_audioSinks.begin (), m_audioSinks.end (), out);
515
- if (it != m_audioSinks.end ()) {
516
- m_audioSinks.erase (it);
517
- }
518
-
519
- delete out;
514
+ m_audioSinks.clear ();
520
515
}
521
516
}
522
517
0 commit comments