Commit 3fb81536 authored by Nirbheek Chauhan's avatar Nirbheek Chauhan 🐜

audiolatency: New plugin for measuring audio latency

Measures the audio latency between the source pad and the sink pad by
outputting period ticks on the source pad and measuring how long they
take to arrive on the sink pad.

Very useful for quantifying latency improvements in audio pipelines.
This plugin was particularly useful during development of the
low-latency features of the wasapi plugin.

https://bugzilla.gnome.org/show_bug.cgi?id=793839
parent 2863a55a
......@@ -428,6 +428,7 @@ AG_GST_CHECK_PLUGIN(videoframe_audiolevel)
AG_GST_CHECK_PLUGIN(asfmux)
AG_GST_CHECK_PLUGIN(audiobuffersplit)
AG_GST_CHECK_PLUGIN(audiofxbad)
AG_GST_CHECK_PLUGIN(audiolatency)
AG_GST_CHECK_PLUGIN(audiomixmatrix)
AG_GST_CHECK_PLUGIN(compositor)
AG_GST_CHECK_PLUGIN(audiovisualizers)
......@@ -2497,6 +2498,7 @@ gst/videoframe_audiolevel/Makefile
gst/asfmux/Makefile
gst/audiobuffersplit/Makefile
gst/audiofxbad/Makefile
gst/audiolatency/Makefile
gst/audiomixmatrix/Makefile
gst/audiovisualizers/Makefile
gst/autoconvert/Makefile
......
plugin_LTLIBRARIES = libgstaudiolatency.la
libgstaudiolatency_la_SOURCES = gstaudiolatency.c
noinst_HEADERS = gstaudiolatency.h
libgstaudiolatency_la_CFLAGS = $(GST_CFLAGS)
libgstaudiolatency_la_LIBADD = $(GST_LIBS)
libgstaudiolatency_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstaudiolatency_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
This diff is collapsed.
/*
* Copyright (C) 2018 Centricular Ltd.
* Author: Nirbheek Chauhan <nirbheek@centricular.com>
*
* 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
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef __GST_AUDIOLATENCY_H__
#define __GST_AUDIOLATENCY_H__
#include <gst/gst.h>
G_BEGIN_DECLS
#define GST_TYPE_AUDIOLATENCY \
(gst_audiolatency_get_type ())
#define GST_AUDIOLATENCY(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_AUDIOLATENCY, GstAudioLatency))
#define GST_AUDIOLATENCY_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_AUDIOLATENCY, GstAudioLatencyClass))
#define GST_IS_AUDIOLATENCY(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_AUDIOLATENCY))
#define GST_IS_AUDIOLATENCY_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_AUDIOLATENCY))
typedef struct _GstAudioLatency GstAudioLatency;
typedef struct _GstAudioLatencyClass GstAudioLatencyClass;
#define GST_AUDIOLATENCY_NUM_LATENCIES 5
struct _GstAudioLatency
{
GstBin parent;
GstPad *sinkpad;
GstPad *srcpad;
/* audiotestsrc */
GstElement *audiosrc;
/* measurements */
gint64 send_pts;
gint64 recv_pts;
gint next_latency_idx;
gint latencies[GST_AUDIOLATENCY_NUM_LATENCIES];
/* properties */
gboolean print_latency;
};
struct _GstAudioLatencyClass
{
GstBinClass parent_class;
};
GType gst_audiolatency_get_type (void);
G_END_DECLS
#endif /* __GST_AUDIOLATENCY_H__ */
gstaudiolatency = library('gstaudiolatency',
'gstaudiolatency.c',
c_args : gst_plugins_bad_args,
include_directories : [configinc],
dependencies : [gstbase_dep],
install : true,
install_dir : plugins_install_dir,
)
......@@ -6,6 +6,7 @@ subdir('asfmux')
subdir('audiobuffersplit')
subdir('audiofxbad')
subdir('audiomixmatrix')
subdir('audiolatency')
subdir('audiovisualizers')
subdir('autoconvert')
subdir('bayer')
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment