summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Rafael Giani <dv@pseudoterminal.org>2016-09-02 15:23:18 +0200
committerSebastian Dröge <sebastian@centricular.com>2017-01-09 15:41:18 +0200
commitb9702f6f8ec2035f836000279ad6984b9dafd276 (patch)
tree29a0973157a9627a64e4b4dfa12ddc8abbcf868f
parentcd8c5a12484ac32178757965e8e5a27664b59f6c (diff)
downloadgstreamer-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.c15
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; \
} \
}