add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
/* GStreamer
|
|
|
|
* Copyright (C) 2005 Stefan Kost <ensonic@users.sf.net>
|
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Library General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Library General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Library General Public
|
|
|
|
* License along with this library; if not, write to the
|
2012-11-03 23:05:09 +00:00
|
|
|
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
|
|
|
* Boston, MA 02110-1301, USA.
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
*/
|
|
|
|
/**
|
|
|
|
* SECTION:element-audiotestsrc
|
2017-01-23 19:36:11 +00:00
|
|
|
* @title: audiotestsrc
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
*
|
|
|
|
* AudioTestSrc can be used to generate basic audio signals. It support several
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
* different waveforms and allows to set the base frequency and volume. Some
|
|
|
|
* waveforms might use additional properties.
|
|
|
|
*
|
|
|
|
* Waveform specific notes:
|
|
|
|
*
|
2019-05-29 23:12:59 +00:00
|
|
|
* ## Gaussian white noise
|
|
|
|
*
|
|
|
|
* This waveform produces white (zero mean) Gaussian noise.
|
|
|
|
* Volume sets the standard deviation of the noise in units of the range
|
|
|
|
* of values of the sample type, e.g. volume=0.1 produces noise with a
|
|
|
|
* standard deviation of 0.1*32767=3277 with 16-bit integer samples,
|
|
|
|
* or 0.1*1.0=0.1 with floating-point samples.
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
*
|
2019-05-29 23:12:59 +00:00
|
|
|
* ## Ticks
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
*
|
2019-05-29 23:12:59 +00:00
|
|
|
* This waveform is special in that it does not produce one continuous
|
|
|
|
* signal. Instead, it produces finite-length sine wave pulses (the "ticks").
|
|
|
|
* It is useful for detecting time shifts between audio signal, for example
|
|
|
|
* between RTSP audio clients that shall play synchronized. It is also useful
|
|
|
|
* for generating a signal that feeds the trigger of an oscilloscope.
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
*
|
2019-05-29 23:12:59 +00:00
|
|
|
* To further help with oscilloscope triggering and time offset detection,
|
|
|
|
* the waveform can apply a different volume to every Nth tick (this is then
|
|
|
|
* called the "marker tick"). For instance, one could generate a tick every
|
|
|
|
* 100ms, and make every 20th tick a marker tick (meaning that every 2 seconds
|
|
|
|
* there is a marker tick). This is useful for detecting large time offsets
|
|
|
|
* while still frequently triggering an oscilloscope.
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
*
|
2019-05-29 23:12:59 +00:00
|
|
|
* Also, a "ramp" can be applied to the begin & end of ticks. The sudden
|
|
|
|
* start of the sine tick is a discontinuity, even if the sine wave starts
|
|
|
|
* at 0. The* resulting artifacts can often make it more difficult to use the
|
|
|
|
* ticks for an oscilloscope's trigger. To that end, an initial "ramp" can
|
|
|
|
* be applied. The first few samples are modulated by a cubic function to
|
|
|
|
* reduce the impact of the discontinuity, resulting in smaller artifacts.
|
|
|
|
* The number of samples equals floor(samplerate / sine-wave-frequency).
|
|
|
|
* Example: with a sample rate of 48 kHz and a sine wave frequency of 10 kHz,
|
|
|
|
* the first 4 samples are modulated by the cubic function.
|
2008-07-10 21:06:06 +00:00
|
|
|
*
|
2017-01-23 19:36:11 +00:00
|
|
|
* ## Example launch line
|
2008-07-10 21:06:06 +00:00
|
|
|
* |[
|
2015-05-09 21:33:26 +00:00
|
|
|
* gst-launch-1.0 audiotestsrc ! audioconvert ! autoaudiosink
|
2017-01-23 19:36:11 +00:00
|
|
|
* ]|
|
|
|
|
* This pipeline produces a sine with default frequency, 440 Hz, and the
|
2008-08-04 09:11:08 +00:00
|
|
|
* default volume, 0.8 (relative to a maximum 1.0).
|
2008-07-10 21:06:06 +00:00
|
|
|
* |[
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
* gst-launch-1.0 audiotestsrc wave=2 freq=200 ! tee name=t ! queue ! audioconvert ! \
|
|
|
|
* autoaudiosink t. ! queue ! audioconvert ! libvisual_lv_scope ! videoconvert ! autovideosink
|
2017-01-23 19:36:11 +00:00
|
|
|
* ]|
|
|
|
|
* In this example a saw wave is generated. The wave is shown using a
|
2005-10-17 15:37:45 +00:00
|
|
|
* scope visualizer from libvisual, allowing you to visually verify that
|
|
|
|
* the saw wave is correct.
|
2017-01-23 19:36:11 +00:00
|
|
|
*
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
* |[
|
|
|
|
* gst-launch-1.0 audiotestsrc wave=ticks apply-tick-ramp=true tick-interval=100000000 \
|
|
|
|
* freq=10000 volume=0.4 marker-tick-period=10 sine-periods-per-tick=20 ! autoaudiosink
|
|
|
|
* ]| This pipeline produces a series of 10 kHz sine wave ticks. Each tick is
|
|
|
|
* 20 sine wave periods long, ticks occur every 100 ms and have a volume of
|
|
|
|
* 0.4. Every 10th tick is a marker tick and has the default marker tick volume
|
|
|
|
* of 1.0. The beginning and end of the ticks are modulated with the ramp.
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
#include "config.h"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include <math.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
#include "gstaudiotestsrc.h"
|
|
|
|
|
2006-02-28 21:21:07 +00:00
|
|
|
|
2011-06-01 05:14:09 +00:00
|
|
|
#define M_PI_M2 ( G_PI + G_PI )
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2007-02-12 20:42:23 +00:00
|
|
|
GST_DEBUG_CATEGORY_STATIC (audio_test_src_debug);
|
|
|
|
#define GST_CAT_DEFAULT audio_test_src_debug
|
|
|
|
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
#define DEFAULT_SAMPLES_PER_BUFFER 1024
|
|
|
|
#define DEFAULT_WAVE GST_AUDIO_TEST_SRC_WAVE_SINE
|
|
|
|
#define DEFAULT_FREQ 440.0
|
|
|
|
#define DEFAULT_VOLUME 0.8
|
|
|
|
#define DEFAULT_IS_LIVE FALSE
|
|
|
|
#define DEFAULT_TIMESTAMP_OFFSET G_GINT64_CONSTANT (0)
|
|
|
|
#define DEFAULT_SINE_PERIODS_PER_TICK 10
|
|
|
|
#define DEFAULT_TIME_BETWEEN_TICKS GST_SECOND
|
|
|
|
#define DEFAULT_MARKER_TICK_PERIOD 0
|
|
|
|
#define DEFAULT_MARKER_TICK_VOLUME 1.0
|
|
|
|
#define DEFAULT_APPLY_TICK_RAMP FALSE
|
|
|
|
#define DEFAULT_CAN_ACTIVATE_PUSH TRUE
|
|
|
|
#define DEFAULT_CAN_ACTIVATE_PULL FALSE
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
|
|
|
enum
|
|
|
|
{
|
|
|
|
PROP_0,
|
|
|
|
PROP_SAMPLES_PER_BUFFER,
|
|
|
|
PROP_WAVE,
|
|
|
|
PROP_FREQ,
|
|
|
|
PROP_VOLUME,
|
|
|
|
PROP_IS_LIVE,
|
|
|
|
PROP_TIMESTAMP_OFFSET,
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
PROP_SINE_PERIODS_PER_TICK,
|
|
|
|
PROP_TICK_INTERVAL,
|
|
|
|
PROP_MARKER_TICK_PERIOD,
|
|
|
|
PROP_MARKER_TICK_VOLUME,
|
|
|
|
PROP_APPLY_TICK_RAMP,
|
2009-01-05 10:59:35 +00:00
|
|
|
PROP_CAN_ACTIVATE_PUSH,
|
2015-04-24 16:10:59 +00:00
|
|
|
PROP_CAN_ACTIVATE_PULL
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
};
|
|
|
|
|
2015-11-02 12:19:09 +00:00
|
|
|
#define FORMAT_STR " { S16LE, S16BE, U16LE, U16BE, " \
|
|
|
|
"S24_32LE, S24_32BE, U24_32LE, U24_32BE, " \
|
|
|
|
"S32LE, S32BE, U32LE, U32BE, " \
|
|
|
|
"S24LE, S24BE, U24LE, U24BE, " \
|
|
|
|
"S20LE, S20BE, U20LE, U20BE, " \
|
|
|
|
"S18LE, S18BE, U18LE, U18BE, " \
|
|
|
|
"F32LE, F32BE, F64LE, F64BE, " \
|
|
|
|
"S8, U8 }"
|
|
|
|
|
|
|
|
#define DEFAULT_FORMAT_STR GST_AUDIO_NE ("S16")
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2005-12-01 01:12:55 +00:00
|
|
|
static GstStaticPadTemplate gst_audio_test_src_src_template =
|
2013-03-12 07:10:23 +00:00
|
|
|
GST_STATIC_PAD_TEMPLATE ("src",
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
GST_PAD_SRC,
|
|
|
|
GST_PAD_ALWAYS,
|
2011-08-18 17:15:03 +00:00
|
|
|
GST_STATIC_CAPS ("audio/x-raw, "
|
|
|
|
"format = (string) " FORMAT_STR ", "
|
2018-01-31 15:39:05 +00:00
|
|
|
"layout = (string) { interleaved, non-interleaved }, "
|
2015-11-02 12:19:09 +00:00
|
|
|
"rate = " GST_AUDIO_RATE_RANGE ", "
|
|
|
|
"channels = " GST_AUDIO_CHANNELS_RANGE)
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
);
|
|
|
|
|
2011-04-19 09:35:53 +00:00
|
|
|
#define gst_audio_test_src_parent_class parent_class
|
|
|
|
G_DEFINE_TYPE (GstAudioTestSrc, gst_audio_test_src, GST_TYPE_BASE_SRC);
|
2021-03-29 12:07:00 +00:00
|
|
|
GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (audiotestsrc, "audiotestsrc",
|
|
|
|
GST_RANK_NONE, GST_TYPE_AUDIO_TEST_SRC,
|
|
|
|
GST_DEBUG_CATEGORY_INIT (audio_test_src_debug, "audiotestsrc", 0,
|
|
|
|
"Audio Test Source"));
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2005-12-01 01:12:55 +00:00
|
|
|
#define GST_TYPE_AUDIO_TEST_SRC_WAVE (gst_audiostestsrc_wave_get_type())
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
static GType
|
|
|
|
gst_audiostestsrc_wave_get_type (void)
|
|
|
|
{
|
|
|
|
static GType audiostestsrc_wave_type = 0;
|
Const-ify GEnumValue and GFlagsValue arrays. Use
Original commit message from CVS:
* ext/pango/gsttextoverlay.c: (gst_text_overlay_valign_get_type),
(gst_text_overlay_halign_get_type),
(gst_text_overlay_wrap_mode_get_type):
* ext/theora/theoradec.c: (theora_handle_type_packet),
(theora_handle_data_packet):
* ext/theora/theoraenc.c: (gst_border_mode_get_type),
(theora_enc_sink_setcaps), (theora_enc_chain):
* gst-libs/gst/cdda/gstcddabasesrc.c:
(gst_cdda_base_src_mode_get_type):
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type):
* gst/playback/gststreaminfo.c: (gst_stream_type_get_type):
* gst/tcp/gstfdset.c: (gst_fdset_mode_get_type):
* gst/tcp/gstmultifdsink.c: (gst_recover_policy_get_type),
(gst_sync_method_get_type), (gst_unit_type_get_type),
(gst_client_status_get_type):
* gst/videoscale/gstvideoscale.c:
(gst_video_scale_method_get_type):
* gst/videotestsrc/gstvideotestsrc.c:
(gst_video_test_src_pattern_get_type):
* gst/videotestsrc/videotestsrc.c: (paint_setup_I420),
(paint_setup_YV12), (paint_setup_YUY2), (paint_setup_UYVY),
(paint_setup_YVYU), (paint_setup_IYU2), (paint_setup_Y41B),
(paint_setup_Y42B), (paint_setup_Y800), (paint_setup_YVU9),
(paint_setup_YUV9), (paint_setup_RGB888), (paint_setup_BGR888),
(paint_setup_RGB565), (paint_setup_xRGB1555):
Const-ify GEnumValue and GFlagsValue arrays. Use
GST_ROUND_UP_* macros instead of home-made ones.
2006-05-09 19:24:46 +00:00
|
|
|
static const GEnumValue audiostestsrc_waves[] = {
|
2005-12-01 01:12:55 +00:00
|
|
|
{GST_AUDIO_TEST_SRC_WAVE_SINE, "Sine", "sine"},
|
|
|
|
{GST_AUDIO_TEST_SRC_WAVE_SQUARE, "Square", "square"},
|
|
|
|
{GST_AUDIO_TEST_SRC_WAVE_SAW, "Saw", "saw"},
|
|
|
|
{GST_AUDIO_TEST_SRC_WAVE_TRIANGLE, "Triangle", "triangle"},
|
|
|
|
{GST_AUDIO_TEST_SRC_WAVE_SILENCE, "Silence", "silence"},
|
2009-06-21 10:27:37 +00:00
|
|
|
{GST_AUDIO_TEST_SRC_WAVE_WHITE_NOISE, "White uniform noise", "white-noise"},
|
2005-12-01 01:12:55 +00:00
|
|
|
{GST_AUDIO_TEST_SRC_WAVE_PINK_NOISE, "Pink noise", "pink-noise"},
|
2009-05-12 16:18:37 +00:00
|
|
|
{GST_AUDIO_TEST_SRC_WAVE_SINE_TAB, "Sine table", "sine-table"},
|
2008-07-17 02:30:24 +00:00
|
|
|
{GST_AUDIO_TEST_SRC_WAVE_TICKS, "Periodic Ticks", "ticks"},
|
2009-06-21 10:27:37 +00:00
|
|
|
{GST_AUDIO_TEST_SRC_WAVE_GAUSSIAN_WHITE_NOISE, "White Gaussian noise",
|
2009-06-21 17:42:15 +00:00
|
|
|
"gaussian-noise"},
|
2011-05-25 20:40:26 +00:00
|
|
|
{GST_AUDIO_TEST_SRC_WAVE_RED_NOISE, "Red (brownian) noise", "red-noise"},
|
2011-05-25 21:17:40 +00:00
|
|
|
{GST_AUDIO_TEST_SRC_WAVE_BLUE_NOISE, "Blue noise", "blue-noise"},
|
|
|
|
{GST_AUDIO_TEST_SRC_WAVE_VIOLET_NOISE, "Violet noise", "violet-noise"},
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
{0, NULL, NULL},
|
|
|
|
};
|
|
|
|
|
2006-03-24 10:42:11 +00:00
|
|
|
if (G_UNLIKELY (audiostestsrc_wave_type == 0)) {
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
audiostestsrc_wave_type = g_enum_register_static ("GstAudioTestSrcWave",
|
|
|
|
audiostestsrc_waves);
|
|
|
|
}
|
|
|
|
return audiostestsrc_wave_type;
|
|
|
|
}
|
|
|
|
|
2011-02-18 21:27:23 +00:00
|
|
|
static void gst_audio_test_src_finalize (GObject * object);
|
|
|
|
|
2005-12-01 01:12:55 +00:00
|
|
|
static void gst_audio_test_src_set_property (GObject * object,
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
guint prop_id, const GValue * value, GParamSpec * pspec);
|
2005-12-01 01:12:55 +00:00
|
|
|
static void gst_audio_test_src_get_property (GObject * object,
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
guint prop_id, GValue * value, GParamSpec * pspec);
|
|
|
|
|
2005-12-01 01:12:55 +00:00
|
|
|
static gboolean gst_audio_test_src_setcaps (GstBaseSrc * basesrc,
|
|
|
|
GstCaps * caps);
|
2012-03-11 18:04:41 +00:00
|
|
|
static GstCaps *gst_audio_test_src_fixate (GstBaseSrc * bsrc, GstCaps * caps);
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2005-12-14 20:42:11 +00:00
|
|
|
static gboolean gst_audio_test_src_is_seekable (GstBaseSrc * basesrc);
|
|
|
|
static gboolean gst_audio_test_src_do_seek (GstBaseSrc * basesrc,
|
|
|
|
GstSegment * segment);
|
gst/audiotestsrc/gstaudiotestsrc.*: update to basesrc changes, implement segmented seeking and eos handling, add a 's...
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audio_test_src_class_init),
(gst_audio_test_src_init), (gst_audio_test_src_src_fixate),
(gst_audio_test_src_query), (gst_audio_test_src_create_sine),
(gst_audio_test_src_create_square),
(gst_audio_test_src_create_saw),
(gst_audio_test_src_create_triangle),
(gst_audio_test_src_create_silence),
(gst_audio_test_src_create_white_noise),
(gst_audio_test_src_create_pink_noise),
(gst_audio_test_src_init_sine_table),
(gst_audio_test_src_create_sine_table),
(gst_audio_test_src_change_wave),
(gst_audio_test_src_change_volume), (gst_audio_test_src_do_seek),
(gst_audio_test_src_create), (gst_audio_test_src_set_property):
* gst/audiotestsrc/gstaudiotestsrc.h:
update to basesrc changes, implement segmented seeking and eos handling,
add a 'sine-tab' waveform for performance critical playback
2005-12-29 20:37:23 +00:00
|
|
|
static gboolean gst_audio_test_src_query (GstBaseSrc * basesrc,
|
2011-05-17 09:25:31 +00:00
|
|
|
GstQuery * query);
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2005-12-01 01:12:55 +00:00
|
|
|
static void gst_audio_test_src_change_wave (GstAudioTestSrc * src);
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2005-12-01 01:12:55 +00:00
|
|
|
static void gst_audio_test_src_get_times (GstBaseSrc * basesrc,
|
2005-11-10 14:58:41 +00:00
|
|
|
GstBuffer * buffer, GstClockTime * start, GstClockTime * end);
|
2008-10-10 15:45:15 +00:00
|
|
|
static gboolean gst_audio_test_src_start (GstBaseSrc * basesrc);
|
|
|
|
static gboolean gst_audio_test_src_stop (GstBaseSrc * basesrc);
|
2011-08-25 11:21:14 +00:00
|
|
|
static GstFlowReturn gst_audio_test_src_fill (GstBaseSrc * basesrc,
|
|
|
|
guint64 offset, guint length, GstBuffer * buffer);
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
|
|
|
static void
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_audio_test_src_class_init (GstAudioTestSrcClass * klass)
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
{
|
|
|
|
GObjectClass *gobject_class;
|
2011-04-19 09:35:53 +00:00
|
|
|
GstElementClass *gstelement_class;
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
GstBaseSrcClass *gstbasesrc_class;
|
|
|
|
|
|
|
|
gobject_class = (GObjectClass *) klass;
|
2011-04-19 09:35:53 +00:00
|
|
|
gstelement_class = (GstElementClass *) klass;
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
gstbasesrc_class = (GstBaseSrcClass *) klass;
|
|
|
|
|
2005-12-01 01:12:55 +00:00
|
|
|
gobject_class->set_property = gst_audio_test_src_set_property;
|
|
|
|
gobject_class->get_property = gst_audio_test_src_get_property;
|
2011-02-18 21:27:23 +00:00
|
|
|
gobject_class->finalize = gst_audio_test_src_finalize;
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
|
|
|
g_object_class_install_property (gobject_class, PROP_SAMPLES_PER_BUFFER,
|
|
|
|
g_param_spec_int ("samplesperbuffer", "Samples per buffer",
|
|
|
|
"Number of samples in each outgoing buffer",
|
2008-10-10 15:45:15 +00:00
|
|
|
1, G_MAXINT, DEFAULT_SAMPLES_PER_BUFFER,
|
|
|
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
|
|
|
g_object_class_install_property (gobject_class, PROP_WAVE,
|
|
|
|
g_param_spec_enum ("wave", "Waveform", "Oscillator waveform",
|
|
|
|
GST_TYPE_AUDIO_TEST_SRC_WAVE, GST_AUDIO_TEST_SRC_WAVE_SINE,
|
2008-03-22 15:00:53 +00:00
|
|
|
G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
g_object_class_install_property (gobject_class, PROP_FREQ,
|
2015-11-02 14:54:19 +00:00
|
|
|
g_param_spec_double ("freq", "Frequency", "Frequency of test signal. "
|
2019-05-17 13:35:40 +00:00
|
|
|
"The sample rate needs to be at least 2 times higher.",
|
|
|
|
0.0, (gdouble) G_MAXINT / 2, DEFAULT_FREQ,
|
2008-03-22 15:00:53 +00:00
|
|
|
G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
g_object_class_install_property (gobject_class, PROP_VOLUME,
|
2008-03-22 15:00:53 +00:00
|
|
|
g_param_spec_double ("volume", "Volume", "Volume of test signal", 0.0,
|
2008-10-10 15:45:15 +00:00
|
|
|
1.0, DEFAULT_VOLUME,
|
2008-03-22 15:00:53 +00:00
|
|
|
G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
g_object_class_install_property (gobject_class, PROP_IS_LIVE,
|
|
|
|
g_param_spec_boolean ("is-live", "Is Live",
|
2008-10-10 15:45:15 +00:00
|
|
|
"Whether to act as a live source", DEFAULT_IS_LIVE,
|
2008-03-22 15:00:53 +00:00
|
|
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
g_object_class_install_property (G_OBJECT_CLASS (klass),
|
2008-03-22 15:00:53 +00:00
|
|
|
PROP_TIMESTAMP_OFFSET, g_param_spec_int64 ("timestamp-offset",
|
|
|
|
"Timestamp offset",
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
"An offset added to timestamps set on buffers (in ns)", G_MININT64,
|
2008-10-10 15:45:15 +00:00
|
|
|
G_MAXINT64, DEFAULT_TIMESTAMP_OFFSET,
|
|
|
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
g_object_class_install_property (gobject_class, PROP_SINE_PERIODS_PER_TICK,
|
|
|
|
g_param_spec_uint ("sine-periods-per-tick", "Sine periods per tick",
|
|
|
|
"Number of sine wave periods in one tick. Only used if wave = ticks.",
|
|
|
|
1, G_MAXUINT, DEFAULT_SINE_PERIODS_PER_TICK,
|
|
|
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
|
|
|
g_object_class_install_property (gobject_class, PROP_TICK_INTERVAL,
|
|
|
|
g_param_spec_uint64 ("tick-interval", "Time between ticks",
|
|
|
|
"Distance between start of current and start of next tick, in nanoseconds.",
|
|
|
|
1, G_MAXUINT64, DEFAULT_TIME_BETWEEN_TICKS,
|
|
|
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
|
|
|
g_object_class_install_property (gobject_class, PROP_MARKER_TICK_PERIOD,
|
|
|
|
g_param_spec_uint ("marker-tick-period", "Marker tick period",
|
|
|
|
"Make every Nth tick a marker tick (= a tick with different volume). "
|
|
|
|
"Only used if wave = ticks. 0 = no marker ticks.",
|
|
|
|
0, G_MAXUINT, DEFAULT_MARKER_TICK_PERIOD,
|
|
|
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
|
|
|
g_object_class_install_property (gobject_class, PROP_MARKER_TICK_VOLUME,
|
|
|
|
g_param_spec_double ("marker-tick-volume", "Marker tick volume",
|
|
|
|
"Volume of marker ticks. Only used if wave = ticks and"
|
|
|
|
"marker-tick-period is set to a nonzero value.",
|
|
|
|
0.0, 1.0, DEFAULT_MARKER_TICK_VOLUME,
|
|
|
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
|
|
|
g_object_class_install_property (gobject_class, PROP_APPLY_TICK_RAMP,
|
|
|
|
g_param_spec_boolean ("apply-tick-ramp", "Apply tick ramp",
|
|
|
|
"Apply ramp to tick samples", DEFAULT_APPLY_TICK_RAMP,
|
|
|
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
2009-01-05 10:59:35 +00:00
|
|
|
g_object_class_install_property (gobject_class, PROP_CAN_ACTIVATE_PUSH,
|
|
|
|
g_param_spec_boolean ("can-activate-push", "Can activate push",
|
|
|
|
"Can activate in push mode", DEFAULT_CAN_ACTIVATE_PUSH,
|
|
|
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
|
|
|
g_object_class_install_property (gobject_class, PROP_CAN_ACTIVATE_PULL,
|
|
|
|
g_param_spec_boolean ("can-activate-pull", "Can activate pull",
|
|
|
|
"Can activate in pull mode", DEFAULT_CAN_ACTIVATE_PULL,
|
|
|
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2016-03-03 07:46:24 +00:00
|
|
|
gst_element_class_add_static_pad_template (gstelement_class,
|
|
|
|
&gst_audio_test_src_src_template);
|
|
|
|
gst_element_class_set_static_metadata (gstelement_class, "Audio test source",
|
|
|
|
"Source/Audio",
|
2011-04-19 09:35:53 +00:00
|
|
|
"Creates audio test signals of given frequency and volume",
|
|
|
|
"Stefan Kost <ensonic@users.sf.net>");
|
|
|
|
|
2005-12-01 01:12:55 +00:00
|
|
|
gstbasesrc_class->set_caps = GST_DEBUG_FUNCPTR (gst_audio_test_src_setcaps);
|
2011-08-17 15:22:03 +00:00
|
|
|
gstbasesrc_class->fixate = GST_DEBUG_FUNCPTR (gst_audio_test_src_fixate);
|
2005-12-14 20:42:11 +00:00
|
|
|
gstbasesrc_class->is_seekable =
|
|
|
|
GST_DEBUG_FUNCPTR (gst_audio_test_src_is_seekable);
|
|
|
|
gstbasesrc_class->do_seek = GST_DEBUG_FUNCPTR (gst_audio_test_src_do_seek);
|
gst/audiotestsrc/gstaudiotestsrc.*: update to basesrc changes, implement segmented seeking and eos handling, add a 's...
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audio_test_src_class_init),
(gst_audio_test_src_init), (gst_audio_test_src_src_fixate),
(gst_audio_test_src_query), (gst_audio_test_src_create_sine),
(gst_audio_test_src_create_square),
(gst_audio_test_src_create_saw),
(gst_audio_test_src_create_triangle),
(gst_audio_test_src_create_silence),
(gst_audio_test_src_create_white_noise),
(gst_audio_test_src_create_pink_noise),
(gst_audio_test_src_init_sine_table),
(gst_audio_test_src_create_sine_table),
(gst_audio_test_src_change_wave),
(gst_audio_test_src_change_volume), (gst_audio_test_src_do_seek),
(gst_audio_test_src_create), (gst_audio_test_src_set_property):
* gst/audiotestsrc/gstaudiotestsrc.h:
update to basesrc changes, implement segmented seeking and eos handling,
add a 'sine-tab' waveform for performance critical playback
2005-12-29 20:37:23 +00:00
|
|
|
gstbasesrc_class->query = GST_DEBUG_FUNCPTR (gst_audio_test_src_query);
|
2006-04-06 11:40:45 +00:00
|
|
|
gstbasesrc_class->get_times =
|
|
|
|
GST_DEBUG_FUNCPTR (gst_audio_test_src_get_times);
|
2008-10-10 15:45:15 +00:00
|
|
|
gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_audio_test_src_start);
|
|
|
|
gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_audio_test_src_stop);
|
2011-08-25 11:21:14 +00:00
|
|
|
gstbasesrc_class->fill = GST_DEBUG_FUNCPTR (gst_audio_test_src_fill);
|
2020-05-29 00:43:59 +00:00
|
|
|
|
2020-06-05 22:41:17 +00:00
|
|
|
gst_type_mark_as_plugin_api (GST_TYPE_AUDIO_TEST_SRC_WAVE, 0);
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2011-04-19 09:35:53 +00:00
|
|
|
gst_audio_test_src_init (GstAudioTestSrc * src)
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
{
|
2008-10-10 15:45:15 +00:00
|
|
|
src->volume = DEFAULT_VOLUME;
|
|
|
|
src->freq = DEFAULT_FREQ;
|
2007-08-03 19:53:11 +00:00
|
|
|
|
2005-12-14 20:42:11 +00:00
|
|
|
/* we operate in time */
|
|
|
|
gst_base_src_set_format (GST_BASE_SRC (src), GST_FORMAT_TIME);
|
2008-10-10 15:45:15 +00:00
|
|
|
gst_base_src_set_live (GST_BASE_SRC (src), DEFAULT_IS_LIVE);
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2008-10-10 15:45:15 +00:00
|
|
|
src->samples_per_buffer = DEFAULT_SAMPLES_PER_BUFFER;
|
gst/audiotestsrc/gstaudiotestsrc.*: update to basesrc changes, implement segmented seeking and eos handling, add a 's...
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audio_test_src_class_init),
(gst_audio_test_src_init), (gst_audio_test_src_src_fixate),
(gst_audio_test_src_query), (gst_audio_test_src_create_sine),
(gst_audio_test_src_create_square),
(gst_audio_test_src_create_saw),
(gst_audio_test_src_create_triangle),
(gst_audio_test_src_create_silence),
(gst_audio_test_src_create_white_noise),
(gst_audio_test_src_create_pink_noise),
(gst_audio_test_src_init_sine_table),
(gst_audio_test_src_create_sine_table),
(gst_audio_test_src_change_wave),
(gst_audio_test_src_change_volume), (gst_audio_test_src_do_seek),
(gst_audio_test_src_create), (gst_audio_test_src_set_property):
* gst/audiotestsrc/gstaudiotestsrc.h:
update to basesrc changes, implement segmented seeking and eos handling,
add a 'sine-tab' waveform for performance critical playback
2005-12-29 20:37:23 +00:00
|
|
|
src->generate_samples_per_buffer = src->samples_per_buffer;
|
2008-10-10 15:45:15 +00:00
|
|
|
src->timestamp_offset = DEFAULT_TIMESTAMP_OFFSET;
|
2009-01-05 10:59:35 +00:00
|
|
|
src->can_activate_pull = DEFAULT_CAN_ACTIVATE_PULL;
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
src->sine_periods_per_tick = DEFAULT_SINE_PERIODS_PER_TICK;
|
|
|
|
src->tick_interval = DEFAULT_TIME_BETWEEN_TICKS;
|
|
|
|
src->marker_tick_period = DEFAULT_MARKER_TICK_PERIOD;
|
|
|
|
src->marker_tick_volume = DEFAULT_MARKER_TICK_VOLUME;
|
|
|
|
src->apply_tick_ramp = DEFAULT_APPLY_TICK_RAMP;
|
|
|
|
|
2011-02-18 21:27:23 +00:00
|
|
|
src->gen = NULL;
|
|
|
|
|
2008-10-10 15:45:15 +00:00
|
|
|
src->wave = DEFAULT_WAVE;
|
2008-10-16 13:50:00 +00:00
|
|
|
gst_base_src_set_blocksize (GST_BASE_SRC (src), -1);
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
}
|
|
|
|
|
2011-02-18 21:27:23 +00:00
|
|
|
static void
|
|
|
|
gst_audio_test_src_finalize (GObject * object)
|
|
|
|
{
|
|
|
|
GstAudioTestSrc *src = GST_AUDIO_TEST_SRC (object);
|
|
|
|
|
|
|
|
if (src->gen)
|
|
|
|
g_rand_free (src->gen);
|
|
|
|
src->gen = NULL;
|
2015-11-02 12:19:09 +00:00
|
|
|
g_free (src->tmp);
|
|
|
|
src->tmp = NULL;
|
|
|
|
src->tmpsize = 0;
|
2011-02-18 21:27:23 +00:00
|
|
|
|
|
|
|
G_OBJECT_CLASS (parent_class)->finalize (object);
|
|
|
|
}
|
|
|
|
|
2012-03-11 18:04:41 +00:00
|
|
|
static GstCaps *
|
2011-08-17 15:22:03 +00:00
|
|
|
gst_audio_test_src_fixate (GstBaseSrc * bsrc, GstCaps * caps)
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
{
|
2011-08-17 15:22:03 +00:00
|
|
|
GstAudioTestSrc *src = GST_AUDIO_TEST_SRC (bsrc);
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
GstStructure *structure;
|
2015-11-02 14:54:19 +00:00
|
|
|
gint channels, rate;
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2012-03-11 18:04:41 +00:00
|
|
|
caps = gst_caps_make_writable (caps);
|
|
|
|
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
structure = gst_caps_get_structure (caps, 0);
|
|
|
|
|
2011-08-18 17:15:03 +00:00
|
|
|
GST_DEBUG_OBJECT (src, "fixating samplerate to %d", GST_AUDIO_DEF_RATE);
|
2008-10-10 15:45:15 +00:00
|
|
|
|
2019-05-17 13:35:40 +00:00
|
|
|
rate = MAX (GST_AUDIO_DEF_RATE, src->freq * 2);
|
2015-11-02 14:54:19 +00:00
|
|
|
gst_structure_fixate_field_nearest_int (structure, "rate", rate);
|
2007-08-03 19:53:11 +00:00
|
|
|
|
2011-08-18 17:15:03 +00:00
|
|
|
gst_structure_fixate_field_string (structure, "format", DEFAULT_FORMAT_STR);
|
2009-05-01 00:03:06 +00:00
|
|
|
|
2018-01-31 15:39:05 +00:00
|
|
|
gst_structure_fixate_field_string (structure, "layout", "interleaved");
|
|
|
|
|
2009-05-01 00:03:06 +00:00
|
|
|
/* fixate to mono unless downstream requires stereo, for backwards compat */
|
|
|
|
gst_structure_fixate_field_nearest_int (structure, "channels", 1);
|
2011-08-17 15:22:03 +00:00
|
|
|
|
2015-11-02 14:46:22 +00:00
|
|
|
if (gst_structure_get_int (structure, "channels", &channels) && channels > 2) {
|
|
|
|
if (!gst_structure_has_field_typed (structure, "channel-mask",
|
2022-01-24 10:57:10 +00:00
|
|
|
GST_TYPE_BITMASK)) {
|
|
|
|
guint64 mask = gst_audio_channel_get_fallback_mask (channels);
|
|
|
|
gst_structure_set (structure, "channel-mask", GST_TYPE_BITMASK, mask,
|
2015-11-02 14:46:22 +00:00
|
|
|
NULL);
|
2022-01-24 10:57:10 +00:00
|
|
|
}
|
2015-11-02 14:46:22 +00:00
|
|
|
}
|
|
|
|
|
2012-03-11 18:04:41 +00:00
|
|
|
caps = GST_BASE_SRC_CLASS (parent_class)->fixate (bsrc, caps);
|
|
|
|
|
|
|
|
return caps;
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_audio_test_src_setcaps (GstBaseSrc * basesrc, GstCaps * caps)
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
{
|
2005-12-14 20:42:11 +00:00
|
|
|
GstAudioTestSrc *src = GST_AUDIO_TEST_SRC (basesrc);
|
2011-08-18 17:15:03 +00:00
|
|
|
GstAudioInfo info;
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2011-08-18 17:15:03 +00:00
|
|
|
if (!gst_audio_info_from_caps (&info, caps))
|
|
|
|
goto invalid_caps;
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2011-08-18 17:15:03 +00:00
|
|
|
GST_DEBUG_OBJECT (src, "negotiated to caps %" GST_PTR_FORMAT, caps);
|
2008-10-10 15:45:15 +00:00
|
|
|
|
2011-08-18 17:15:03 +00:00
|
|
|
src->info = info;
|
2009-05-01 00:03:06 +00:00
|
|
|
|
2011-10-10 15:15:37 +00:00
|
|
|
gst_base_src_set_blocksize (basesrc,
|
|
|
|
GST_AUDIO_INFO_BPF (&info) * src->samples_per_buffer);
|
2007-08-03 19:53:11 +00:00
|
|
|
gst_audio_test_src_change_wave (src);
|
|
|
|
|
2011-08-18 17:15:03 +00:00
|
|
|
return TRUE;
|
|
|
|
|
|
|
|
/* ERROR */
|
|
|
|
invalid_caps:
|
|
|
|
{
|
|
|
|
GST_ERROR_OBJECT (basesrc, "received invalid caps");
|
|
|
|
return FALSE;
|
|
|
|
}
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean
|
2011-05-17 09:25:31 +00:00
|
|
|
gst_audio_test_src_query (GstBaseSrc * basesrc, GstQuery * query)
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
{
|
2005-12-14 20:42:11 +00:00
|
|
|
GstAudioTestSrc *src = GST_AUDIO_TEST_SRC (basesrc);
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
gboolean res = FALSE;
|
|
|
|
|
2011-05-17 09:25:31 +00:00
|
|
|
switch (GST_QUERY_TYPE (query)) {
|
2005-12-14 20:42:11 +00:00
|
|
|
case GST_QUERY_CONVERT:
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
{
|
2005-12-14 20:42:11 +00:00
|
|
|
GstFormat src_fmt, dest_fmt;
|
|
|
|
gint64 src_val, dest_val;
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2011-05-17 09:25:31 +00:00
|
|
|
gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, &dest_val);
|
2011-08-22 14:21:02 +00:00
|
|
|
|
|
|
|
if (!gst_audio_info_convert (&src->info, src_fmt, src_val, dest_fmt,
|
2011-08-24 09:05:05 +00:00
|
|
|
&dest_val))
|
2011-08-22 14:21:02 +00:00
|
|
|
goto error;
|
|
|
|
|
2011-05-17 09:25:31 +00:00
|
|
|
gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val);
|
2005-12-14 20:42:11 +00:00
|
|
|
res = TRUE;
|
Query API update.
Original commit message from CVS:
* examples/seeking/seek.c: (make_avi_msmpeg4v3_mp3_pipeline),
(query_positions_elems), (query_positions_pads), (update_scale),
(do_seek), (set_update_scale), (message_received), (main):
* ext/ogg/gstoggdemux.c: (gst_ogg_pad_src_query),
(gst_ogg_demux_perform_seek), (gst_ogg_demux_find_chains),
(gst_ogg_demux_loop):
* ext/ogg/gstogmparse.c: (gst_ogm_parse_sink_query):
* ext/theora/theoradec.c: (theora_dec_src_query),
(theora_dec_sink_event):
* ext/vorbis/vorbisdec.c: (vorbis_dec_src_query),
(vorbis_dec_sink_event), (vorbis_handle_data_packet):
* gst/adder/gstadder.c: (gst_adder_query):
* gst/audiotestsrc/gstaudiotestsrc.c: (gst_audiotestsrc_src_query):
* gst/playback/test3.c: (update_scale):
* gst/playback/test5.c: (new_pad), (no_more_pads), (start_finding),
(dump_element_stats), (main):
* gst/playback/test6.c: (main):
* gst/sine/gstsinesrc.c: (gst_sinesrc_src_query):
Query API update.
2005-10-19 15:55:33 +00:00
|
|
|
break;
|
|
|
|
}
|
2011-05-24 15:37:45 +00:00
|
|
|
case GST_QUERY_SCHEDULING:
|
|
|
|
{
|
|
|
|
/* if we can operate in pull mode */
|
2011-11-18 16:58:58 +00:00
|
|
|
gst_query_set_scheduling (query, GST_SCHEDULING_FLAG_SEEKABLE, 1, -1, 0);
|
|
|
|
gst_query_add_scheduling_mode (query, GST_PAD_MODE_PUSH);
|
|
|
|
if (src->can_activate_pull)
|
|
|
|
gst_query_add_scheduling_mode (query, GST_PAD_MODE_PULL);
|
|
|
|
|
2011-05-24 15:37:45 +00:00
|
|
|
res = TRUE;
|
|
|
|
break;
|
|
|
|
}
|
2014-12-22 21:00:26 +00:00
|
|
|
case GST_QUERY_LATENCY:
|
|
|
|
{
|
|
|
|
if (src->info.rate > 0) {
|
|
|
|
GstClockTime latency;
|
|
|
|
|
|
|
|
latency =
|
|
|
|
gst_util_uint64_scale (src->generate_samples_per_buffer, GST_SECOND,
|
|
|
|
src->info.rate);
|
|
|
|
gst_query_set_latency (query,
|
|
|
|
gst_base_src_is_live (GST_BASE_SRC_CAST (src)), latency,
|
|
|
|
GST_CLOCK_TIME_NONE);
|
|
|
|
GST_DEBUG_OBJECT (src, "Reporting latency of %" GST_TIME_FORMAT,
|
|
|
|
GST_TIME_ARGS (latency));
|
|
|
|
res = TRUE;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
default:
|
2006-02-01 11:59:47 +00:00
|
|
|
res = GST_BASE_SRC_CLASS (parent_class)->query (basesrc, query);
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return res;
|
2005-12-14 20:42:11 +00:00
|
|
|
/* ERROR */
|
|
|
|
error:
|
|
|
|
{
|
|
|
|
GST_DEBUG_OBJECT (src, "query failed");
|
|
|
|
return FALSE;
|
|
|
|
}
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
}
|
|
|
|
|
2007-08-03 19:53:11 +00:00
|
|
|
#define DEFINE_SINE(type,scale) \
|
|
|
|
static void \
|
|
|
|
gst_audio_test_src_create_sine_##type (GstAudioTestSrc * src, g##type * samples) \
|
|
|
|
{ \
|
2018-01-31 15:39:05 +00:00
|
|
|
gint i, c, channels, channel_step, sample_step; \
|
2007-08-03 19:53:11 +00:00
|
|
|
gdouble step, amp; \
|
2018-01-31 15:39:05 +00:00
|
|
|
g##type *ptr; \
|
2007-08-03 19:53:11 +00:00
|
|
|
\
|
2011-08-18 17:15:03 +00:00
|
|
|
channels = GST_AUDIO_INFO_CHANNELS (&src->info); \
|
2018-01-31 15:39:05 +00:00
|
|
|
if (GST_AUDIO_INFO_LAYOUT (&src->info) == GST_AUDIO_LAYOUT_INTERLEAVED) { \
|
|
|
|
channel_step = 1; \
|
|
|
|
sample_step = channels; \
|
|
|
|
} else { \
|
|
|
|
channel_step = src->generate_samples_per_buffer; \
|
|
|
|
sample_step = 1; \
|
|
|
|
} \
|
2011-08-18 17:15:03 +00:00
|
|
|
step = M_PI_M2 * src->freq / GST_AUDIO_INFO_RATE (&src->info); \
|
2007-08-03 19:53:11 +00:00
|
|
|
amp = src->volume * scale; \
|
|
|
|
\
|
2018-01-31 15:39:05 +00:00
|
|
|
for (i = 0; i < src->generate_samples_per_buffer; i++) { \
|
2007-08-03 19:53:11 +00:00
|
|
|
src->accumulator += step; \
|
|
|
|
if (src->accumulator >= M_PI_M2) \
|
|
|
|
src->accumulator -= M_PI_M2; \
|
|
|
|
\
|
2018-01-31 15:39:05 +00:00
|
|
|
ptr = samples; \
|
2011-08-18 17:15:03 +00:00
|
|
|
for (c = 0; c < channels; ++c) { \
|
2018-01-31 15:39:05 +00:00
|
|
|
*ptr = (g##type) (sin (src->accumulator) * amp); \
|
|
|
|
ptr += channel_step; \
|
2009-05-01 00:03:06 +00:00
|
|
|
} \
|
2018-01-31 15:39:05 +00:00
|
|
|
samples += sample_step; \
|
2007-08-03 19:53:11 +00:00
|
|
|
} \
|
|
|
|
}
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2007-08-03 19:53:11 +00:00
|
|
|
DEFINE_SINE (int16, 32767.0);
|
|
|
|
DEFINE_SINE (int32, 2147483647.0);
|
|
|
|
DEFINE_SINE (float, 1.0);
|
|
|
|
DEFINE_SINE (double, 1.0);
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2009-06-21 17:42:15 +00:00
|
|
|
static const ProcessFunc sine_funcs[] = {
|
2007-08-03 19:53:11 +00:00
|
|
|
(ProcessFunc) gst_audio_test_src_create_sine_int16,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_sine_int32,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_sine_float,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_sine_double
|
|
|
|
};
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2007-08-03 19:53:11 +00:00
|
|
|
#define DEFINE_SQUARE(type,scale) \
|
|
|
|
static void \
|
|
|
|
gst_audio_test_src_create_square_##type (GstAudioTestSrc * src, g##type * samples) \
|
|
|
|
{ \
|
2018-01-31 15:39:05 +00:00
|
|
|
gint i, c, channels, channel_step, sample_step; \
|
2007-08-03 19:53:11 +00:00
|
|
|
gdouble step, amp; \
|
2018-01-31 15:39:05 +00:00
|
|
|
g##type *ptr; \
|
2007-08-03 19:53:11 +00:00
|
|
|
\
|
2011-08-18 17:15:03 +00:00
|
|
|
channels = GST_AUDIO_INFO_CHANNELS (&src->info); \
|
2018-01-31 15:39:05 +00:00
|
|
|
if (GST_AUDIO_INFO_LAYOUT (&src->info) == GST_AUDIO_LAYOUT_INTERLEAVED) { \
|
|
|
|
channel_step = 1; \
|
|
|
|
sample_step = channels; \
|
|
|
|
} else { \
|
|
|
|
channel_step = src->generate_samples_per_buffer; \
|
|
|
|
sample_step = 1; \
|
|
|
|
} \
|
2011-08-18 17:15:03 +00:00
|
|
|
step = M_PI_M2 * src->freq / GST_AUDIO_INFO_RATE (&src->info); \
|
2007-08-03 19:53:11 +00:00
|
|
|
amp = src->volume * scale; \
|
|
|
|
\
|
2018-01-31 15:39:05 +00:00
|
|
|
for (i = 0; i < src->generate_samples_per_buffer; i++) { \
|
2007-08-03 19:53:11 +00:00
|
|
|
src->accumulator += step; \
|
|
|
|
if (src->accumulator >= M_PI_M2) \
|
|
|
|
src->accumulator -= M_PI_M2; \
|
|
|
|
\
|
2018-01-31 15:39:05 +00:00
|
|
|
ptr = samples; \
|
2011-08-18 17:15:03 +00:00
|
|
|
for (c = 0; c < channels; ++c) { \
|
2018-01-31 15:39:05 +00:00
|
|
|
*ptr = (g##type) ((src->accumulator < G_PI) ? amp : -amp); \
|
|
|
|
ptr += channel_step; \
|
2009-05-01 00:03:06 +00:00
|
|
|
} \
|
2018-01-31 15:39:05 +00:00
|
|
|
samples += sample_step; \
|
2007-08-03 19:53:11 +00:00
|
|
|
} \
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
}
|
|
|
|
|
2007-08-03 19:53:11 +00:00
|
|
|
DEFINE_SQUARE (int16, 32767.0);
|
|
|
|
DEFINE_SQUARE (int32, 2147483647.0);
|
|
|
|
DEFINE_SQUARE (float, 1.0);
|
|
|
|
DEFINE_SQUARE (double, 1.0);
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2009-06-21 17:42:15 +00:00
|
|
|
static const ProcessFunc square_funcs[] = {
|
2007-08-03 19:53:11 +00:00
|
|
|
(ProcessFunc) gst_audio_test_src_create_square_int16,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_square_int32,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_square_float,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_square_double
|
|
|
|
};
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2007-08-03 19:53:11 +00:00
|
|
|
#define DEFINE_SAW(type,scale) \
|
|
|
|
static void \
|
|
|
|
gst_audio_test_src_create_saw_##type (GstAudioTestSrc * src, g##type * samples) \
|
|
|
|
{ \
|
2018-01-31 15:39:05 +00:00
|
|
|
gint i, c, channels, channel_step, sample_step; \
|
2007-08-03 19:53:11 +00:00
|
|
|
gdouble step, amp; \
|
2018-01-31 15:39:05 +00:00
|
|
|
g##type *ptr; \
|
2007-08-03 19:53:11 +00:00
|
|
|
\
|
2011-08-18 17:15:03 +00:00
|
|
|
channels = GST_AUDIO_INFO_CHANNELS (&src->info); \
|
2018-01-31 15:39:05 +00:00
|
|
|
if (GST_AUDIO_INFO_LAYOUT (&src->info) == GST_AUDIO_LAYOUT_INTERLEAVED) { \
|
|
|
|
channel_step = 1; \
|
|
|
|
sample_step = channels; \
|
|
|
|
} else { \
|
|
|
|
channel_step = src->generate_samples_per_buffer; \
|
|
|
|
sample_step = 1; \
|
|
|
|
} \
|
2011-08-18 17:15:03 +00:00
|
|
|
step = M_PI_M2 * src->freq / GST_AUDIO_INFO_RATE (&src->info); \
|
2011-06-01 05:14:09 +00:00
|
|
|
amp = (src->volume * scale) / G_PI; \
|
2007-08-03 19:53:11 +00:00
|
|
|
\
|
2018-01-31 15:39:05 +00:00
|
|
|
for (i = 0; i < src->generate_samples_per_buffer; i++) { \
|
2007-08-03 19:53:11 +00:00
|
|
|
src->accumulator += step; \
|
|
|
|
if (src->accumulator >= M_PI_M2) \
|
|
|
|
src->accumulator -= M_PI_M2; \
|
|
|
|
\
|
2018-01-31 15:39:05 +00:00
|
|
|
ptr = samples; \
|
2011-06-01 05:14:09 +00:00
|
|
|
if (src->accumulator < G_PI) { \
|
2018-01-31 15:39:05 +00:00
|
|
|
for (c = 0; c < channels; ++c) { \
|
|
|
|
*ptr = (g##type) (src->accumulator * amp); \
|
|
|
|
ptr += channel_step; \
|
|
|
|
} \
|
2007-08-03 19:53:11 +00:00
|
|
|
} else { \
|
2018-01-31 15:39:05 +00:00
|
|
|
for (c = 0; c < channels; ++c) { \
|
|
|
|
*ptr = (g##type) ((M_PI_M2 - src->accumulator) * -amp); \
|
|
|
|
ptr += channel_step; \
|
|
|
|
} \
|
2007-08-03 19:53:11 +00:00
|
|
|
} \
|
2018-01-31 15:39:05 +00:00
|
|
|
samples += sample_step; \
|
2007-08-03 19:53:11 +00:00
|
|
|
} \
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
}
|
|
|
|
|
2007-08-03 19:53:11 +00:00
|
|
|
DEFINE_SAW (int16, 32767.0);
|
|
|
|
DEFINE_SAW (int32, 2147483647.0);
|
|
|
|
DEFINE_SAW (float, 1.0);
|
|
|
|
DEFINE_SAW (double, 1.0);
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2009-06-21 17:42:15 +00:00
|
|
|
static const ProcessFunc saw_funcs[] = {
|
2007-08-03 19:53:11 +00:00
|
|
|
(ProcessFunc) gst_audio_test_src_create_saw_int16,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_saw_int32,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_saw_float,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_saw_double
|
|
|
|
};
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2007-08-03 19:53:11 +00:00
|
|
|
#define DEFINE_TRIANGLE(type,scale) \
|
|
|
|
static void \
|
|
|
|
gst_audio_test_src_create_triangle_##type (GstAudioTestSrc * src, g##type * samples) \
|
|
|
|
{ \
|
2018-01-31 15:39:05 +00:00
|
|
|
gint i, c, channels, channel_step, sample_step; \
|
2007-08-03 19:53:11 +00:00
|
|
|
gdouble step, amp; \
|
2018-01-31 15:39:05 +00:00
|
|
|
g##type *ptr; \
|
2007-08-03 19:53:11 +00:00
|
|
|
\
|
2011-08-18 17:15:03 +00:00
|
|
|
channels = GST_AUDIO_INFO_CHANNELS (&src->info); \
|
2018-01-31 15:39:05 +00:00
|
|
|
if (GST_AUDIO_INFO_LAYOUT (&src->info) == GST_AUDIO_LAYOUT_INTERLEAVED) { \
|
|
|
|
channel_step = 1; \
|
|
|
|
sample_step = channels; \
|
|
|
|
} else { \
|
|
|
|
channel_step = src->generate_samples_per_buffer; \
|
|
|
|
sample_step = 1; \
|
|
|
|
} \
|
2011-08-18 17:15:03 +00:00
|
|
|
step = M_PI_M2 * src->freq / GST_AUDIO_INFO_RATE (&src->info); \
|
2011-06-01 05:14:09 +00:00
|
|
|
amp = (src->volume * scale) / G_PI_2; \
|
2007-08-03 19:53:11 +00:00
|
|
|
\
|
2018-01-31 15:39:05 +00:00
|
|
|
for (i = 0; i < src->generate_samples_per_buffer; i++) { \
|
2007-08-03 19:53:11 +00:00
|
|
|
src->accumulator += step; \
|
|
|
|
if (src->accumulator >= M_PI_M2) \
|
|
|
|
src->accumulator -= M_PI_M2; \
|
|
|
|
\
|
2018-01-31 15:39:05 +00:00
|
|
|
ptr = samples; \
|
2011-06-01 05:14:09 +00:00
|
|
|
if (src->accumulator < (G_PI_2)) { \
|
2018-01-31 15:39:05 +00:00
|
|
|
for (c = 0; c < channels; ++c) { \
|
|
|
|
*ptr = (g##type) (src->accumulator * amp); \
|
|
|
|
ptr += channel_step; \
|
|
|
|
} \
|
2011-06-01 05:14:09 +00:00
|
|
|
} else if (src->accumulator < (G_PI * 1.5)) { \
|
2018-01-31 15:39:05 +00:00
|
|
|
for (c = 0; c < channels; ++c) { \
|
|
|
|
*ptr = (g##type) ((src->accumulator - G_PI) * -amp); \
|
|
|
|
ptr += channel_step; \
|
|
|
|
} \
|
2007-08-03 19:53:11 +00:00
|
|
|
} else { \
|
2018-01-31 15:39:05 +00:00
|
|
|
for (c = 0; c < channels; ++c) { \
|
|
|
|
*ptr = (g##type) ((M_PI_M2 - src->accumulator) * -amp); \
|
|
|
|
ptr += channel_step; \
|
|
|
|
} \
|
2007-08-03 19:53:11 +00:00
|
|
|
} \
|
2018-01-31 15:39:05 +00:00
|
|
|
samples += sample_step; \
|
2007-08-03 19:53:11 +00:00
|
|
|
} \
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
}
|
|
|
|
|
2007-08-03 19:53:11 +00:00
|
|
|
DEFINE_TRIANGLE (int16, 32767.0);
|
|
|
|
DEFINE_TRIANGLE (int32, 2147483647.0);
|
|
|
|
DEFINE_TRIANGLE (float, 1.0);
|
|
|
|
DEFINE_TRIANGLE (double, 1.0);
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2009-06-21 17:42:15 +00:00
|
|
|
static const ProcessFunc triangle_funcs[] = {
|
2007-08-03 19:53:11 +00:00
|
|
|
(ProcessFunc) gst_audio_test_src_create_triangle_int16,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_triangle_int32,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_triangle_float,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_triangle_double
|
|
|
|
};
|
|
|
|
|
|
|
|
#define DEFINE_SILENCE(type) \
|
|
|
|
static void \
|
|
|
|
gst_audio_test_src_create_silence_##type (GstAudioTestSrc * src, g##type * samples) \
|
|
|
|
{ \
|
2011-08-18 17:15:03 +00:00
|
|
|
memset (samples, 0, src->generate_samples_per_buffer * sizeof (g##type) * src->info.channels); \
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
}
|
|
|
|
|
2007-08-03 19:53:11 +00:00
|
|
|
DEFINE_SILENCE (int16);
|
|
|
|
DEFINE_SILENCE (int32);
|
|
|
|
DEFINE_SILENCE (float);
|
|
|
|
DEFINE_SILENCE (double);
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2009-06-21 17:42:15 +00:00
|
|
|
static const ProcessFunc silence_funcs[] = {
|
2007-08-03 19:53:11 +00:00
|
|
|
(ProcessFunc) gst_audio_test_src_create_silence_int16,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_silence_int32,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_silence_float,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_silence_double
|
|
|
|
};
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2007-08-03 19:53:11 +00:00
|
|
|
#define DEFINE_WHITE_NOISE(type,scale) \
|
|
|
|
static void \
|
|
|
|
gst_audio_test_src_create_white_noise_##type (GstAudioTestSrc * src, g##type * samples) \
|
|
|
|
{ \
|
2018-01-31 15:39:05 +00:00
|
|
|
gint i, c, channel_step, sample_step; \
|
|
|
|
g##type *ptr; \
|
2007-08-03 19:53:11 +00:00
|
|
|
gdouble amp = (src->volume * scale); \
|
2011-08-18 17:15:03 +00:00
|
|
|
gint channels = GST_AUDIO_INFO_CHANNELS (&src->info); \
|
2007-08-03 19:53:11 +00:00
|
|
|
\
|
2018-01-31 15:39:05 +00:00
|
|
|
if (GST_AUDIO_INFO_LAYOUT (&src->info) == GST_AUDIO_LAYOUT_INTERLEAVED) { \
|
|
|
|
channel_step = 1; \
|
|
|
|
sample_step = channels; \
|
|
|
|
} else { \
|
|
|
|
channel_step = src->generate_samples_per_buffer; \
|
|
|
|
sample_step = 1; \
|
|
|
|
} \
|
|
|
|
\
|
|
|
|
for (i = 0; i < src->generate_samples_per_buffer; i++) { \
|
|
|
|
ptr = samples; \
|
|
|
|
for (c = 0; c < channels; ++c) { \
|
|
|
|
*ptr = (g##type) (amp * g_rand_double_range (src->gen, -1.0, 1.0)); \
|
|
|
|
ptr += channel_step; \
|
|
|
|
} \
|
|
|
|
samples += sample_step; \
|
2007-08-03 19:53:11 +00:00
|
|
|
} \
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
}
|
|
|
|
|
2007-08-03 19:53:11 +00:00
|
|
|
DEFINE_WHITE_NOISE (int16, 32767.0);
|
|
|
|
DEFINE_WHITE_NOISE (int32, 2147483647.0);
|
|
|
|
DEFINE_WHITE_NOISE (float, 1.0);
|
|
|
|
DEFINE_WHITE_NOISE (double, 1.0);
|
|
|
|
|
2009-06-21 17:42:15 +00:00
|
|
|
static const ProcessFunc white_noise_funcs[] = {
|
2007-08-03 19:53:11 +00:00
|
|
|
(ProcessFunc) gst_audio_test_src_create_white_noise_int16,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_white_noise_int32,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_white_noise_float,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_white_noise_double
|
|
|
|
};
|
|
|
|
|
2007-05-04 13:10:07 +00:00
|
|
|
/* pink noise calculation is based on
|
gst/audiotestsrc/gstaudiotestsrc.*: fixed typo, added pink noise
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_class_init),
(gst_audiotestsrc_init), (gst_audiotestsrc_create_sine),
(gst_audiotestsrc_create_square), (gst_audiotestsrc_create_saw),
(gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_init_pink_noise),
(gst_audiotestsrc_generate_pink_noise_value),
(gst_audiotestsrc_create_pink_noise),
(gst_audiotestsrc_change_wave):
* gst/audiotestsrc/gstaudiotestsrc.h:
fixed typo, added pink noise
2005-10-09 20:47:31 +00:00
|
|
|
* http://www.firstpr.com.au/dsp/pink-noise/phil_burk_19990905_patest_pink.c
|
|
|
|
* which has been released under public domain
|
|
|
|
* Many thanks Phil!
|
|
|
|
*/
|
|
|
|
static void
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_audio_test_src_init_pink_noise (GstAudioTestSrc * src)
|
gst/audiotestsrc/gstaudiotestsrc.*: fixed typo, added pink noise
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_class_init),
(gst_audiotestsrc_init), (gst_audiotestsrc_create_sine),
(gst_audiotestsrc_create_square), (gst_audiotestsrc_create_saw),
(gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_init_pink_noise),
(gst_audiotestsrc_generate_pink_noise_value),
(gst_audiotestsrc_create_pink_noise),
(gst_audiotestsrc_change_wave):
* gst/audiotestsrc/gstaudiotestsrc.h:
fixed typo, added pink noise
2005-10-09 20:47:31 +00:00
|
|
|
{
|
|
|
|
gint i;
|
|
|
|
gint num_rows = 12; /* arbitrary: 1 .. PINK_MAX_RANDOM_ROWS */
|
|
|
|
glong pmax;
|
|
|
|
|
|
|
|
src->pink.index = 0;
|
|
|
|
src->pink.index_mask = (1 << num_rows) - 1;
|
|
|
|
/* calculate maximum possible signed random value.
|
|
|
|
* Extra 1 for white noise always added. */
|
|
|
|
pmax = (num_rows + 1) * (1 << (PINK_RANDOM_BITS - 1));
|
|
|
|
src->pink.scalar = 1.0f / pmax;
|
|
|
|
/* Initialize rows. */
|
|
|
|
for (i = 0; i < num_rows; i++)
|
|
|
|
src->pink.rows[i] = 0;
|
|
|
|
src->pink.running_sum = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Generate Pink noise values between -1.0 and +1.0 */
|
2007-08-03 19:53:11 +00:00
|
|
|
static gdouble
|
2011-02-18 21:27:23 +00:00
|
|
|
gst_audio_test_src_generate_pink_noise_value (GstAudioTestSrc * src)
|
gst/audiotestsrc/gstaudiotestsrc.*: fixed typo, added pink noise
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_class_init),
(gst_audiotestsrc_init), (gst_audiotestsrc_create_sine),
(gst_audiotestsrc_create_square), (gst_audiotestsrc_create_saw),
(gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_init_pink_noise),
(gst_audiotestsrc_generate_pink_noise_value),
(gst_audiotestsrc_create_pink_noise),
(gst_audiotestsrc_change_wave):
* gst/audiotestsrc/gstaudiotestsrc.h:
fixed typo, added pink noise
2005-10-09 20:47:31 +00:00
|
|
|
{
|
2011-02-18 21:27:23 +00:00
|
|
|
GstPinkNoise *pink = &src->pink;
|
gst/audiotestsrc/gstaudiotestsrc.*: fixed typo, added pink noise
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_class_init),
(gst_audiotestsrc_init), (gst_audiotestsrc_create_sine),
(gst_audiotestsrc_create_square), (gst_audiotestsrc_create_saw),
(gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_init_pink_noise),
(gst_audiotestsrc_generate_pink_noise_value),
(gst_audiotestsrc_create_pink_noise),
(gst_audiotestsrc_change_wave):
* gst/audiotestsrc/gstaudiotestsrc.h:
fixed typo, added pink noise
2005-10-09 20:47:31 +00:00
|
|
|
glong new_random;
|
|
|
|
glong sum;
|
|
|
|
|
|
|
|
/* Increment and mask index. */
|
|
|
|
pink->index = (pink->index + 1) & pink->index_mask;
|
|
|
|
|
|
|
|
/* If index is zero, don't update any random values. */
|
|
|
|
if (pink->index != 0) {
|
|
|
|
/* Determine how many trailing zeros in PinkIndex. */
|
|
|
|
/* This algorithm will hang if n==0 so test first. */
|
|
|
|
gint num_zeros = 0;
|
|
|
|
gint n = pink->index;
|
|
|
|
|
|
|
|
while ((n & 1) == 0) {
|
|
|
|
n = n >> 1;
|
|
|
|
num_zeros++;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Replace the indexed ROWS random value.
|
|
|
|
* Subtract and add back to RunningSum instead of adding all the random
|
|
|
|
* values together. Only one changes each time.
|
|
|
|
*/
|
|
|
|
pink->running_sum -= pink->rows[num_zeros];
|
2011-02-18 21:27:23 +00:00
|
|
|
new_random = 32768.0 - (65536.0 * (gulong) g_rand_int (src->gen)
|
|
|
|
/ (G_MAXUINT32 + 1.0));
|
gst/audiotestsrc/gstaudiotestsrc.*: fixed typo, added pink noise
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_class_init),
(gst_audiotestsrc_init), (gst_audiotestsrc_create_sine),
(gst_audiotestsrc_create_square), (gst_audiotestsrc_create_saw),
(gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_init_pink_noise),
(gst_audiotestsrc_generate_pink_noise_value),
(gst_audiotestsrc_create_pink_noise),
(gst_audiotestsrc_change_wave):
* gst/audiotestsrc/gstaudiotestsrc.h:
fixed typo, added pink noise
2005-10-09 20:47:31 +00:00
|
|
|
pink->running_sum += new_random;
|
|
|
|
pink->rows[num_zeros] = new_random;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Add extra white noise value. */
|
2011-02-18 21:27:23 +00:00
|
|
|
new_random = 32768.0 - (65536.0 * (gulong) g_rand_int (src->gen)
|
|
|
|
/ (G_MAXUINT32 + 1.0));
|
gst/audiotestsrc/gstaudiotestsrc.*: fixed typo, added pink noise
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_class_init),
(gst_audiotestsrc_init), (gst_audiotestsrc_create_sine),
(gst_audiotestsrc_create_square), (gst_audiotestsrc_create_saw),
(gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_init_pink_noise),
(gst_audiotestsrc_generate_pink_noise_value),
(gst_audiotestsrc_create_pink_noise),
(gst_audiotestsrc_change_wave):
* gst/audiotestsrc/gstaudiotestsrc.h:
fixed typo, added pink noise
2005-10-09 20:47:31 +00:00
|
|
|
sum = pink->running_sum + new_random;
|
|
|
|
|
|
|
|
/* Scale to range of -1.0 to 0.9999. */
|
|
|
|
return (pink->scalar * sum);
|
|
|
|
}
|
|
|
|
|
2007-08-03 19:53:11 +00:00
|
|
|
#define DEFINE_PINK(type, scale) \
|
|
|
|
static void \
|
|
|
|
gst_audio_test_src_create_pink_noise_##type (GstAudioTestSrc * src, g##type * samples) \
|
|
|
|
{ \
|
2018-01-31 15:39:05 +00:00
|
|
|
gint i, c, channels, channel_step, sample_step; \
|
2007-08-03 19:53:11 +00:00
|
|
|
gdouble amp; \
|
2018-01-31 15:39:05 +00:00
|
|
|
g##type *ptr; \
|
2007-08-03 19:53:11 +00:00
|
|
|
\
|
|
|
|
amp = src->volume * scale; \
|
2011-08-18 17:15:03 +00:00
|
|
|
channels = GST_AUDIO_INFO_CHANNELS (&src->info); \
|
2018-01-31 15:39:05 +00:00
|
|
|
if (GST_AUDIO_INFO_LAYOUT (&src->info) == GST_AUDIO_LAYOUT_INTERLEAVED) { \
|
|
|
|
channel_step = 1; \
|
|
|
|
sample_step = channels; \
|
|
|
|
} else { \
|
|
|
|
channel_step = src->generate_samples_per_buffer; \
|
|
|
|
sample_step = 1; \
|
|
|
|
} \
|
2007-08-03 19:53:11 +00:00
|
|
|
\
|
2018-01-31 15:39:05 +00:00
|
|
|
for (i = 0; i < src->generate_samples_per_buffer; i++) { \
|
|
|
|
ptr = samples; \
|
2011-08-18 17:15:03 +00:00
|
|
|
for (c = 0; c < channels; ++c) { \
|
2018-01-31 15:39:05 +00:00
|
|
|
*ptr = (g##type) (gst_audio_test_src_generate_pink_noise_value (src) * amp); \
|
|
|
|
ptr += channel_step; \
|
2009-05-01 00:03:06 +00:00
|
|
|
} \
|
2018-01-31 15:39:05 +00:00
|
|
|
samples += sample_step; \
|
2007-08-03 19:53:11 +00:00
|
|
|
} \
|
|
|
|
}
|
gst/audiotestsrc/gstaudiotestsrc.*: fixed typo, added pink noise
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_class_init),
(gst_audiotestsrc_init), (gst_audiotestsrc_create_sine),
(gst_audiotestsrc_create_square), (gst_audiotestsrc_create_saw),
(gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_init_pink_noise),
(gst_audiotestsrc_generate_pink_noise_value),
(gst_audiotestsrc_create_pink_noise),
(gst_audiotestsrc_change_wave):
* gst/audiotestsrc/gstaudiotestsrc.h:
fixed typo, added pink noise
2005-10-09 20:47:31 +00:00
|
|
|
|
2007-08-03 19:53:11 +00:00
|
|
|
DEFINE_PINK (int16, 32767.0);
|
|
|
|
DEFINE_PINK (int32, 2147483647.0);
|
|
|
|
DEFINE_PINK (float, 1.0);
|
|
|
|
DEFINE_PINK (double, 1.0);
|
gst/audiotestsrc/gstaudiotestsrc.*: fixed typo, added pink noise
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_class_init),
(gst_audiotestsrc_init), (gst_audiotestsrc_create_sine),
(gst_audiotestsrc_create_square), (gst_audiotestsrc_create_saw),
(gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_init_pink_noise),
(gst_audiotestsrc_generate_pink_noise_value),
(gst_audiotestsrc_create_pink_noise),
(gst_audiotestsrc_change_wave):
* gst/audiotestsrc/gstaudiotestsrc.h:
fixed typo, added pink noise
2005-10-09 20:47:31 +00:00
|
|
|
|
2009-06-21 17:42:15 +00:00
|
|
|
static const ProcessFunc pink_noise_funcs[] = {
|
2007-08-03 19:53:11 +00:00
|
|
|
(ProcessFunc) gst_audio_test_src_create_pink_noise_int16,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_pink_noise_int32,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_pink_noise_float,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_pink_noise_double
|
|
|
|
};
|
gst/audiotestsrc/gstaudiotestsrc.*: fixed typo, added pink noise
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_class_init),
(gst_audiotestsrc_init), (gst_audiotestsrc_create_sine),
(gst_audiotestsrc_create_square), (gst_audiotestsrc_create_saw),
(gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_init_pink_noise),
(gst_audiotestsrc_generate_pink_noise_value),
(gst_audiotestsrc_create_pink_noise),
(gst_audiotestsrc_change_wave):
* gst/audiotestsrc/gstaudiotestsrc.h:
fixed typo, added pink noise
2005-10-09 20:47:31 +00:00
|
|
|
|
gst/audiotestsrc/gstaudiotestsrc.*: update to basesrc changes, implement segmented seeking and eos handling, add a 's...
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audio_test_src_class_init),
(gst_audio_test_src_init), (gst_audio_test_src_src_fixate),
(gst_audio_test_src_query), (gst_audio_test_src_create_sine),
(gst_audio_test_src_create_square),
(gst_audio_test_src_create_saw),
(gst_audio_test_src_create_triangle),
(gst_audio_test_src_create_silence),
(gst_audio_test_src_create_white_noise),
(gst_audio_test_src_create_pink_noise),
(gst_audio_test_src_init_sine_table),
(gst_audio_test_src_create_sine_table),
(gst_audio_test_src_change_wave),
(gst_audio_test_src_change_volume), (gst_audio_test_src_do_seek),
(gst_audio_test_src_create), (gst_audio_test_src_set_property):
* gst/audiotestsrc/gstaudiotestsrc.h:
update to basesrc changes, implement segmented seeking and eos handling,
add a 'sine-tab' waveform for performance critical playback
2005-12-29 20:37:23 +00:00
|
|
|
static void
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
gst_audio_test_src_init_sine_table (GstAudioTestSrc * src, gboolean use_volume)
|
gst/audiotestsrc/gstaudiotestsrc.*: update to basesrc changes, implement segmented seeking and eos handling, add a 's...
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audio_test_src_class_init),
(gst_audio_test_src_init), (gst_audio_test_src_src_fixate),
(gst_audio_test_src_query), (gst_audio_test_src_create_sine),
(gst_audio_test_src_create_square),
(gst_audio_test_src_create_saw),
(gst_audio_test_src_create_triangle),
(gst_audio_test_src_create_silence),
(gst_audio_test_src_create_white_noise),
(gst_audio_test_src_create_pink_noise),
(gst_audio_test_src_init_sine_table),
(gst_audio_test_src_create_sine_table),
(gst_audio_test_src_change_wave),
(gst_audio_test_src_change_volume), (gst_audio_test_src_do_seek),
(gst_audio_test_src_create), (gst_audio_test_src_set_property):
* gst/audiotestsrc/gstaudiotestsrc.h:
update to basesrc changes, implement segmented seeking and eos handling,
add a 'sine-tab' waveform for performance critical playback
2005-12-29 20:37:23 +00:00
|
|
|
{
|
|
|
|
gint i;
|
|
|
|
gdouble ang = 0.0;
|
|
|
|
gdouble step = M_PI_M2 / 1024.0;
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
gdouble amp = use_volume ? src->volume : 1.0;
|
gst/audiotestsrc/gstaudiotestsrc.*: update to basesrc changes, implement segmented seeking and eos handling, add a 's...
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audio_test_src_class_init),
(gst_audio_test_src_init), (gst_audio_test_src_src_fixate),
(gst_audio_test_src_query), (gst_audio_test_src_create_sine),
(gst_audio_test_src_create_square),
(gst_audio_test_src_create_saw),
(gst_audio_test_src_create_triangle),
(gst_audio_test_src_create_silence),
(gst_audio_test_src_create_white_noise),
(gst_audio_test_src_create_pink_noise),
(gst_audio_test_src_init_sine_table),
(gst_audio_test_src_create_sine_table),
(gst_audio_test_src_change_wave),
(gst_audio_test_src_change_volume), (gst_audio_test_src_do_seek),
(gst_audio_test_src_create), (gst_audio_test_src_set_property):
* gst/audiotestsrc/gstaudiotestsrc.h:
update to basesrc changes, implement segmented seeking and eos handling,
add a 'sine-tab' waveform for performance critical playback
2005-12-29 20:37:23 +00:00
|
|
|
|
|
|
|
for (i = 0; i < 1024; i++) {
|
2007-08-03 19:53:11 +00:00
|
|
|
src->wave_table[i] = sin (ang) * amp;
|
gst/audiotestsrc/gstaudiotestsrc.*: update to basesrc changes, implement segmented seeking and eos handling, add a 's...
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audio_test_src_class_init),
(gst_audio_test_src_init), (gst_audio_test_src_src_fixate),
(gst_audio_test_src_query), (gst_audio_test_src_create_sine),
(gst_audio_test_src_create_square),
(gst_audio_test_src_create_saw),
(gst_audio_test_src_create_triangle),
(gst_audio_test_src_create_silence),
(gst_audio_test_src_create_white_noise),
(gst_audio_test_src_create_pink_noise),
(gst_audio_test_src_init_sine_table),
(gst_audio_test_src_create_sine_table),
(gst_audio_test_src_change_wave),
(gst_audio_test_src_change_volume), (gst_audio_test_src_do_seek),
(gst_audio_test_src_create), (gst_audio_test_src_set_property):
* gst/audiotestsrc/gstaudiotestsrc.h:
update to basesrc changes, implement segmented seeking and eos handling,
add a 'sine-tab' waveform for performance critical playback
2005-12-29 20:37:23 +00:00
|
|
|
ang += step;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2007-08-03 19:53:11 +00:00
|
|
|
#define DEFINE_SINE_TABLE(type,scale) \
|
|
|
|
static void \
|
|
|
|
gst_audio_test_src_create_sine_table_##type (GstAudioTestSrc * src, g##type * samples) \
|
|
|
|
{ \
|
2018-01-31 15:39:05 +00:00
|
|
|
gint i, c, channels, channel_step, sample_step; \
|
2007-08-03 19:53:11 +00:00
|
|
|
gdouble step, scl; \
|
2018-01-31 15:39:05 +00:00
|
|
|
g##type *ptr; \
|
2007-08-03 19:53:11 +00:00
|
|
|
\
|
2011-08-18 17:15:03 +00:00
|
|
|
channels = GST_AUDIO_INFO_CHANNELS (&src->info); \
|
2018-01-31 15:39:05 +00:00
|
|
|
if (GST_AUDIO_INFO_LAYOUT (&src->info) == GST_AUDIO_LAYOUT_INTERLEAVED) { \
|
|
|
|
channel_step = 1; \
|
|
|
|
sample_step = channels; \
|
|
|
|
} else { \
|
|
|
|
channel_step = src->generate_samples_per_buffer; \
|
|
|
|
sample_step = 1; \
|
|
|
|
} \
|
2011-08-18 17:15:03 +00:00
|
|
|
step = M_PI_M2 * src->freq / GST_AUDIO_INFO_RATE (&src->info); \
|
2007-08-03 19:53:11 +00:00
|
|
|
scl = 1024.0 / M_PI_M2; \
|
|
|
|
\
|
2018-01-31 15:39:05 +00:00
|
|
|
for (i = 0; i < src->generate_samples_per_buffer; i++) { \
|
2007-08-03 19:53:11 +00:00
|
|
|
src->accumulator += step; \
|
|
|
|
if (src->accumulator >= M_PI_M2) \
|
|
|
|
src->accumulator -= M_PI_M2; \
|
|
|
|
\
|
2018-01-31 15:39:05 +00:00
|
|
|
ptr = samples; \
|
|
|
|
for (c = 0; c < channels; ++c) { \
|
|
|
|
*ptr = (g##type) scale * src->wave_table[(gint) (src->accumulator * scl)]; \
|
|
|
|
ptr += channel_step; \
|
|
|
|
} \
|
|
|
|
samples += sample_step; \
|
2007-08-03 19:53:11 +00:00
|
|
|
} \
|
|
|
|
}
|
gst/audiotestsrc/gstaudiotestsrc.*: update to basesrc changes, implement segmented seeking and eos handling, add a 's...
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audio_test_src_class_init),
(gst_audio_test_src_init), (gst_audio_test_src_src_fixate),
(gst_audio_test_src_query), (gst_audio_test_src_create_sine),
(gst_audio_test_src_create_square),
(gst_audio_test_src_create_saw),
(gst_audio_test_src_create_triangle),
(gst_audio_test_src_create_silence),
(gst_audio_test_src_create_white_noise),
(gst_audio_test_src_create_pink_noise),
(gst_audio_test_src_init_sine_table),
(gst_audio_test_src_create_sine_table),
(gst_audio_test_src_change_wave),
(gst_audio_test_src_change_volume), (gst_audio_test_src_do_seek),
(gst_audio_test_src_create), (gst_audio_test_src_set_property):
* gst/audiotestsrc/gstaudiotestsrc.h:
update to basesrc changes, implement segmented seeking and eos handling,
add a 'sine-tab' waveform for performance critical playback
2005-12-29 20:37:23 +00:00
|
|
|
|
2007-08-03 19:53:11 +00:00
|
|
|
DEFINE_SINE_TABLE (int16, 32767.0);
|
|
|
|
DEFINE_SINE_TABLE (int32, 2147483647.0);
|
|
|
|
DEFINE_SINE_TABLE (float, 1.0);
|
|
|
|
DEFINE_SINE_TABLE (double, 1.0);
|
gst/audiotestsrc/gstaudiotestsrc.*: update to basesrc changes, implement segmented seeking and eos handling, add a 's...
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audio_test_src_class_init),
(gst_audio_test_src_init), (gst_audio_test_src_src_fixate),
(gst_audio_test_src_query), (gst_audio_test_src_create_sine),
(gst_audio_test_src_create_square),
(gst_audio_test_src_create_saw),
(gst_audio_test_src_create_triangle),
(gst_audio_test_src_create_silence),
(gst_audio_test_src_create_white_noise),
(gst_audio_test_src_create_pink_noise),
(gst_audio_test_src_init_sine_table),
(gst_audio_test_src_create_sine_table),
(gst_audio_test_src_change_wave),
(gst_audio_test_src_change_volume), (gst_audio_test_src_do_seek),
(gst_audio_test_src_create), (gst_audio_test_src_set_property):
* gst/audiotestsrc/gstaudiotestsrc.h:
update to basesrc changes, implement segmented seeking and eos handling,
add a 'sine-tab' waveform for performance critical playback
2005-12-29 20:37:23 +00:00
|
|
|
|
2009-06-21 17:42:15 +00:00
|
|
|
static const ProcessFunc sine_table_funcs[] = {
|
2007-08-03 19:53:11 +00:00
|
|
|
(ProcessFunc) gst_audio_test_src_create_sine_table_int16,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_sine_table_int32,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_sine_table_float,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_sine_table_double
|
|
|
|
};
|
gst/audiotestsrc/gstaudiotestsrc.*: update to basesrc changes, implement segmented seeking and eos handling, add a 's...
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audio_test_src_class_init),
(gst_audio_test_src_init), (gst_audio_test_src_src_fixate),
(gst_audio_test_src_query), (gst_audio_test_src_create_sine),
(gst_audio_test_src_create_square),
(gst_audio_test_src_create_saw),
(gst_audio_test_src_create_triangle),
(gst_audio_test_src_create_silence),
(gst_audio_test_src_create_white_noise),
(gst_audio_test_src_create_pink_noise),
(gst_audio_test_src_init_sine_table),
(gst_audio_test_src_create_sine_table),
(gst_audio_test_src_change_wave),
(gst_audio_test_src_change_volume), (gst_audio_test_src_do_seek),
(gst_audio_test_src_create), (gst_audio_test_src_set_property):
* gst/audiotestsrc/gstaudiotestsrc.h:
update to basesrc changes, implement segmented seeking and eos handling,
add a 'sine-tab' waveform for performance critical playback
2005-12-29 20:37:23 +00:00
|
|
|
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
static inline gdouble
|
|
|
|
calc_scaled_tick_volume (GstAudioTestSrc * src, gdouble scale)
|
|
|
|
{
|
|
|
|
gdouble vol;
|
|
|
|
vol = ((src->marker_tick_period > 0)
|
|
|
|
&& ((src->tick_counter % src->marker_tick_period) == 0))
|
|
|
|
? src->marker_tick_volume : src->volume;
|
|
|
|
return vol * scale;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-07-17 02:30:24 +00:00
|
|
|
#define DEFINE_TICKS(type,scale) \
|
|
|
|
static void \
|
|
|
|
gst_audio_test_src_create_tick_##type (GstAudioTestSrc * src, g##type * samples) \
|
|
|
|
{ \
|
2018-01-31 15:39:05 +00:00
|
|
|
gint i, c, channels, samplerate, samplemod, channel_step, sample_step; \
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
gint num_nonzero_samples, num_ramp_samples, end_ramp_offset; \
|
2008-07-17 02:30:24 +00:00
|
|
|
gdouble step, scl; \
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
gdouble volscale; \
|
2018-01-31 15:39:05 +00:00
|
|
|
g##type *ptr; \
|
2008-07-17 02:30:24 +00:00
|
|
|
\
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
volscale = calc_scaled_tick_volume (src, scale); \
|
2011-08-18 17:15:03 +00:00
|
|
|
channels = GST_AUDIO_INFO_CHANNELS (&src->info); \
|
2018-01-31 15:39:05 +00:00
|
|
|
if (GST_AUDIO_INFO_LAYOUT (&src->info) == GST_AUDIO_LAYOUT_INTERLEAVED) { \
|
|
|
|
channel_step = 1; \
|
|
|
|
sample_step = channels; \
|
|
|
|
} else { \
|
|
|
|
channel_step = src->generate_samples_per_buffer; \
|
|
|
|
sample_step = 1; \
|
|
|
|
} \
|
2011-08-18 17:15:03 +00:00
|
|
|
samplerate = GST_AUDIO_INFO_RATE (&src->info); \
|
|
|
|
step = M_PI_M2 * src->freq / samplerate; \
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
num_nonzero_samples = samplerate * src->sine_periods_per_tick / src->freq; \
|
2008-07-17 02:30:24 +00:00
|
|
|
scl = 1024.0 / M_PI_M2; \
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
num_ramp_samples = src->apply_tick_ramp ? (samplerate / src->freq) : 0; \
|
|
|
|
end_ramp_offset = num_nonzero_samples - num_ramp_samples; \
|
2008-07-17 02:30:24 +00:00
|
|
|
\
|
|
|
|
for (i = 0; i < src->generate_samples_per_buffer; i++) { \
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
samplemod = (src->next_sample + i)%src->samples_between_ticks; \
|
2018-01-31 15:39:05 +00:00
|
|
|
\
|
|
|
|
ptr = samples; \
|
2016-09-02 13:23:18 +00:00
|
|
|
if (samplemod == 0) { \
|
|
|
|
src->accumulator = 0; \
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
src->tick_counter++; \
|
|
|
|
volscale = calc_scaled_tick_volume (src, scale); \
|
|
|
|
} else if (samplemod < num_nonzero_samples) { \
|
|
|
|
gdouble ramp; \
|
|
|
|
if (num_ramp_samples > 0) { \
|
|
|
|
ramp = \
|
|
|
|
(samplemod < num_ramp_samples) ? (((gdouble)samplemod) / num_ramp_samples) : \
|
|
|
|
(samplemod >= end_ramp_offset) ? (((gdouble)(num_nonzero_samples - samplemod)) / num_ramp_samples) \
|
|
|
|
: 1.0; \
|
|
|
|
if (ramp > 1.0) \
|
|
|
|
ramp = 1.0; \
|
|
|
|
ramp *= ramp * ramp; \
|
|
|
|
} else \
|
|
|
|
ramp = 1.0; \
|
|
|
|
\
|
2018-01-31 15:39:05 +00:00
|
|
|
for (c = 0; c < channels; ++c) { \
|
|
|
|
*ptr = \
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
(g##type) volscale * ramp * src->wave_table[(gint) (src->accumulator * scl)]; \
|
2018-01-31 15:39:05 +00:00
|
|
|
ptr += channel_step; \
|
|
|
|
} \
|
2008-07-17 02:30:24 +00:00
|
|
|
} else { \
|
2018-01-31 15:39:05 +00:00
|
|
|
for (c = 0; c < channels; ++c) { \
|
|
|
|
*ptr = 0; \
|
|
|
|
ptr += channel_step; \
|
|
|
|
} \
|
2008-07-17 02:30:24 +00:00
|
|
|
} \
|
2016-09-02 13:23:18 +00:00
|
|
|
\
|
|
|
|
src->accumulator += step; \
|
|
|
|
if (src->accumulator >= M_PI_M2) \
|
|
|
|
src->accumulator -= M_PI_M2; \
|
2018-01-31 15:39:05 +00:00
|
|
|
\
|
|
|
|
samples += sample_step; \
|
2008-07-17 02:30:24 +00:00
|
|
|
} \
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFINE_TICKS (int16, 32767.0);
|
|
|
|
DEFINE_TICKS (int32, 2147483647.0);
|
|
|
|
DEFINE_TICKS (float, 1.0);
|
|
|
|
DEFINE_TICKS (double, 1.0);
|
|
|
|
|
2009-06-21 17:42:15 +00:00
|
|
|
static const ProcessFunc tick_funcs[] = {
|
2008-07-17 02:30:24 +00:00
|
|
|
(ProcessFunc) gst_audio_test_src_create_tick_int16,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_tick_int32,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_tick_float,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_tick_double
|
|
|
|
};
|
|
|
|
|
2009-06-21 10:27:37 +00:00
|
|
|
/* Gaussian white noise using Box-Muller algorithm. unit variance
|
|
|
|
* normally-distributed random numbers are generated in pairs as the real
|
2019-08-29 17:42:39 +00:00
|
|
|
* and imaginary parts of a complex random variable with
|
2009-06-21 10:27:37 +00:00
|
|
|
* uniformly-distributed argument and \chi^{2}-distributed modulus.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define DEFINE_GAUSSIAN_WHITE_NOISE(type,scale) \
|
|
|
|
static void \
|
|
|
|
gst_audio_test_src_create_gaussian_white_noise_##type (GstAudioTestSrc * src, g##type * samples) \
|
|
|
|
{ \
|
2018-01-31 15:39:05 +00:00
|
|
|
gint i, c, channel_step, sample_step; \
|
|
|
|
g##type *ptr; \
|
2009-06-21 10:27:37 +00:00
|
|
|
gdouble amp = (src->volume * scale); \
|
2011-08-18 17:15:03 +00:00
|
|
|
gint channels = GST_AUDIO_INFO_CHANNELS (&src->info); \
|
2009-06-21 10:27:37 +00:00
|
|
|
\
|
2018-01-31 15:39:05 +00:00
|
|
|
if (GST_AUDIO_INFO_LAYOUT (&src->info) == GST_AUDIO_LAYOUT_INTERLEAVED) { \
|
|
|
|
channel_step = 1; \
|
|
|
|
sample_step = channels; \
|
|
|
|
} else { \
|
|
|
|
channel_step = src->generate_samples_per_buffer; \
|
|
|
|
sample_step = 1; \
|
|
|
|
} \
|
|
|
|
\
|
|
|
|
for (i = 0; i < src->generate_samples_per_buffer; i++) { \
|
|
|
|
ptr = samples; \
|
2011-08-18 17:15:03 +00:00
|
|
|
for (c = 0; c < channels; ++c) { \
|
2011-02-18 21:27:23 +00:00
|
|
|
gdouble mag = sqrt (-2 * log (1.0 - g_rand_double (src->gen))); \
|
|
|
|
gdouble phs = g_rand_double_range (src->gen, 0.0, M_PI_M2); \
|
2009-06-21 10:27:37 +00:00
|
|
|
\
|
2018-01-31 15:39:05 +00:00
|
|
|
*ptr = (g##type) (amp * mag * cos (phs)); \
|
|
|
|
ptr += channel_step; \
|
2011-08-18 17:15:03 +00:00
|
|
|
if (++c >= channels) \
|
2009-06-21 10:27:37 +00:00
|
|
|
break; \
|
2018-01-31 15:39:05 +00:00
|
|
|
*ptr = (g##type) (amp * mag * sin (phs)); \
|
|
|
|
ptr += channel_step; \
|
2009-06-21 10:27:37 +00:00
|
|
|
} \
|
2018-01-31 15:39:05 +00:00
|
|
|
samples += sample_step; \
|
2009-06-21 10:27:37 +00:00
|
|
|
} \
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFINE_GAUSSIAN_WHITE_NOISE (int16, 32767.0);
|
|
|
|
DEFINE_GAUSSIAN_WHITE_NOISE (int32, 2147483647.0);
|
|
|
|
DEFINE_GAUSSIAN_WHITE_NOISE (float, 1.0);
|
|
|
|
DEFINE_GAUSSIAN_WHITE_NOISE (double, 1.0);
|
|
|
|
|
2009-06-21 17:42:15 +00:00
|
|
|
static const ProcessFunc gaussian_white_noise_funcs[] = {
|
2009-06-21 10:27:37 +00:00
|
|
|
(ProcessFunc) gst_audio_test_src_create_gaussian_white_noise_int16,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_gaussian_white_noise_int32,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_gaussian_white_noise_float,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_gaussian_white_noise_double
|
|
|
|
};
|
|
|
|
|
2011-05-25 20:40:26 +00:00
|
|
|
/* Brownian (Red) Noise: noise where the power density decreases by 6 dB per
|
|
|
|
* octave with increasing frequency
|
|
|
|
*
|
|
|
|
* taken from http://vellocet.com/dsp/noise/VRand.html
|
|
|
|
* by Andrew Simper of Vellocet (andy@vellocet.com)
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define DEFINE_RED_NOISE(type,scale) \
|
|
|
|
static void \
|
|
|
|
gst_audio_test_src_create_red_noise_##type (GstAudioTestSrc * src, g##type * samples) \
|
|
|
|
{ \
|
2018-01-31 15:39:05 +00:00
|
|
|
gint i, c, channel_step, sample_step; \
|
|
|
|
g##type *ptr; \
|
2011-05-25 20:40:26 +00:00
|
|
|
gdouble amp = (src->volume * scale); \
|
|
|
|
gdouble state = src->red.state; \
|
2011-08-18 17:15:03 +00:00
|
|
|
gint channels = GST_AUDIO_INFO_CHANNELS (&src->info); \
|
2011-05-25 20:40:26 +00:00
|
|
|
\
|
2018-01-31 15:39:05 +00:00
|
|
|
if (GST_AUDIO_INFO_LAYOUT (&src->info) == GST_AUDIO_LAYOUT_INTERLEAVED) { \
|
|
|
|
channel_step = 1; \
|
|
|
|
sample_step = channels; \
|
|
|
|
} else { \
|
|
|
|
channel_step = src->generate_samples_per_buffer; \
|
|
|
|
sample_step = 1; \
|
|
|
|
} \
|
|
|
|
\
|
|
|
|
for (i = 0; i < src->generate_samples_per_buffer; i++) { \
|
|
|
|
ptr = samples; \
|
2011-08-18 17:15:03 +00:00
|
|
|
for (c = 0; c < channels; ++c) { \
|
2011-05-25 20:40:26 +00:00
|
|
|
while (TRUE) { \
|
2011-10-04 21:09:42 +00:00
|
|
|
gdouble r = g_rand_double_range (src->gen, -1.0, 1.0); \
|
2011-05-25 20:40:26 +00:00
|
|
|
state += r; \
|
2011-10-04 21:09:42 +00:00
|
|
|
if (state < -8.0f || state > 8.0f) state -= r; \
|
2011-05-25 20:40:26 +00:00
|
|
|
else break; \
|
|
|
|
} \
|
2018-01-31 15:39:05 +00:00
|
|
|
*ptr = (g##type) (amp * state * 0.0625f); /* /16.0 */ \
|
|
|
|
ptr += channel_step; \
|
2011-05-25 20:40:26 +00:00
|
|
|
} \
|
2018-01-31 15:39:05 +00:00
|
|
|
samples += sample_step; \
|
2011-05-25 20:40:26 +00:00
|
|
|
} \
|
|
|
|
src->red.state = state; \
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFINE_RED_NOISE (int16, 32767.0);
|
|
|
|
DEFINE_RED_NOISE (int32, 2147483647.0);
|
|
|
|
DEFINE_RED_NOISE (float, 1.0);
|
|
|
|
DEFINE_RED_NOISE (double, 1.0);
|
|
|
|
|
|
|
|
static const ProcessFunc red_noise_funcs[] = {
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_red_noise_int16,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_red_noise_int32,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_red_noise_float,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_red_noise_double
|
|
|
|
};
|
|
|
|
|
2011-05-25 21:17:40 +00:00
|
|
|
/* Blue Noise: apply spectral inversion to pink noise */
|
|
|
|
|
|
|
|
#define DEFINE_BLUE_NOISE(type) \
|
|
|
|
static void \
|
|
|
|
gst_audio_test_src_create_blue_noise_##type (GstAudioTestSrc * src, g##type * samples) \
|
|
|
|
{ \
|
2018-01-31 15:39:05 +00:00
|
|
|
gint i, c, channel_step, sample_step; \
|
2011-05-25 21:17:40 +00:00
|
|
|
static gdouble flip=1.0; \
|
2011-08-18 17:15:03 +00:00
|
|
|
gint channels = GST_AUDIO_INFO_CHANNELS (&src->info); \
|
2018-01-31 15:39:05 +00:00
|
|
|
g##type *ptr; \
|
|
|
|
\
|
|
|
|
if (GST_AUDIO_INFO_LAYOUT (&src->info) == GST_AUDIO_LAYOUT_INTERLEAVED) { \
|
|
|
|
channel_step = 1; \
|
|
|
|
sample_step = channels; \
|
|
|
|
} else { \
|
|
|
|
channel_step = src->generate_samples_per_buffer; \
|
|
|
|
sample_step = 1; \
|
|
|
|
} \
|
2011-05-25 21:17:40 +00:00
|
|
|
\
|
|
|
|
gst_audio_test_src_create_pink_noise_##type (src, samples); \
|
2018-01-31 15:39:05 +00:00
|
|
|
for (i = 0; i < src->generate_samples_per_buffer; i++) { \
|
|
|
|
ptr = samples; \
|
2011-08-18 17:15:03 +00:00
|
|
|
for (c = 0; c < channels; ++c) { \
|
2018-01-31 15:39:05 +00:00
|
|
|
*ptr *= flip; \
|
|
|
|
ptr += channel_step; \
|
2011-05-25 21:17:40 +00:00
|
|
|
} \
|
|
|
|
flip *= -1.0; \
|
2018-01-31 15:39:05 +00:00
|
|
|
samples += sample_step; \
|
2011-05-25 21:17:40 +00:00
|
|
|
} \
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFINE_BLUE_NOISE (int16);
|
|
|
|
DEFINE_BLUE_NOISE (int32);
|
|
|
|
DEFINE_BLUE_NOISE (float);
|
|
|
|
DEFINE_BLUE_NOISE (double);
|
|
|
|
|
|
|
|
static const ProcessFunc blue_noise_funcs[] = {
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_blue_noise_int16,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_blue_noise_int32,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_blue_noise_float,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_blue_noise_double
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/* Violet Noise: apply spectral inversion to red noise */
|
|
|
|
|
|
|
|
#define DEFINE_VIOLET_NOISE(type) \
|
|
|
|
static void \
|
|
|
|
gst_audio_test_src_create_violet_noise_##type (GstAudioTestSrc * src, g##type * samples) \
|
|
|
|
{ \
|
2018-01-31 15:39:05 +00:00
|
|
|
gint i, c, channel_step, sample_step; \
|
2011-05-25 21:17:40 +00:00
|
|
|
static gdouble flip=1.0; \
|
2011-08-18 17:15:03 +00:00
|
|
|
gint channels = GST_AUDIO_INFO_CHANNELS (&src->info); \
|
2018-01-31 15:39:05 +00:00
|
|
|
g##type *ptr; \
|
|
|
|
\
|
|
|
|
if (GST_AUDIO_INFO_LAYOUT (&src->info) == GST_AUDIO_LAYOUT_INTERLEAVED) { \
|
|
|
|
channel_step = 1; \
|
|
|
|
sample_step = channels; \
|
|
|
|
} else { \
|
|
|
|
channel_step = src->generate_samples_per_buffer; \
|
|
|
|
sample_step = 1; \
|
|
|
|
} \
|
2011-05-25 21:17:40 +00:00
|
|
|
\
|
|
|
|
gst_audio_test_src_create_red_noise_##type (src, samples); \
|
2018-01-31 15:39:05 +00:00
|
|
|
for (i = 0; i < src->generate_samples_per_buffer; i++) { \
|
|
|
|
ptr = samples; \
|
2011-08-18 17:15:03 +00:00
|
|
|
for (c = 0; c < channels; ++c) { \
|
2018-01-31 15:39:05 +00:00
|
|
|
*ptr *= flip; \
|
|
|
|
ptr += channel_step; \
|
2011-05-25 21:17:40 +00:00
|
|
|
} \
|
|
|
|
flip *= -1.0; \
|
2018-01-31 15:39:05 +00:00
|
|
|
samples += sample_step; \
|
2011-05-25 21:17:40 +00:00
|
|
|
} \
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFINE_VIOLET_NOISE (int16);
|
|
|
|
DEFINE_VIOLET_NOISE (int32);
|
|
|
|
DEFINE_VIOLET_NOISE (float);
|
|
|
|
DEFINE_VIOLET_NOISE (double);
|
|
|
|
|
|
|
|
static const ProcessFunc violet_noise_funcs[] = {
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_violet_noise_int16,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_violet_noise_int32,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_violet_noise_float,
|
|
|
|
(ProcessFunc) gst_audio_test_src_create_violet_noise_double
|
|
|
|
};
|
2011-05-25 20:40:26 +00:00
|
|
|
|
|
|
|
|
gst/audiotestsrc/gstaudiotestsrc.*: update to basesrc changes, implement segmented seeking and eos handling, add a 's...
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audio_test_src_class_init),
(gst_audio_test_src_init), (gst_audio_test_src_src_fixate),
(gst_audio_test_src_query), (gst_audio_test_src_create_sine),
(gst_audio_test_src_create_square),
(gst_audio_test_src_create_saw),
(gst_audio_test_src_create_triangle),
(gst_audio_test_src_create_silence),
(gst_audio_test_src_create_white_noise),
(gst_audio_test_src_create_pink_noise),
(gst_audio_test_src_init_sine_table),
(gst_audio_test_src_create_sine_table),
(gst_audio_test_src_change_wave),
(gst_audio_test_src_change_volume), (gst_audio_test_src_do_seek),
(gst_audio_test_src_create), (gst_audio_test_src_set_property):
* gst/audiotestsrc/gstaudiotestsrc.h:
update to basesrc changes, implement segmented seeking and eos handling,
add a 'sine-tab' waveform for performance critical playback
2005-12-29 20:37:23 +00:00
|
|
|
/*
|
|
|
|
* gst_audio_test_src_change_wave:
|
2011-10-17 14:41:58 +00:00
|
|
|
* Assign function pointer of wave generator.
|
gst/audiotestsrc/gstaudiotestsrc.*: update to basesrc changes, implement segmented seeking and eos handling, add a 's...
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audio_test_src_class_init),
(gst_audio_test_src_init), (gst_audio_test_src_src_fixate),
(gst_audio_test_src_query), (gst_audio_test_src_create_sine),
(gst_audio_test_src_create_square),
(gst_audio_test_src_create_saw),
(gst_audio_test_src_create_triangle),
(gst_audio_test_src_create_silence),
(gst_audio_test_src_create_white_noise),
(gst_audio_test_src_create_pink_noise),
(gst_audio_test_src_init_sine_table),
(gst_audio_test_src_create_sine_table),
(gst_audio_test_src_change_wave),
(gst_audio_test_src_change_volume), (gst_audio_test_src_do_seek),
(gst_audio_test_src_create), (gst_audio_test_src_set_property):
* gst/audiotestsrc/gstaudiotestsrc.h:
update to basesrc changes, implement segmented seeking and eos handling,
add a 'sine-tab' waveform for performance critical playback
2005-12-29 20:37:23 +00:00
|
|
|
*/
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
static void
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_audio_test_src_change_wave (GstAudioTestSrc * src)
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
{
|
2011-08-18 17:15:03 +00:00
|
|
|
gint idx;
|
|
|
|
|
2015-11-02 12:19:09 +00:00
|
|
|
src->pack_func = NULL;
|
|
|
|
src->process = NULL;
|
|
|
|
|
2011-10-17 14:41:58 +00:00
|
|
|
/* not negotiated yet? */
|
2015-11-02 12:19:09 +00:00
|
|
|
if (src->info.finfo == NULL)
|
2011-10-17 14:41:58 +00:00
|
|
|
return;
|
|
|
|
|
2011-08-18 17:15:03 +00:00
|
|
|
switch (GST_AUDIO_FORMAT_INFO_FORMAT (src->info.finfo)) {
|
|
|
|
case GST_AUDIO_FORMAT_S16:
|
|
|
|
idx = 0;
|
|
|
|
break;
|
|
|
|
case GST_AUDIO_FORMAT_S32:
|
|
|
|
idx = 1;
|
|
|
|
break;
|
|
|
|
case GST_AUDIO_FORMAT_F32:
|
|
|
|
idx = 2;
|
|
|
|
break;
|
|
|
|
case GST_AUDIO_FORMAT_F64:
|
|
|
|
idx = 3;
|
|
|
|
break;
|
|
|
|
default:
|
2015-11-02 12:19:09 +00:00
|
|
|
/* special format */
|
|
|
|
switch (src->info.finfo->unpack_format) {
|
|
|
|
case GST_AUDIO_FORMAT_S32:
|
|
|
|
idx = 1;
|
|
|
|
src->pack_func = src->info.finfo->pack_func;
|
|
|
|
src->pack_size = sizeof (gint32);
|
|
|
|
break;
|
|
|
|
case GST_AUDIO_FORMAT_F64:
|
|
|
|
idx = 3;
|
|
|
|
src->pack_func = src->info.finfo->pack_func;
|
|
|
|
src->pack_size = sizeof (gdouble);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
g_assert_not_reached ();
|
|
|
|
return;
|
|
|
|
}
|
2007-08-03 19:53:11 +00:00
|
|
|
}
|
|
|
|
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
switch (src->wave) {
|
2005-12-01 01:12:55 +00:00
|
|
|
case GST_AUDIO_TEST_SRC_WAVE_SINE:
|
2011-08-18 17:15:03 +00:00
|
|
|
src->process = sine_funcs[idx];
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
break;
|
2005-12-01 01:12:55 +00:00
|
|
|
case GST_AUDIO_TEST_SRC_WAVE_SQUARE:
|
2011-08-18 17:15:03 +00:00
|
|
|
src->process = square_funcs[idx];
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
break;
|
2005-12-01 01:12:55 +00:00
|
|
|
case GST_AUDIO_TEST_SRC_WAVE_SAW:
|
2011-08-18 17:15:03 +00:00
|
|
|
src->process = saw_funcs[idx];
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
break;
|
2005-12-01 01:12:55 +00:00
|
|
|
case GST_AUDIO_TEST_SRC_WAVE_TRIANGLE:
|
2011-08-18 17:15:03 +00:00
|
|
|
src->process = triangle_funcs[idx];
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
break;
|
2005-12-01 01:12:55 +00:00
|
|
|
case GST_AUDIO_TEST_SRC_WAVE_SILENCE:
|
2011-08-18 17:15:03 +00:00
|
|
|
src->process = silence_funcs[idx];
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
break;
|
2005-12-01 01:12:55 +00:00
|
|
|
case GST_AUDIO_TEST_SRC_WAVE_WHITE_NOISE:
|
2011-02-18 21:27:23 +00:00
|
|
|
if (!(src->gen))
|
|
|
|
src->gen = g_rand_new ();
|
2011-08-18 17:15:03 +00:00
|
|
|
src->process = white_noise_funcs[idx];
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
break;
|
2005-12-01 01:12:55 +00:00
|
|
|
case GST_AUDIO_TEST_SRC_WAVE_PINK_NOISE:
|
2011-02-18 21:27:23 +00:00
|
|
|
if (!(src->gen))
|
|
|
|
src->gen = g_rand_new ();
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_audio_test_src_init_pink_noise (src);
|
2011-08-18 17:15:03 +00:00
|
|
|
src->process = pink_noise_funcs[idx];
|
gst/audiotestsrc/gstaudiotestsrc.*: fixed typo, added pink noise
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_class_init),
(gst_audiotestsrc_init), (gst_audiotestsrc_create_sine),
(gst_audiotestsrc_create_square), (gst_audiotestsrc_create_saw),
(gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_init_pink_noise),
(gst_audiotestsrc_generate_pink_noise_value),
(gst_audiotestsrc_create_pink_noise),
(gst_audiotestsrc_change_wave):
* gst/audiotestsrc/gstaudiotestsrc.h:
fixed typo, added pink noise
2005-10-09 20:47:31 +00:00
|
|
|
break;
|
gst/audiotestsrc/gstaudiotestsrc.*: update to basesrc changes, implement segmented seeking and eos handling, add a 's...
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audio_test_src_class_init),
(gst_audio_test_src_init), (gst_audio_test_src_src_fixate),
(gst_audio_test_src_query), (gst_audio_test_src_create_sine),
(gst_audio_test_src_create_square),
(gst_audio_test_src_create_saw),
(gst_audio_test_src_create_triangle),
(gst_audio_test_src_create_silence),
(gst_audio_test_src_create_white_noise),
(gst_audio_test_src_create_pink_noise),
(gst_audio_test_src_init_sine_table),
(gst_audio_test_src_create_sine_table),
(gst_audio_test_src_change_wave),
(gst_audio_test_src_change_volume), (gst_audio_test_src_do_seek),
(gst_audio_test_src_create), (gst_audio_test_src_set_property):
* gst/audiotestsrc/gstaudiotestsrc.h:
update to basesrc changes, implement segmented seeking and eos handling,
add a 'sine-tab' waveform for performance critical playback
2005-12-29 20:37:23 +00:00
|
|
|
case GST_AUDIO_TEST_SRC_WAVE_SINE_TAB:
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
gst_audio_test_src_init_sine_table (src, TRUE);
|
2011-08-18 17:15:03 +00:00
|
|
|
src->process = sine_table_funcs[idx];
|
gst/audiotestsrc/gstaudiotestsrc.*: update to basesrc changes, implement segmented seeking and eos handling, add a 's...
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audio_test_src_class_init),
(gst_audio_test_src_init), (gst_audio_test_src_src_fixate),
(gst_audio_test_src_query), (gst_audio_test_src_create_sine),
(gst_audio_test_src_create_square),
(gst_audio_test_src_create_saw),
(gst_audio_test_src_create_triangle),
(gst_audio_test_src_create_silence),
(gst_audio_test_src_create_white_noise),
(gst_audio_test_src_create_pink_noise),
(gst_audio_test_src_init_sine_table),
(gst_audio_test_src_create_sine_table),
(gst_audio_test_src_change_wave),
(gst_audio_test_src_change_volume), (gst_audio_test_src_do_seek),
(gst_audio_test_src_create), (gst_audio_test_src_set_property):
* gst/audiotestsrc/gstaudiotestsrc.h:
update to basesrc changes, implement segmented seeking and eos handling,
add a 'sine-tab' waveform for performance critical playback
2005-12-29 20:37:23 +00:00
|
|
|
break;
|
2008-07-17 02:30:24 +00:00
|
|
|
case GST_AUDIO_TEST_SRC_WAVE_TICKS:
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
gst_audio_test_src_init_sine_table (src, FALSE);
|
2011-08-18 17:15:03 +00:00
|
|
|
src->process = tick_funcs[idx];
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
src->samples_between_ticks =
|
|
|
|
gst_util_uint64_scale_int (src->tick_interval,
|
|
|
|
GST_AUDIO_INFO_RATE (&(src->info)), GST_SECOND);
|
2008-07-17 02:30:24 +00:00
|
|
|
break;
|
2009-06-21 10:27:37 +00:00
|
|
|
case GST_AUDIO_TEST_SRC_WAVE_GAUSSIAN_WHITE_NOISE:
|
2011-02-18 21:27:23 +00:00
|
|
|
if (!(src->gen))
|
|
|
|
src->gen = g_rand_new ();
|
2011-08-18 17:15:03 +00:00
|
|
|
src->process = gaussian_white_noise_funcs[idx];
|
2009-06-21 10:27:37 +00:00
|
|
|
break;
|
2011-05-25 20:40:26 +00:00
|
|
|
case GST_AUDIO_TEST_SRC_WAVE_RED_NOISE:
|
|
|
|
if (!(src->gen))
|
|
|
|
src->gen = g_rand_new ();
|
|
|
|
src->red.state = 0.0;
|
2011-08-18 17:15:03 +00:00
|
|
|
src->process = red_noise_funcs[idx];
|
2011-05-25 20:40:26 +00:00
|
|
|
break;
|
2011-05-25 21:17:40 +00:00
|
|
|
case GST_AUDIO_TEST_SRC_WAVE_BLUE_NOISE:
|
|
|
|
if (!(src->gen))
|
|
|
|
src->gen = g_rand_new ();
|
|
|
|
gst_audio_test_src_init_pink_noise (src);
|
2011-08-18 17:15:03 +00:00
|
|
|
src->process = blue_noise_funcs[idx];
|
2011-05-25 21:17:40 +00:00
|
|
|
break;
|
|
|
|
case GST_AUDIO_TEST_SRC_WAVE_VIOLET_NOISE:
|
|
|
|
if (!(src->gen))
|
|
|
|
src->gen = g_rand_new ();
|
|
|
|
src->red.state = 0.0;
|
2011-08-18 17:15:03 +00:00
|
|
|
src->process = violet_noise_funcs[idx];
|
2011-10-06 17:20:32 +00:00
|
|
|
break;
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
default:
|
|
|
|
GST_ERROR ("invalid wave-form");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
gst/audiotestsrc/gstaudiotestsrc.*: update to basesrc changes, implement segmented seeking and eos handling, add a 's...
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audio_test_src_class_init),
(gst_audio_test_src_init), (gst_audio_test_src_src_fixate),
(gst_audio_test_src_query), (gst_audio_test_src_create_sine),
(gst_audio_test_src_create_square),
(gst_audio_test_src_create_saw),
(gst_audio_test_src_create_triangle),
(gst_audio_test_src_create_silence),
(gst_audio_test_src_create_white_noise),
(gst_audio_test_src_create_pink_noise),
(gst_audio_test_src_init_sine_table),
(gst_audio_test_src_create_sine_table),
(gst_audio_test_src_change_wave),
(gst_audio_test_src_change_volume), (gst_audio_test_src_do_seek),
(gst_audio_test_src_create), (gst_audio_test_src_set_property):
* gst/audiotestsrc/gstaudiotestsrc.h:
update to basesrc changes, implement segmented seeking and eos handling,
add a 'sine-tab' waveform for performance critical playback
2005-12-29 20:37:23 +00:00
|
|
|
/*
|
|
|
|
* gst_audio_test_src_change_volume:
|
|
|
|
* Recalc wave tables for precalculated waves.
|
|
|
|
*/
|
|
|
|
static void
|
|
|
|
gst_audio_test_src_change_volume (GstAudioTestSrc * src)
|
|
|
|
{
|
|
|
|
switch (src->wave) {
|
|
|
|
case GST_AUDIO_TEST_SRC_WAVE_SINE_TAB:
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
gst_audio_test_src_init_sine_table (src, TRUE);
|
gst/audiotestsrc/gstaudiotestsrc.*: update to basesrc changes, implement segmented seeking and eos handling, add a 's...
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audio_test_src_class_init),
(gst_audio_test_src_init), (gst_audio_test_src_src_fixate),
(gst_audio_test_src_query), (gst_audio_test_src_create_sine),
(gst_audio_test_src_create_square),
(gst_audio_test_src_create_saw),
(gst_audio_test_src_create_triangle),
(gst_audio_test_src_create_silence),
(gst_audio_test_src_create_white_noise),
(gst_audio_test_src_create_pink_noise),
(gst_audio_test_src_init_sine_table),
(gst_audio_test_src_create_sine_table),
(gst_audio_test_src_change_wave),
(gst_audio_test_src_change_volume), (gst_audio_test_src_do_seek),
(gst_audio_test_src_create), (gst_audio_test_src_set_property):
* gst/audiotestsrc/gstaudiotestsrc.h:
update to basesrc changes, implement segmented seeking and eos handling,
add a 'sine-tab' waveform for performance critical playback
2005-12-29 20:37:23 +00:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2005-11-10 14:58:41 +00:00
|
|
|
static void
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_audio_test_src_get_times (GstBaseSrc * basesrc, GstBuffer * buffer,
|
2005-11-10 14:58:41 +00:00
|
|
|
GstClockTime * start, GstClockTime * end)
|
|
|
|
{
|
|
|
|
/* for live sources, sync on the timestamp of the buffer */
|
|
|
|
if (gst_base_src_is_live (basesrc)) {
|
|
|
|
GstClockTime timestamp = GST_BUFFER_TIMESTAMP (buffer);
|
|
|
|
|
|
|
|
if (GST_CLOCK_TIME_IS_VALID (timestamp)) {
|
|
|
|
/* get duration to calculate end time */
|
|
|
|
GstClockTime duration = GST_BUFFER_DURATION (buffer);
|
|
|
|
|
|
|
|
if (GST_CLOCK_TIME_IS_VALID (duration)) {
|
|
|
|
*end = timestamp + duration;
|
|
|
|
}
|
|
|
|
*start = timestamp;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
*start = -1;
|
|
|
|
*end = -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-10-10 15:45:15 +00:00
|
|
|
static gboolean
|
|
|
|
gst_audio_test_src_start (GstBaseSrc * basesrc)
|
|
|
|
{
|
|
|
|
GstAudioTestSrc *src = GST_AUDIO_TEST_SRC (basesrc);
|
|
|
|
|
|
|
|
src->next_sample = 0;
|
|
|
|
src->next_byte = 0;
|
|
|
|
src->next_time = 0;
|
|
|
|
src->check_seek_stop = FALSE;
|
|
|
|
src->eos_reached = FALSE;
|
|
|
|
src->tags_pushed = FALSE;
|
|
|
|
src->accumulator = 0;
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
src->tick_counter = 0;
|
2008-10-10 15:45:15 +00:00
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
gst_audio_test_src_stop (GstBaseSrc * basesrc)
|
|
|
|
{
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* seek to time, will be called when we operate in push mode. In pull mode we
|
2009-05-01 00:03:06 +00:00
|
|
|
* get the requested byte offset. */
|
2005-12-14 20:42:11 +00:00
|
|
|
static gboolean
|
|
|
|
gst_audio_test_src_do_seek (GstBaseSrc * basesrc, GstSegment * segment)
|
|
|
|
{
|
|
|
|
GstAudioTestSrc *src = GST_AUDIO_TEST_SRC (basesrc);
|
|
|
|
GstClockTime time;
|
2011-08-18 17:15:03 +00:00
|
|
|
gint samplerate, bpf;
|
2013-03-29 15:44:17 +00:00
|
|
|
gint64 next_sample;
|
2005-12-14 20:42:11 +00:00
|
|
|
|
2010-04-02 18:01:25 +00:00
|
|
|
GST_DEBUG_OBJECT (src, "seeking %" GST_SEGMENT_FORMAT, segment);
|
|
|
|
|
2011-05-16 11:48:11 +00:00
|
|
|
time = segment->position;
|
2010-04-02 18:01:25 +00:00
|
|
|
src->reverse = (segment->rate < 0.0);
|
2005-12-14 20:42:11 +00:00
|
|
|
|
2011-08-18 17:15:03 +00:00
|
|
|
samplerate = GST_AUDIO_INFO_RATE (&src->info);
|
|
|
|
bpf = GST_AUDIO_INFO_BPF (&src->info);
|
|
|
|
|
2013-03-29 16:14:09 +00:00
|
|
|
/* now move to the time indicated, don't seek to the sample *after* the time */
|
2013-03-29 15:44:17 +00:00
|
|
|
next_sample = gst_util_uint64_scale_int (time, samplerate, GST_SECOND);
|
|
|
|
src->next_byte = next_sample * bpf;
|
2011-08-18 17:15:03 +00:00
|
|
|
if (samplerate == 0)
|
|
|
|
src->next_time = 0;
|
|
|
|
else
|
|
|
|
src->next_time =
|
2013-03-29 15:44:17 +00:00
|
|
|
gst_util_uint64_scale_round (next_sample, GST_SECOND, samplerate);
|
2005-12-14 20:42:11 +00:00
|
|
|
|
2010-04-02 18:01:25 +00:00
|
|
|
GST_DEBUG_OBJECT (src, "seeking next_sample=%" G_GINT64_FORMAT
|
2013-03-29 15:44:17 +00:00
|
|
|
" next_time=%" GST_TIME_FORMAT, next_sample,
|
2010-04-02 18:01:25 +00:00
|
|
|
GST_TIME_ARGS (src->next_time));
|
|
|
|
|
2008-10-10 15:45:15 +00:00
|
|
|
g_assert (src->next_time <= time);
|
2005-12-14 20:42:11 +00:00
|
|
|
|
2013-03-29 15:44:17 +00:00
|
|
|
src->next_sample = next_sample;
|
|
|
|
|
2016-09-17 10:42:46 +00:00
|
|
|
if (segment->rate > 0 && GST_CLOCK_TIME_IS_VALID (segment->stop)) {
|
gst/audiotestsrc/gstaudiotestsrc.*: update to basesrc changes, implement segmented seeking and eos handling, add a 's...
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audio_test_src_class_init),
(gst_audio_test_src_init), (gst_audio_test_src_src_fixate),
(gst_audio_test_src_query), (gst_audio_test_src_create_sine),
(gst_audio_test_src_create_square),
(gst_audio_test_src_create_saw),
(gst_audio_test_src_create_triangle),
(gst_audio_test_src_create_silence),
(gst_audio_test_src_create_white_noise),
(gst_audio_test_src_create_pink_noise),
(gst_audio_test_src_init_sine_table),
(gst_audio_test_src_create_sine_table),
(gst_audio_test_src_change_wave),
(gst_audio_test_src_change_volume), (gst_audio_test_src_do_seek),
(gst_audio_test_src_create), (gst_audio_test_src_set_property):
* gst/audiotestsrc/gstaudiotestsrc.h:
update to basesrc changes, implement segmented seeking and eos handling,
add a 'sine-tab' waveform for performance critical playback
2005-12-29 20:37:23 +00:00
|
|
|
time = segment->stop;
|
2013-03-24 20:44:58 +00:00
|
|
|
src->sample_stop =
|
|
|
|
gst_util_uint64_scale_round (time, samplerate, GST_SECOND);
|
gst/audiotestsrc/gstaudiotestsrc.*: update to basesrc changes, implement segmented seeking and eos handling, add a 's...
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audio_test_src_class_init),
(gst_audio_test_src_init), (gst_audio_test_src_src_fixate),
(gst_audio_test_src_query), (gst_audio_test_src_create_sine),
(gst_audio_test_src_create_square),
(gst_audio_test_src_create_saw),
(gst_audio_test_src_create_triangle),
(gst_audio_test_src_create_silence),
(gst_audio_test_src_create_white_noise),
(gst_audio_test_src_create_pink_noise),
(gst_audio_test_src_init_sine_table),
(gst_audio_test_src_create_sine_table),
(gst_audio_test_src_change_wave),
(gst_audio_test_src_change_volume), (gst_audio_test_src_do_seek),
(gst_audio_test_src_create), (gst_audio_test_src_set_property):
* gst/audiotestsrc/gstaudiotestsrc.h:
update to basesrc changes, implement segmented seeking and eos handling,
add a 'sine-tab' waveform for performance critical playback
2005-12-29 20:37:23 +00:00
|
|
|
src->check_seek_stop = TRUE;
|
2016-09-17 10:42:46 +00:00
|
|
|
} 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;
|
gst/audiotestsrc/gstaudiotestsrc.*: update to basesrc changes, implement segmented seeking and eos handling, add a 's...
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audio_test_src_class_init),
(gst_audio_test_src_init), (gst_audio_test_src_src_fixate),
(gst_audio_test_src_query), (gst_audio_test_src_create_sine),
(gst_audio_test_src_create_square),
(gst_audio_test_src_create_saw),
(gst_audio_test_src_create_triangle),
(gst_audio_test_src_create_silence),
(gst_audio_test_src_create_white_noise),
(gst_audio_test_src_create_pink_noise),
(gst_audio_test_src_init_sine_table),
(gst_audio_test_src_create_sine_table),
(gst_audio_test_src_change_wave),
(gst_audio_test_src_change_volume), (gst_audio_test_src_do_seek),
(gst_audio_test_src_create), (gst_audio_test_src_set_property):
* gst/audiotestsrc/gstaudiotestsrc.h:
update to basesrc changes, implement segmented seeking and eos handling,
add a 'sine-tab' waveform for performance critical playback
2005-12-29 20:37:23 +00:00
|
|
|
} else {
|
|
|
|
src->check_seek_stop = FALSE;
|
|
|
|
}
|
|
|
|
src->eos_reached = FALSE;
|
2005-12-16 22:00:07 +00:00
|
|
|
|
2005-12-14 20:42:11 +00:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
gst_audio_test_src_is_seekable (GstBaseSrc * basesrc)
|
|
|
|
{
|
|
|
|
/* we're seekable... */
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
static GstFlowReturn
|
2011-08-25 11:21:14 +00:00
|
|
|
gst_audio_test_src_fill (GstBaseSrc * basesrc, guint64 offset,
|
|
|
|
guint length, GstBuffer * buffer)
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
{
|
|
|
|
GstAudioTestSrc *src;
|
2005-12-14 20:42:11 +00:00
|
|
|
GstClockTime next_time;
|
2008-10-10 15:45:15 +00:00
|
|
|
gint64 next_sample, next_byte;
|
2010-04-02 18:01:25 +00:00
|
|
|
gint bytes, samples;
|
2009-07-20 10:51:30 +00:00
|
|
|
GstElementClass *eclass;
|
2012-01-20 15:11:54 +00:00
|
|
|
GstMapInfo map;
|
2011-08-18 17:15:03 +00:00
|
|
|
gint samplerate, bpf;
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2005-12-01 01:12:55 +00:00
|
|
|
src = GST_AUDIO_TEST_SRC (basesrc);
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2006-03-24 10:42:11 +00:00
|
|
|
/* example for tagging generated data */
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
if (!src->tags_pushed) {
|
|
|
|
GstTagList *taglist;
|
|
|
|
|
2011-10-30 11:09:10 +00:00
|
|
|
taglist = gst_tag_list_new (GST_TAG_DESCRIPTION, "audiotest wave", NULL);
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2009-07-20 10:51:30 +00:00
|
|
|
eclass = GST_ELEMENT_CLASS (parent_class);
|
|
|
|
if (eclass->send_event)
|
|
|
|
eclass->send_event (GST_ELEMENT_CAST (basesrc),
|
2012-07-27 21:59:31 +00:00
|
|
|
gst_event_new_tag (taglist));
|
2011-11-01 16:57:59 +00:00
|
|
|
else
|
2012-09-14 15:53:21 +00:00
|
|
|
gst_tag_list_unref (taglist);
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
src->tags_pushed = TRUE;
|
|
|
|
}
|
|
|
|
|
2010-04-02 18:01:25 +00:00
|
|
|
if (src->eos_reached) {
|
|
|
|
GST_INFO_OBJECT (src, "eos");
|
2011-10-10 09:39:52 +00:00
|
|
|
return GST_FLOW_EOS;
|
2010-04-02 18:01:25 +00:00
|
|
|
}
|
2008-10-10 15:45:15 +00:00
|
|
|
|
2011-08-18 17:15:03 +00:00
|
|
|
samplerate = GST_AUDIO_INFO_RATE (&src->info);
|
|
|
|
bpf = GST_AUDIO_INFO_BPF (&src->info);
|
|
|
|
|
2008-10-10 15:45:15 +00:00
|
|
|
/* if no length was given, use our default length in samples otherwise convert
|
|
|
|
* the length in bytes to samples. */
|
|
|
|
if (length == -1)
|
|
|
|
samples = src->samples_per_buffer;
|
|
|
|
else
|
2011-08-18 17:15:03 +00:00
|
|
|
samples = length / bpf;
|
2008-10-10 15:45:15 +00:00
|
|
|
|
|
|
|
/* if no offset was given, use our next logical byte */
|
|
|
|
if (offset == -1)
|
|
|
|
offset = src->next_byte;
|
|
|
|
|
|
|
|
/* now see if we are at the byteoffset we think we are */
|
|
|
|
if (offset != src->next_byte) {
|
|
|
|
GST_DEBUG_OBJECT (src, "seek to new offset %" G_GUINT64_FORMAT, offset);
|
|
|
|
/* we have a discont in the expected sample offset, do a 'seek' */
|
2011-08-18 17:15:03 +00:00
|
|
|
src->next_sample = offset / bpf;
|
2008-10-10 15:45:15 +00:00
|
|
|
src->next_time =
|
2011-08-18 17:15:03 +00:00
|
|
|
gst_util_uint64_scale_int (src->next_sample, GST_SECOND, samplerate);
|
2008-10-10 15:45:15 +00:00
|
|
|
src->next_byte = offset;
|
|
|
|
}
|
|
|
|
|
2006-03-24 10:42:11 +00:00
|
|
|
/* check for eos */
|
2016-09-17 10:42:46 +00:00
|
|
|
if (src->check_seek_stop && !src->reverse &&
|
2008-10-10 15:45:15 +00:00
|
|
|
(src->sample_stop > src->next_sample) &&
|
|
|
|
(src->sample_stop < src->next_sample + samples)
|
gst/audiotestsrc/gstaudiotestsrc.*: update to basesrc changes, implement segmented seeking and eos handling, add a 's...
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audio_test_src_class_init),
(gst_audio_test_src_init), (gst_audio_test_src_src_fixate),
(gst_audio_test_src_query), (gst_audio_test_src_create_sine),
(gst_audio_test_src_create_square),
(gst_audio_test_src_create_saw),
(gst_audio_test_src_create_triangle),
(gst_audio_test_src_create_silence),
(gst_audio_test_src_create_white_noise),
(gst_audio_test_src_create_pink_noise),
(gst_audio_test_src_init_sine_table),
(gst_audio_test_src_create_sine_table),
(gst_audio_test_src_change_wave),
(gst_audio_test_src_change_volume), (gst_audio_test_src_do_seek),
(gst_audio_test_src_create), (gst_audio_test_src_set_property):
* gst/audiotestsrc/gstaudiotestsrc.h:
update to basesrc changes, implement segmented seeking and eos handling,
add a 'sine-tab' waveform for performance critical playback
2005-12-29 20:37:23 +00:00
|
|
|
) {
|
|
|
|
/* calculate only partial buffer */
|
2016-09-17 10:42:46 +00:00
|
|
|
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 &&
|
audiotestsrc: Fix the way we compute EOS in reverse playback
In reverse playback we were not taking into account the current buffer
samples to check if we had reached EOS which was leading to a buffer
with PTS = CLOCK_TIME_NONE containing too many frames followed by a
useless buffer with pts=0 duration=0, and a g_critical issue in
gst_object_sync_values.
Also add a validate based test case.
Without that patch this is how the expectation fails:
``` diff
--- log-asink-sink-expected 2020-05-22 23:22:42.654384579 -0400
+++ log-asink-sink-actual 2020-05-22 23:29:35.671586380 -0400
@@ -27,5 +27,6 @@
buffer: pts=0:00:00.058820861, due=0:00:00.023219955, flags=discont
buffer: pts=0:00:00.035600907, due=0:00:00.023219954, flags=discont
buffer: pts=0:00:00.012380952, due=0:00:00.023219955, flags=discont
-buffer: pts=0:00:00.000000000, due=0:00:00.012380952, flags=discont
+buffer: due=0:00:00.012380953, flags=discont
+buffer: pts=0:00:00.000000000, flags=discont
event eos: (no structure)
```
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/667>
2020-05-23 03:24:55 +00:00
|
|
|
(src->sample_stop >= (src->next_sample - samples))
|
2016-09-17 10:42:46 +00:00
|
|
|
) {
|
|
|
|
/* calculate only partial buffer */
|
audiotestsrc: Fix the way we compute EOS in reverse playback
In reverse playback we were not taking into account the current buffer
samples to check if we had reached EOS which was leading to a buffer
with PTS = CLOCK_TIME_NONE containing too many frames followed by a
useless buffer with pts=0 duration=0, and a g_critical issue in
gst_object_sync_values.
Also add a validate based test case.
Without that patch this is how the expectation fails:
``` diff
--- log-asink-sink-expected 2020-05-22 23:22:42.654384579 -0400
+++ log-asink-sink-actual 2020-05-22 23:29:35.671586380 -0400
@@ -27,5 +27,6 @@
buffer: pts=0:00:00.058820861, due=0:00:00.023219955, flags=discont
buffer: pts=0:00:00.035600907, due=0:00:00.023219954, flags=discont
buffer: pts=0:00:00.012380952, due=0:00:00.023219955, flags=discont
-buffer: pts=0:00:00.000000000, due=0:00:00.012380952, flags=discont
+buffer: due=0:00:00.012380953, flags=discont
+buffer: pts=0:00:00.000000000, flags=discont
event eos: (no structure)
```
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/667>
2020-05-23 03:24:55 +00:00
|
|
|
src->generate_samples_per_buffer = src->next_sample - src->sample_stop;
|
2008-10-10 15:45:15 +00:00
|
|
|
next_sample = src->sample_stop;
|
gst/audiotestsrc/gstaudiotestsrc.*: update to basesrc changes, implement segmented seeking and eos handling, add a 's...
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audio_test_src_class_init),
(gst_audio_test_src_init), (gst_audio_test_src_src_fixate),
(gst_audio_test_src_query), (gst_audio_test_src_create_sine),
(gst_audio_test_src_create_square),
(gst_audio_test_src_create_saw),
(gst_audio_test_src_create_triangle),
(gst_audio_test_src_create_silence),
(gst_audio_test_src_create_white_noise),
(gst_audio_test_src_create_pink_noise),
(gst_audio_test_src_init_sine_table),
(gst_audio_test_src_create_sine_table),
(gst_audio_test_src_change_wave),
(gst_audio_test_src_change_volume), (gst_audio_test_src_do_seek),
(gst_audio_test_src_create), (gst_audio_test_src_set_property):
* gst/audiotestsrc/gstaudiotestsrc.h:
update to basesrc changes, implement segmented seeking and eos handling,
add a 'sine-tab' waveform for performance critical playback
2005-12-29 20:37:23 +00:00
|
|
|
src->eos_reached = TRUE;
|
|
|
|
} else {
|
|
|
|
/* calculate full buffer */
|
2008-10-10 15:45:15 +00:00
|
|
|
src->generate_samples_per_buffer = samples;
|
2010-04-02 18:01:25 +00:00
|
|
|
next_sample = src->next_sample + (src->reverse ? (-samples) : samples);
|
gst/audiotestsrc/gstaudiotestsrc.*: update to basesrc changes, implement segmented seeking and eos handling, add a 's...
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audio_test_src_class_init),
(gst_audio_test_src_init), (gst_audio_test_src_src_fixate),
(gst_audio_test_src_query), (gst_audio_test_src_create_sine),
(gst_audio_test_src_create_square),
(gst_audio_test_src_create_saw),
(gst_audio_test_src_create_triangle),
(gst_audio_test_src_create_silence),
(gst_audio_test_src_create_white_noise),
(gst_audio_test_src_create_pink_noise),
(gst_audio_test_src_init_sine_table),
(gst_audio_test_src_create_sine_table),
(gst_audio_test_src_change_wave),
(gst_audio_test_src_change_volume), (gst_audio_test_src_do_seek),
(gst_audio_test_src_create), (gst_audio_test_src_set_property):
* gst/audiotestsrc/gstaudiotestsrc.h:
update to basesrc changes, implement segmented seeking and eos handling,
add a 'sine-tab' waveform for performance critical playback
2005-12-29 20:37:23 +00:00
|
|
|
}
|
2006-03-24 10:42:11 +00:00
|
|
|
|
2011-08-18 17:15:03 +00:00
|
|
|
bytes = src->generate_samples_per_buffer * bpf;
|
2007-08-03 19:53:11 +00:00
|
|
|
|
2010-04-02 18:01:25 +00:00
|
|
|
next_byte = src->next_byte + (src->reverse ? (-bytes) : bytes);
|
2011-08-18 17:15:03 +00:00
|
|
|
next_time = gst_util_uint64_scale_int (next_sample, GST_SECOND, samplerate);
|
2008-10-10 15:45:15 +00:00
|
|
|
|
2011-08-18 17:15:03 +00:00
|
|
|
GST_LOG_OBJECT (src, "samplerate %d", samplerate);
|
2010-04-03 19:49:11 +00:00
|
|
|
GST_LOG_OBJECT (src, "next_sample %" G_GINT64_FORMAT ", ts %" GST_TIME_FORMAT,
|
|
|
|
next_sample, GST_TIME_ARGS (next_time));
|
2008-10-10 15:45:15 +00:00
|
|
|
|
2013-03-24 20:41:44 +00:00
|
|
|
gst_buffer_set_size (buffer, bytes);
|
|
|
|
|
2011-08-25 11:21:14 +00:00
|
|
|
GST_BUFFER_OFFSET (buffer) = src->next_sample;
|
|
|
|
GST_BUFFER_OFFSET_END (buffer) = next_sample;
|
2010-04-02 18:01:25 +00:00
|
|
|
if (!src->reverse) {
|
2011-08-25 11:21:14 +00:00
|
|
|
GST_BUFFER_TIMESTAMP (buffer) = src->timestamp_offset + src->next_time;
|
|
|
|
GST_BUFFER_DURATION (buffer) = next_time - src->next_time;
|
2010-04-02 18:01:25 +00:00
|
|
|
} else {
|
2011-08-25 11:21:14 +00:00
|
|
|
GST_BUFFER_TIMESTAMP (buffer) = src->timestamp_offset + next_time;
|
|
|
|
GST_BUFFER_DURATION (buffer) = src->next_time - next_time;
|
2010-04-02 18:01:25 +00:00
|
|
|
}
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2011-11-04 14:23:25 +00:00
|
|
|
gst_object_sync_values (GST_OBJECT (src), GST_BUFFER_TIMESTAMP (buffer));
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2008-10-10 15:45:15 +00:00
|
|
|
src->next_time = next_time;
|
|
|
|
src->next_sample = next_sample;
|
|
|
|
src->next_byte = next_byte;
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2007-11-26 12:25:55 +00:00
|
|
|
GST_LOG_OBJECT (src, "generating %u samples at ts %" GST_TIME_FORMAT,
|
2008-10-10 15:45:15 +00:00
|
|
|
src->generate_samples_per_buffer,
|
2011-08-25 11:21:14 +00:00
|
|
|
GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)));
|
2007-11-26 12:25:55 +00:00
|
|
|
|
2012-01-20 15:11:54 +00:00
|
|
|
gst_buffer_map (buffer, &map, GST_MAP_WRITE);
|
2015-11-02 12:19:09 +00:00
|
|
|
if (src->pack_func) {
|
|
|
|
gsize tmpsize;
|
|
|
|
|
|
|
|
tmpsize =
|
|
|
|
src->generate_samples_per_buffer * GST_AUDIO_INFO_CHANNELS (&src->info)
|
|
|
|
* src->pack_size;
|
|
|
|
|
|
|
|
if (tmpsize > src->tmpsize) {
|
|
|
|
src->tmp = g_realloc (src->tmp, tmpsize);
|
|
|
|
src->tmpsize = tmpsize;
|
|
|
|
}
|
|
|
|
src->process (src, src->tmp);
|
|
|
|
src->pack_func (src->info.finfo, 0, src->tmp, map.data,
|
|
|
|
src->generate_samples_per_buffer *
|
|
|
|
GST_AUDIO_INFO_CHANNELS (&src->info));
|
|
|
|
} else {
|
|
|
|
src->process (src, map.data);
|
|
|
|
}
|
2012-01-20 15:11:54 +00:00
|
|
|
gst_buffer_unmap (buffer, &map);
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
2008-02-21 08:05:10 +00:00
|
|
|
if (G_UNLIKELY ((src->wave == GST_AUDIO_TEST_SRC_WAVE_SILENCE)
|
|
|
|
|| (src->volume == 0.0))) {
|
2011-08-25 11:21:14 +00:00
|
|
|
GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_GAP);
|
2007-11-26 12:25:55 +00:00
|
|
|
}
|
|
|
|
|
2018-01-31 15:39:05 +00:00
|
|
|
if (GST_AUDIO_INFO_LAYOUT (&src->info) == GST_AUDIO_LAYOUT_NON_INTERLEAVED) {
|
|
|
|
gst_buffer_add_audio_meta (buffer, &src->info,
|
|
|
|
src->generate_samples_per_buffer, NULL);
|
|
|
|
}
|
|
|
|
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
return GST_FLOW_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_audio_test_src_set_property (GObject * object, guint prop_id,
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
const GValue * value, GParamSpec * pspec)
|
|
|
|
{
|
2005-12-01 01:12:55 +00:00
|
|
|
GstAudioTestSrc *src = GST_AUDIO_TEST_SRC (object);
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
|
|
|
switch (prop_id) {
|
|
|
|
case PROP_SAMPLES_PER_BUFFER:
|
|
|
|
src->samples_per_buffer = g_value_get_int (value);
|
2011-10-10 15:15:37 +00:00
|
|
|
gst_base_src_set_blocksize (GST_BASE_SRC_CAST (src),
|
|
|
|
GST_AUDIO_INFO_BPF (&src->info) * src->samples_per_buffer);
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
break;
|
|
|
|
case PROP_WAVE:
|
|
|
|
src->wave = g_value_get_enum (value);
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_audio_test_src_change_wave (src);
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
break;
|
|
|
|
case PROP_FREQ:
|
|
|
|
src->freq = g_value_get_double (value);
|
|
|
|
break;
|
|
|
|
case PROP_VOLUME:
|
|
|
|
src->volume = g_value_get_double (value);
|
gst/audiotestsrc/gstaudiotestsrc.*: update to basesrc changes, implement segmented seeking and eos handling, add a 's...
Original commit message from CVS:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audio_test_src_class_init),
(gst_audio_test_src_init), (gst_audio_test_src_src_fixate),
(gst_audio_test_src_query), (gst_audio_test_src_create_sine),
(gst_audio_test_src_create_square),
(gst_audio_test_src_create_saw),
(gst_audio_test_src_create_triangle),
(gst_audio_test_src_create_silence),
(gst_audio_test_src_create_white_noise),
(gst_audio_test_src_create_pink_noise),
(gst_audio_test_src_init_sine_table),
(gst_audio_test_src_create_sine_table),
(gst_audio_test_src_change_wave),
(gst_audio_test_src_change_volume), (gst_audio_test_src_do_seek),
(gst_audio_test_src_create), (gst_audio_test_src_set_property):
* gst/audiotestsrc/gstaudiotestsrc.h:
update to basesrc changes, implement segmented seeking and eos handling,
add a 'sine-tab' waveform for performance critical playback
2005-12-29 20:37:23 +00:00
|
|
|
gst_audio_test_src_change_volume (src);
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
break;
|
|
|
|
case PROP_IS_LIVE:
|
|
|
|
gst_base_src_set_live (GST_BASE_SRC (src), g_value_get_boolean (value));
|
|
|
|
break;
|
|
|
|
case PROP_TIMESTAMP_OFFSET:
|
|
|
|
src->timestamp_offset = g_value_get_int64 (value);
|
|
|
|
break;
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
case PROP_SINE_PERIODS_PER_TICK:
|
|
|
|
src->sine_periods_per_tick = g_value_get_uint (value);
|
|
|
|
break;
|
|
|
|
case PROP_TICK_INTERVAL:
|
|
|
|
src->tick_interval = g_value_get_uint64 (value);
|
|
|
|
break;
|
|
|
|
case PROP_MARKER_TICK_PERIOD:
|
|
|
|
src->marker_tick_period = g_value_get_uint (value);
|
|
|
|
break;
|
|
|
|
case PROP_MARKER_TICK_VOLUME:
|
|
|
|
src->marker_tick_volume = g_value_get_double (value);
|
|
|
|
break;
|
|
|
|
case PROP_APPLY_TICK_RAMP:
|
|
|
|
src->apply_tick_ramp = g_value_get_boolean (value);
|
|
|
|
break;
|
2009-01-05 10:59:35 +00:00
|
|
|
case PROP_CAN_ACTIVATE_PUSH:
|
|
|
|
GST_BASE_SRC (src)->can_activate_push = g_value_get_boolean (value);
|
|
|
|
break;
|
|
|
|
case PROP_CAN_ACTIVATE_PULL:
|
|
|
|
src->can_activate_pull = g_value_get_boolean (value);
|
|
|
|
break;
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
default:
|
|
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_audio_test_src_get_property (GObject * object, guint prop_id,
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
GValue * value, GParamSpec * pspec)
|
|
|
|
{
|
2005-12-01 01:12:55 +00:00
|
|
|
GstAudioTestSrc *src = GST_AUDIO_TEST_SRC (object);
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
|
|
|
|
switch (prop_id) {
|
|
|
|
case PROP_SAMPLES_PER_BUFFER:
|
|
|
|
g_value_set_int (value, src->samples_per_buffer);
|
|
|
|
break;
|
|
|
|
case PROP_WAVE:
|
|
|
|
g_value_set_enum (value, src->wave);
|
|
|
|
break;
|
|
|
|
case PROP_FREQ:
|
|
|
|
g_value_set_double (value, src->freq);
|
|
|
|
break;
|
|
|
|
case PROP_VOLUME:
|
|
|
|
g_value_set_double (value, src->volume);
|
|
|
|
break;
|
|
|
|
case PROP_IS_LIVE:
|
|
|
|
g_value_set_boolean (value, gst_base_src_is_live (GST_BASE_SRC (src)));
|
|
|
|
break;
|
|
|
|
case PROP_TIMESTAMP_OFFSET:
|
|
|
|
g_value_set_int64 (value, src->timestamp_offset);
|
|
|
|
break;
|
audiotestsrc: Improvements to the "ticks" wave
(Initially discussed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/305)
The ticks waveform can be useful for audio synchronization diagnostics
and other cases where the time offset between waveforms is important.
However, in its current form, it is too limited, and has problems with
discontinuities, which result in severe artifacts when this waveform
is output by a DAC.
This patch fixes some discontinuities and considerably expand the ticks
waveform's flexibility. They also introduce the notion of a "marker tick";
every Nth tick can have a different amplitude (usually one that is larger
than the others). This is useful for combining frequent oscilloscope
triggering with large time offset detection. For example, without marker
ticks, the tick intervals must not be too small, otherwise the maximum time
offset that can be unambiguously detected is quite small (for example, if
the interval is 50ms, then no time offset larger than 25ms can be
unambiguously recognized). If the tick intervals are too far apart, then
no sudden changes can be clearly observed, since the oscilloscope is not
updated quickly enough. But with marker ticks, this is not an issue: If
there's for example a tick every 100 ms, then the oscilloscope can be
triggered every 100 ms. And, if every 20th tick is a marker tick, then
time offsets of up to 1 second can be discovered, even though the time
between ticks is 100 ms.
The patch also applies some minor cleanup to the audiotestsrc documentation.
2018-12-29 09:28:10 +00:00
|
|
|
case PROP_SINE_PERIODS_PER_TICK:
|
|
|
|
g_value_set_uint (value, src->sine_periods_per_tick);
|
|
|
|
break;
|
|
|
|
case PROP_TICK_INTERVAL:
|
|
|
|
g_value_set_uint64 (value, src->tick_interval);
|
|
|
|
break;
|
|
|
|
case PROP_MARKER_TICK_PERIOD:
|
|
|
|
g_value_set_uint (value, src->marker_tick_period);
|
|
|
|
break;
|
|
|
|
case PROP_MARKER_TICK_VOLUME:
|
|
|
|
g_value_set_double (value, src->marker_tick_volume);
|
|
|
|
break;
|
|
|
|
case PROP_APPLY_TICK_RAMP:
|
|
|
|
g_value_set_boolean (value, src->apply_tick_ramp);
|
|
|
|
break;
|
2009-01-05 10:59:35 +00:00
|
|
|
case PROP_CAN_ACTIVATE_PUSH:
|
|
|
|
g_value_set_boolean (value, GST_BASE_SRC (src)->can_activate_push);
|
|
|
|
break;
|
|
|
|
case PROP_CAN_ACTIVATE_PULL:
|
|
|
|
g_value_set_boolean (value, src->can_activate_pull);
|
|
|
|
break;
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
default:
|
|
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
plugin_init (GstPlugin * plugin)
|
|
|
|
{
|
2021-03-29 12:07:00 +00:00
|
|
|
return GST_ELEMENT_REGISTER (audiotestsrc, plugin);
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
|
|
|
|
GST_VERSION_MINOR,
|
2012-04-05 13:11:05 +00:00
|
|
|
audiotestsrc,
|
add new plugin and element
Original commit message from CVS:
* configure.ac:
* docs/plugins/gst-plugins-base-plugins-docs.sgml:
* docs/plugins/gst-plugins-base-plugins-sections.txt:
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type):
* gst/audiotestsrc/Makefile.am:
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type), (gst_audiotestsrc_base_init),
(gst_audiotestsrc_class_init), (gst_audiotestsrc_init),
(gst_audiotestsrc_src_fixate), (gst_audiotestsrc_setcaps),
(gst_audiotestsrc_get_query_types), (gst_audiotestsrc_src_query),
(gst_audiotestsrc_wait), (gst_audiotestsrc_unlock),
(gst_audiotestsrc_create_sine), (gst_audiotestsrc_create_square),
(gst_audiotestsrc_create_saw), (gst_audiotestsrc_create_triangle),
(gst_audiotestsrc_create_silence),
(gst_audiotestsrc_create_white_noise),
(gst_audiotestsrc_change_wave), (gst_audiotestsrc_create),
(gst_audiotestsrc_set_property), (gst_audiotestsrc_get_property),
(gst_audiotestsrc_start), (plugin_init):
* gst/audiotestsrc/gstaudiotestsrc.h:
add new plugin and element
* gst/sine/gstsinesrc.c: (gst_sinesrc_class_init):
use gobject_class
2005-10-09 18:34:44 +00:00
|
|
|
"Creates audio test signals of given frequency and volume",
|
2005-10-17 15:37:45 +00:00
|
|
|
plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
|