Also bei softhddevice (mit vdpau) habe ich dieses Problem noch nie gehabt! Nun funktioniert softhdodroid auch ganz anders. Es erzeugt die video frames nicht selbst, das läuft alles direkt über den amlogic-Kernel. Das macht die A/V-Synchronisation mit alsa etwas schwieriger.
Auch der ugly fix verändert bei softhdodroid nichts. Die Variante mit dem Clear hatte ich auch schon mal probiert, aber wie Du schon schreibst - es fehlen dann ein paar Sekunden.
Das ganze Problem würde übrigens nicht entstehen, wenn man in Mute() den Aufruf von
auskommentiert. Die Wiedergabe läuft dann beim Wechsel von speed 2, 4 oder 8 zu Play sauber weiter. Aber die Zeitlupe würde dann nach ein paar Sekunden stehenbleiben, weil in PlayVideo keine Daten mehr vom vdr ankommen. Genau kriege ich das nicht mehr zusammen. Kam es zu einem Überlauf des Audio ringbuffers? Oder lag es daran, dass PlayAudio 0 returniert hat? Bei Beginn der Pausenfunktion wird in Freeze() StreamFreezed = 1 gesetzt und AudioPause aufgerufen. Beim Wechsel zur Zeitlupe aus der Pause heraus (Aufruf Trickspeed durch Drücken der Pfeiltaste rechts) ändert sich an StreamFreezed glaube ich noch nichts - erst der erneute Aufruf von Play() beim Beenden der Zeitlupe führt dazu, dass wieder Audiodaten in den ringbuffer geliefert werden. War denn nun vorher geleert oder sind noch Reste vorhanden, zu denen dann neue Daten mit nicht mehr kontinuierlicher PTS hinzukommen? Ich kriege es nicht mehr zusammen. Es kommt auf alle Fälle zu einer A/V-Abweichung von rund 4 Sekunden bei einer ringbuffer-Größe von 2s.
Ich habe Tage damit verbracht, alles mögliche auszuprobieren, bin aber an der Stelle nicht wirklich weitergekommen. Wenn man Audio und Video buffer beide clearen würde und die Wiedergabe an der letzten beim Verlassen der Aufzeichnung aktuellen Stelle komplett neu beginnt, müsste es eigentlich gehen. Aber das überschreitet auch meine bescheidenen Fähigkeiten.