[411/906] gstglmixer: copy/past recent changes from gstvideomixer

This commit is contained in:
Julien Isorce 2009-12-18 00:34:13 +01:00 committed by Tim-Philipp Müller
parent 4874b35304
commit 0b6112c4a0

View file

@ -821,7 +821,7 @@ gst_gl_mixer_fill_queues (GstGLMixer * mix)
GST_LOG_OBJECT (mix, "we need a new buffer");
buf = gst_collect_pads_pop (mix->collect, data);
buf = gst_collect_pads_peek (mix->collect, data);
if (buf) {
guint64 duration;
@ -836,7 +836,9 @@ gst_gl_mixer_fill_queues (GstGLMixer * mix)
if (mixpad->fps_n == 0) {
duration = GST_CLOCK_TIME_NONE;
} else {
duration = GST_SECOND * mixpad->fps_d / mixpad->fps_n;
duration =
gst_util_uint64_scale_int (GST_SECOND, mixpad->fps_d,
mixpad->fps_n);
}
}
if (GST_CLOCK_TIME_IS_VALID (duration))
@ -951,7 +953,7 @@ static void
gst_gl_mixer_update_queues (GstGLMixer * mix)
{
GSList *walk;
guint64 interval;
gint64 interval;
interval = mix->master->queued;
if (interval <= 0) {
@ -960,7 +962,7 @@ gst_gl_mixer_update_queues (GstGLMixer * mix)
} else {
interval = GST_SECOND * mix->fps_d / mix->fps_n;
}
GST_LOG_OBJECT (mix, "set interval to %" G_GUINT64_FORMAT " nanoseconds",
GST_LOG_OBJECT (mix, "set interval to %" G_GINT64_FORMAT " nanoseconds",
interval);
}
@ -975,7 +977,14 @@ gst_gl_mixer_update_queues (GstGLMixer * mix)
pad->queued -= interval;
GST_LOG_OBJECT (pad, "queued now %" G_GINT64_FORMAT, pad->queued);
if (pad->queued <= 0) {
GstBuffer *buffer =
gst_collect_pads_pop (mix->collect, &mixcol->collect);
GST_LOG_OBJECT (pad, "unreffing buffer");
if (buffer)
gst_buffer_unref (buffer);
else
GST_WARNING_OBJECT (pad,
"Buffer was removed by GstCollectPads in the meantime");
gst_buffer_unref (mixcol->buffer);
mixcol->buffer = NULL;
}
@ -1151,6 +1160,7 @@ gst_gl_mixer_src_event (GstPad * pad, GstEvent * event)
static gboolean
gst_gl_mixer_sink_event (GstPad * pad, GstEvent * event)
{
GstGLMixerPad *vpad = GST_GL_MIXER_PAD (pad);
GstGLMixer *videomixer = GST_GL_MIXER (gst_pad_get_parent (pad));
gboolean ret;
@ -1166,6 +1176,12 @@ gst_gl_mixer_sink_event (GstPad * pad, GstEvent * event)
* and downstream (using our source pad, the bastard!).
*/
videomixer->sendseg = TRUE;
/* Reset pad state after FLUSH_STOP */
if (vpad->mixcol->buffer)
gst_buffer_unref (vpad->mixcol->buffer);
vpad->mixcol->buffer = NULL;
vpad->queued = 0;
break;
case GST_EVENT_NEWSEGMENT:
videomixer->sendseg = TRUE;