static void gst_audio_dynamic_class_init (GstAudioDynamicClass * klass) { GObjectClass *gobject_class; GstElementClass *gstelement_class; GstCaps *caps; GST_DEBUG_CATEGORY_INIT (gst_audio_dynamic_debug, "audiodynamic", 0, "audiodynamic element"); gobject_class = (GObjectClass *) klass; gstelement_class = (GstElementClass *) klass; gobject_class->set_property = gst_audio_dynamic_set_property; gobject_class->get_property = gst_audio_dynamic_get_property; g_object_class_install_property (gobject_class, PROP_CHARACTERISTICS, g_param_spec_enum ("characteristics", "Characteristics", "Selects whether the ratio should be applied smooth (soft-knee) " "or hard (hard-knee).", GST_TYPE_AUDIO_DYNAMIC_CHARACTERISTICS, CHARACTERISTICS_HARD_KNEE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_MODE, g_param_spec_enum ("mode", "Mode", "Selects whether the filter should work on loud samples (compressor) or" "quiet samples (expander).", GST_TYPE_AUDIO_DYNAMIC_MODE, MODE_COMPRESSOR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_THRESHOLD, g_param_spec_float ("threshold", "Threshold", "Threshold until the filter is activated", 0.0, 1.0, 0.0, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_RATIO, g_param_spec_float ("ratio", "Ratio", "Ratio that should be applied", 0.0, G_MAXFLOAT, 1.0, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS)); gst_element_class_set_static_metadata (gstelement_class, "Dynamic range controller", "Filter/Effect/Audio", "Compressor and Expander", "Sebastian Dröge <*****@*****.**>"); caps = gst_caps_from_string (ALLOWED_CAPS); gst_audio_filter_class_add_pad_templates (GST_AUDIO_FILTER_CLASS (klass), caps); gst_caps_unref (caps); GST_AUDIO_FILTER_CLASS (klass)->setup = GST_DEBUG_FUNCPTR (gst_audio_dynamic_setup); GST_BASE_TRANSFORM_CLASS (klass)->transform_ip = GST_DEBUG_FUNCPTR (gst_audio_dynamic_transform_ip); GST_BASE_TRANSFORM_CLASS (klass)->transform_ip_on_passthrough = FALSE; }
static void gst_stereo_class_init (GstStereoClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GstElementClass *element_class = GST_ELEMENT_CLASS (klass); GstBaseTransformClass *trans_class = GST_BASE_TRANSFORM_CLASS (klass); GstAudioFilterClass *audiofilter_class = GST_AUDIO_FILTER_CLASS (klass); GstCaps *caps; gst_element_class_set_static_metadata (element_class, "Stereo effect", "Filter/Effect/Audio", "Muck with the stereo signal to enhance its 'stereo-ness'", "Erik Walthinsen <*****@*****.**>"); caps = gst_caps_from_string (ALLOWED_CAPS); gst_audio_filter_class_add_pad_templates (audiofilter_class, caps); gst_caps_unref (caps); gobject_class->set_property = gst_stereo_set_property; gobject_class->get_property = gst_stereo_get_property; g_object_class_install_property (gobject_class, ARG_ACTIVE, g_param_spec_boolean ("active", "active", "active", TRUE, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, ARG_STEREO, g_param_spec_float ("stereo", "stereo", "stereo", 0.0, 1.0, 0.1, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS)); trans_class->transform_ip = GST_DEBUG_FUNCPTR (gst_stereo_transform_ip); }
static void gst_webrtc_echo_probe_class_init (GstWebrtcEchoProbeClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GstElementClass *element_class = GST_ELEMENT_CLASS (klass); GstBaseTransformClass *btrans_class = GST_BASE_TRANSFORM_CLASS (klass); GstAudioFilterClass *audiofilter_class = GST_AUDIO_FILTER_CLASS (klass); gobject_class->finalize = gst_webrtc_echo_probe_finalize; btrans_class->passthrough_on_same_caps = TRUE; btrans_class->src_event = GST_DEBUG_FUNCPTR (gst_webrtc_echo_probe_src_event); btrans_class->transform_ip = GST_DEBUG_FUNCPTR (gst_webrtc_echo_probe_transform_ip); btrans_class->stop = GST_DEBUG_FUNCPTR (gst_webrtc_echo_probe_stop); audiofilter_class->setup = GST_DEBUG_FUNCPTR (gst_webrtc_echo_probe_setup); gst_element_class_add_static_pad_template (element_class, &gst_webrtc_echo_probe_src_template); gst_element_class_add_static_pad_template (element_class, &gst_webrtc_echo_probe_sink_template); gst_element_class_set_static_metadata (element_class, "Accoustic Echo Canceller probe", "Generic/Audio", "Gathers playback buffers for webrtcdsp", "Nicolas Dufresne <*****@*****.**>"); }
static void gst_audio_amplify_class_init (GstAudioAmplifyClass * klass) { GObjectClass *gobject_class; gobject_class = (GObjectClass *) klass; gobject_class->set_property = gst_audio_amplify_set_property; gobject_class->get_property = gst_audio_amplify_get_property; g_object_class_install_property (gobject_class, PROP_AMPLIFICATION, g_param_spec_float ("amplification", "Amplification", "Factor of amplification", -G_MAXFLOAT, G_MAXFLOAT, 1.0, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS)); /** * GstAudioAmplify:clipping-method * * Clipping method: clip mode set values higher than the maximum to the * maximum. The wrap-negative mode pushes those values back from the * opposite side, wrap-positive pushes them back from the same side. * **/ g_object_class_install_property (gobject_class, PROP_CLIPPING_METHOD, g_param_spec_enum ("clipping-method", "Clipping method", "Selects how to handle values higher than the maximum", GST_TYPE_AUDIO_AMPLIFY_CLIPPING_METHOD, METHOD_CLIP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); GST_AUDIO_FILTER_CLASS (klass)->setup = GST_DEBUG_FUNCPTR (gst_audio_amplify_setup); GST_BASE_TRANSFORM_CLASS (klass)->transform_ip = GST_DEBUG_FUNCPTR (gst_audio_amplify_transform_ip); }
static void gst_audio_fx_base_iir_filter_class_init (GstAudioFXBaseIIRFilterClass * klass) { GObjectClass *gobject_class = (GObjectClass *) klass; GstBaseTransformClass *trans_class = (GstBaseTransformClass *) klass; GstAudioFilterClass *filter_class = (GstAudioFilterClass *) klass; GstCaps *caps; GST_DEBUG_CATEGORY_INIT (gst_audio_fx_base_iir_filter_debug, "audiofxbaseiirfilter", 0, "Audio IIR Filter Base Class"); gobject_class->finalize = gst_audio_fx_base_iir_filter_finalize; caps = gst_caps_from_string (ALLOWED_CAPS); gst_audio_filter_class_add_pad_templates (GST_AUDIO_FILTER_CLASS (klass), caps); gst_caps_unref (caps); filter_class->setup = GST_DEBUG_FUNCPTR (gst_audio_fx_base_iir_filter_setup); trans_class->transform_ip = GST_DEBUG_FUNCPTR (gst_audio_fx_base_iir_filter_transform_ip); trans_class->transform_ip_on_passthrough = FALSE; trans_class->stop = GST_DEBUG_FUNCPTR (gst_audio_fx_base_iir_filter_stop); }
static void gst_audio_fx_base_fir_filter_class_init (GstAudioFXBaseFIRFilterClass * klass) { GObjectClass *gobject_class = (GObjectClass *) klass; GstBaseTransformClass *trans_class = (GstBaseTransformClass *) klass; GstAudioFilterClass *filter_class = (GstAudioFilterClass *) klass; GstCaps *caps; GST_DEBUG_CATEGORY_INIT (gst_audio_fx_base_fir_filter_debug, "audiofxbasefirfilter", 0, "FIR filter base class"); gobject_class->finalize = gst_audio_fx_base_fir_filter_finalize; gobject_class->set_property = gst_audio_fx_base_fir_filter_set_property; gobject_class->get_property = gst_audio_fx_base_fir_filter_get_property; /** * GstAudioFXBaseFIRFilter:low-latency: * * Work in low-latency mode. This mode is much slower for large filter sizes * but the latency is always only the pre-latency of the filter. */ g_object_class_install_property (gobject_class, PROP_LOW_LATENCY, g_param_spec_boolean ("low-latency", "Low latency", "Operate in low latency mode. This mode is slower but the " "latency will only be the filter pre-latency. " "Can only be changed in states < PAUSED!", DEFAULT_LOW_LATENCY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstAudioFXBaseFIRFilter:drain-on-changes: * * Whether the filter should be drained when its coeficients change * * Note: Currently this only works if the kernel size is not changed! * Support for drainless kernel size changes will be added in the future. */ g_object_class_install_property (gobject_class, PROP_DRAIN_ON_CHANGES, g_param_spec_boolean ("drain-on-changes", "Drain on changes", "Drains the filter when its coeficients change", DEFAULT_DRAIN_ON_CHANGES, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); caps = gst_caps_from_string (ALLOWED_CAPS); gst_audio_filter_class_add_pad_templates (GST_AUDIO_FILTER_CLASS (klass), caps); gst_caps_unref (caps); trans_class->transform = GST_DEBUG_FUNCPTR (gst_audio_fx_base_fir_filter_transform); trans_class->start = GST_DEBUG_FUNCPTR (gst_audio_fx_base_fir_filter_start); trans_class->stop = GST_DEBUG_FUNCPTR (gst_audio_fx_base_fir_filter_stop); trans_class->sink_event = GST_DEBUG_FUNCPTR (gst_audio_fx_base_fir_filter_sink_event); trans_class->query = GST_DEBUG_FUNCPTR (gst_audio_fx_base_fir_filter_query); trans_class->transform_size = GST_DEBUG_FUNCPTR (gst_audio_fx_base_fir_filter_transform_size); filter_class->setup = GST_DEBUG_FUNCPTR (gst_audio_fx_base_fir_filter_setup); }
/* get notified of caps and plug in the correct process function */ static gboolean gst_audio_wsinclimit_setup (GstAudioFilter * base, GstRingBufferSpec * format) { GstAudioWSincLimit *self = GST_AUDIO_WSINC_LIMIT (base); gst_audio_wsinclimit_build_kernel (self); return GST_AUDIO_FILTER_CLASS (parent_class)->setup (base, format); }
static void gst_audio_echo_class_init (GstAudioEchoClass * klass) { GObjectClass *gobject_class = (GObjectClass *) klass; GstElementClass *gstelement_class = (GstElementClass *) klass; GstBaseTransformClass *basetransform_class = (GstBaseTransformClass *) klass; GstAudioFilterClass *audioself_class = (GstAudioFilterClass *) klass; GstCaps *caps; GST_DEBUG_CATEGORY_INIT (gst_audio_echo_debug, "audioecho", 0, "audioecho element"); gobject_class->set_property = gst_audio_echo_set_property; gobject_class->get_property = gst_audio_echo_get_property; gobject_class->finalize = gst_audio_echo_finalize; g_object_class_install_property (gobject_class, PROP_DELAY, g_param_spec_uint64 ("delay", "Delay", "Delay of the echo in nanoseconds", 1, G_MAXUINT64, 1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_CONTROLLABLE)); g_object_class_install_property (gobject_class, PROP_MAX_DELAY, g_param_spec_uint64 ("max-delay", "Maximum Delay", "Maximum delay of the echo in nanoseconds" " (can't be changed in PLAYING or PAUSED state)", 1, G_MAXUINT64, 1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_MUTABLE_READY)); g_object_class_install_property (gobject_class, PROP_INTENSITY, g_param_spec_float ("intensity", "Intensity", "Intensity of the echo", 0.0, 1.0, 0.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_CONTROLLABLE)); g_object_class_install_property (gobject_class, PROP_FEEDBACK, g_param_spec_float ("feedback", "Feedback", "Amount of feedback", 0.0, 1.0, 0.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_CONTROLLABLE)); gst_element_class_set_static_metadata (gstelement_class, "Audio echo", "Filter/Effect/Audio", "Adds an echo or reverb effect to an audio stream", "Sebastian Dröge <*****@*****.**>"); caps = gst_caps_from_string (ALLOWED_CAPS); gst_audio_filter_class_add_pad_templates (GST_AUDIO_FILTER_CLASS (klass), caps); gst_caps_unref (caps); audioself_class->setup = GST_DEBUG_FUNCPTR (gst_audio_echo_setup); basetransform_class->transform_ip = GST_DEBUG_FUNCPTR (gst_audio_echo_transform_ip); basetransform_class->stop = GST_DEBUG_FUNCPTR (gst_audio_echo_stop); }
/* get notified of caps and plug in the correct process function */ static gboolean gst_audio_wsinclimit_setup (GstAudioFilter * base, const GstAudioInfo * info) { GstAudioWSincLimit *self = GST_AUDIO_WSINC_LIMIT (base); gst_audio_wsinclimit_build_kernel (self, info); return GST_AUDIO_FILTER_CLASS (parent_class)->setup (base, info); }
static gboolean gst_audio_cheb_band_setup (GstAudioFilter * base, GstRingBufferSpec * format) { GstAudioChebBand *filter = GST_AUDIO_CHEB_BAND (base); generate_coefficients (filter); return GST_AUDIO_FILTER_CLASS (parent_class)->setup (base, format); }
static void gst_audio_fx_base_fir_filter_base_init (gpointer g_class) { GstCaps *caps; caps = gst_caps_from_string (ALLOWED_CAPS); gst_audio_filter_class_add_pad_templates (GST_AUDIO_FILTER_CLASS (g_class), caps); gst_caps_unref (caps); }
static void gst_iir_equalizer_base_init (gpointer g_class) { GstAudioFilterClass *audiofilter_class = GST_AUDIO_FILTER_CLASS (g_class); GstCaps *caps; caps = gst_caps_from_string (ALLOWED_CAPS); gst_audio_filter_class_add_pad_templates (audiofilter_class, caps); gst_caps_unref (caps); }
/* get notified of caps and plug in the correct process function */ static gboolean gst_audio_iir_filter_setup (GstAudioFilter * base, const GstAudioInfo * info) { GstAudioIIRFilter *self = GST_AUDIO_IIR_FILTER (base); gint new_rate = GST_AUDIO_INFO_RATE (info); if (GST_AUDIO_FILTER_RATE (self) != new_rate) { g_signal_emit (G_OBJECT (self), gst_audio_iir_filter_signals[SIGNAL_RATE_CHANGED], 0, new_rate); } return GST_AUDIO_FILTER_CLASS (parent_class)->setup (base, info); }
static void gst_stereo_base_init (gpointer g_class) { GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); GstCaps *caps; gst_element_class_set_details (element_class, &stereo_details); caps = gst_caps_from_string (ALLOWED_CAPS); gst_audio_filter_class_add_pad_templates (GST_AUDIO_FILTER_CLASS (g_class), caps); gst_caps_unref (caps); }
/* get notified of caps and plug in the correct process function */ static gboolean gst_audio_fir_filter_setup (GstAudioFilter * base, GstRingBufferSpec * format) { GstAudioFIRFilter *self = GST_AUDIO_FIR_FILTER (base); if (self->rate != format->rate) { g_signal_emit (G_OBJECT (self), gst_audio_fir_filter_signals[SIGNAL_RATE_CHANGED], 0, format->rate); self->rate = format->rate; } return GST_AUDIO_FILTER_CLASS (parent_class)->setup (base, format); }
static void gst_audio_invert_class_init (GstAudioInvertClass * klass) { GObjectClass *gobject_class; GstElementClass *gstelement_class; GstCaps *caps; GST_DEBUG_CATEGORY_INIT (gst_audio_invert_debug, "audioinvert", 0, "audioinvert element"); gobject_class = (GObjectClass *) klass; gstelement_class = (GstElementClass *) klass; gobject_class->set_property = gst_audio_invert_set_property; gobject_class->get_property = gst_audio_invert_get_property; g_object_class_install_property (gobject_class, PROP_DEGREE, g_param_spec_float ("degree", "Degree", "Degree of inversion", 0.0, 1.0, 0.0, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS)); gst_element_class_set_static_metadata (gstelement_class, "Audio inversion", "Filter/Effect/Audio", "Swaps upper and lower half of audio samples", "Sebastian Dröge <*****@*****.**>"); caps = gst_caps_from_string (ALLOWED_CAPS); gst_audio_filter_class_add_pad_templates (GST_AUDIO_FILTER_CLASS (klass), caps); gst_caps_unref (caps); GST_BASE_TRANSFORM_CLASS (klass)->transform_ip = GST_DEBUG_FUNCPTR (gst_audio_invert_transform_ip); GST_BASE_TRANSFORM_CLASS (klass)->transform_ip_on_passthrough = FALSE; GST_AUDIO_FILTER_CLASS (klass)->setup = GST_DEBUG_FUNCPTR (gst_audio_invert_setup); }
static void gst_audio_filter_template_base_init (gpointer g_class) { GstAudioFilterTemplateClass *klass = (GstAudioFilterTemplateClass *) g_class; GstAudioFilterClass *audiofilter_class = GST_AUDIO_FILTER_CLASS (g_class); GstElementClass *element_class = GST_ELEMENT_CLASS (klass); GstCaps *caps; gst_element_class_set_details (element_class, &audio_filter_template_details); caps = gst_caps_from_string (ALLOWED_CAPS_STRING); gst_audio_filter_class_add_pad_templates (audiofilter_class, caps); gst_caps_unref (caps); }
static void gst_stereo_base_init (gpointer g_class) { GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); GstCaps *caps; gst_element_class_set_details_simple (element_class, "Stereo effect", "Filter/Effect/Audio", "Muck with the stereo signal to enhance its 'stereo-ness'", "Erik Walthinsen <*****@*****.**>"); caps = gst_caps_from_string (ALLOWED_CAPS); gst_audio_filter_class_add_pad_templates (GST_AUDIO_FILTER_CLASS (g_class), caps); gst_caps_unref (caps); }
static void gst_audio_echo_base_init (gpointer klass) { GstElementClass *element_class = GST_ELEMENT_CLASS (klass); GstCaps *caps; gst_element_class_set_details_simple (element_class, "Audio echo", "Filter/Effect/Audio", "Adds an echo or reverb effect to an audio stream", "Sebastian Dröge <*****@*****.**>"); caps = gst_caps_from_string (ALLOWED_CAPS); gst_audio_filter_class_add_pad_templates (GST_AUDIO_FILTER_CLASS (klass), caps); gst_caps_unref (caps); }
static void gst_audio_amplify_base_init (gpointer klass) { GstElementClass *element_class = GST_ELEMENT_CLASS (klass); GstCaps *caps; gst_element_class_set_details_simple (element_class, "Audio amplifier", "Filter/Effect/Audio", "Amplifies an audio stream by a given factor", "Sebastian Dröge <*****@*****.**>"); caps = gst_caps_from_string (ALLOWED_CAPS); gst_audio_filter_class_add_pad_templates (GST_AUDIO_FILTER_CLASS (klass), caps); gst_caps_unref (caps); }
static void gst_audio_invert_base_init (gpointer klass) { GstElementClass *element_class = GST_ELEMENT_CLASS (klass); GstCaps *caps; gst_element_class_set_details_simple (element_class, "Audio inversion", "Filter/Effect/Audio", "Swaps upper and lower half of audio samples", "Sebastian Dröge <*****@*****.**>"); caps = gst_caps_from_string (ALLOWED_CAPS); gst_audio_filter_class_add_pad_templates (GST_AUDIO_FILTER_CLASS (klass), caps); gst_caps_unref (caps); }
/* initialize the stft's class */ static void gval_stft_class_init(GvalStftClass* klass) { GObjectClass* gobject_class = G_OBJECT_CLASS(klass); GstElementClass* gstelement_class = GST_ELEMENT_CLASS(klass); GstBaseTransformClass* base_transform_class = GST_BASE_TRANSFORM_CLASS (klass); GstAudioFilterClass* audio_filter_class = GST_AUDIO_FILTER_CLASS(klass); gobject_class->set_property = gval_stft_set_property; gobject_class->get_property = gval_stft_get_property; gobject_class->dispose = gval_stft_dispose; stft_props[PROP_SILENT] = g_param_spec_boolean( "silent", "Silent", "Produce verbose output ?", FALSE, G_PARAM_READWRITE); stft_props[PROP_WSIZE] = g_param_spec_uint( "wsize", "Window Size", "Window Size of the FFT", MIN_WINDOW_SIZE, MAX_WINDOW_SIZE, DEFAULT_WINDOW_SIZE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT); stft_props[PROP_SSIZE] = g_param_spec_uint( "ssize", "Shift Size", "Shift Size of the FFT", MIN_SHIFT_SIZE, MAX_SHIFT_SIZE, DEFAULT_SHIFT_SIZE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT); stft_props[PROP_LOCATION] = g_param_spec_string( "location", "Location", "Path to the output file", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT); g_object_class_install_properties(gobject_class, N_PROPERTIES, stft_props); gst_element_class_set_details_simple(gstelement_class, "stft", "gval/feature", "Short Time Fourier Transform", "Weipeng He <*****@*****.**>"); gst_element_class_add_pad_template(gstelement_class, gst_static_pad_template_get(&src_factory)); gst_element_class_add_pad_template(gstelement_class, gst_static_pad_template_get(&sink_factory)); audio_filter_class->setup = GST_DEBUG_FUNCPTR(gval_stft_setup); base_transform_class->transform_ip = GST_DEBUG_FUNCPTR(gval_stft_transform_ip); }
static void gst_plugin_template_base_init (gpointer klass) { GstElementClass *element_class = GST_ELEMENT_CLASS (klass); GstAudioFilterClass *audiofilter_class = GST_AUDIO_FILTER_CLASS (klass); GstCaps *caps; gst_element_class_set_details_simple (element_class, "Plugin", "Filter/Effect/Audio", "FIXME:Filters audio", "AUTHOR_NAME AUTHOR_EMAIL"); caps = gst_caps_from_string (ALLOWED_CAPS_STRING); gst_audio_filter_class_add_pad_templates (audiofilter_class, caps); gst_caps_unref (caps); }
static void gst_fastspectrum_class_init (GstFastSpectrumClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GstElementClass *element_class = GST_ELEMENT_CLASS (klass); GstBaseTransformClass *trans_class = GST_BASE_TRANSFORM_CLASS (klass); GstAudioFilterClass *filter_class = GST_AUDIO_FILTER_CLASS (klass); GstCaps *caps; gobject_class->set_property = gst_fastspectrum_set_property; gobject_class->get_property = gst_fastspectrum_get_property; gobject_class->finalize = gst_fastspectrum_finalize; trans_class->start = GST_DEBUG_FUNCPTR (gst_fastspectrum_start); trans_class->stop = GST_DEBUG_FUNCPTR (gst_fastspectrum_stop); trans_class->transform_ip = GST_DEBUG_FUNCPTR (gst_fastspectrum_transform_ip); trans_class->passthrough_on_same_caps = TRUE; filter_class->setup = GST_DEBUG_FUNCPTR (gst_fastspectrum_setup); g_object_class_install_property (gobject_class, PROP_INTERVAL, g_param_spec_uint64 ("interval", "Interval", "Interval of time between message posts (in nanoseconds)", 1, G_MAXUINT64, DEFAULT_INTERVAL, GParamFlags(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); g_object_class_install_property (gobject_class, PROP_BANDS, g_param_spec_uint ("bands", "Bands", "Number of frequency bands", 0, G_MAXUINT, DEFAULT_BANDS, GParamFlags(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); GST_DEBUG_CATEGORY_INIT (gst_fastspectrum_debug, "spectrum", 0, "audio spectrum analyser element"); gst_element_class_set_static_metadata (element_class, "Spectrum analyzer", "Filter/Analyzer/Audio", "Run an FFT on the audio signal, output spectrum data", "Erik Walthinsen <*****@*****.**>, " "Stefan Kost <*****@*****.**>, " "Sebastian Dröge <*****@*****.**>"); caps = gst_caps_from_string (ALLOWED_CAPS); gst_audio_filter_class_add_pad_templates (filter_class, caps); gst_caps_unref (caps); }
static void gst_spectrum_base_init (gpointer g_class) { GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); GstCaps *caps; gst_element_class_set_details_simple (element_class, "Spectrum analyzer", "Filter/Analyzer/Audio", "Run an FFT on the audio signal, output spectrum data", "Erik Walthinsen <*****@*****.**>, " "Stefan Kost <*****@*****.**>, " "Sebastian Dröge <*****@*****.**>"); caps = gst_caps_from_string (ALLOWED_CAPS); gst_audio_filter_class_add_pad_templates (GST_AUDIO_FILTER_CLASS (g_class), caps); gst_caps_unref (caps); }
static void gst_lv2_filter_class_init (GstLV2FilterClass * klass, LilvPlugin * lv2plugin) { GObjectClass *gobject_class; GstBaseTransformClass *transform_class; GstAudioFilterClass *audiofilter_class; GParamSpec *p; gint i, ix; GST_DEBUG ("class_init %p", klass); gobject_class = (GObjectClass *) klass; gobject_class->set_property = gst_lv2_filter_set_property; gobject_class->get_property = gst_lv2_filter_get_property; audiofilter_class = GST_AUDIO_FILTER_CLASS (klass); audiofilter_class->setup = gst_lv2_filter_setup; transform_class = GST_BASE_TRANSFORM_CLASS (klass); transform_class->stop = gst_lv2_filter_stop; transform_class->transform = gst_lv2_filter_transform; transform_class->transform_ip = gst_lv2_filter_transform_ip; klass->plugin = lv2plugin; /* properties have an offset of 1 */ ix = 1; /* register properties */ for (i = 0; i < klass->control_in_ports->len; i++, ix++) { p = gst_lv2_filter_class_get_param_spec (klass, g_array_index (klass->control_in_ports, GstLV2FilterPort, i).index); g_object_class_install_property (gobject_class, ix, p); } for (i = 0; i < klass->control_out_ports->len; i++, ix++) { p = gst_lv2_filter_class_get_param_spec (klass, g_array_index (klass->control_out_ports, GstLV2FilterPort, i).index); g_object_class_install_property (gobject_class, ix, p); } }
static void gst_chromaprint_class_init (GstChromaprintClass * klass) { GObjectClass *gobject_class; GstBaseTransformClass *gstbasetrans_class; GstCaps *caps; gobject_class = G_OBJECT_CLASS (klass); gstbasetrans_class = GST_BASE_TRANSFORM_CLASS (klass); gobject_class->set_property = gst_chromaprint_set_property; gobject_class->get_property = gst_chromaprint_get_property; /* FIXME: do we need this in addition to the tag message ? */ g_object_class_install_property (gobject_class, PROP_FINGERPRINT, g_param_spec_string ("fingerprint", "Resulting fingerprint", "Resulting fingerprint", NULL, G_PARAM_READABLE)); g_object_class_install_property (gobject_class, PROP_MAX_DURATION, g_param_spec_uint ("duration", "Duration limit", "Number of seconds of audio to use for fingerprinting", 0, G_MAXUINT, DEFAULT_MAX_DURATION, G_PARAM_READABLE | G_PARAM_WRITABLE)); gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_chromaprint_finalize); gstbasetrans_class->transform_ip = GST_DEBUG_FUNCPTR (gst_chromaprint_transform_ip); gstbasetrans_class->sink_event = GST_DEBUG_FUNCPTR (gst_chromaprint_sink_event); gstbasetrans_class->passthrough_on_same_caps = TRUE; gst_element_class_set_static_metadata (GST_ELEMENT_CLASS (klass), "Chromaprint fingerprinting element", "Filter/Analyzer/Audio", "Find an audio fingerprint using the Chromaprint library", "Lukáš Lalinský <*****@*****.**>"); caps = gst_caps_from_string (PAD_CAPS); gst_audio_filter_class_add_pad_templates (GST_AUDIO_FILTER_CLASS (klass), caps); gst_caps_unref (caps); }
static void gst_audio_invert_class_init (GstAudioInvertClass * klass) { GObjectClass *gobject_class; gobject_class = (GObjectClass *) klass; gobject_class->set_property = gst_audio_invert_set_property; gobject_class->get_property = gst_audio_invert_get_property; g_object_class_install_property (gobject_class, PROP_DEGREE, g_param_spec_float ("degree", "Degree", "Degree of inversion", 0.0, 1.0, 0.0, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE)); GST_AUDIO_FILTER_CLASS (klass)->setup = GST_DEBUG_FUNCPTR (gst_audio_invert_setup); GST_BASE_TRANSFORM_CLASS (klass)->transform_ip = GST_DEBUG_FUNCPTR (gst_audio_invert_transform_ip); }
static gboolean gst_audio_filter_set_caps (GstBaseTransform * btrans, GstCaps * incaps, GstCaps * outcaps) { GstAudioFilterClass *klass; GstAudioFilter *filter; gboolean ret = TRUE; filter = GST_AUDIO_FILTER (btrans); GST_LOG_OBJECT (filter, "caps: %" GST_PTR_FORMAT, incaps); if (!gst_ring_buffer_parse_caps (&filter->format, incaps)) { GST_WARNING_OBJECT (filter, "couldn't parse %" GST_PTR_FORMAT, incaps); return FALSE; } klass = GST_AUDIO_FILTER_CLASS (G_OBJECT_GET_CLASS (filter)); if (klass->setup) ret = klass->setup (filter, &filter->format); return ret; }
static void gst_spectrum_class_init (GstSpectrumClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GstBaseTransformClass *trans_class = GST_BASE_TRANSFORM_CLASS (klass); GstAudioFilterClass *filter_class = GST_AUDIO_FILTER_CLASS (klass); gobject_class->set_property = gst_spectrum_set_property; gobject_class->get_property = gst_spectrum_get_property; gobject_class->finalize = gst_spectrum_finalize; trans_class->start = GST_DEBUG_FUNCPTR (gst_spectrum_start); trans_class->stop = GST_DEBUG_FUNCPTR (gst_spectrum_stop); trans_class->transform_ip = GST_DEBUG_FUNCPTR (gst_spectrum_transform_ip); trans_class->passthrough_on_same_caps = TRUE; filter_class->setup = GST_DEBUG_FUNCPTR (gst_spectrum_setup); /* FIXME 0.11, remove in favour of post-messages */ g_object_class_install_property (gobject_class, PROP_MESSAGE, g_param_spec_boolean ("message", "Message", "Whether to post a 'spectrum' element message on the bus for each " "passed interval (deprecated, use post-messages)", DEFAULT_MESSAGE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstSpectrum:post-messages * * Post messages on the bus with spectrum information. * * Since: 0.10.17 */ g_object_class_install_property (gobject_class, PROP_POST_MESSAGES, g_param_spec_boolean ("post-messages", "Post Messages", "Whether to post a 'spectrum' element message on the bus for each " "passed interval", DEFAULT_POST_MESSAGES, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_MESSAGE_MAGNITUDE, g_param_spec_boolean ("message-magnitude", "Magnitude", "Whether to add a 'magnitude' field to the structure of any " "'spectrum' element messages posted on the bus", DEFAULT_MESSAGE_MAGNITUDE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_MESSAGE_PHASE, g_param_spec_boolean ("message-phase", "Phase", "Whether to add a 'phase' field to the structure of any " "'spectrum' element messages posted on the bus", DEFAULT_MESSAGE_PHASE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_INTERVAL, g_param_spec_uint64 ("interval", "Interval", "Interval of time between message posts (in nanoseconds)", 1, G_MAXUINT64, DEFAULT_INTERVAL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); #ifdef GSTREAMER_LITE g_object_class_install_property (gobject_class, PROP_BANDS, g_param_spec_uint ("bands", "Bands", "Number of frequency bands", 0, MAX_BANDS, DEFAULT_BANDS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); #else g_object_class_install_property (gobject_class, PROP_BANDS, g_param_spec_uint ("bands", "Bands", "Number of frequency bands", 0, G_MAXUINT, DEFAULT_BANDS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); #endif // GSTREAMER_LITE g_object_class_install_property (gobject_class, PROP_THRESHOLD, g_param_spec_int ("threshold", "Threshold", "dB threshold for result. All lower values will be set to this", G_MININT, 0, DEFAULT_THRESHOLD, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstSpectrum:multi-channel * * Send separate results for each channel * * Since: 0.10.29 */ g_object_class_install_property (gobject_class, PROP_MULTI_CHANNEL, g_param_spec_boolean ("multi-channel", "Multichannel results", "Send separate results for each channel", DEFAULT_MULTI_CHANNEL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); GST_DEBUG_CATEGORY_INIT (gst_spectrum_debug, "spectrum", 0, "audio spectrum analyser element"); }