[Bug 729760] appsrc: Changing caps and pushing buffers is not serialized

GStreamer (bugzilla.gnome.org) bugzilla at gnome.org
Sun Jul 27 03:03:19 PDT 2014


https://bugzilla.gnome.org/show_bug.cgi?id=729760
  GStreamer | gst-plugins-base | git

comicfans44 <comicfans44> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Version|1.3.1                       |git

--- Comment #4 from comicfans44 <comicfans44 at gmail.com> 2014-07-27 10:03:14 UTC ---
(In reply to comment #2)
> If you would've copied what I've written on the mailing list, then the cause
> and solution would already be mentioned here :)
> 
> 
> 
> This looks like a bug indeed, I can't see anything wrong in your code.
> The problem here most likely is that appsrc does not make sure that all
> previous buffers are pushed downstream before using the new caps. Should
> be relatively easy to fix by tracking caps together with buffers...

any update ? after re-check git(73646bd0) version ,this bug still exists,
seems bug happend here: gstappsrc.c:1058
gst_app_src_create callback

  while (TRUE) {
    /* return data as long as we have some */
    if (!g_queue_is_empty (priv->queue)) {
      guint buf_size;

      if (priv->new_caps) {


        priv->new_caps = FALSE;

// did not flush previous buffers before new caps negotiate

        gst_app_src_do_negotiate (bsrc);
        /* Lock has released so now may need
         *- flushing
         *- new caps change
         *- check queue has data */
        if (G_UNLIKELY (priv->flushing))
          goto flushing;
        /* Contiue checks caps and queue */
        continue;--------> next loop may return a buffer but downstream
elements already has new caps

how could I fix this ?

plus: I found gst_app_src_send_event drop all queued buffer when receiving
flush_stop, does this mean appsrc lost buffers ?

-- 
Configure bugmail: https://bugzilla.gnome.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.


More information about the gstreamer-bugs mailing list