Hallo zusammen,
ich bin mir nicht sicher, ob ich einen Bug gefunden habe. Tritt sporadisch beim Wechsel von pmPause nach pmPlay auf.
Ein cDvbPlayer::Freeze() setzt ein lock auf den thread, d.h. die Dauerschleife stoppt hier.
Nachdem Freeze() den playmode auf pmPause gesetzt hat, geht es mit der else-Anweisung weiter, d.h. Sleep wird true, damit beim nächsten Schleifendurchgang geschlafen wird.
Trotzdem gehts weiter, aus dem Ringbuffer werden Daten geholt und mit PlayTs() verarbeitet. VideoOnly ist jetzt true. Falls gerade jetzt ein Audiopaket ansteht, heißt das aber wiederum, dass cDevice::PlayTs() die Daten wegen VideoOnly hier nicht verarbeitet, trotzdem aber Played um TS_SIZE hochzählt und den Wert zurückliefert, als ob sie angenommen wurden.
Das führt zu dem Problem, dass dem Ausgabeplugin diese Daten fehlen und ggfs. einen Sync mit framedrops erzeugt.
Liege ich damit richtig?
Ein relativ einfacher Fix wäre, sich hier mit einem continue aus dem Schleifendurchgang zu verabschieden. Funktionier hier, aber ich weiß nicht, ob das an anderer Stelle Nebenwirkungen hat. Was meint ihr bzw. kls ?
Gruß Andreas