summaryrefslogtreecommitdiff
path: root/testing/jack
diff options
context:
space:
mode:
authorroot <root@rshg054.dnsready.net>2012-09-29 00:54:39 -0700
committerroot <root@rshg054.dnsready.net>2012-09-29 00:54:39 -0700
commitb004f93f171149c5a53d464819b9d0197f1d783e (patch)
tree457c18648c0dcfadf8286edf2c69c2ece10a785e /testing/jack
parent3edc42216fee4bb8237aa128510c32ceb77dfd8f (diff)
Sat Sep 29 00:54:37 PDT 2012
Diffstat (limited to 'testing/jack')
-rw-r--r--testing/jack/40-hpet-permissions.rules2
-rw-r--r--testing/jack/99-audio.conf2
-rw-r--r--testing/jack/PKGBUILD65
-rw-r--r--testing/jack/ffado_setbuffsize-jack1.patch124
-rw-r--r--testing/jack/jack.install5
5 files changed, 198 insertions, 0 deletions
diff --git a/testing/jack/40-hpet-permissions.rules b/testing/jack/40-hpet-permissions.rules
new file mode 100644
index 000000000..7af3780f9
--- /dev/null
+++ b/testing/jack/40-hpet-permissions.rules
@@ -0,0 +1,2 @@
+KERNEL=="rtc0", GROUP="audio"
+KERNEL=="hpet", GROUP="audio"
diff --git a/testing/jack/99-audio.conf b/testing/jack/99-audio.conf
new file mode 100644
index 000000000..eb76ef920
--- /dev/null
+++ b/testing/jack/99-audio.conf
@@ -0,0 +1,2 @@
+@audio - rtprio 99
+@audio - memlock unlimited
diff --git a/testing/jack/PKGBUILD b/testing/jack/PKGBUILD
new file mode 100644
index 000000000..185e4d02f
--- /dev/null
+++ b/testing/jack/PKGBUILD
@@ -0,0 +1,65 @@
+# $Id: PKGBUILD 167217 2012-09-28 14:43:50Z schiv $
+# Maintainer: Ray Rashif <schiv@archlinux.org>
+# Contributor: tobias <tobias@archlinux.net>
+# Contributor: Robert Emil Berge <robert@rebi.no>
+
+pkgname=jack
+_longname=jack-audio-connection-kit
+pkgver=0.121.3
+pkgrel=7
+pkgdesc="A low-latency audio server"
+arch=('i686' 'x86_64')
+license=('GPL' 'LGPL')
+depends=('libsamplerate' 'readline')
+makedepends=('doxygen' 'libffado' 'celt')
+optdepends=('libffado: FireWire support'
+ 'celt: NetJACK driver')
+url="http://jackaudio.org/"
+backup=(etc/security/limits.d/99-audio.conf)
+options=('!libtool')
+provides=("$_longname=$pkgver")
+conflicts=("$_longname")
+replaces=("$_longname")
+install=$pkgname.install
+source=("http://jackaudio.org/downloads/$_longname-$pkgver.tar.gz"
+ '99-audio.conf'
+ '40-hpet-permissions.rules'
+ 'ffado_setbuffsize-jack1.patch')
+md5sums=('35f470f7422c37b33eb965033f7a42e8'
+ 'ae65b7c9ebe0fff6c918ba9d97ae342d'
+ '471aad533ff56c5d3cbbf65ce32cadef'
+ 'c1f78ee7847c6d5e471d90626623ffb4')
+
+build() {
+ cd "$srcdir/$_longname-$pkgver"
+
+ # backport firewire stuff
+ # - needed for setbuffsize feature in latest stable ffado
+ # from https://github.com/jackaudio/jack1/commit/025d3ad
+ patch -Np1 -i "$srcdir/ffado_setbuffsize-jack1.patch"
+
+ ./configure --prefix=/usr \
+ --libdir=/usr/lib
+ make
+}
+
+package() {
+ cd "$srcdir/$_longname-$pkgver"
+
+ make DESTDIR="$pkgdir" install
+
+ # configure realtime access/scheduling
+ # see https://bugs.archlinux.org/task/26343
+ install -Dm644 "$srcdir/99-audio.conf" \
+ "$pkgdir/etc/security/limits.d/99-audio.conf"
+
+ install -Dm644 "$srcdir/40-hpet-permissions.rules" \
+ "$pkgdir/usr/lib/udev/rules.d/40-hpet-permissions.rules"
+
+ # install a missing header forgotten by upstream
+ # see https://bugs.archlinux.org/task/26865
+ install -Dm644 "$srcdir/$_longname-$pkgver/jack/jslist.h" \
+ "$pkgdir/usr/include/jack/jslist.h"
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/testing/jack/ffado_setbuffsize-jack1.patch b/testing/jack/ffado_setbuffsize-jack1.patch
new file mode 100644
index 000000000..7e43962ee
--- /dev/null
+++ b/testing/jack/ffado_setbuffsize-jack1.patch
@@ -0,0 +1,124 @@
+From 025d3ad4d5adeff00e97b6fafdf32d6d199d0baa Mon Sep 17 00:00:00 2001
+From: Jonathan Woithe <jwoithe@just42.net>
+Date: Tue, 13 Mar 2012 15:43:03 +1030
+Subject: [PATCH] Support setbufsize in firewire driver
+
+---
+ drivers/firewire/ffado_driver.c | 69 ++++++++++++++++++++++++++++++++++-----
+ 1 file changed, 60 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/firewire/ffado_driver.c b/drivers/firewire/ffado_driver.c
+index a8ad1ea..6035af3 100644
+--- a/drivers/firewire/ffado_driver.c
++++ b/drivers/firewire/ffado_driver.c
+@@ -7,6 +7,7 @@
+ * http://www.jackaudio.org
+ *
+ * Copyright (C) 2005-2007 Pieter Palmers
++ * Copyright (C) 2012 Jonathan Woithe
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+@@ -50,7 +51,10 @@
+
+ static int ffado_driver_stop (ffado_driver_t *driver);
+
++// Basic functionality requires API version 8. If version 9 or later
++// is present the buffers can be resized at runtime.
+ #define FIREWIRE_REQUIRED_FFADO_API_VERSION 8
++#define FIREWIRE_REQUIRED_FFADO_API_VERSION_FOR_SETBUFSIZE 9
+
+ // enable verbose messages
+ static int g_verbose=0;
+@@ -675,24 +679,71 @@
+ static int
+ ffado_driver_bufsize (ffado_driver_t* driver, jack_nframes_t nframes)
+ {
+- printError("Buffer size change requested but not supported!!!");
++ signed int chn;
++
++ // The speed of this function isn't critical; we can afford the
++ // time to check the FFADO API version.
++ if (ffado_get_api_version() < FIREWIRE_REQUIRED_FFADO_API_VERSION_FOR_SETBUFSIZE ||
++ ffado_streaming_set_period_size == NULL) {
++ printError("unsupported on current version of FFADO; please upgrade FFADO");
++ return -1;
++ }
+
+- /*
+- driver->period_size = nframes;
++ driver->period_size = nframes;
+ driver->period_usecs =
+ (jack_time_t) floor ((((float) nframes) / driver->sample_rate)
+ * 1000000.0f);
+- */
+-
++
++ // Reallocate the null and scratch buffers.
++ driver->nullbuffer = calloc(driver->period_size, sizeof(ffado_sample_t));
++ if(driver->nullbuffer == NULL) {
++ printError("could not allocate memory for null buffer");
++ return -1;
++ }
++ driver->scratchbuffer = calloc(driver->period_size, sizeof(ffado_sample_t));
++ if(driver->scratchbuffer == NULL) {
++ printError("could not allocate memory for scratch buffer");
++ return -1;
++ }
++
++ // MIDI buffers need reallocating
++ for (chn = 0; chn < driver->capture_nchannels; chn++) {
++ if(driver->capture_channels[chn].stream_type == ffado_stream_type_midi) {
++ // setup the midi buffer
++ if (driver->capture_channels[chn].midi_buffer != NULL)
++ free(driver->capture_channels[chn].midi_buffer);
++ driver->capture_channels[chn].midi_buffer = calloc(driver->period_size, sizeof(uint32_t));
++ }
++ }
++ for (chn = 0; chn < driver->playback_nchannels; chn++) {
++ if(driver->playback_channels[chn].stream_type == ffado_stream_type_midi) {
++ if (driver->playback_channels[chn].midi_buffer != NULL)
++ free(driver->playback_channels[chn].midi_buffer);
++ driver->playback_channels[chn].midi_buffer = calloc(driver->period_size, sizeof(uint32_t));
++ }
++ }
++
++ // Notify FFADO of the period size change
++ if (ffado_streaming_set_period_size(driver->dev, nframes) != 0) {
++ printError("could not alter FFADO device period size");
++ return -1;
++ }
++
++ // This is needed to give the shadow variables a chance to
++ // properly update to the changes.
++ sleep(1);
++
+ /* tell the engine to change its buffer size */
+-#if 0
+ if (driver->engine->set_buffer_size (driver->engine, nframes)) {
+ jack_error ("FFADO: cannot set engine buffer size to %d (check MIDI)", nframes);
+ return -1;
+ }
+-#endif
+
+- return -1; // unsupported
++ // Other drivers (eg: ALSA) don't seem to adjust latencies via
++ // jack_port_set_latency_range() from the bufsize() callback, so we
++ // won't either. Is this right?
++
++ return 0;
+ }
+
+ typedef void (*JackDriverFinishFunction) (jack_driver_t *);
+@@ -704,7 +755,7 @@
+ {
+ ffado_driver_t *driver;
+
+- if(ffado_get_api_version() != FIREWIRE_REQUIRED_FFADO_API_VERSION) {
++ if(ffado_get_api_version() < FIREWIRE_REQUIRED_FFADO_API_VERSION) {
+ printError("Incompatible libffado version! (%s)", ffado_get_version());
+ return NULL;
+ }
+--
+1.7.10
+
diff --git a/testing/jack/jack.install b/testing/jack/jack.install
new file mode 100644
index 000000000..8be532f6d
--- /dev/null
+++ b/testing/jack/jack.install
@@ -0,0 +1,5 @@
+post_upgrade() {
+ rm -f etc/security/limits.d/99-realtime.conf
+}
+
+# vim:set ts=2 sw=2 et: