Skip to content

pipeline: fix base_time selection when flush seeking live

When a live pipeline goes to PLAYING, its change_state method is called twice for PAUSED_TO_PLAYING: the first time is from GstElement, when NO_PREROLL is returned, the second is from GstBin, after all async_done messages have been collected.

base_time selection is done only the first time, through comparisons with start_time.

On the other hand, when this live pipeline gets flush seeked, even though start_time is reset by the sink upon reception of flush_stop(reset_time=TRUE), PAUSED_TO_PLAYING only occurs once, from GstBin, after all async_done messages have been collected. This causes the base_time to be off by .

This commit addresses this by mimicing the behaviour of GstElement on NO_PREROLL, and calling the change_state method manually when the following conditions are met:

  • The pipeline is live

  • The target state is PLAYING

Merge request reports