mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-18 14:26:43 +00:00
glmixer: send the stream-start event
and the caps event after. https://bugzilla.gnome.org/show_bug.cgi?id=730944
This commit is contained in:
parent
c3fb73335f
commit
90eefa6e5a
2 changed files with 35 additions and 3 deletions
|
@ -1347,12 +1347,16 @@ gst_gl_mixer_src_setcaps (GstPad * pad, GstGLMixer * mix, GstCaps * caps)
|
||||||
|
|
||||||
mix->out_info = info;
|
mix->out_info = info;
|
||||||
|
|
||||||
|
if (mix->current_caps == NULL ||
|
||||||
|
gst_caps_is_equal (caps, mix->current_caps) == FALSE) {
|
||||||
|
gst_caps_replace (&mix->current_caps, caps);
|
||||||
|
mix->send_caps = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
GST_GL_MIXER_UNLOCK (mix);
|
GST_GL_MIXER_UNLOCK (mix);
|
||||||
|
|
||||||
ret = gst_pad_set_caps (mix->srcpad, caps);
|
ret = gst_gl_mixer_do_bufferpool (mix, caps);
|
||||||
|
|
||||||
if (ret)
|
|
||||||
ret = gst_gl_mixer_do_bufferpool (mix, caps);
|
|
||||||
done:
|
done:
|
||||||
priv->negotiated = ret;
|
priv->negotiated = ret;
|
||||||
|
|
||||||
|
@ -1847,6 +1851,28 @@ gst_gl_mixer_collected (GstCollectPads * pads, GstGLMixer * mix)
|
||||||
gst_pad_push_event (mix->srcpad, gst_event_new_flush_stop (TRUE));
|
gst_pad_push_event (mix->srcpad, gst_event_new_flush_stop (TRUE));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mix->send_stream_start) {
|
||||||
|
gchar s_id[32];
|
||||||
|
|
||||||
|
/* stream-start (FIXME: create id based on input ids) */
|
||||||
|
g_snprintf (s_id, sizeof (s_id), "mix-%08x", g_random_int ());
|
||||||
|
if (!gst_pad_push_event (mix->srcpad, gst_event_new_stream_start (s_id))) {
|
||||||
|
GST_WARNING_OBJECT (mix->srcpad, "Sending stream start event failed");
|
||||||
|
}
|
||||||
|
mix->send_stream_start = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gst_pad_check_reconfigure (mix->srcpad))
|
||||||
|
gst_gl_mixer_update_src_caps (mix);
|
||||||
|
|
||||||
|
if (mix->send_caps) {
|
||||||
|
if (!gst_pad_push_event (mix->srcpad,
|
||||||
|
gst_event_new_caps (mix->current_caps))) {
|
||||||
|
GST_WARNING_OBJECT (mix->srcpad, "Sending caps event failed");
|
||||||
|
}
|
||||||
|
mix->send_caps = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
GST_GL_MIXER_LOCK (mix);
|
GST_GL_MIXER_LOCK (mix);
|
||||||
|
|
||||||
if (mix->newseg_pending) {
|
if (mix->newseg_pending) {
|
||||||
|
@ -2292,6 +2318,9 @@ gst_gl_mixer_change_state (GstElement * element, GstStateChange transition)
|
||||||
switch (transition) {
|
switch (transition) {
|
||||||
case GST_STATE_CHANGE_READY_TO_PAUSED:
|
case GST_STATE_CHANGE_READY_TO_PAUSED:
|
||||||
{
|
{
|
||||||
|
mix->send_stream_start = TRUE;
|
||||||
|
mix->send_caps = TRUE;
|
||||||
|
gst_caps_replace (&mix->current_caps, NULL);
|
||||||
GST_LOG_OBJECT (mix, "starting collectpads");
|
GST_LOG_OBJECT (mix, "starting collectpads");
|
||||||
gst_collect_pads_start (mix->collect);
|
gst_collect_pads_start (mix->collect);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -76,12 +76,15 @@ struct _GstGLMixer
|
||||||
GPtrArray *array_buffers;
|
GPtrArray *array_buffers;
|
||||||
GPtrArray *frames;
|
GPtrArray *frames;
|
||||||
|
|
||||||
|
GstCaps *current_caps;
|
||||||
GstVideoInfo out_info;
|
GstVideoInfo out_info;
|
||||||
GLuint out_tex_id;
|
GLuint out_tex_id;
|
||||||
GstGLDownload *download;
|
GstGLDownload *download;
|
||||||
|
|
||||||
gboolean newseg_pending;
|
gboolean newseg_pending;
|
||||||
gboolean flush_stop_pending;
|
gboolean flush_stop_pending;
|
||||||
|
gboolean send_stream_start;
|
||||||
|
gboolean send_caps;
|
||||||
|
|
||||||
GstSegment segment;
|
GstSegment segment;
|
||||||
GstClockTime ts_offset;
|
GstClockTime ts_offset;
|
||||||
|
|
Loading…
Reference in a new issue