diff options
author | Carlos Rafael Giani <dv@pseudoterminal.org> | 2016-09-02 15:23:18 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2017-01-09 15:41:18 +0200 |
commit | b9702f6f8ec2035f836000279ad6984b9dafd276 (patch) | |
tree | 29a0973157a9627a64e4b4dfa12ddc8abbcf868f | |
parent | cd8c5a12484ac32178757965e8e5a27664b59f6c (diff) | |
download | gstreamer-plugins-base-b9702f6f8ec2035f836000279ad6984b9dafd276.tar.gz |
audiotestsrc: Fix incorrect start of tick waveform
Make sure ticks start with an accumulator value of 0 by incrementing it
after filling in samples instead of before and by resetting the accumulator
every time a tick begins. This prevents it from being discontinuous at the
beginning of the tick.
https://bugzilla.gnome.org/show_bug.cgi?id=774050
-rw-r--r-- | gst/audiotestsrc/gstaudiotestsrc.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/gst/audiotestsrc/gstaudiotestsrc.c b/gst/audiotestsrc/gstaudiotestsrc.c index d00c1c698..51b25907d 100644 --- a/gst/audiotestsrc/gstaudiotestsrc.c +++ b/gst/audiotestsrc/gstaudiotestsrc.c @@ -735,7 +735,7 @@ static const ProcessFunc sine_table_funcs[] = { static void \ gst_audio_test_src_create_tick_##type (GstAudioTestSrc * src, g##type * samples) \ { \ - gint i, c, channels, samplerate; \ + gint i, c, channels, samplerate, samplemod; \ gdouble step, scl; \ \ channels = GST_AUDIO_INFO_CHANNELS (&src->info); \ @@ -744,17 +744,20 @@ gst_audio_test_src_create_tick_##type (GstAudioTestSrc * src, g##type * samples) scl = 1024.0 / M_PI_M2; \ \ for (i = 0; i < src->generate_samples_per_buffer; i++) { \ - src->accumulator += step; \ - if (src->accumulator >= M_PI_M2) \ - src->accumulator -= M_PI_M2; \ - \ - if ((src->next_sample + i)%samplerate < 1600) { \ + samplemod = (src->next_sample + i) % samplerate; \ + if (samplemod == 0) { \ + src->accumulator = 0; \ + } else if (samplemod < 1600) { \ for (c = 0; c < channels; ++c) \ samples[(i * channels) + c] = (g##type) scale * src->wave_table[(gint) (src->accumulator * scl)]; \ } else { \ for (c = 0; c < channels; ++c) \ samples[(i * channels) + c] = 0; \ } \ + \ + src->accumulator += step; \ + if (src->accumulator >= M_PI_M2) \ + src->accumulator -= M_PI_M2; \ } \ } |