diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2010-02-09 17:39:21 +0100 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2010-02-12 11:00:08 +0100 |
commit | b5fd5953d1f5fe54f2c6a1dadf8f22bd70bd776b (patch) | |
tree | c63a68f5e919f03e13511558ae2613715b6c3e2a | |
parent | 6d03489813cf6accacce838bf3972428c4ea978a (diff) |
appsrc: Update segment duration and post a duration message if the duration changes
Fixes bug #609423.
-rw-r--r-- | gst-libs/gst/app/gstappsrc.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/gst-libs/gst/app/gstappsrc.c b/gst-libs/gst/app/gstappsrc.c index 32a05962..6b9512be 100644 --- a/gst-libs/gst/app/gstappsrc.c +++ b/gst-libs/gst/app/gstappsrc.c @@ -1049,13 +1049,26 @@ gst_app_src_get_caps (GstAppSrc * appsrc) void gst_app_src_set_size (GstAppSrc * appsrc, gint64 size) { + GstSegment *segment; + gboolean bytes_segment; + g_return_if_fail (appsrc != NULL); g_return_if_fail (GST_IS_APP_SRC (appsrc)); GST_OBJECT_LOCK (appsrc); GST_DEBUG_OBJECT (appsrc, "setting size of %" G_GINT64_FORMAT, size); appsrc->priv->size = size; + + segment = &GST_BASE_SRC_CAST (appsrc)->segment; + bytes_segment = (segment->format == GST_FORMAT_BYTES); + + if (bytes_segment) + gst_segment_set_duration (segment, GST_FORMAT_BYTES, size); GST_OBJECT_UNLOCK (appsrc); + + if (bytes_segment) + gst_element_post_message (GST_ELEMENT (appsrc), + gst_message_new_duration (GST_OBJECT (appsrc), GST_FORMAT_BYTES, size)); } /** |