1. 29 Jun, 2021 2 commits
  2. 28 Jun, 2021 4 commits
  3. 26 Jun, 2021 2 commits
  4. 25 Jun, 2021 3 commits
  5. 24 Jun, 2021 1 commit
  6. 23 Jun, 2021 2 commits
    • Nicolas Dufresne's avatar
      videodecoder: Call drain() rather then finish() on segment-done · be6793d0
      Nicolas Dufresne authored
      The finish() virtual function documentation state that "Sub-classes can refuse
      to decode new data after." Though, it is very common to issue a non-flushing
      seek after that event in gapless playback uses case. This fixes potential
      stalls with code using segment seeks, by using drain() virtual funciton
      instead.
      
      Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1206>
      be6793d0
    • Matthew Waters's avatar
      oggdemux: fix a race in push mode when performing the duration seek · 0ac4fda2
      Matthew Waters authored
      There may be two or more threads involved here however the important
      interaction is the use of ogg->seeK_event_drop_till value that was only
      set in the push-mode seek-event thread and could race with upstream
      sending e.g. and EOS (or data).
      
      Scenario is this:
      1. oggdemux performs a seek to near the end of the file to try and find
         the duration. ogg->push_state is set to PUSH_DURATION.
      2. Seek is picked up by the dedicated seek event thread and sets
         ogg->seek_event_drop_till to the seek event's seqnum.
      3. Most operations are blocked or dropped waiting on the duration to
         be determined and processing continues until a duration is found.
      4. Two branching options for how this ultimately plays out
      4a. The source is too fast and we receive an EOS event which is dropped
          because ogg->push_state == PUSH_DURATION.  In this case everything
          works.
      4b. We hit our 'almost at the end' check in
          gst_ogg_pad_handle_push_mode_state() and attempt to seek back to the
          beginning (or to a user-provided seek).  This seek is marshalled to
          the seek event thread without setting ogg->seek_event_drop_till but
          with change ogg->push_state = PUSH_PLAYING.  If an EOS event or
          e.g. buffers arrive from upstream before the seek event thread has
          picked up the seek event, then the EOS/data is processed as if it
          came as a result of the seek event.  This is the case that fails.
      
      The fix is two-fold:
      1. Preemptively set ogg->seek_event_drop_till when setting the seek
         event so that data and other events can be dropped correctly.
      2. In addition to dropping and EOS events while ogg->push_state ==
         PUSH_DURATION, also drop any EOS events that are received before the
         seek event has been processed by also tracking the seqnum of the seek.
      
      Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1196>
      0ac4fda2
  7. 21 Jun, 2021 3 commits
  8. 16 Jun, 2021 1 commit
  9. 11 Jun, 2021 2 commits
  10. 10 Jun, 2021 2 commits
  11. 08 Jun, 2021 2 commits
  12. 05 Jun, 2021 1 commit
  13. 03 Jun, 2021 5 commits
  14. 02 Jun, 2021 1 commit
  15. 01 Jun, 2021 1 commit
  16. 31 May, 2021 3 commits
  17. 27 May, 2021 3 commits
  18. 26 May, 2021 2 commits