summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'media-sound/jack-audio-connection-kit/files/jack-audio-connection-kit-fix-alsa-capture-only.patch')
-rw-r--r--media-sound/jack-audio-connection-kit/files/jack-audio-connection-kit-fix-alsa-capture-only.patch201
1 files changed, 201 insertions, 0 deletions
diff --git a/media-sound/jack-audio-connection-kit/files/jack-audio-connection-kit-fix-alsa-capture-only.patch b/media-sound/jack-audio-connection-kit/files/jack-audio-connection-kit-fix-alsa-capture-only.patch
new file mode 100644
index 0000000..ed88123
--- /dev/null
+++ b/media-sound/jack-audio-connection-kit/files/jack-audio-connection-kit-fix-alsa-capture-only.patch
@@ -0,0 +1,201 @@
+#Author: Josh Green
+#Source: http://trac.jackaudio.org/changeset/3848
+#Issue: https://bugs.launchpad.net/ubuntu/+source/jack-audio-connection-kit/+bug/494223
+
+Index: /jack2/trunk/jackmp/linux/alsa/JackAlsaDriver.cpp
+===================================================================
+--- drivers/alsa/alsa_driver.c (revision 3580)
++++ drivers/alsa/alsa_driver.c (revision 3848)
+@@ -264,66 +264,6 @@
+ alsa_driver_setup_io_function_pointers (alsa_driver_t *driver)
+ {
+- if (SND_PCM_FORMAT_FLOAT_LE == driver->playback_sample_format) {
+- if (driver->playback_interleaved) {
+- driver->channel_copy = memcpy_interleave_d32_s32;
+- } else {
+- driver->channel_copy = memcpy_fake;
+- }
+- driver->read_via_copy = sample_move_floatLE_sSs;
+- driver->write_via_copy = sample_move_dS_floatLE;
+- } else {
+-
+- switch (driver->playback_sample_bytes) {
+- case 2:
+- if (driver->playback_interleaved) {
+- driver->channel_copy = memcpy_interleave_d16_s16;
+- } else {
+- driver->channel_copy = memcpy_fake;
+- }
+-
+- switch (driver->dither) {
+- case Rectangular:
+- jack_info("Rectangular dithering at 16 bits");
+- driver->write_via_copy = driver->quirk_bswap?
+- sample_move_dither_rect_d16_sSs:
+- sample_move_dither_rect_d16_sS;
+- break;
+-
+- case Triangular:
+- jack_info("Triangular dithering at 16 bits");
+- driver->write_via_copy = driver->quirk_bswap?
+- sample_move_dither_tri_d16_sSs:
+- sample_move_dither_tri_d16_sS;
+- break;
+-
+- case Shaped:
+- jack_info("Noise-shaped dithering at 16 bits");
+- driver->write_via_copy = driver->quirk_bswap?
+- sample_move_dither_shaped_d16_sSs:
+- sample_move_dither_shaped_d16_sS;
+- break;
+-
+- default:
+- driver->write_via_copy = driver->quirk_bswap?
+- sample_move_d16_sSs :
+- sample_move_d16_sS;
+- break;
+- }
+- break;
+-
+- case 3: /* NO DITHER */
+- if (driver->playback_interleaved) {
+- driver->channel_copy = memcpy_interleave_d24_s24;
+- } else {
+- driver->channel_copy = memcpy_fake;
+- }
+-
+- driver->write_via_copy = driver->quirk_bswap?
+- sample_move_d24_sSs:
+- sample_move_d24_sS;
+-
+- break;
+-
+- case 4: /* NO DITHER */
++ if (driver->playback_handle) {
++ if (SND_PCM_FORMAT_FLOAT_LE == driver->playback_sample_format) {
+ if (driver->playback_interleaved) {
+ driver->channel_copy = memcpy_interleave_d32_s32;
+@@ -331,33 +271,97 @@
+ driver->channel_copy = memcpy_fake;
+ }
+-
+- driver->write_via_copy = driver->quirk_bswap?
+- sample_move_d32u24_sSs:
+- sample_move_d32u24_sS;
+- break;
+-
+- default:
+- jack_error ("impossible sample width (%d) discovered!",
+- driver->playback_sample_bytes);
+- exit (1);
++ driver->read_via_copy = sample_move_floatLE_sSs;
++ driver->write_via_copy = sample_move_dS_floatLE;
++ } else {
++
++ switch (driver->playback_sample_bytes) {
++ case 2:
++ if (driver->playback_interleaved) {
++ driver->channel_copy = memcpy_interleave_d16_s16;
++ } else {
++ driver->channel_copy = memcpy_fake;
++ }
++
++ switch (driver->dither) {
++ case Rectangular:
++ jack_info("Rectangular dithering at 16 bits");
++ driver->write_via_copy = driver->quirk_bswap?
++ sample_move_dither_rect_d16_sSs:
++ sample_move_dither_rect_d16_sS;
++ break;
++
++ case Triangular:
++ jack_info("Triangular dithering at 16 bits");
++ driver->write_via_copy = driver->quirk_bswap?
++ sample_move_dither_tri_d16_sSs:
++ sample_move_dither_tri_d16_sS;
++ break;
++
++ case Shaped:
++ jack_info("Noise-shaped dithering at 16 bits");
++ driver->write_via_copy = driver->quirk_bswap?
++ sample_move_dither_shaped_d16_sSs:
++ sample_move_dither_shaped_d16_sS;
++ break;
++
++ default:
++ driver->write_via_copy = driver->quirk_bswap?
++ sample_move_d16_sSs :
++ sample_move_d16_sS;
++ break;
++ }
++ break;
++
++ case 3: /* NO DITHER */
++ if (driver->playback_interleaved) {
++ driver->channel_copy = memcpy_interleave_d24_s24;
++ } else {
++ driver->channel_copy = memcpy_fake;
++ }
++
++ driver->write_via_copy = driver->quirk_bswap?
++ sample_move_d24_sSs:
++ sample_move_d24_sS;
++
++ break;
++
++ case 4: /* NO DITHER */
++ if (driver->playback_interleaved) {
++ driver->channel_copy = memcpy_interleave_d32_s32;
++ } else {
++ driver->channel_copy = memcpy_fake;
++ }
++
++ driver->write_via_copy = driver->quirk_bswap?
++ sample_move_d32u24_sSs:
++ sample_move_d32u24_sS;
++ break;
++
++ default:
++ jack_error ("impossible sample width (%d) discovered!",
++ driver->playback_sample_bytes);
++ exit (1);
++ }
+ }
+ }
+
+- switch (driver->capture_sample_bytes) {
+- case 2:
+- driver->read_via_copy = driver->quirk_bswap?
+- sample_move_dS_s16s:
+- sample_move_dS_s16;
+- break;
+- case 3:
+- driver->read_via_copy = driver->quirk_bswap?
+- sample_move_dS_s24s:
+- sample_move_dS_s24;
+- break;
+- case 4:
+- driver->read_via_copy = driver->quirk_bswap?
+- sample_move_dS_s32u24s:
+- sample_move_dS_s32u24;
+- break;
++ if (driver->capture_handle) {
++ switch (driver->capture_sample_bytes) {
++ case 2:
++ driver->read_via_copy = driver->quirk_bswap?
++ sample_move_dS_s16s:
++ sample_move_dS_s16;
++ break;
++ case 3:
++ driver->read_via_copy = driver->quirk_bswap?
++ sample_move_dS_s24s:
++ sample_move_dS_s24;
++ break;
++ case 4:
++ driver->read_via_copy = driver->quirk_bswap?
++ sample_move_dS_s32u24s:
++ sample_move_dS_s32u24;
++ break;
++ }
+ }
+ }