summaryrefslogtreecommitdiff
path: root/community-testing
diff options
context:
space:
mode:
Diffstat (limited to 'community-testing')
-rw-r--r--community-testing/jack2/40-hpet-permissions.rules2
-rw-r--r--community-testing/jack2/99-audio.conf2
-rw-r--r--community-testing/jack2/PKGBUILD135
-rw-r--r--community-testing/jack2/ffado_setbuffsize-jack2.patch139
4 files changed, 278 insertions, 0 deletions
diff --git a/community-testing/jack2/40-hpet-permissions.rules b/community-testing/jack2/40-hpet-permissions.rules
new file mode 100644
index 000000000..7af3780f9
--- /dev/null
+++ b/community-testing/jack2/40-hpet-permissions.rules
@@ -0,0 +1,2 @@
+KERNEL=="rtc0", GROUP="audio"
+KERNEL=="hpet", GROUP="audio"
diff --git a/community-testing/jack2/99-audio.conf b/community-testing/jack2/99-audio.conf
new file mode 100644
index 000000000..eb76ef920
--- /dev/null
+++ b/community-testing/jack2/99-audio.conf
@@ -0,0 +1,2 @@
+@audio - rtprio 99
+@audio - memlock unlimited
diff --git a/community-testing/jack2/PKGBUILD b/community-testing/jack2/PKGBUILD
new file mode 100644
index 000000000..dd3ab36e0
--- /dev/null
+++ b/community-testing/jack2/PKGBUILD
@@ -0,0 +1,135 @@
+# $Id: PKGBUILD 76735 2012-09-28 16:17:58Z schiv $
+# Maintainer: Ray Rashif <schiv@archlinux.org>
+# Contributor: Daniele Paolella <danielepaolella@email.it>
+# Contributor: Philipp Überbacher <hollunder at gmx dot at>
+# Contributor: Thomas Bahn <thomas-bahn at gmx dot net>
+
+pkgbase=jack2
+pkgname=('jack2' 'jack2-dbus')
+#pkgname= # single build (overrides split)
+_tarname=jack
+pkgver=1.9.8
+pkgrel=4
+arch=('i686' 'x86_64')
+url="http://jackaudio.org/"
+backup=(etc/security/limits.d/99-audio.conf)
+license=('GPL')
+makedepends=('python2' 'doxygen' 'libffado'
+ 'libsamplerate' 'dbus-core' 'celt')
+source=("http://www.grame.fr/~letz/$_tarname-$pkgver.tgz"
+ '99-audio.conf'
+ '40-hpet-permissions.rules'
+ 'ffado_setbuffsize-jack2.patch')
+md5sums=('1dd2ff054cab79dfc11d134756f27165'
+ 'ae65b7c9ebe0fff6c918ba9d97ae342d'
+ '471aad533ff56c5d3cbbf65ce32cadef'
+ '1502d82fe2276d6f224fff6467a0b6f9')
+
+_pyfix() {
+ sed -i 's:bin/env python:bin/env python2:' \
+ "$pkgdir/usr/bin/jack_control"
+}
+
+_wafconf() {
+ python2 waf configure --prefix=/usr \
+ --alsa \
+ --firewire \
+ --doxygen $@
+}
+
+_isbuild() {
+ printf "%s\n" ${pkgname[@]} | grep -qx $1
+}
+
+build() {
+ cd "$srcdir/$_tarname-$pkgver"
+
+ # backport firewire stuff
+ # - needed for setbuffsize feature in latest stable ffado
+ # from https://github.com/jackaudio/jack2/commit/96e0251
+ (
+ cd $_tarname-$pkgver
+ patch -Np1 -i "$srcdir/ffado_setbuffsize-jack2.patch"
+ )
+
+ # Some optimisation bug exists for current GCC
+ # see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53663
+ export CFLAGS="${CFLAGS/-O[0-9]/-O0}"
+ export CXXFLAGS="$CFLAGS"
+
+ # fix doxygen building
+ sed -i 's:build/default/html:html:' $_tarname-$pkgver/wscript
+
+ # we may do 2 different builds
+ cp -r $_tarname-$pkgver $_tarname-dbus-$pkgver
+
+ # mixed dbus/classic build
+ if _isbuild jack2; then
+ cd $_tarname-$pkgver
+ msg2 "Running Mixed D-Bus/Classic build"
+ _wafconf --classic --dbus
+ python2 waf build $MAKEFLAGS
+ cd ..
+ fi
+
+ # dbus-ONLY build
+ if _isbuild jack2-dbus; then
+ cd $_tarname-dbus-$pkgver
+ msg2 "Running D-Bus-only build"
+ _wafconf --dbus
+ python2 waf build $MAKEFLAGS
+ cd ..
+ fi
+}
+
+package_jack2() {
+ ! _isbuild jack2 && return 0
+
+ pkgdesc="The next-generation JACK with SMP support"
+ depends=('libsamplerate' 'celt')
+ optdepends=('libffado: FireWire support'
+ 'dbus-core: jackdbus'
+ 'python2: jack_control')
+ conflicts=('jack')
+ provides=('jack' 'jackmp' 'jackdmp' 'jackdbus')
+
+ cd "$srcdir/$_tarname-$pkgver/$_tarname-$pkgver"
+
+ python2 waf install --destdir="$pkgdir"
+
+ # fix for major python transition
+ _pyfix
+
+ # 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"
+}
+
+package_jack2-dbus() {
+ ! _isbuild jack2-dbus && return 0
+
+ pkgdesc="The next-generation JACK with SMP support (for D-BUS interaction only)"
+ depends=('libsamplerate' 'celt' 'dbus-core')
+ optdepends=('libffado: FireWire support'
+ 'python2: jack_control')
+ conflicts=('jack' 'jack2')
+ provides=('jack' 'jack2' 'jackmp' 'jackdmp' 'jackdbus')
+
+ cd "$srcdir/$_tarname-$pkgver/$_tarname-dbus-$pkgver"
+
+ python2 waf install --destdir="$pkgdir"
+
+ _pyfix
+
+ 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"
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/community-testing/jack2/ffado_setbuffsize-jack2.patch b/community-testing/jack2/ffado_setbuffsize-jack2.patch
new file mode 100644
index 000000000..0c74aad24
--- /dev/null
+++ b/community-testing/jack2/ffado_setbuffsize-jack2.patch
@@ -0,0 +1,139 @@
+From 96e0251234a29a1360c05d5d7dc98b83436b8183 Mon Sep 17 00:00:00 2001
+From: Adrian Knoth <adi@drcomp.erfurt.thur.de>
+Date: Sat, 17 Mar 2012 22:36:30 +0100
+Subject: [PATCH] [firewire] Allow FFADO backend to change the buffer size
+
+This is a port of Jonathan Woithe's patch from jackd1.
+With sufficiently recent versions of FFADO, it allows to change
+the buffersize at runtime.
+---
+ linux/firewire/JackFFADODriver.cpp | 65 ++++++++++++++++++++++++++++++++----
+ linux/firewire/JackFFADODriver.h | 6 ++++
+ 2 files changed, 65 insertions(+), 6 deletions(-)
+
+diff --git a/linux/firewire/JackFFADODriver.cpp b/linux/firewire/JackFFADODriver.cpp
+index b33e1cd..085b78a 100644
+--- a/linux/firewire/JackFFADODriver.cpp
++++ b/linux/firewire/JackFFADODriver.cpp
+@@ -3,6 +3,7 @@
+ Copyright (C) 2004 Grame
+ Copyright (C) 2007 Pieter Palmers
+ Copyright (C) 2009 Devin Anderson
++Copyright (C) 2012 Jonathan Woithe, Adrian Knoth
+
+ 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
+@@ -48,7 +49,10 @@
+ namespace Jack
+ {
+
++// 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
+
+ #define jack_get_microseconds GetMicroSeconds
+
+@@ -281,19 +285,68 @@
+ int
+ JackFFADODriver::SetBufferSize (jack_nframes_t nframes)
+ {
+- printError("Buffer size change requested but not supported!!!");
++ ffado_driver_t* driver = (ffado_driver_t*)fDriver;
++ 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_usecs =
+ (jack_time_t) floor ((((float) nframes) / driver->sample_rate)
+ * 1000000.0f);
+- */
++
++
++ // Reallocate the null and scratch buffers.
++ driver->nullbuffer = (ffado_sample_t*) calloc(driver->period_size, sizeof(ffado_sample_t));
++ if(driver->nullbuffer == NULL) {
++ printError("could not allocate memory for null buffer");
++ return -1;
++ }
++ driver->scratchbuffer = (ffado_sample_t*) 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 = (ffado_sample_t*) 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 = (ffado_sample_t*) 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 */
+- //driver->engine->set_buffer_size (driver->engine, nframes);
++ JackAudioDriver::SetBufferSize(nframes); // Generic change, never fails
+
+- return -1; // unsupported
++ UpdateLatencies();
++
++ return 0;
+ }
+
+ typedef void (*JackDriverFinishFunction) (jack_driver_t *);
+@@ -306,7 +359,7 @@
+
+ assert(params);
+
+- 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;
+ }
+diff --git a/linux/firewire/JackFFADODriver.h b/linux/firewire/JackFFADODriver.h
+index cb2a45d..790f4dd 100644
+--- a/linux/firewire/JackFFADODriver.h
++++ b/linux/firewire/JackFFADODriver.h
+@@ -82,6 +82,12 @@ class JackFFADODriver : public JackAudioDriver
+ int Read();
+ int Write();
+
++ // BufferSize can be changed
++ bool IsFixedBufferSize()
++ {
++ return false;
++ }
++
+ int SetBufferSize(jack_nframes_t nframes);
+ };
+
+--
+1.7.10
+