Sync new GStreamer element to parent state
authorPhilip Chimento <philip.chimento@gmail.com>
Mon, 28 Oct 2013 05:09:29 +0000 (22:09 -0700)
committerPhilip Chimento <philip.chimento@gmail.com>
Mon, 28 Oct 2013 05:09:29 +0000 (22:09 -0700)
In GStreamer 1.0, when adding a new element to the pipeline in a signal
handler, its state has to be synced to the pipeline's state, because the
handler could be called in the middle of a state change which would
cause the state change to hang.

This was supposed to be done in GStreamer 0.10 too, but it never caused
any problems.

libchimara/schannel.c

index 3c75599691d9c70304cc5bb776805f5a6041b700..f6bd1ff3918a5683caa8988f5ff1f330b4b9f6b2 100644 (file)
@@ -170,6 +170,12 @@ on_type_found(GstElement *typefind, guint probability, GstCaps *caps, schanid_t
                WARNING_S(_("Unexpected audio type in blorb"), type);
        }
 
+       /* This is necessary in case this handler occurs in the middle of a state
+       change */
+       gst_element_sync_state_with_parent(s->decode);
+       if(s->demux != NULL)
+               gst_element_sync_state_with_parent(s->demux);
+
 finally:
        g_free(type);
 }