Skip to content

Commit

Permalink
Copy jack plugin from 903198671349db944198dc3b65ac67806a53b3b2
Browse files Browse the repository at this point in the history
  • Loading branch information
okuoku committed Apr 20, 2019
0 parents commit 15e315e
Show file tree
Hide file tree
Showing 18 changed files with 3,955 additions and 0 deletions.
504 changes: 504 additions & 0 deletions COPYING

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions gst-jack/.gitignore
@@ -0,0 +1 @@
*.loT
9 changes: 9 additions & 0 deletions gst-jack/Makefile.am
@@ -0,0 +1,9 @@

plugin_LTLIBRARIES = libgstjack.la

libgstjack_la_SOURCES = gstjackutil.c gstjack.c gstjackaudiosrc.c gstjackaudiosink.c gstjackaudioclient.c
libgstjack_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(JACK_CFLAGS)
libgstjack_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) $(JACK_LIBS)
libgstjack_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)

noinst_HEADERS = gstjackutil.h gstjackaudiosrc.h gstjackaudiosink.h gstjackaudioclient.h gstjack.h gstjackringbuffer.h
117 changes: 117 additions & 0 deletions gst-jack/gstjack.c
@@ -0,0 +1,117 @@
/* GStreamer Jack plugins
* Copyright (C) 2006 Wim Taymans <wim@fluendo.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.
*/

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include "gstjack.h"
#include "gstjackaudiosrc.h"
#include "gstjackaudiosink.h"

GType
gst_jack_connect_get_type (void)
{
static volatile gsize jack_connect_type = 0;

if (g_once_init_enter (&jack_connect_type)) {
static const GEnumValue jack_connect_enums[] = {
{GST_JACK_CONNECT_NONE,
"Don't automatically connect ports to physical ports", "none"},
{GST_JACK_CONNECT_AUTO,
"Automatically connect ports to physical ports", "auto"},
{GST_JACK_CONNECT_AUTO_FORCED,
"Automatically connect ports to as many physical ports as possible",
"auto-forced"},
{0, NULL, NULL},
};
GType tmp = g_enum_register_static ("GstJackConnect", jack_connect_enums);
g_once_init_leave (&jack_connect_type, tmp);
}
return (GType) jack_connect_type;
}

GType
gst_jack_transport_get_type (void)
{
static volatile gsize type = 0;

if (g_once_init_enter (&type)) {
static const GFlagsValue flag_values[] = {
{GST_JACK_TRANSPORT_MASTER,
"Start and stop transport with state changes", "master"},
{GST_JACK_TRANSPORT_SLAVE,
"Follow transport state changes", "slave"},
{0, NULL, NULL},
};
GType tmp = g_flags_register_static ("GstJackTransport", flag_values);
g_once_init_leave (&type, tmp);
}
return (GType) type;
}


static gpointer
gst_jack_client_copy (gpointer jclient)
{
return jclient;
}


static void
gst_jack_client_free (gpointer jclient)
{
return;
}


GType
gst_jack_client_get_type (void)
{
static volatile gsize jack_client_type = 0;

if (g_once_init_enter (&jack_client_type)) {
/* hackish, but makes it show up nicely in gst-inspect */
GType tmp = g_boxed_type_register_static ("JackClient",
(GBoxedCopyFunc) gst_jack_client_copy,
(GBoxedFreeFunc) gst_jack_client_free);
g_once_init_leave (&jack_client_type, tmp);
}

return (GType) jack_client_type;
}

static gboolean
plugin_init (GstPlugin * plugin)
{
if (!gst_element_register (plugin, "jackaudiosrc", GST_RANK_PRIMARY,
GST_TYPE_JACK_AUDIO_SRC))
return FALSE;
if (!gst_element_register (plugin, "jackaudiosink", GST_RANK_PRIMARY,
GST_TYPE_JACK_AUDIO_SINK))
return FALSE;

return TRUE;
}

GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
GST_VERSION_MINOR,
jack,
"JACK audio elements",
plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
79 changes: 79 additions & 0 deletions gst-jack/gstjack.h
@@ -0,0 +1,79 @@
/* GStreamer
* Copyright (C) 2006 Wim Taymans <wim@fluendo.com>
*
* gstjack.h:
*
* 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_JACK_H_
#define _GST_JACK_H_

#include <jack/jack.h>
#include <gst/audio/audio.h>

/**
* GstJackConnect:
* @GST_JACK_CONNECT_NONE: Don't automatically connect to physical ports.
* In this mode, the element will accept any number of input channels and will
* create (but not connect) an output port for each channel.
* @GST_JACK_CONNECT_AUTO: In this mode, the element will try to connect each
* output port to a random physical jack input pin. The sink will
* expose the number of physical channels on its pad caps.
* @GST_JACK_CONNECT_AUTO_FORCED: In this mode, the element will try to connect each
* output port to a random physical jack input pin. The element will accept any number
* of input channels.
*
* Specify how the output ports will be connected.
*/
typedef enum {
GST_JACK_CONNECT_NONE,
GST_JACK_CONNECT_AUTO,
GST_JACK_CONNECT_AUTO_FORCED
} GstJackConnect;

/**
* GstJackTransport:
* @GST_JACK_TRANSPORT_AUTONOMOUS: no transport support
* @GST_JACK_TRANSPORT_MASTER: start and stop transport with state-changes
* @GST_JACK_TRANSPORT_SLAVE: follow transport state changes
*
* The jack transport state allow to sync multiple clients. This enum defines a
* client behaviour regarding to the transport mechanism.
*/
typedef enum {
GST_JACK_TRANSPORT_AUTONOMOUS = 0,
GST_JACK_TRANSPORT_MASTER = (1 << 0),
GST_JACK_TRANSPORT_SLAVE = (1 << 1),
} GstJackTransport;

typedef jack_default_audio_sample_t sample_t;

#define GST_TYPE_JACK_CONNECT (gst_jack_connect_get_type ())
#define GST_TYPE_JACK_TRANSPORT (gst_jack_transport_get_type ())
#define GST_TYPE_JACK_CLIENT (gst_jack_client_get_type ())

#if G_BYTE_ORDER == G_LITTLE_ENDIAN
#define GST_JACK_FORMAT_STR "F32LE"
#else
#define GST_JACK_FORMAT_STR "F32BE"
#endif

GType gst_jack_client_get_type(void);
GType gst_jack_connect_get_type(void);
GType gst_jack_transport_get_type(void);

#endif // _GST_JACK_H_

0 comments on commit 15e315e

Please sign in to comment.