[arch-commits] Commit in jack/trunk (PKGBUILD ffado_setbuffsize-jack1.patch)

Ray Rashif schiv at archlinux.org
Fri Sep 28 14:42:57 UTC 2012


    Date: Friday, September 28, 2012 @ 10:42:56
  Author: schiv
Revision: 167216

upgpkg: jack 0.121.3-7

patched jack pkgs for setbuffersize; revisit FS#31633

Added:
  jack/trunk/ffado_setbuffsize-jack1.patch
Modified:
  jack/trunk/PKGBUILD

-------------------------------+
 PKGBUILD                      |   13 +++-
 ffado_setbuffsize-jack1.patch |  124 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 134 insertions(+), 3 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2012-09-28 14:21:22 UTC (rev 167215)
+++ PKGBUILD	2012-09-28 14:42:56 UTC (rev 167216)
@@ -6,7 +6,7 @@
 pkgname=jack
 _longname=jack-audio-connection-kit
 pkgver=0.121.3
-pkgrel=6
+pkgrel=7
 pkgdesc="A low-latency audio server"
 arch=('i686' 'x86_64')
 license=('GPL' 'LGPL')
@@ -23,14 +23,21 @@
 install=$pkgname.install
 source=("http://jackaudio.org/downloads/$_longname-$pkgver.tar.gz"
         '99-audio.conf'
-        '40-hpet-permissions.rules')
+        '40-hpet-permissions.rules'
+        'ffado_setbuffsize-jack1.patch')
 md5sums=('35f470f7422c37b33eb965033f7a42e8'
          'ae65b7c9ebe0fff6c918ba9d97ae342d'
-         '471aad533ff56c5d3cbbf65ce32cadef')
+         '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

Added: ffado_setbuffsize-jack1.patch
===================================================================
--- ffado_setbuffsize-jack1.patch	                        (rev 0)
+++ ffado_setbuffsize-jack1.patch	2012-09-28 14:42:56 UTC (rev 167216)
@@ -0,0 +1,124 @@
+From 025d3ad4d5adeff00e97b6fafdf32d6d199d0baa Mon Sep 17 00:00:00 2001
+From: Jonathan Woithe <jwoithe at 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
+




More information about the arch-commits mailing list