[gst-cvs] gst-plugins-base: adder: add support for negative playback rates
Stefan Kost
ensonic at kemper.freedesktop.org
Sun Apr 11 13:25:45 PDT 2010
Module: gst-plugins-base
Branch: master
Commit: 57cc1150a9f8ded33f7d0f47dd713b9eda05dc88
URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-base/commit/?id=57cc1150a9f8ded33f7d0f47dd713b9eda05dc88
Author: Stefan Kost <ensonic at users.sf.net>
Date: Sun Apr 11 22:58:15 2010 +0300
adder: add support for negative playback rates
Decrement sample counter when playing backwards. Set proper segment when playing
backwards (0..cur instead or cur..-1). Add more logging and fix a format string.
---
gst/adder/gstadder.c | 22 ++++++++++++++++++----
1 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/gst/adder/gstadder.c b/gst/adder/gstadder.c
index 8d0b300..7958721 100644
--- a/gst/adder/gstadder.c
+++ b/gst/adder/gstadder.c
@@ -1197,8 +1197,18 @@ gst_adder_collected (GstCollectPads * pads, gpointer user_data)
* the later streams would be delayed until the stream times
* match.
*/
- event = gst_event_new_new_segment_full (FALSE, adder->segment_rate,
- 1.0, GST_FORMAT_TIME, adder->timestamp, -1, adder->segment_position);
+ if (adder->segment_rate > 0.0) {
+ event = gst_event_new_new_segment_full (FALSE, adder->segment_rate,
+ 1.0, GST_FORMAT_TIME, adder->timestamp, GST_CLOCK_TIME_NONE,
+ adder->segment_position);
+ } else {
+ event = gst_event_new_new_segment_full (FALSE, adder->segment_rate,
+ 1.0, GST_FORMAT_TIME, G_GINT64_CONSTANT (0), adder->timestamp,
+ adder->segment_position);
+ }
+ GST_INFO_OBJECT (adder->srcpad, "new segment event for "
+ "rate:%lf start:%" G_GINT64_FORMAT " cur:%" G_GUINT64_FORMAT,
+ adder->segment_rate, adder->timestamp, adder->segment_position);
if (event) {
if (!gst_pad_push_event (adder->srcpad, event)) {
@@ -1209,7 +1219,7 @@ gst_adder_collected (GstCollectPads * pads, gpointer user_data)
adder->segment_position = 0;
} else {
GST_WARNING_OBJECT (adder->srcpad, "Creating new segment event for "
- "start:%" G_GINT64_FORMAT " pos:%" G_GINT64_FORMAT " failed",
+ "start:%" G_GINT64_FORMAT " pos:%" G_GUINT64_FORMAT " failed",
adder->timestamp, adder->segment_position);
}
}
@@ -1233,7 +1243,11 @@ gst_adder_collected (GstCollectPads * pads, gpointer user_data)
/* for the next timestamp, use the sample counter, which will
* never accumulate rounding errors */
- adder->offset += outsize / adder->bps;
+ if (adder->segment_rate > 0.0) {
+ adder->offset += outsize / adder->bps;
+ } else {
+ adder->offset -= outsize / adder->bps;
+ }
adder->timestamp = gst_util_uint64_scale_int (adder->offset,
GST_SECOND, adder->rate);
More information about the Gstreamer-commits
mailing list