diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2016-09-17 12:42:46 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2016-09-17 07:19:14 -0400 |
commit | 031f2565845a625524c8bc945bd15ea674bb1285 (patch) | |
tree | 58308919b45aa12638a05241840804cf15ef0920 /gst/audiotestsrc | |
parent | cf18fae9deb02f0867b67593f678b932f8eb931a (diff) | |
download | gstreamer-plugins-base-031f2565845a625524c8bc945bd15ea674bb1285.tar.gz |
audiotestsrc: Fix segment boundary checking for reverse playback
Diffstat (limited to 'gst/audiotestsrc')
-rw-r--r-- | gst/audiotestsrc/gstaudiotestsrc.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/gst/audiotestsrc/gstaudiotestsrc.c b/gst/audiotestsrc/gstaudiotestsrc.c index 252c416c1..d00c1c698 100644 --- a/gst/audiotestsrc/gstaudiotestsrc.c +++ b/gst/audiotestsrc/gstaudiotestsrc.c @@ -1123,11 +1123,16 @@ gst_audio_test_src_do_seek (GstBaseSrc * basesrc, GstSegment * segment) src->next_sample = next_sample; - if (GST_CLOCK_TIME_IS_VALID (segment->stop)) { + if (segment->rate > 0 && GST_CLOCK_TIME_IS_VALID (segment->stop)) { time = segment->stop; src->sample_stop = gst_util_uint64_scale_round (time, samplerate, GST_SECOND); src->check_seek_stop = TRUE; + } else if (segment->rate < 0) { + time = segment->start; + src->sample_stop = + gst_util_uint64_scale_round (time, samplerate, GST_SECOND); + src->check_seek_stop = TRUE; } else { src->check_seek_stop = FALSE; } @@ -1202,7 +1207,7 @@ gst_audio_test_src_fill (GstBaseSrc * basesrc, guint64 offset, } /* check for eos */ - if (src->check_seek_stop && + if (src->check_seek_stop && !src->reverse && (src->sample_stop > src->next_sample) && (src->sample_stop < src->next_sample + samples) ) { @@ -1210,6 +1215,13 @@ gst_audio_test_src_fill (GstBaseSrc * basesrc, guint64 offset, src->generate_samples_per_buffer = src->sample_stop - src->next_sample; next_sample = src->sample_stop; src->eos_reached = TRUE; + } else if (src->check_seek_stop && src->reverse && + (src->sample_stop > src->next_sample) + ) { + /* calculate only partial buffer */ + src->generate_samples_per_buffer = src->sample_stop - src->next_sample; + next_sample = src->sample_stop; + src->eos_reached = TRUE; } else { /* calculate full buffer */ src->generate_samples_per_buffer = samples; |