From 89b9313e200b8de8d34241a1119340af84f518c1 Mon Sep 17 00:00:00 2001 From: Vineeth T M Date: Tue, 16 Sep 2014 16:46:07 +0530 Subject: [PATCH] gdkpixbufdec: modify wrong packetized mode logic packetized mode is being set when framerate is being set which is not correct. Changing the same by checking the input segement format. If input segment is in TIME it is Packetized, and if it is in BYTES it is not. https://bugzilla.gnome.org/show_bug.cgi?id=736252 --- ext/gdk_pixbuf/gstgdkpixbufdec.c | 13 ++++++++++--- ext/gdk_pixbuf/gstgdkpixbufdec.h | 9 +++++---- 2 files changed, 15 insertions(+), 7 deletions(-) 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