git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1276 0c269be4-1314-0410-8aa9-9f06e86f4224tags/0.59
| @@ -2,6 +2,10 @@ | |||
| Jackdmp changes log | |||
| --------------------------- | |||
| 2006-11-08 Stephane Letz <letz@grame.fr> | |||
| * Synchronize ALSA backend with jack one. | |||
| 2006-11-04 Stephane Letz <letz@grame.fr> | |||
| * Use -D to setup ADDON_DIR on OSX and Linux. | |||
| @@ -39,7 +39,7 @@ set_control_id (snd_ctl_elem_id_t *ctl, const char *name) | |||
| { | |||
| snd_ctl_elem_id_set_name (ctl, name); | |||
| snd_ctl_elem_id_set_numid (ctl, 0); | |||
| snd_ctl_elem_id_set_interface (ctl, SND_CTL_ELEM_IFACE_PCM); | |||
| snd_ctl_elem_id_set_interface (ctl, SND_CTL_ELEM_IFACE_MIXER); | |||
| snd_ctl_elem_id_set_device (ctl, 0); | |||
| snd_ctl_elem_id_set_subdevice (ctl, 0); | |||
| snd_ctl_elem_id_set_index (ctl, 0); | |||
| @@ -142,7 +142,7 @@ hammerfall_check_sync (hammerfall_t *h, snd_ctl_elem_value_t *ctl) | |||
| static int | |||
| hammerfall_set_input_monitor_mask (jack_hardware_t *hw, unsigned long mask) | |||
| { | |||
| hammerfall_t *h = (hammerfall_t *) hw->private_hw; | |||
| hammerfall_t *h = (hammerfall_t *) hw->private; | |||
| snd_ctl_elem_value_t *ctl; | |||
| snd_ctl_elem_id_t *ctl_id; | |||
| int err; | |||
| @@ -170,7 +170,7 @@ hammerfall_set_input_monitor_mask (jack_hardware_t *hw, unsigned long mask) | |||
| static int | |||
| hammerfall_change_sample_clock (jack_hardware_t *hw, SampleClockMode mode) | |||
| { | |||
| hammerfall_t *h = (hammerfall_t *) hw->private_hw; | |||
| hammerfall_t *h = (hammerfall_t *) hw->private; | |||
| snd_ctl_elem_value_t *ctl; | |||
| snd_ctl_elem_id_t *ctl_id; | |||
| int err; | |||
| @@ -203,7 +203,7 @@ static void | |||
| hammerfall_release (jack_hardware_t *hw) | |||
| { | |||
| hammerfall_t *h = (hammerfall_t *) hw->private_hw; | |||
| hammerfall_t *h = (hammerfall_t *) hw->private; | |||
| void *status; | |||
| if (h == 0) { | |||
| @@ -221,7 +221,7 @@ static void * | |||
| hammerfall_monitor_controls (void *arg) | |||
| { | |||
| jack_hardware_t *hw = (jack_hardware_t *) arg; | |||
| hammerfall_t *h = (hammerfall_t *) hw->private_hw; | |||
| hammerfall_t *h = (hammerfall_t *) hw->private; | |||
| snd_ctl_elem_id_t *switch_id[3]; | |||
| snd_ctl_elem_value_t *sw[3]; | |||
| @@ -279,7 +279,7 @@ jack_alsa_hammerfall_hw_new (alsa_driver_t *driver) | |||
| hw->capabilities = Cap_HardwareMonitoring|Cap_AutoSync|Cap_WordClock|Cap_ClockMaster|Cap_ClockLockReporting; | |||
| hw->input_monitor_mask = 0; | |||
| hw->private_hw = 0; | |||
| hw->private = 0; | |||
| hw->set_input_monitor_mask = hammerfall_set_input_monitor_mask; | |||
| hw->change_sample_clock = hammerfall_change_sample_clock; | |||
| @@ -299,7 +299,7 @@ jack_alsa_hammerfall_hw_new (alsa_driver_t *driver) | |||
| h->monitor_interval.tv_sec = 1; | |||
| h->monitor_interval.tv_nsec = 0; | |||
| hw->private_hw = h; | |||
| hw->private = h; | |||
| #if 0 | |||
| if (pthread_create (&h->monitor_thread, 0, hammerfall_monitor_controls, hw)) { | |||
| @@ -89,7 +89,7 @@ set_control_id (snd_ctl_elem_id_t *ctl, const char *name) | |||
| static int hdsp_set_mixer_gain(jack_hardware_t *hw, int input_channel, | |||
| int output_channel, int gain) | |||
| { | |||
| hdsp_t *h = (hdsp_t *) hw->private_hw; | |||
| hdsp_t *h = (hdsp_t *) hw->private; | |||
| snd_ctl_elem_value_t *ctl; | |||
| snd_ctl_elem_id_t *ctl_id; | |||
| int err; | |||
| @@ -194,7 +194,7 @@ static double hdsp_get_hardware_power (jack_port_t *port, jack_nframes_t frame) | |||
| static void | |||
| hdsp_release (jack_hardware_t *hw) | |||
| { | |||
| hdsp_t *h = (hdsp_t *) hw->private_hw; | |||
| hdsp_t *h = (hdsp_t *) hw->private; | |||
| if (h != 0) { | |||
| free (h); | |||
| @@ -216,7 +216,7 @@ jack_alsa_hdsp_hw_new (alsa_driver_t *driver) | |||
| /* hw->capabilities = Cap_HardwareMonitoring|Cap_AutoSync|Cap_WordClock|Cap_ClockMaster|Cap_ClockLockReporting; */ | |||
| hw->capabilities = Cap_HardwareMonitoring | Cap_HardwareMetering; | |||
| hw->input_monitor_mask = 0; | |||
| hw->private_hw = 0; | |||
| hw->private = 0; | |||
| hw->set_input_monitor_mask = hdsp_set_input_monitor_mask; | |||
| hw->change_sample_clock = hdsp_change_sample_clock; | |||
| @@ -226,7 +226,7 @@ jack_alsa_hdsp_hw_new (alsa_driver_t *driver) | |||
| h = (hdsp_t *) malloc (sizeof (hdsp_t)); | |||
| h->driver = driver; | |||
| hw->private_hw = h; | |||
| hw->private = h; | |||
| return hw; | |||
| } | |||
| @@ -34,7 +34,7 @@ static int | |||
| ice1712_hw_monitor_toggle(jack_hardware_t *hw, int idx, int onoff) | |||
| { | |||
| ice1712_t *h = (ice1712_t *) hw->private_hw; | |||
| ice1712_t *h = (ice1712_t *) hw->private; | |||
| snd_ctl_elem_value_t *val; | |||
| int err; | |||
| @@ -66,7 +66,7 @@ ice1712_set_input_monitor_mask (jack_hardware_t *hw, unsigned long mask) | |||
| { | |||
| int idx; | |||
| ice1712_t *h = (ice1712_t *) hw->private_hw; | |||
| ice1712_t *h = (ice1712_t *) hw->private; | |||
| for (idx = 0; idx < 10; idx++) { | |||
| if (h->active_channels & (1<<idx)) { | |||
| @@ -88,7 +88,7 @@ ice1712_change_sample_clock (jack_hardware_t *hw, SampleClockMode mode) | |||
| static void | |||
| ice1712_release (jack_hardware_t *hw) | |||
| { | |||
| ice1712_t *h = (ice1712_t *) hw->private_hw; | |||
| ice1712_t *h = (ice1712_t *) hw->private; | |||
| if (h == 0) | |||
| return; | |||
| @@ -113,7 +113,7 @@ jack_alsa_ice1712_hw_new (alsa_driver_t *driver) | |||
| hw->capabilities = Cap_HardwareMonitoring; | |||
| hw->input_monitor_mask = 0; | |||
| hw->private_hw = 0; | |||
| hw->private = 0; | |||
| hw->set_input_monitor_mask = ice1712_set_input_monitor_mask; | |||
| hw->change_sample_clock = ice1712_change_sample_clock; | |||
| @@ -155,7 +155,7 @@ jack_alsa_ice1712_hw_new (alsa_driver_t *driver) | |||
| h->active_channels |= 0x300U; | |||
| } | |||
| hw->private_hw = h; | |||
| hw->private = h; | |||
| return hw; | |||
| } | |||
| @@ -1,24 +1,24 @@ | |||
| /* | |||
| Copyright (C) 2002 Anthony Van Groningen | |||
| Copyright (C) 2002 Anthony Van Groningen | |||
| Parts based on source code taken from the | |||
| "Env24 chipset (ICE1712) control utility" that is | |||
| Parts based on source code taken from the | |||
| "Env24 chipset (ICE1712) control utility" that is | |||
| Copyright (C) 2000 by Jaroslav Kysela <perex@suse.cz> | |||
| 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 | |||
| the Free Software Foundation; either version 2 of the License, or | |||
| (at your option) any later version. | |||
| Copyright (C) 2000 by Jaroslav Kysela <perex@suse.cz> | |||
| 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 | |||
| the Free Software Foundation; either version 2 of the License, or | |||
| (at your option) any later version. | |||
| This program 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 General Public License for more details. | |||
| This program 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 General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | |||
| along with this program; if not, write to the Free Software | |||
| Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||
| You should have received a copy of the GNU General Public License | |||
| along with this program; if not, write to the Free Software | |||
| Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||
| */ | |||
| @@ -35,36 +35,31 @@ | |||
| #define ANALOG_PLAYBACK_ROUTE_NAME "H/W Playback Route" | |||
| #define MULTITRACK_PEAK_NAME "Multi Track Peak" | |||
| typedef struct | |||
| { | |||
| unsigned int subvendor; /* PCI[2c-2f] */ | |||
| unsigned char size; /* size of EEPROM image in bytes */ | |||
| unsigned char version; /* must be 1 */ | |||
| unsigned char codec; /* codec configuration PCI[60] */ | |||
| unsigned char aclink; /* ACLink configuration PCI[61] */ | |||
| unsigned char i2sID; /* PCI[62] */ | |||
| unsigned char spdif; /* S/PDIF configuration PCI[63] */ | |||
| unsigned char gpiomask; /* GPIO initial mask, 0 = write, 1 = don't */ | |||
| unsigned char gpiostate; /* GPIO initial state */ | |||
| unsigned char gpiodir; /* GPIO direction state */ | |||
| unsigned short ac97main; | |||
| unsigned short ac97pcm; | |||
| unsigned short ac97rec; | |||
| unsigned char ac97recsrc; | |||
| unsigned char dacID[4]; /* I2S IDs for DACs */ | |||
| unsigned char adcID[4]; /* I2S IDs for ADCs */ | |||
| unsigned char extra[4]; | |||
| } | |||
| ice1712_eeprom_t; | |||
| typedef struct | |||
| { | |||
| alsa_driver_t *driver; | |||
| ice1712_eeprom_t *eeprom; | |||
| unsigned long active_channels; | |||
| } | |||
| ice1712_t; | |||
| typedef struct { | |||
| unsigned int subvendor; /* PCI[2c-2f] */ | |||
| unsigned char size; /* size of EEPROM image in bytes */ | |||
| unsigned char version; /* must be 1 */ | |||
| unsigned char codec; /* codec configuration PCI[60] */ | |||
| unsigned char aclink; /* ACLink configuration PCI[61] */ | |||
| unsigned char i2sID; /* PCI[62] */ | |||
| unsigned char spdif; /* S/PDIF configuration PCI[63] */ | |||
| unsigned char gpiomask; /* GPIO initial mask, 0 = write, 1 = don't */ | |||
| unsigned char gpiostate; /* GPIO initial state */ | |||
| unsigned char gpiodir; /* GPIO direction state */ | |||
| unsigned short ac97main; | |||
| unsigned short ac97pcm; | |||
| unsigned short ac97rec; | |||
| unsigned char ac97recsrc; | |||
| unsigned char dacID[4]; /* I2S IDs for DACs */ | |||
| unsigned char adcID[4]; /* I2S IDs for ADCs */ | |||
| unsigned char extra[4]; | |||
| } ice1712_eeprom_t; | |||
| typedef struct { | |||
| alsa_driver_t *driver; | |||
| ice1712_eeprom_t *eeprom; | |||
| unsigned long active_channels; | |||
| } ice1712_t; | |||
| #ifdef __cplusplus | |||
| extern "C" | |||
| @@ -30,7 +30,7 @@ | |||
| #include <memory.h> | |||
| #include <stdlib.h> | |||
| #include <limits.h> | |||
| #include <endian.h> | |||
| #include "memops.h" | |||
| @@ -50,6 +50,37 @@ inline unsigned int fast_rand() { | |||
| return seed; | |||
| } | |||
| void sample_move_d32u24_sSs (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) | |||
| { | |||
| long long y; | |||
| int z; | |||
| while (nsamples--) { | |||
| y = (long long)(*src * SAMPLE_MAX_24BIT) << 8; | |||
| if (y > INT_MAX) { | |||
| z = INT_MAX; | |||
| } else if (y < INT_MIN) { | |||
| z = INT_MIN; | |||
| } else { | |||
| z = (int)y; | |||
| } | |||
| #if __BYTE_ORDER == __LITTLE_ENDIAN | |||
| dst[0]=(char)(z>>24); | |||
| dst[1]=(char)(z>>16); | |||
| dst[2]=(char)(z>>8); | |||
| dst[3]=(char)(z); | |||
| #elif __BYTE_ORDER == __BIG_ENDIAN | |||
| dst[0]=(char)(z); | |||
| dst[1]=(char)(z>>8); | |||
| dst[2]=(char)(z>>16); | |||
| dst[3]=(char)(z>>24); | |||
| #endif | |||
| dst += dst_skip; | |||
| src++; | |||
| } | |||
| } | |||
| void sample_move_d32u24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) | |||
| { | |||
| @@ -69,6 +100,35 @@ void sample_move_d32u24_sS (char *dst, jack_default_audio_sample_t *src, unsigne | |||
| } | |||
| } | |||
| void sample_move_dS_s32u24s (jack_default_audio_sample_t *dst, char *src, unsigned long nsamples, unsigned long src_skip) | |||
| { | |||
| /* ALERT: signed sign-extension portability !!! */ | |||
| while (nsamples--) { | |||
| int x; | |||
| #if __BYTE_ORDER == __LITTLE_ENDIAN | |||
| x = (unsigned char)(src[0]); | |||
| x <<= 8; | |||
| x |= (unsigned char)(src[1]); | |||
| x <<= 8; | |||
| x |= (unsigned char)(src[2]); | |||
| x <<= 8; | |||
| x |= (unsigned char)(src[3]); | |||
| #elif __BYTE_ORDER == __BIG_ENDIAN | |||
| x = (unsigned char)(src[3]); | |||
| x <<= 8; | |||
| x |= (unsigned char)(src[2]); | |||
| x <<= 8; | |||
| x |= (unsigned char)(src[1]); | |||
| x <<= 8; | |||
| x |= (unsigned char)(src[0]); | |||
| #endif | |||
| *dst = (x >> 8) / SAMPLE_MAX_24BIT; | |||
| dst++; | |||
| src += src_skip; | |||
| } | |||
| } | |||
| void sample_move_dS_s32u24 (jack_default_audio_sample_t *dst, char *src, unsigned long nsamples, unsigned long src_skip) | |||
| { | |||
| /* ALERT: signed sign-extension portability !!! */ | |||
| @@ -80,6 +140,42 @@ void sample_move_dS_s32u24 (jack_default_audio_sample_t *dst, char *src, unsigne | |||
| } | |||
| } | |||
| void sample_move_dither_rect_d32u24_sSs (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) | |||
| { | |||
| /* ALERT: signed sign-extension portability !!! */ | |||
| jack_default_audio_sample_t x; | |||
| long long y; | |||
| int z; | |||
| while (nsamples--) { | |||
| x = *src * SAMPLE_MAX_16BIT; | |||
| x -= (float)fast_rand() / (float)INT_MAX; | |||
| y = (long long)f_round(x); | |||
| y <<= 16; | |||
| if (y > INT_MAX) { | |||
| z = INT_MAX; | |||
| } else if (y < INT_MIN) { | |||
| z = INT_MIN; | |||
| } else { | |||
| z = (int)y; | |||
| } | |||
| #if __BYTE_ORDER == __LITTLE_ENDIAN | |||
| dst[0]=(char)(z>>24); | |||
| dst[1]=(char)(z>>16); | |||
| dst[2]=(char)(z>>8); | |||
| dst[3]=(char)(z); | |||
| #elif __BYTE_ORDER == __BIG_ENDIAN | |||
| dst[0]=(char)(z); | |||
| dst[1]=(char)(z>>8); | |||
| dst[2]=(char)(z>>16); | |||
| dst[3]=(char)(z>>24); | |||
| #endif | |||
| dst += dst_skip; | |||
| src++; | |||
| } | |||
| } | |||
| void sample_move_dither_rect_d32u24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) | |||
| { | |||
| @@ -104,6 +200,47 @@ void sample_move_dither_rect_d32u24_sS (char *dst, jack_default_audio_sample_t * | |||
| } | |||
| } | |||
| void sample_move_dither_tri_d32u24_sSs (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) | |||
| { | |||
| jack_default_audio_sample_t x; | |||
| float r; | |||
| float rm1 = state->rm1; | |||
| long long y; | |||
| int z; | |||
| while (nsamples--) { | |||
| x = *src * (float)SAMPLE_MAX_16BIT; | |||
| r = 2.0f * (float)fast_rand() / (float)INT_MAX - 1.0f; | |||
| x += r - rm1; | |||
| rm1 = r; | |||
| y = (long long)f_round(x); | |||
| y <<= 16; | |||
| if (y > INT_MAX) { | |||
| z = INT_MAX; | |||
| } else if (y < INT_MIN) { | |||
| z = INT_MIN; | |||
| } else { | |||
| z = (int)y; | |||
| } | |||
| #if __BYTE_ORDER == __LITTLE_ENDIAN | |||
| dst[0]=(char)(z>>24); | |||
| dst[1]=(char)(z>>16); | |||
| dst[2]=(char)(z>>8); | |||
| dst[3]=(char)(z); | |||
| #elif __BYTE_ORDER == __BIG_ENDIAN | |||
| dst[0]=(char)(z); | |||
| dst[1]=(char)(z>>8); | |||
| dst[2]=(char)(z>>16); | |||
| dst[3]=(char)(z>>24); | |||
| #endif | |||
| dst += dst_skip; | |||
| src++; | |||
| } | |||
| state->rm1 = rm1; | |||
| } | |||
| void sample_move_dither_tri_d32u24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) | |||
| { | |||
| @@ -134,6 +271,66 @@ void sample_move_dither_tri_d32u24_sS (char *dst, jack_default_audio_sample_t * | |||
| state->rm1 = rm1; | |||
| } | |||
| void sample_move_dither_shaped_d32u24_sSs (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) | |||
| { | |||
| jack_default_audio_sample_t x; | |||
| jack_default_audio_sample_t xe; /* the innput sample - filtered error */ | |||
| jack_default_audio_sample_t xp; /* x' */ | |||
| float r; | |||
| float rm1 = state->rm1; | |||
| unsigned int idx = state->idx; | |||
| long long y; | |||
| int z; | |||
| while (nsamples--) { | |||
| x = *src * (float)SAMPLE_MAX_16BIT; | |||
| r = 2.0f * (float)fast_rand() / (float)INT_MAX - 1.0f; | |||
| /* Filter the error with Lipshitz's minimally audible FIR: | |||
| [2.033 -2.165 1.959 -1.590 0.6149] */ | |||
| xe = x | |||
| - state->e[idx] * 2.033f | |||
| + state->e[(idx - 1) & DITHER_BUF_MASK] * 2.165f | |||
| - state->e[(idx - 2) & DITHER_BUF_MASK] * 1.959f | |||
| + state->e[(idx - 3) & DITHER_BUF_MASK] * 1.590f | |||
| - state->e[(idx - 4) & DITHER_BUF_MASK] * 0.6149f; | |||
| xp = xe + r - rm1; | |||
| rm1 = r; | |||
| /* This could be some inline asm on x86 */ | |||
| y = (long long)f_round(xp); | |||
| /* Intrinsic z^-1 delay */ | |||
| idx = (idx + 1) & DITHER_BUF_MASK; | |||
| state->e[idx] = y - xe; | |||
| y <<= 16; | |||
| if (y > INT_MAX) { | |||
| z = INT_MAX; | |||
| } else if (y < INT_MIN) { | |||
| z = INT_MIN; | |||
| } else { | |||
| z = (int)y; | |||
| } | |||
| #if __BYTE_ORDER == __LITTLE_ENDIAN | |||
| dst[0]=(char)(z>>24); | |||
| dst[1]=(char)(z>>16); | |||
| dst[2]=(char)(z>>8); | |||
| dst[3]=(char)(z); | |||
| #elif __BYTE_ORDER == __BIG_ENDIAN | |||
| dst[0]=(char)(z); | |||
| dst[1]=(char)(z>>8); | |||
| dst[2]=(char)(z>>16); | |||
| dst[3]=(char)(z>>24); | |||
| #endif | |||
| dst += dst_skip; | |||
| src++; | |||
| } | |||
| state->rm1 = rm1; | |||
| state->idx = idx; | |||
| } | |||
| void sample_move_dither_shaped_d32u24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) | |||
| { | |||
| @@ -182,6 +379,36 @@ void sample_move_dither_shaped_d32u24_sS (char *dst, jack_default_audio_sample_ | |||
| state->idx = idx; | |||
| } | |||
| void sample_move_d24_sSs (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) | |||
| { | |||
| long long y; | |||
| int z; | |||
| while (nsamples--) { | |||
| y = (long long)(*src * SAMPLE_MAX_24BIT); | |||
| if (y > (INT_MAX >> 8 )) { | |||
| z = (INT_MAX >> 8); | |||
| } else if (y < (INT_MIN >> 8 )) { | |||
| z = (INT_MIN >> 8 ); | |||
| } else { | |||
| z = (int)y; | |||
| } | |||
| #if __BYTE_ORDER == __LITTLE_ENDIAN | |||
| dst[0]=(char)(z>>16); | |||
| dst[1]=(char)(z>>8); | |||
| dst[2]=(char)(z); | |||
| #elif __BYTE_ORDER == __BIG_ENDIAN | |||
| dst[0]=(char)(z); | |||
| dst[1]=(char)(z>>8); | |||
| dst[2]=(char)(z>>16); | |||
| #endif | |||
| dst += dst_skip; | |||
| src++; | |||
| } | |||
| } | |||
| void sample_move_d24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) | |||
| { | |||
| @@ -205,6 +432,39 @@ void sample_move_d24_sS (char *dst, jack_default_audio_sample_t *src, unsigned l | |||
| } | |||
| } | |||
| void sample_move_dS_s24s (jack_default_audio_sample_t *dst, char *src, unsigned long nsamples, unsigned long src_skip) | |||
| { | |||
| /* ALERT: signed sign-extension portability !!! */ | |||
| while (nsamples--) { | |||
| int x; | |||
| #if __BYTE_ORDER == __LITTLE_ENDIAN | |||
| x = (unsigned char)(src[0]); | |||
| x <<= 8; | |||
| x |= (unsigned char)(src[1]); | |||
| x <<= 8; | |||
| x |= (unsigned char)(src[2]); | |||
| /* correct sign bit and the rest of the top byte */ | |||
| if (src[0] & 0x80) { | |||
| x |= 0xff << 24; | |||
| } | |||
| #elif __BYTE_ORDER == __BIG_ENDIAN | |||
| x = (unsigned char)(src[2]); | |||
| x <<= 8; | |||
| x |= (unsigned char)(src[1]); | |||
| x <<= 8; | |||
| x |= (unsigned char)(src[0]); | |||
| /* correct sign bit and the rest of the top byte */ | |||
| if (src[0] & 0x80) { | |||
| x |= 0xff << 24; | |||
| } | |||
| #endif | |||
| *dst = x / SAMPLE_MAX_24BIT; | |||
| dst++; | |||
| src += src_skip; | |||
| } | |||
| } | |||
| void sample_move_dS_s24 (jack_default_audio_sample_t *dst, char *src, unsigned long nsamples, unsigned long src_skip) | |||
| { | |||
| /* ALERT: signed sign-extension portability !!! */ | |||
| @@ -223,6 +483,42 @@ void sample_move_dS_s24 (jack_default_audio_sample_t *dst, char *src, unsigned l | |||
| } | |||
| } | |||
| void sample_move_dither_rect_d24_sSs (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) | |||
| { | |||
| /* ALERT: signed sign-extension portability !!! */ | |||
| jack_default_audio_sample_t x; | |||
| long long y; | |||
| int z; | |||
| while (nsamples--) { | |||
| x = *src * SAMPLE_MAX_16BIT; | |||
| x -= (float)fast_rand() / (float)INT_MAX; | |||
| y = (long long)f_round(x); | |||
| y <<= 8; | |||
| if (y > (INT_MAX >> 8)) { | |||
| z = (INT_MAX >> 8); | |||
| } else if (y < (INT_MIN >> 8)) { | |||
| z = (INT_MIN >> 8); | |||
| } else { | |||
| z = (int)y; | |||
| } | |||
| #if __BYTE_ORDER == __LITTLE_ENDIAN | |||
| dst[0]=(char)(z>>16); | |||
| dst[1]=(char)(z>>8); | |||
| dst[2]=(char)(z); | |||
| #elif __BYTE_ORDER == __BIG_ENDIAN | |||
| dst[0]=(char)(z); | |||
| dst[1]=(char)(z>>8); | |||
| dst[2]=(char)(z>>16); | |||
| #endif | |||
| dst += dst_skip; | |||
| src++; | |||
| } | |||
| } | |||
| void sample_move_dither_rect_d24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) | |||
| { | |||
| @@ -253,6 +549,46 @@ void sample_move_dither_rect_d24_sS (char *dst, jack_default_audio_sample_t *src | |||
| } | |||
| } | |||
| void sample_move_dither_tri_d24_sSs (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) | |||
| { | |||
| jack_default_audio_sample_t x; | |||
| float r; | |||
| float rm1 = state->rm1; | |||
| long long y; | |||
| int z; | |||
| while (nsamples--) { | |||
| x = *src * (float)SAMPLE_MAX_16BIT; | |||
| r = 2.0f * (float)fast_rand() / (float)INT_MAX - 1.0f; | |||
| x += r - rm1; | |||
| rm1 = r; | |||
| y = (long long)f_round(x); | |||
| y <<= 8; | |||
| if (y > (INT_MAX >> 8)) { | |||
| z = (INT_MAX >> 8); | |||
| } else if (y < (INT_MIN >> 8)) { | |||
| z = (INT_MIN >> 8); | |||
| } else { | |||
| z = (int)y; | |||
| } | |||
| #if __BYTE_ORDER == __LITTLE_ENDIAN | |||
| dst[0]=(char)(z>>16); | |||
| dst[1]=(char)(z>>8); | |||
| dst[2]=(char)(z); | |||
| #elif __BYTE_ORDER == __BIG_ENDIAN | |||
| dst[0]=(char)(z); | |||
| dst[1]=(char)(z>>8); | |||
| dst[2]=(char)(z>>16); | |||
| #endif | |||
| dst += dst_skip; | |||
| src++; | |||
| } | |||
| state->rm1 = rm1; | |||
| } | |||
| void sample_move_dither_tri_d24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) | |||
| { | |||
| @@ -287,6 +623,64 @@ void sample_move_dither_tri_d24_sS (char *dst, jack_default_audio_sample_t *src | |||
| state->rm1 = rm1; | |||
| } | |||
| void sample_move_dither_shaped_d24_sSs (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) | |||
| { | |||
| jack_default_audio_sample_t x; | |||
| jack_default_audio_sample_t xe; /* the innput sample - filtered error */ | |||
| jack_default_audio_sample_t xp; /* x' */ | |||
| float r; | |||
| float rm1 = state->rm1; | |||
| unsigned int idx = state->idx; | |||
| long long y; | |||
| int z; | |||
| while (nsamples--) { | |||
| x = *src * (float)SAMPLE_MAX_16BIT; | |||
| r = 2.0f * (float)fast_rand() / (float)INT_MAX - 1.0f; | |||
| /* Filter the error with Lipshitz's minimally audible FIR: | |||
| [2.033 -2.165 1.959 -1.590 0.6149] */ | |||
| xe = x | |||
| - state->e[idx] * 2.033f | |||
| + state->e[(idx - 1) & DITHER_BUF_MASK] * 2.165f | |||
| - state->e[(idx - 2) & DITHER_BUF_MASK] * 1.959f | |||
| + state->e[(idx - 3) & DITHER_BUF_MASK] * 1.590f | |||
| - state->e[(idx - 4) & DITHER_BUF_MASK] * 0.6149f; | |||
| xp = xe + r - rm1; | |||
| rm1 = r; | |||
| /* This could be some inline asm on x86 */ | |||
| y = (long long)f_round(xp); | |||
| /* Intrinsic z^-1 delay */ | |||
| idx = (idx + 1) & DITHER_BUF_MASK; | |||
| state->e[idx] = y - xe; | |||
| y <<= 8; | |||
| if (y > (INT_MAX >> 8)) { | |||
| z = (INT_MAX >> 8); | |||
| } else if (y < (INT_MIN >> 8)) { | |||
| z = (INT_MIN >> 8); | |||
| } else { | |||
| z = (int)y; | |||
| } | |||
| #if __BYTE_ORDER == __LITTLE_ENDIAN | |||
| dst[0]=(char)(z>>16); | |||
| dst[1]=(char)(z>>8); | |||
| dst[2]=(char)(z); | |||
| #elif __BYTE_ORDER == __BIG_ENDIAN | |||
| dst[0]=(char)(z); | |||
| dst[1]=(char)(z>>8); | |||
| dst[2]=(char)(z>>16); | |||
| #endif | |||
| dst += dst_skip; | |||
| src++; | |||
| } | |||
| state->rm1 = rm1; | |||
| state->idx = idx; | |||
| } | |||
| void sample_move_dither_shaped_d24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) | |||
| { | |||
| @@ -339,6 +733,32 @@ void sample_move_dither_shaped_d24_sS (char *dst, jack_default_audio_sample_t * | |||
| state->idx = idx; | |||
| } | |||
| void sample_move_d16_sSs (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) | |||
| { | |||
| int tmp; | |||
| /* ALERT: signed sign-extension portability !!! */ | |||
| while (nsamples--) { | |||
| tmp = f_round(*src * SAMPLE_MAX_16BIT); | |||
| if (tmp > SHRT_MAX) { | |||
| tmp = SHRT_MAX; | |||
| } else if (tmp < SHRT_MIN) { | |||
| tmp = SHRT_MIN; | |||
| } | |||
| #if __BYTE_ORDER == __LITTLE_ENDIAN | |||
| dst[0]=(char)(tmp>>8); | |||
| dst[1]=(char)(tmp); | |||
| #elif __BYTE_ORDER == __BIG_ENDIAN | |||
| dst[0]=(char)(tmp); | |||
| dst[1]=(char)(tmp>>8); | |||
| #endif | |||
| dst += dst_skip; | |||
| src++; | |||
| } | |||
| } | |||
| void sample_move_d16_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) | |||
| { | |||
| @@ -360,6 +780,33 @@ void sample_move_d16_sS (char *dst, jack_default_audio_sample_t *src, unsigned | |||
| } | |||
| } | |||
| void sample_move_dither_rect_d16_sSs (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) | |||
| { | |||
| jack_default_audio_sample_t val; | |||
| int tmp; | |||
| while (nsamples--) { | |||
| val = *src * (float)SAMPLE_MAX_16BIT; | |||
| val -= (float)fast_rand() / (float)INT_MAX; | |||
| tmp = f_round(val); | |||
| if (tmp > SHRT_MAX) { | |||
| tmp = SHRT_MAX; | |||
| } else if (tmp < SHRT_MIN) { | |||
| tmp = SHRT_MIN; | |||
| } | |||
| #if __BYTE_ORDER == __LITTLE_ENDIAN | |||
| dst[0]=(char)(tmp>>8); | |||
| dst[1]=(char)(tmp); | |||
| #elif __BYTE_ORDER == __BIG_ENDIAN | |||
| dst[0]=(char)(tmp); | |||
| dst[1]=(char)(tmp>>8); | |||
| #endif | |||
| dst += dst_skip; | |||
| src++; | |||
| } | |||
| } | |||
| void sample_move_dither_rect_d16_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) | |||
| { | |||
| @@ -382,6 +829,39 @@ void sample_move_dither_rect_d16_sS (char *dst, jack_default_audio_sample_t *sr | |||
| } | |||
| } | |||
| void sample_move_dither_tri_d16_sSs (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) | |||
| { | |||
| jack_default_audio_sample_t x; | |||
| float r; | |||
| float rm1 = state->rm1; | |||
| int y; | |||
| while (nsamples--) { | |||
| x = *src * (float)SAMPLE_MAX_16BIT; | |||
| r = 2.0f * (float)fast_rand() / (float)INT_MAX - 1.0f; | |||
| x += r - rm1; | |||
| rm1 = r; | |||
| y = f_round(x); | |||
| if (y > SHRT_MAX) { | |||
| y = SHRT_MAX; | |||
| } else if (y < SHRT_MIN) { | |||
| y = SHRT_MIN; | |||
| } | |||
| #if __BYTE_ORDER == __LITTLE_ENDIAN | |||
| dst[0]=(char)(y>>8); | |||
| dst[1]=(char)(y); | |||
| #elif __BYTE_ORDER == __BIG_ENDIAN | |||
| dst[0]=(char)(y); | |||
| dst[1]=(char)(y>>8); | |||
| #endif | |||
| dst += dst_skip; | |||
| src++; | |||
| } | |||
| state->rm1 = rm1; | |||
| } | |||
| void sample_move_dither_tri_d16_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) | |||
| { | |||
| @@ -411,6 +891,57 @@ void sample_move_dither_tri_d16_sS (char *dst, jack_default_audio_sample_t *src | |||
| state->rm1 = rm1; | |||
| } | |||
| void sample_move_dither_shaped_d16_sSs (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) | |||
| { | |||
| jack_default_audio_sample_t x; | |||
| jack_default_audio_sample_t xe; /* the innput sample - filtered error */ | |||
| jack_default_audio_sample_t xp; /* x' */ | |||
| float r; | |||
| float rm1 = state->rm1; | |||
| unsigned int idx = state->idx; | |||
| int y; | |||
| while (nsamples--) { | |||
| x = *src * (float)SAMPLE_MAX_16BIT; | |||
| r = 2.0f * (float)fast_rand() / (float)INT_MAX - 1.0f; | |||
| /* Filter the error with Lipshitz's minimally audible FIR: | |||
| [2.033 -2.165 1.959 -1.590 0.6149] */ | |||
| xe = x | |||
| - state->e[idx] * 2.033f | |||
| + state->e[(idx - 1) & DITHER_BUF_MASK] * 2.165f | |||
| - state->e[(idx - 2) & DITHER_BUF_MASK] * 1.959f | |||
| + state->e[(idx - 3) & DITHER_BUF_MASK] * 1.590f | |||
| - state->e[(idx - 4) & DITHER_BUF_MASK] * 0.6149f; | |||
| xp = xe + r - rm1; | |||
| rm1 = r; | |||
| /* This could be some inline asm on x86 */ | |||
| y = f_round(xp); | |||
| /* Intrinsic z^-1 delay */ | |||
| idx = (idx + 1) & DITHER_BUF_MASK; | |||
| state->e[idx] = y - xe; | |||
| if (y > SHRT_MAX) { | |||
| y = SHRT_MAX; | |||
| } else if (y < SHRT_MIN) { | |||
| y = SHRT_MIN; | |||
| } | |||
| #if __BYTE_ORDER == __LITTLE_ENDIAN | |||
| dst[0]=(char)(y>>8); | |||
| dst[1]=(char)(y); | |||
| #elif __BYTE_ORDER == __BIG_ENDIAN | |||
| dst[0]=(char)(y); | |||
| dst[1]=(char)(y>>8); | |||
| #endif | |||
| dst += dst_skip; | |||
| src++; | |||
| } | |||
| state->rm1 = rm1; | |||
| state->idx = idx; | |||
| } | |||
| void sample_move_dither_shaped_d16_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) | |||
| { | |||
| @@ -457,6 +988,28 @@ void sample_move_dither_shaped_d16_sS (char *dst, jack_default_audio_sample_t * | |||
| state->idx = idx; | |||
| } | |||
| void sample_move_dS_s16s (jack_default_audio_sample_t *dst, char *src, unsigned long nsamples, unsigned long src_skip) | |||
| { | |||
| short z; | |||
| /* ALERT: signed sign-extension portability !!! */ | |||
| while (nsamples--) { | |||
| #if __BYTE_ORDER == __LITTLE_ENDIAN | |||
| z = (unsigned char)(src[0]); | |||
| z <<= 8; | |||
| z |= (unsigned char)(src[1]); | |||
| #elif __BYTE_ORDER == __BIG_ENDIAN | |||
| z = (unsigned char)(src[1]); | |||
| z <<= 8; | |||
| z |= (unsigned char)(src[0]); | |||
| #endif | |||
| *dst = z / SAMPLE_MAX_16BIT; | |||
| dst++; | |||
| src += src_skip; | |||
| } | |||
| } | |||
| void sample_move_dS_s16 (jack_default_audio_sample_t *dst, char *src, unsigned long nsamples, unsigned long src_skip) | |||
| { | |||
| @@ -33,74 +33,88 @@ typedef enum { | |||
| #define DITHER_BUF_SIZE 8 | |||
| #define DITHER_BUF_MASK 7 | |||
| typedef struct | |||
| { | |||
| typedef struct { | |||
| unsigned int depth; | |||
| float rm1; | |||
| unsigned int idx; | |||
| float e[DITHER_BUF_SIZE]; | |||
| } | |||
| dither_state_t; | |||
| } dither_state_t; | |||
| #ifdef __cplusplus | |||
| extern "C" | |||
| { | |||
| #endif | |||
| void sample_move_d32u24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_d24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_d16_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_rect_d32u24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_tri_d32u24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_shaped_d32u24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_rect_d24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_tri_d24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_shaped_d24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_rect_d16_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_tri_d16_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_shaped_d16_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dS_s32u24 (jack_default_audio_sample_t *dst, char *src, unsigned long nsamples, unsigned long src_skip); | |||
| void sample_move_dS_s24 (jack_default_audio_sample_t *dst, char *src, unsigned long nsamples, unsigned long src_skip); | |||
| void sample_move_dS_s16 (jack_default_audio_sample_t *dst, char *src, unsigned long nsamples, unsigned long src_skip); | |||
| void sample_merge_d16_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_merge_d32u24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| static __inline__ void | |||
| sample_merge (jack_default_audio_sample_t *dst, jack_default_audio_sample_t *src, unsigned long cnt) | |||
| { | |||
| while (cnt--) { | |||
| *dst += *src; | |||
| dst++; | |||
| src++; | |||
| } | |||
| } | |||
| static __inline__ void | |||
| sample_memcpy (jack_default_audio_sample_t *dst, jack_default_audio_sample_t *src, unsigned long cnt) | |||
| { | |||
| memcpy (dst, src, cnt * sizeof (jack_default_audio_sample_t)); | |||
| } | |||
| void memset_interleave (char *dst, char val, unsigned long bytes, unsigned long unit_bytes, unsigned long skip_bytes); | |||
| void memcpy_fake (char *dst, char *src, unsigned long src_bytes, unsigned long foo, unsigned long bar); | |||
| void memcpy_interleave_d16_s16 (char *dst, char *src, unsigned long src_bytes, unsigned long dst_skip_bytes, unsigned long src_skip_bytes); | |||
| void memcpy_interleave_d24_s24 (char *dst, char *src, unsigned long src_bytes, unsigned long dst_skip_bytes, unsigned long src_skip_bytes); | |||
| void memcpy_interleave_d32_s32 (char *dst, char *src, unsigned long src_bytes, unsigned long dst_skip_bytes, unsigned long src_skip_bytes); | |||
| void merge_memcpy_interleave_d16_s16 (char *dst, char *src, unsigned long src_bytes, unsigned long dst_skip_bytes, unsigned long src_skip_bytes); | |||
| void merge_memcpy_interleave_d24_s24 (char *dst, char *src, unsigned long src_bytes, unsigned long dst_skip_bytes, unsigned long src_skip_bytes); | |||
| void merge_memcpy_interleave_d32_s32 (char *dst, char *src, unsigned long src_bytes, unsigned long dst_skip_bytes, unsigned long src_skip_bytes); | |||
| void merge_memcpy_d16_s16 (char *dst, char *src, unsigned long src_bytes, unsigned long foo, unsigned long bar); | |||
| void merge_memcpy_d32_s32 (char *dst, char *src, unsigned long src_bytes, unsigned long foo, unsigned long bar); | |||
| void sample_move_d32u24_sSs (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_d32u24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_d24_sSs (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_d24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_d16_sSs (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_d16_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_rect_d32u24_sSs (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_rect_d32u24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_tri_d32u24_sSs (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_tri_d32u24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_shaped_d32u24_sSs (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_shaped_d32u24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_rect_d24_sSs (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_rect_d24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_tri_d24_sSs (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_tri_d24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_shaped_d24_sSs (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_shaped_d24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_rect_d16_sSs (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_rect_d16_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_tri_d16_sSs (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_tri_d16_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_shaped_d16_sSs (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dither_shaped_d16_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_move_dS_s32u24s (jack_default_audio_sample_t *dst, char *src, unsigned long nsamples, unsigned long src_skip); | |||
| void sample_move_dS_s32u24 (jack_default_audio_sample_t *dst, char *src, unsigned long nsamples, unsigned long src_skip); | |||
| void sample_move_dS_s24s (jack_default_audio_sample_t *dst, char *src, unsigned long nsamples, unsigned long src_skip); | |||
| void sample_move_dS_s24 (jack_default_audio_sample_t *dst, char *src, unsigned long nsamples, unsigned long src_skip); | |||
| void sample_move_dS_s16s (jack_default_audio_sample_t *dst, char *src, unsigned long nsamples, unsigned long src_skip); | |||
| void sample_move_dS_s16 (jack_default_audio_sample_t *dst, char *src, unsigned long nsamples, unsigned long src_skip); | |||
| void sample_merge_d16_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| void sample_merge_d32u24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | |||
| static __inline__ void | |||
| sample_merge (jack_default_audio_sample_t *dst, jack_default_audio_sample_t *src, unsigned long cnt) | |||
| #ifdef __cplusplus | |||
| { | |||
| while (cnt--) { | |||
| *dst += *src; | |||
| dst++; | |||
| src++; | |||
| } | |||
| } | |||
| #endif | |||
| static __inline__ void | |||
| sample_memcpy (jack_default_audio_sample_t *dst, jack_default_audio_sample_t *src, unsigned long cnt) | |||
| { | |||
| memcpy (dst, src, cnt * sizeof (jack_default_audio_sample_t)); | |||
| } | |||
| void memset_interleave (char *dst, char val, unsigned long bytes, unsigned long unit_bytes, unsigned long skip_bytes); | |||
| void memcpy_fake (char *dst, char *src, unsigned long src_bytes, unsigned long foo, unsigned long bar); | |||
| void memcpy_interleave_d16_s16 (char *dst, char *src, unsigned long src_bytes, unsigned long dst_skip_bytes, unsigned long src_skip_bytes); | |||
| void memcpy_interleave_d24_s24 (char *dst, char *src, unsigned long src_bytes, unsigned long dst_skip_bytes, unsigned long src_skip_bytes); | |||
| void memcpy_interleave_d32_s32 (char *dst, char *src, unsigned long src_bytes, unsigned long dst_skip_bytes, unsigned long src_skip_bytes); | |||
| void merge_memcpy_interleave_d16_s16 (char *dst, char *src, unsigned long src_bytes, unsigned long dst_skip_bytes, unsigned long src_skip_bytes); | |||
| void merge_memcpy_interleave_d24_s24 (char *dst, char *src, unsigned long src_bytes, unsigned long dst_skip_bytes, unsigned long src_skip_bytes); | |||
| void merge_memcpy_interleave_d32_s32 (char *dst, char *src, unsigned long src_bytes, unsigned long dst_skip_bytes, unsigned long src_skip_bytes); | |||
| void merge_memcpy_d16_s16 (char *dst, char *src, unsigned long src_bytes, unsigned long foo, unsigned long bar); | |||
| void merge_memcpy_d32_s32 (char *dst, char *src, unsigned long src_bytes, unsigned long foo, unsigned long bar); | |||
| #ifdef __cplusplus | |||
| } | |||
| #endif | |||
| #endif /* __jack_memops_h__ */ | |||
| @@ -33,7 +33,12 @@ | |||
| #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) | |||
| #endif | |||
| //#define DBGHWDEP | |||
| #ifdef DBGHWDEP | |||
| int dbg_offset; | |||
| char dbg_buffer[8096]; | |||
| #endif | |||
| static | |||
| int usx2y_set_input_monitor_mask (jack_hardware_t *hw, unsigned long mask) | |||
| { | |||
| @@ -120,7 +125,7 @@ usx2y_driver_get_channel_addresses_playback (alsa_driver_t *driver, | |||
| if (dbg_offset < (sizeof(dbg_buffer) - 256)) | |||
| dbg_offset += sprintf(dbg_buffer + dbg_offset, "avail %li@%p\n", *playback_avail, driver->playback_addr[0]); | |||
| else { | |||
| jack_error(dbg_buffer); | |||
| printf(dbg_buffer); | |||
| return -1; | |||
| } | |||
| #endif | |||
| @@ -145,7 +150,7 @@ usx2y_driver_get_channel_addresses_capture (alsa_driver_t *driver, | |||
| return 0; /* FIXME: return -1; */ | |||
| h->capture_iso_bytes_done = 0; | |||
| #ifdef DBGHWDEP | |||
| dbg_offset = sprintf(dbg_buffer, "first iso = %i %i@%p:%i\n", | |||
| dbg_offset = sprintf(dbg_buffer, "cfirst iso = %i %i@%p:%i\n", | |||
| iso, h->hwdep_pcm_shm->captured_iso[iso].length, | |||
| h->hwdep_pcm_shm->capture0x8, | |||
| h->hwdep_pcm_shm->captured_iso[iso].offset); | |||
| @@ -154,7 +159,7 @@ usx2y_driver_get_channel_addresses_capture (alsa_driver_t *driver, | |||
| iso = h->capture_iso_start; | |||
| } | |||
| #ifdef DBGHWDEP | |||
| dbg_offset += sprintf(dbg_buffer + dbg_offset, "iso = %i(%i;%i); ", iso, | |||
| dbg_offset += sprintf(dbg_buffer + dbg_offset, "ciso = %i(%i;%i); ", iso, | |||
| h->hwdep_pcm_shm->captured_iso[iso].offset, | |||
| h->hwdep_pcm_shm->captured_iso[iso].frame); | |||
| #endif | |||
| @@ -180,10 +185,21 @@ usx2y_driver_get_channel_addresses_capture (alsa_driver_t *driver, | |||
| ((chn & 1) ? driver->capture_sample_bytes : 0); | |||
| } | |||
| #ifdef DBGHWDEP | |||
| { | |||
| int f = 0; | |||
| unsigned *u = driver->capture_addr[0]; | |||
| static unsigned last; | |||
| dbg_offset += sprintf(dbg_buffer + dbg_offset, "\nvon %6u bis %6u\n", last, u[0]); | |||
| while (f < *capture_avail && dbg_offset < (sizeof(dbg_buffer) - 256)) { | |||
| if (u[f] != last + 1) | |||
| dbg_offset += sprintf(dbg_buffer + dbg_offset, "\nooops %6u %6u\n", last, u[f]); | |||
| last = u[f++]; | |||
| } | |||
| } | |||
| if (dbg_offset < (sizeof(dbg_buffer) - 256)) | |||
| dbg_offset += sprintf(dbg_buffer + dbg_offset, "avail %li@%p\n", *capture_avail, driver->capture_addr[0]); | |||
| else { | |||
| jack_error(dbg_buffer); | |||
| printf(dbg_buffer); | |||
| return -1; | |||
| } | |||
| #endif | |||
| @@ -199,6 +215,12 @@ usx2y_driver_start (alsa_driver_t *driver) | |||
| usx2y_t *h = (usx2y_t *) driver->hw->private; | |||
| if (driver->capture_nchannels == 4) { | |||
| // US428 channels 3+4 are on a seperate 2 channel stream. | |||
| // ALSA thinks its 1 stream with 4 channels, so we have to hack here. | |||
| driver->capture_interleave_skip = 2 * driver->capture_sample_bytes; | |||
| } | |||
| driver->poll_last = 0; | |||
| driver->poll_next = 0; | |||
| @@ -445,9 +467,9 @@ usx2y_driver_null_cycle (alsa_driver_t* driver, jack_nframes_t nframes) | |||
| static int | |||
| usx2y_driver_read (alsa_driver_t *driver, jack_nframes_t nframes) | |||
| { | |||
| snd_pcm_sframes_t contiguous; | |||
| snd_pcm_uframes_t contiguous; | |||
| snd_pcm_sframes_t nread; | |||
| snd_pcm_sframes_t offset; | |||
| snd_pcm_uframes_t offset; | |||
| jack_default_audio_sample_t* buf[4]; | |||
| channel_t chn; | |||
| JSList *node; | |||
| @@ -460,61 +482,55 @@ usx2y_driver_read (alsa_driver_t *driver, jack_nframes_t nframes) | |||
| } | |||
| nread = 0; | |||
| contiguous = 0; | |||
| while (nframes) { | |||
| if (snd_pcm_mmap_begin (driver->capture_handle, | |||
| &driver->capture_areas, | |||
| &offset, &nframes_) < 0) { | |||
| jack_error ("ALSA/USX2Y: %s: mmap areas info error", | |||
| driver->alsa_name_capture); | |||
| return -1; | |||
| } | |||
| contiguous = (nframes > driver->frames_per_cycle) ? | |||
| driver->frames_per_cycle : nframes; | |||
| for (chn = 0, node = driver->capture_ports; | |||
| node; node = jack_slist_next (node), chn++) { | |||
| port = (jack_port_t *) node->data; | |||
| if (!jack_port_connected (port)) { | |||
| continue; | |||
| } | |||
| buf[chn] = jack_port_get_buffer (port, nframes_); | |||
| } | |||
| if (snd_pcm_mmap_begin ( | |||
| driver->capture_handle, &driver->capture_areas, | |||
| (snd_pcm_uframes_t *) &offset, | |||
| (snd_pcm_uframes_t *) &nframes_) < 0) { | |||
| jack_error ("ALSA/USX2Y: %s: mmap areas info error", | |||
| driver->alsa_name_capture); | |||
| while (nframes) { | |||
| contiguous = nframes; | |||
| if (usx2y_driver_get_channel_addresses_capture ( | |||
| driver, &contiguous) < 0) { | |||
| return -1; | |||
| } | |||
| for (chn = 0, node = driver->capture_ports; | |||
| node && chn < 4; | |||
| node = jack_slist_next (node), chn++) { | |||
| node; node = jack_slist_next (node), chn++) { | |||
| port = (jack_port_t *) node->data; | |||
| if (!jack_port_connected (port)) { | |||
| /* no-copy optimization */ | |||
| continue; | |||
| } | |||
| buf[chn] = jack_port_get_buffer (port, nframes_); | |||
| } | |||
| while (nframes) { | |||
| contiguous = nframes; | |||
| if (usx2y_driver_get_channel_addresses_capture ( | |||
| driver, &contiguous) < 0) { | |||
| return -1; | |||
| } | |||
| for (chn = 0, node = driver->capture_ports; | |||
| node && chn < 4; | |||
| node = jack_slist_next (node), chn++) { | |||
| port = (jack_port_t *) node->data; | |||
| if (!jack_port_connected (port)) { | |||
| /* no-copy optimization */ | |||
| continue; | |||
| } | |||
| alsa_driver_read_from_channel (driver, chn, | |||
| buf[chn] + nread, contiguous); | |||
| } | |||
| nread += contiguous; | |||
| nframes -= contiguous; | |||
| } | |||
| if ((err = snd_pcm_mmap_commit (driver->capture_handle, | |||
| offset, nframes_)) < 0) { | |||
| jack_error ("ALSA/USX2Y: could not complete read of %" | |||
| PRIu32 " frames: error = %d", nframes_, err); | |||
| return -1; | |||
| alsa_driver_read_from_channel (driver, chn, | |||
| buf[chn] + nread, | |||
| contiguous); | |||
| /* sample_move_dS_s24(buf[chn] + nread, */ | |||
| /* driver->capture_addr[chn], */ | |||
| /* contiguous, */ | |||
| /* driver->capture_interleave_skip); */ | |||
| } | |||
| nread += contiguous; | |||
| nframes -= contiguous; | |||
| } | |||
| // nframes -= contiguous; | |||
| if ((err = snd_pcm_mmap_commit (driver->capture_handle, | |||
| offset, nframes_)) < 0) { | |||
| jack_error ("ALSA/USX2Y: could not complete read of %" | |||
| PRIu32 " frames: error = %d", nframes_, err); | |||
| return -1; | |||
| } | |||
| return 0; | |||
| @@ -527,11 +543,10 @@ usx2y_driver_write (alsa_driver_t* driver, jack_nframes_t nframes) | |||
| JSList *node; | |||
| jack_default_audio_sample_t* buf[2]; | |||
| snd_pcm_sframes_t nwritten; | |||
| snd_pcm_sframes_t contiguous; | |||
| snd_pcm_sframes_t offset; | |||
| snd_pcm_uframes_t contiguous; | |||
| snd_pcm_uframes_t offset; | |||
| jack_port_t *port; | |||
| int err; | |||
| int dbg_loops = 1; | |||
| snd_pcm_uframes_t nframes_ = nframes; | |||
| driver->process_count++; | |||
| @@ -541,7 +556,6 @@ usx2y_driver_write (alsa_driver_t* driver, jack_nframes_t nframes) | |||
| } | |||
| nwritten = 0; | |||
| contiguous = 0; | |||
| /* check current input monitor request status */ | |||
| @@ -563,83 +577,45 @@ usx2y_driver_write (alsa_driver_t* driver, jack_nframes_t nframes) | |||
| } | |||
| } | |||
| while (nframes) { | |||
| if (snd_pcm_mmap_begin(driver->playback_handle, | |||
| &driver->playback_areas, | |||
| &offset, &nframes_) < 0) { | |||
| jack_error ("ALSA/USX2Y: %s: mmap areas info error", | |||
| driver->alsa_name_capture); | |||
| return -1; | |||
| } | |||
| if (--dbg_loops) | |||
| return dbg_loops; | |||
| for (chn = 0, node = driver->playback_ports; | |||
| node; node = jack_slist_next (node), chn++) { | |||
| port = (jack_port_t *) node->data; | |||
| buf[chn] = jack_port_get_buffer (port, nframes_); | |||
| } | |||
| contiguous = (nframes > driver->frames_per_cycle) ? | |||
| driver->frames_per_cycle : nframes; | |||
| while (nframes) { | |||
| if (snd_pcm_mmap_begin( | |||
| driver->playback_handle, &driver->playback_areas, | |||
| &offset, &nframes_) < 0) { | |||
| jack_error ("ALSA/USX2Y: %s: mmap areas info error", | |||
| driver->alsa_name_capture); | |||
| contiguous = nframes; | |||
| if (usx2y_driver_get_channel_addresses_playback ( | |||
| driver, &contiguous) < 0) { | |||
| return -1; | |||
| } | |||
| for (chn = 0, node = driver->playback_ports; | |||
| node && chn < 2; | |||
| node = jack_slist_next (node), chn++) { | |||
| node; node = jack_slist_next (node), chn++) { | |||
| port = (jack_port_t *) node->data; | |||
| if (!jack_port_connected (port)) { | |||
| continue; | |||
| } | |||
| buf[chn] = jack_port_get_buffer (port, nframes_); | |||
| } | |||
| while (nframes) { | |||
| contiguous = nframes; | |||
| if (usx2y_driver_get_channel_addresses_playback ( | |||
| driver, &contiguous) < 0) { | |||
| return -1; | |||
| } | |||
| for (chn = 0, node = driver->playback_ports; | |||
| node && chn < 2; | |||
| node = jack_slist_next (node), chn++) { | |||
| port = (jack_port_t *) node->data; | |||
| if (!jack_port_connected (port)) { | |||
| continue; | |||
| } | |||
| alsa_driver_write_to_channel (driver, chn, | |||
| buf[chn] + nwritten, | |||
| contiguous); | |||
| } | |||
| nwritten += contiguous; | |||
| if (driver->channels_not_done) { | |||
| alsa_driver_silence_untouched_channels (driver, | |||
| contiguous); | |||
| } | |||
| nframes -= contiguous; | |||
| } | |||
| if ((err = snd_pcm_mmap_commit (driver->playback_handle, | |||
| offset, nframes_)) < 0) { | |||
| jack_error ("ALSA/USX2Y: could not complete playback of %" | |||
| PRIu32 " frames: error = %d", nframes_, err); | |||
| if (err != EPIPE && err != ESTRPIPE) | |||
| return -1; | |||
| alsa_driver_write_to_channel (driver, chn, | |||
| buf[chn] + nwritten, | |||
| contiguous); | |||
| } | |||
| // nframes -= contiguous; | |||
| nwritten += contiguous; | |||
| nframes -= contiguous; | |||
| } | |||
| /* { */ | |||
| /* usx2y_t *h = (usx2y_t *) driver->hw->private; */ | |||
| /* unsigned *pu = (unsigned *)h->hwdep_pcm_shm->playback; */ | |||
| /* int i = sizeof(h->hwdep_pcm_shm->playback) / sizeof(*pu); */ | |||
| /* while (i) { */ | |||
| /* if (*(pu)) { */ | |||
| /* jack_error("%p;error %u(=0x%X)@%p", */ | |||
| /* h->hwdep_pcm_shm->playback, */ | |||
| /* *pu, *pu, pu); */ | |||
| /* return -1; */ | |||
| /* } */ | |||
| /* --i; */ | |||
| /* ++pu; */ | |||
| /* } */ | |||
| /* } */ | |||
| if ((err = snd_pcm_mmap_commit (driver->playback_handle, | |||
| offset, nframes_)) < 0) { | |||
| jack_error ("ALSA/USX2Y: could not complete playback of %" | |||
| PRIu32 " frames: error = %d", nframes_, err); | |||
| if (err != EPIPE && err != ESTRPIPE) | |||
| return -1; | |||
| } | |||
| return 0; | |||
| } | |||
| @@ -1,22 +1,22 @@ | |||
| /* | |||
| Copyright (C) 2001 Paul Davis | |||
| Copyright (C) 2004 Karsten Wiese, Rui Nuno Capela | |||
| 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 | |||
| the Free Software Foundation; either version 2 of the License, or | |||
| (at your option) any later version. | |||
| This program 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 General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | |||
| along with this program; if not, write to the Free Software | |||
| Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||
| $Id: usx2y.h,v 1.2 2005/11/23 11:24:29 letz Exp $ | |||
| Copyright (C) 2001 Paul Davis | |||
| Copyright (C) 2004 Karsten Wiese, Rui Nuno Capela | |||
| 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 | |||
| the Free Software Foundation; either version 2 of the License, or | |||
| (at your option) any later version. | |||
| This program 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 General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | |||
| along with this program; if not, write to the Free Software | |||
| Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||
| $Id: usx2y.h 855 2004-12-28 05:50:18Z joq $ | |||
| */ | |||
| #ifndef __jack_usx2y_h__ | |||
| @@ -28,38 +28,33 @@ | |||
| #define USX2Y_SSS (((USX2Y_MAXPACK * USX2Y_MAXBUFFERMS * USX2Y_MAXSTRIDE + 4096) / 4096) * 4096) | |||
| struct snd_usX2Y_hwdep_pcm_shm | |||
| { | |||
| char playback[USX2Y_SSS]; | |||
| char capture0x8[USX2Y_SSS]; | |||
| char capture0xA[USX2Y_SSS]; | |||
| volatile int playback_iso_head; | |||
| int playback_iso_start; | |||
| struct | |||
| { | |||
| int frame, | |||
| offset, | |||
| length; | |||
| } | |||
| captured_iso[128]; | |||
| volatile int captured_iso_head; | |||
| volatile unsigned captured_iso_frames; | |||
| int capture_iso_start; | |||
| struct snd_usX2Y_hwdep_pcm_shm { | |||
| char playback[USX2Y_SSS]; | |||
| char capture0x8[USX2Y_SSS]; | |||
| char capture0xA[USX2Y_SSS]; | |||
| volatile int playback_iso_head; | |||
| int playback_iso_start; | |||
| struct { | |||
| int frame, | |||
| offset, | |||
| length; | |||
| } captured_iso[128]; | |||
| volatile int captured_iso_head; | |||
| volatile unsigned captured_iso_frames; | |||
| int capture_iso_start; | |||
| }; | |||
| typedef struct snd_usX2Y_hwdep_pcm_shm snd_usX2Y_hwdep_pcm_shm_t; | |||
| typedef struct | |||
| { | |||
| alsa_driver_t *driver; | |||
| snd_hwdep_t *hwdep_handle; | |||
| struct pollfd pfds; | |||
| struct snd_usX2Y_hwdep_pcm_shm *hwdep_pcm_shm; | |||
| int playback_iso_start; | |||
| int playback_iso_bytes_done; | |||
| int capture_iso_start; | |||
| int capture_iso_bytes_done; | |||
| } | |||
| usx2y_t; | |||
| typedef struct { | |||
| alsa_driver_t *driver; | |||
| snd_hwdep_t *hwdep_handle; | |||
| struct pollfd pfds; | |||
| struct snd_usX2Y_hwdep_pcm_shm *hwdep_pcm_shm; | |||
| int playback_iso_start; | |||
| int playback_iso_bytes_done; | |||
| int capture_iso_start; | |||
| int capture_iso_bytes_done; | |||
| } usx2y_t; | |||
| jack_hardware_t * | |||
| jack_alsa_usx2y_hw_new (alsa_driver_t *driver); | |||
| @@ -1009,7 +1009,6 @@ | |||
| 4BF8D1CE0834EF2200C94B91, | |||
| 4BF8D1D60834EF2F00C94B91, | |||
| 4BF8D1E80834EF6700C94B91, | |||
| 4BF8D1EC0834EF7500C94B91, | |||
| 4BF8D2050834EFD100C94B91, | |||
| 4BF8D2060834EFD100C94B91, | |||
| 4BF8D2350834F14400C94B91, | |||
| @@ -1028,6 +1027,8 @@ | |||
| 4B003AB408E2B2BA0060EFDC, | |||
| 4B98AE040931D30C0091932A, | |||
| 4B1880CB09A1DDF100154099, | |||
| 4BCD4CF50B00A0F90091F8E8, | |||
| 4BCD4CF90B00A15B0091F8E8, | |||
| ); | |||
| isa = PBXSourcesBuildPhase; | |||
| runOnlyForDeploymentPostprocessing = 0; | |||
| @@ -2079,6 +2080,7 @@ | |||
| }; | |||
| 4BA550F905E241D900569492 = { | |||
| children = ( | |||
| 4BCD4CF40B00A0F90091F8E8, | |||
| 4B168CA4076A5333005B2802, | |||
| 4BF8D1FB0834EFD100C94B91, | |||
| 4BF8D1FC0834EFD100C94B91, | |||
| @@ -2661,6 +2663,27 @@ | |||
| refType = 2; | |||
| sourceTree = SOURCE_ROOT; | |||
| }; | |||
| 4BCD4CF40B00A0F90091F8E8 = { | |||
| fileEncoding = 30; | |||
| isa = PBXFileReference; | |||
| lastKnownFileType = sourcecode.cpp.cpp; | |||
| name = JackAPIWrapper.cpp; | |||
| path = ../common/JackAPIWrapper.cpp; | |||
| refType = 2; | |||
| sourceTree = SOURCE_ROOT; | |||
| }; | |||
| 4BCD4CF50B00A0F90091F8E8 = { | |||
| fileRef = 4BCD4CF40B00A0F90091F8E8; | |||
| isa = PBXBuildFile; | |||
| settings = { | |||
| }; | |||
| }; | |||
| 4BCD4CF90B00A15B0091F8E8 = { | |||
| fileRef = 4BF8D1E90834EF7500C94B91; | |||
| isa = PBXBuildFile; | |||
| settings = { | |||
| }; | |||
| }; | |||
| 4BD561C708EEB910006BBC2A = { | |||
| fileEncoding = 30; | |||
| isa = PBXFileReference; | |||
| @@ -4557,12 +4580,6 @@ | |||
| settings = { | |||
| }; | |||
| }; | |||
| 4BF8D1EC0834EF7500C94B91 = { | |||
| fileRef = 4BF8D1E90834EF7500C94B91; | |||
| isa = PBXBuildFile; | |||
| settings = { | |||
| }; | |||
| }; | |||
| 4BF8D1ED0834EF9200C94B91 = { | |||
| fileEncoding = 30; | |||
| isa = PBXFileReference; | |||