mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-27 02:30:35 +00:00
91 lines
3.4 KiB
C++
91 lines
3.4 KiB
C++
|
/*
|
||
|
* WebRTC Audio Processing Elements
|
||
|
*
|
||
|
* Copyright 2016 Collabora Ltd
|
||
|
* @author: Nicolas Dufresne <nicolas.dufresne@collabora.com>
|
||
|
*
|
||
|
* This library is free software; you can redistribute it and/or
|
||
|
* modify it under the terms of the GNU Lesser General Public
|
||
|
* License as published by the Free Software Foundation; either
|
||
|
* version 2.1 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
|
||
|
* Lesser General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU Lesser General Public
|
||
|
* License along with this library; if not, write to the Free Software
|
||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* SECTION:element-webrtcdsp
|
||
|
* @short_description: Audio Filter using WebRTC Audio Processing library
|
||
|
*
|
||
|
* A voice enhancement filter based on WebRTC Audio Processing library. This
|
||
|
* library provides a whide variety of enhancement algorithms. This element
|
||
|
* tries to enable as much as possible. The currently enabled enhancements are
|
||
|
* High Pass Filter, Echo Canceller, Noise Suppression, Automatic Gain Control,
|
||
|
* and some extended filters.
|
||
|
*
|
||
|
* While webrtcdsp element can be used alone, there is an exception for the
|
||
|
* echo canceller. The audio canceller need to be aware of the far end streams
|
||
|
* that are played to loud speakers. For this, you must place a webrtcechoprobe
|
||
|
* element at that far end. Note that the sample rate must match between
|
||
|
* webrtcdsp and the webrtechoprobe. Though, the number of channels can differ.
|
||
|
* The probe is found by the DSP element using it's object name. By default,
|
||
|
* webrtcdsp looks for webrtcechoprobe0, which means it just work if you have
|
||
|
* a single probe and DSP.
|
||
|
*
|
||
|
* The probe can only be used within the same top level GstPipeline.
|
||
|
* Additionally, to simplify the code, the probe element must be created
|
||
|
* before the DSP sink pad is activated. It does not need to be in any
|
||
|
* particular state and does not even need to be added to the pipeline yet.
|
||
|
*
|
||
|
* # Example launch line
|
||
|
*
|
||
|
* As a convenience, the echo canceller can be tested using an echo loop. In
|
||
|
* this configuration, one would expect a single echo to be heard.
|
||
|
*
|
||
|
* |[
|
||
|
* gst-launch-1.0 pulsesrc ! webrtcdsp ! webrtcechoprobe ! pulsesink
|
||
|
* ]|
|
||
|
*
|
||
|
* In real environment, you'll place the probe before the playback, but only
|
||
|
* process the far end streams. The DSP should be placed as close as possible
|
||
|
* to the audio capture. The following pipeline is astracted and does not
|
||
|
* represent a real pipeline.
|
||
|
*
|
||
|
* |[
|
||
|
* gst-launch-1.0 far-end-src ! audio/x-raw,rate=48000 ! webrtcechoprobe ! pulsesink \
|
||
|
* pulsesrc ! audio/x-raw,rate=48000 ! webrtcdsp ! far-end-sink
|
||
|
* ]|
|
||
|
*/
|
||
|
|
||
|
#ifdef HAVE_CONFIG_H
|
||
|
#include "config.h"
|
||
|
#endif
|
||
|
|
||
|
#include "gstwebrtcdsp.h"
|
||
|
#include "gstwebrtcechoprobe.h"
|
||
|
|
||
|
|
||
|
static gboolean
|
||
|
plugin_init (GstPlugin * plugin)
|
||
|
{
|
||
|
gboolean ret = FALSE;
|
||
|
|
||
|
ret |= GST_ELEMENT_REGISTER (webrtcdsp, plugin);
|
||
|
ret |= GST_ELEMENT_REGISTER (webrtcechoprobe, plugin);
|
||
|
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
|
||
|
GST_VERSION_MINOR,
|
||
|
webrtcdsp,
|
||
|
"Voice pre-processing using WebRTC Audio Processing Library",
|
||
|
plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
|