summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2010-02-09 17:39:21 +0100
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2010-02-12 11:00:08 +0100
commitb5fd5953d1f5fe54f2c6a1dadf8f22bd70bd776b (patch)
treec63a68f5e919f03e13511558ae2613715b6c3e2a
parent6d03489813cf6accacce838bf3972428c4ea978a (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.c13
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));
}
/**