diff --git a/ext/gdk_pixbuf/gstgdkpixbufdec.c b/ext/gdk_pixbuf/gstgdkpixbufdec.c index eb56d77c4c..02e780ce00 100644 --- a/ext/gdk_pixbuf/gstgdkpixbufdec.c +++ b/ext/gdk_pixbuf/gstgdkpixbufdec.c @@ -215,6 +215,7 @@ gst_gdk_pixbuf_dec_init (GstGdkPixbufDec * filter) filter->last_timestamp = GST_CLOCK_TIME_NONE; filter->pixbuf_loader = NULL; + filter->packetized = FALSE; } static gboolean @@ -427,12 +428,20 @@ gst_gdk_pixbuf_dec_sink_event (GstPad * pad, GstObject * parent, pixbuf->pending_events = NULL; /* Fall through */ case GST_EVENT_SEGMENT: + { + const GstSegment *segment; + gst_event_parse_segment (event, &segment); + if (segment->format == GST_FORMAT_BYTES) + pixbuf->packetized = FALSE; + else + pixbuf->packetized = TRUE; if (pixbuf->pixbuf_loader != NULL) { gdk_pixbuf_loader_close (pixbuf->pixbuf_loader, NULL); g_object_unref (G_OBJECT (pixbuf->pixbuf_loader)); pixbuf->pixbuf_loader = NULL; } break; + } default: break; } @@ -482,9 +491,7 @@ gst_gdk_pixbuf_dec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) &error)) goto error; - /* packetised mode? *//* FIXME: shouln't this be fps_d != 0, since 0/1 - * might be packetised mode but variable framerate */ - if (filter->in_fps_n != 0) { + if (filter->packetized == TRUE) { gdk_pixbuf_loader_close (filter->pixbuf_loader, NULL); ret = gst_gdk_pixbuf_dec_flush (filter); g_object_unref (filter->pixbuf_loader); diff --git a/ext/gdk_pixbuf/gstgdkpixbufdec.h b/ext/gdk_pixbuf/gstgdkpixbufdec.h index 832a30b410..4b12f48f0f 100644 --- a/ext/gdk_pixbuf/gstgdkpixbufdec.h +++ b/ext/gdk_pixbuf/gstgdkpixbufdec.h @@ -47,14 +47,15 @@ struct _GstGdkPixbufDec GstPad *sinkpad, *srcpad; - GstClockTime last_timestamp; - GdkPixbufLoader *pixbuf_loader; + GstClockTime last_timestamp; + GdkPixbufLoader *pixbuf_loader; gint in_fps_n, in_fps_d; - GstVideoInfo info; + GstVideoInfo info; GstBufferPool *pool; - GList *pending_events; + GList *pending_events; + gboolean packetized; }; struct _GstGdkPixbufDecClass