Skip to content
  • Mathieu Duponchelle's avatar
    pipeline: fix base_time selection when flush seeking live · 0566b052
    Mathieu Duponchelle authored and GStreamer Marge Bot's avatar GStreamer Marge Bot committed
    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 <latency>.
    
    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
    0566b052