From 9286f126e2805888724348b950d380f6dd153928 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 13 Jun 2002 22:27:40 +0000 Subject: [PATCH] Added a size event to optimize buffer sizes make filesrc update its blocksize when it receives a size event Original commit message from CVS: Added a size event to optimize buffer sizes make filesrc update its blocksize when it receives a size event --- gst/elements/gstfilesrc.c | 7 +++++++ gst/gstevent.c | 12 ++++++++++++ gst/gstevent.h | 11 +++++++++++ plugins/elements/gstfilesrc.c | 7 +++++++ 4 files changed, 37 insertions(+) diff --git a/gst/elements/gstfilesrc.c b/gst/elements/gstfilesrc.c index f06484a..de5d971 100644 --- a/gst/elements/gstfilesrc.c +++ b/gst/elements/gstfilesrc.c @@ -727,6 +727,13 @@ gst_filesrc_srcpad_event (GstPad *pad, GstEvent *event) src->seek_happened = TRUE; src->need_flush = GST_EVENT_SEEK_FLAGS(event) & GST_SEEK_FLAG_FLUSH; break; + case GST_EVENT_SIZE: + if (GST_EVENT_SIZE_FORMAT (event) != GST_FORMAT_BYTES) { + return FALSE; + } + src->block_size = GST_EVENT_SIZE_VALUE (event); + g_object_notify (G_OBJECT (src), "blocksize"); + break; case GST_EVENT_FLUSH: src->need_flush = TRUE; break; diff --git a/gst/gstevent.c b/gst/gstevent.c index eb5cb4a..65a0d86 100644 --- a/gst/gstevent.c +++ b/gst/gstevent.c @@ -235,5 +235,17 @@ gst_event_discont_get_value (GstEvent *event, GstFormat format, gint64 *value) } +GstEvent* +gst_event_new_size (GstFormat format, gint64 value) +{ + GstEvent *event; + + event = gst_event_new (GST_EVENT_SIZE); + GST_EVENT_SIZE_FORMAT (event) = format; + GST_EVENT_SIZE_VALUE (event) = value; + + return event; +} + diff --git a/gst/gstevent.h b/gst/gstevent.h index 4f5e732..b54f9d5 100644 --- a/gst/gstevent.h +++ b/gst/gstevent.h @@ -41,6 +41,7 @@ typedef enum { GST_EVENT_QOS, GST_EVENT_SEEK, GST_EVENT_FILLER, + GST_EVENT_SIZE, } GstEventType; extern GType _gst_event_type; @@ -93,6 +94,9 @@ typedef struct #define GST_EVENT_DISCONT_OFFSET(event,i) (GST_EVENT(event)->event_data.discont.offsets[i]) #define GST_EVENT_DISCONT_OFFSET_LEN(event) (GST_EVENT(event)->event_data.discont.noffsets) +#define GST_EVENT_SIZE_FORMAT(event) (GST_EVENT(event)->event_data.size.format) +#define GST_EVENT_SIZE_VALUE(event) (GST_EVENT(event)->event_data.size.value) + struct _GstEvent { GstData data; @@ -111,6 +115,10 @@ struct _GstEvent { gint noffsets; gboolean new_media; } discont; + struct { + GstFormat format; + gint64 value; + } size; } event_data; }; @@ -123,6 +131,9 @@ void gst_event_free (GstEvent *event); /* seek event */ GstEvent* gst_event_new_seek (GstSeekType type, gint64 offset); +/* size events */ +GstEvent* gst_event_new_size (GstFormat format, gint64 value); + /* discontinous event */ GstEvent* gst_event_new_discontinuous (gboolean new_media, GstFormat format1, ...); diff --git a/plugins/elements/gstfilesrc.c b/plugins/elements/gstfilesrc.c index f06484a..de5d971 100644 --- a/plugins/elements/gstfilesrc.c +++ b/plugins/elements/gstfilesrc.c @@ -727,6 +727,13 @@ gst_filesrc_srcpad_event (GstPad *pad, GstEvent *event) src->seek_happened = TRUE; src->need_flush = GST_EVENT_SEEK_FLAGS(event) & GST_SEEK_FLAG_FLUSH; break; + case GST_EVENT_SIZE: + if (GST_EVENT_SIZE_FORMAT (event) != GST_FORMAT_BYTES) { + return FALSE; + } + src->block_size = GST_EVENT_SIZE_VALUE (event); + g_object_notify (G_OBJECT (src), "blocksize"); + break; case GST_EVENT_FLUSH: src->need_flush = TRUE; break; -- 2.7.4