From caf48e5c6f37beb950e3b26a62ab229cbb85d150 Mon Sep 17 00:00:00 2001 From: Mathieu Duponchelle Date: Thu, 17 Jan 2019 21:06:54 +0100 Subject: gdkpixbufdec: always output a TIME segment It makes no sense for a decoder to output a BYTES segment, and many elements one would plug downstream of a video decoder assume the segments they receive are in TIME format, for example this fixes: gst-validate-1.0 filesrc location=opacity01.svg ! gdkpixbufdec ! \ videobalance ! videoconvert ! fakesink In that case, videobalance was emitting an assertion when trying to call gst_object_sync_values() --- ext/gdk_pixbuf/gstgdkpixbufdec.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/ext/gdk_pixbuf/gstgdkpixbufdec.c b/ext/gdk_pixbuf/gstgdkpixbufdec.c index 09211bf17..c119236a8 100644 --- a/ext/gdk_pixbuf/gstgdkpixbufdec.c +++ b/ext/gdk_pixbuf/gstgdkpixbufdec.c @@ -431,11 +431,23 @@ gst_gdk_pixbuf_dec_sink_event (GstPad * pad, GstObject * parent, case GST_EVENT_SEGMENT: { const GstSegment *segment; + GstSegment output_segment; + guint32 seqnum; + gst_event_parse_segment (event, &segment); if (segment->format == GST_FORMAT_BYTES) pixbuf->packetized = FALSE; else pixbuf->packetized = TRUE; + + if (segment->format != GST_FORMAT_TIME) { + seqnum = gst_event_get_seqnum (event); + gst_event_unref (event); + gst_segment_init (&output_segment, GST_FORMAT_TIME); + event = gst_event_new_segment (&output_segment); + gst_event_set_seqnum (event, seqnum); + } + if (pixbuf->pixbuf_loader != NULL) { gdk_pixbuf_loader_close (pixbuf->pixbuf_loader, NULL); g_object_unref (G_OBJECT (pixbuf->pixbuf_loader)); -- cgit v1.2.1