1. 25 Jun, 2019 1 commit
    • Thibault Saunier's avatar
      multiqueue: Stop using the gst_pad_element_private API · 6a20fcc9
      Thibault Saunier authored
      There was a race where we could still get the pad event function
      called when its private member were already unset, leading to
      a segfault in the event handler:
      
      ```
      0  gst_multi_queue_src_event (pad=<optimized out>, parent=<optimized out>, event=0x7f3ff0007600) at ../subprojects/gstreamer/plugins/elements/gstmultiqueue.c:2534
      2534          ret = gst_pad_push_event (sq->sinkpad, event);
      [Current thread is 1 (Thread 0x7f406c0258c0 (LWP 21925))]
      (gdb) bt
      0  0x00007f4062ec1399 in gst_multi_queue_src_event (pad=<optimized out>, parent=<optimized out>, event=0x7f3ff0007600 [GstEvent]) at ../subprojects/gstreamer/plugins/elements/gstmultiqueue.c:2534
      1  0x00007f406b40f46d in gst_validate_pad_monitor_src_event_check (handler=0x7f4062ec1360 <gst_multi_queue_src_event>, event=0x7f3ff0007600 [GstEvent], parent=0x7f3fcc01f090 [GstMultiQueue|multiqueue167], pad_monitor=0x7f3fe809e7c0 [GstValidatePadMonitor|validatepadmonitor2213]) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2101
      2  0x00007f406b40f46d in gst_validate_pad_monitor_src_event_func (pad=<optimized out>, parent=0x7f3fcc01f090 [GstMultiQueue|multiqueue167], event=0x7f3ff0007600 [GstEvent]) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2374
      3  0x00007f406b904387 in gst_pad_send_event_unchecked (pad=pad@entry=0x7f3fdc027650 [GstPad|src_0], event=event@entry=0x7f3ff0007600 [GstEvent], type=<optimized out>, type@entry=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM) at ../subprojects/gstreamer/gst/gstpad.c:5772
      4  0x00007f406b90481b in gst_pad_push_event_unchecked (pad=pad@entry=0x7f4058182fc0 [GstPad|sink], event=event@entry=0x7f3ff0007600 [GstEvent], type=type@entry=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM) at ../subprojects/gstreamer/gst/gstpad.c:5417
      5  0x00007f406b90f016 in gst_pad_push_event (pad=0x7f4058182fc0 [GstPad|sink], event=event@entry=0x7f3ff0007600 [GstEvent]) at ../subprojects/gstreamer/gst/gstpad.c:5554
      6  0x00007f406a1c99ba in gst_video_decoder_src_event_default (decoder=0x7f3fe81c6060 [GstTheoraDec|theoradec46], event=<optimized out>) at ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c:1532
      7  0x00007f406b40f46d in gst_validate_pad_monitor_src_event_check (handler=0x7f406a1ca270 <gst_video_decoder_src_event>, event=0x7f3ff0007600 [GstEvent], parent=0x7f3fe81c6060 [GstTheoraDec|theoradec46], pad_monitor=0x7f4028163aa0 [GstValidatePadMonitor|validatepadmonitor2216]) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2101
      8  0x00007f406b40f46d in gst_validate_pad_monitor_src_event_func (pad=<optimized out>, parent=0x7f3fe81c6060 [GstTheoraDec|theoradec46], event=0x7f3ff0007600 [GstEvent]) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2374
      ```
      
      This make the GstSingleQueue a MiniObject, mainly so it is properly
      refcounted.
      
      This also make use of the GstMultiQueuePad class for srcpads which
      is totally valid as srcpads and sinkpads share the same SingleQueue
      object.
      6a20fcc9
  2. 21 Jun, 2019 1 commit
  3. 20 Jun, 2019 4 commits
  4. 17 Jun, 2019 1 commit
  5. 13 Jun, 2019 5 commits
  6. 11 Jun, 2019 2 commits
    • Mathieu Duponchelle's avatar
      aggregator: don't try to take STREAM_LOCK on sink pad flush · 6d166150
      Mathieu Duponchelle authored
      This was a misguided effort to try and guarantee the buffers of
      the sink pads would not change during aggregate, when an upstream
      branch is seeked independently, however this is simply incorrect
      as downstream has not necessarily been flushed, or the aggregate
      function might be waiting to receive buffers on other pads.
      6d166150
    • Mathieu Duponchelle's avatar
      aggregator: send flush_stop ourselves if needed · 4087361d
      Mathieu Duponchelle authored
      In !159 , we switched to sending flush_start ourselves from the
      do_seek implementation. If no flushing seek successfully made its
      way upstream, we need to send flush_stop ourselves as well.
      4087361d
  7. 10 Jun, 2019 2 commits
    • Mathieu Duponchelle's avatar
      aggregator: don't hold stream lock when flushing · c55c61eb
      Mathieu Duponchelle authored
      Releasing a GRecMutex from a different thread is undefined
      behaviour.
      
      There should be no reason to hold the stream lock from the
      moment aggregator receives a flush_start until it receives
      the last flush_stop: the source pad task is stopped, and can
      only be restarted once the last flush_stop has arrived.
      
      I can only speculate as to the reason why this was done,
      as it was that way since the original commit. My best
      guess is that aggregator originally didn't marshall events
      and queries to the aggregate thread, and this somehow
      helped work around this.
      c55c61eb
    • Mathieu Duponchelle's avatar
      aggregator: refactor flushing logic · 25383eaa
      Mathieu Duponchelle authored
      Instead of tracking "pending_flush_*" on the pads and the
      aggregator, we now simply track the last seqnum for flush start
      and flush stop events on the pads, and use it to determine whether
      we should enter or exit our flushing state.
      
      See gst-plugins-bad#977
      25383eaa
  8. 06 Jun, 2019 3 commits
  9. 05 Jun, 2019 2 commits
  10. 04 Jun, 2019 1 commit
    • Niels De Graef's avatar
      Use G_DEFINE_AUTOPTR_CLEANUP_FUNC unconditionally · 09141c6e
      Niels De Graef authored
      Since we started depending on GLib 2.44, we can be sure this macro is
      defined (it will be a no-op on compilers that don't support it). For
      plugins we should just start using `G_DECLARE_FINAL_TYPE` which means
      we no longer need the macro there, but for most types in core we don't
      want to break ABI, which means it's better to just keep it like it is
      (and use the `#ifdef` instead).
      09141c6e
  11. 03 Jun, 2019 1 commit
    • Niels De Graef's avatar
      meson: Bump minimal GLib version to 2.44 · 56d19cbf
      Niels De Graef authored
      This means we can use some newer features and get rid of some
      boilerplate code using the `G_DECLARE_*` macros.
      
      As discussed on IRC, 2.44 is old enough by now to start depending on it.
      56d19cbf
  12. 01 Jun, 2019 1 commit
  13. 31 May, 2019 1 commit
  14. 30 May, 2019 2 commits
  15. 29 May, 2019 1 commit
  16. 25 May, 2019 3 commits
  17. 24 May, 2019 8 commits
    • Michael Olbrich's avatar
      gdb: add gst_element_pad() function · 96b88ffe
      Michael Olbrich authored
      Another helper to navigate a pipeline. It makes it possible to easily
      access the pads of an element:
      
      (gdb) print $gst_element_pad(basesink, "sink")
      $1 = 0x7fffe80770f0 [GstPad|sink]
      96b88ffe
    • Michael Olbrich's avatar
      gdb: print more data for segment events · 4877afc1
      Michael Olbrich authored
      This add the different timestamps for segment events:
      
      (gdb) gst-print pad
      SrcPad(src, push) {
        events:
      [...]
          segment: time
            rate: 1.1
            start:    0:03:08.449753330
            time:     0:03:08.449753330
            position: 0:03:08.449753330
            duration: 0:12:14.166687500
      [...]
      }
      4877afc1
    • Michael Olbrich's avatar
      gdb: add 'gst-pipeline-tree' command · 2bd2ed28
      Michael Olbrich authored
      It shows a simple tree of all elements in pipeline.
      As with gst-dot, the toplevel bin is found from any element of the
      pipeline:
      
      (gdb) gst-pipeline-tree bsink
      playbin
        inputselector1
        inputselector0
        uridecodebin0
          queue2-0
          decodebin0
            avdec_aac0
            aacparse0
            vaapidecodebin0
              vaapipostproc0
              capsfilter1
              vaapi-queue
              vaapidecode0
            capsfilter0
            h264parse0
            multiqueue0
            matroskademux0
            typefind
          typefindelement0
          source
        playsink
          abin
            aconv
              resample
              conv
              identity
            aqueue
            pulsesink0
          vbin
            vconv
              scale
              conv
              identity
            vqueue
            vaapisink0
          vdbin
            deinterlace
            vdconv
          audiotee
          streamsynchronizer0
      2bd2ed28
    • Michael Olbrich's avatar
      gdb: add gst_pipeline() and gst_bin_get() functions · ebce5a7e
      Michael Olbrich authored
      This simplifies navigating in a GStreamer pipeline, e.g.
      
      (gdb) print $gst_bin_get($gst_pipeline(pad), "matroskademux0")
      $1 = 0x7fffe81b4050 [GstMatroskaDemux|matroskademux0]
      ebce5a7e
    • Michael Olbrich's avatar
      gdb: handle ghost and proxy pads while looking for the top-level element · 8ccb9f25
      Michael Olbrich authored
      The parent object for pads is not always a GstElement. Handle GstProxyPad
      parents as well.
      8ccb9f25
    • Michael Olbrich's avatar
      gdb: refactor finding top-level pipeline · 320a4cba
      Michael Olbrich authored
      No functional changes. Just refactoring to make it possible to reuse this
      later.
      320a4cba
    • Michael Olbrich's avatar
      gdb: gst-print add more pad and element information · 36c2fc3b
      Michael Olbrich authored
      For elements, this adds all child elements, the state and base/start time:
      
      (gdb) gst-print pipeline
      0x5555556ebd20 "pipeline0"
      GstPipeline(pipeline0) {
          children:
            fakesink0
            queue0
            videotestsrc0
          state: PLAYING
          base_time: +2:54:36.892581150
          start_time: 0:00:00.000000000
      }
      
      For pads, this adds the peer pads and the current task state and the
      offset (if not zero):
      
      (gdb) gst-print pad
      SrcGhostPad(src, push) {
        events:
          [...]
        peer: vaapisink0:sink
        inner peer: scale:src
      }
      
      (gdb) gst-print pad
      SrcPad(src, push) {
        events:
          [...]
        peer: queue0:sink
        task: STARTED
        offset: 30000000 [+0:00:00.030000000]
      }
      36c2fc3b
    • Michael Olbrich's avatar
      gdb: refactor time formating · 0d7db77b
      Michael Olbrich authored
      Make it reuseable independent of the GstClockTimePrinter.
      0d7db77b
  18. 23 May, 2019 1 commit