git-svn-id: svn+ssh://jackaudio.org/trunk/jack@602 0c269be4-1314-0410-8aa9-9f06e86f4224tags/0.109.0
@@ -15,7 +15,7 @@ dnl changes are made | |||||
dnl --- | dnl --- | ||||
JACK_MAJOR_VERSION=0 | JACK_MAJOR_VERSION=0 | ||||
JACK_MINOR_VERSION=93 | JACK_MINOR_VERSION=93 | ||||
JACK_MICRO_VERSION=5 | |||||
JACK_MICRO_VERSION=6 | |||||
dnl --- | dnl --- | ||||
dnl HOWTO: updating the jack protocal version | dnl HOWTO: updating the jack protocal version | ||||
@@ -243,6 +243,35 @@ alsa_driver_setup_io_function_pointers (alsa_driver_t *driver) | |||||
} | } | ||||
break; | break; | ||||
case 3: | |||||
if (driver->playback_interleaved) { | |||||
driver->channel_copy = memcpy_interleave_d24_s24; | |||||
} else { | |||||
driver->channel_copy = memcpy_fake; | |||||
} | |||||
switch (driver->dither) { | |||||
case Rectangular: | |||||
printf("Rectangular dithering at 16 bits\n"); | |||||
driver->write_via_copy = sample_move_dither_rect_d24u24_sS; | |||||
break; | |||||
case Triangular: | |||||
printf("Triangular dithering at 16 bits\n"); | |||||
driver->write_via_copy = sample_move_dither_tri_d24u24_sS; | |||||
break; | |||||
case Shaped: | |||||
printf("Noise-shaped dithering at 16 bits\n"); | |||||
driver->write_via_copy = sample_move_dither_shaped_d24u24_sS; | |||||
break; | |||||
default: | |||||
driver->write_via_copy = sample_move_d24u24_sS; | |||||
break; | |||||
} | |||||
break; | |||||
case 4: | case 4: | ||||
if (driver->playback_interleaved) { | if (driver->playback_interleaved) { | ||||
driver->channel_copy = memcpy_interleave_d32_s32; | driver->channel_copy = memcpy_interleave_d32_s32; | ||||
@@ -280,6 +309,9 @@ alsa_driver_setup_io_function_pointers (alsa_driver_t *driver) | |||||
case 2: | case 2: | ||||
driver->read_via_copy = sample_move_dS_s16; | driver->read_via_copy = sample_move_dS_s16; | ||||
break; | break; | ||||
case 3: | |||||
driver->read_via_copy = sample_move_dS_s24u24; | |||||
break; | |||||
case 4: | case 4: | ||||
driver->read_via_copy = sample_move_dS_s32u24; | driver->read_via_copy = sample_move_dS_s32u24; | ||||
break; | break; | ||||
@@ -294,8 +326,17 @@ alsa_driver_configure_stream (alsa_driver_t *driver, char *device_name, | |||||
snd_pcm_sw_params_t *sw_params, | snd_pcm_sw_params_t *sw_params, | ||||
unsigned long *nchns,unsigned long sample_width) | unsigned long *nchns,unsigned long sample_width) | ||||
{ | { | ||||
int err; | |||||
int err, format; | |||||
snd_pcm_uframes_t stop_th; | snd_pcm_uframes_t stop_th; | ||||
static struct { | |||||
char Name[16]; | |||||
snd_pcm_format_t format; | |||||
} formats[] = { | |||||
{"32bit", SND_PCM_FORMAT_S32}, | |||||
{"24bit", SND_PCM_FORMAT_S24_3}, | |||||
{"16bit", SND_PCM_FORMAT_S16}, | |||||
}; | |||||
#define NOFORMATS (sizeof(formats)/sizeof(formats[0])) | |||||
if ((err = snd_pcm_hw_params_any (handle, hw_params)) < 0) { | if ((err = snd_pcm_hw_params_any (handle, hw_params)) < 0) { | ||||
jack_error ("ALSA: no playback configurations available (%s)", | jack_error ("ALSA: no playback configurations available (%s)", | ||||
@@ -323,44 +364,25 @@ alsa_driver_configure_stream (alsa_driver_t *driver, char *device_name, | |||||
return -1; | return -1; | ||||
} | } | ||||
} | } | ||||
if (sample_width == 4) { | |||||
if ((err = snd_pcm_hw_params_set_format ( | |||||
handle, hw_params, SND_PCM_FORMAT_S32)) < 0) { | |||||
jack_error("Couldn't open %s for 32bit samples " | |||||
"trying 16bit instead", device_name); | |||||
if ((err = snd_pcm_hw_params_set_format ( | |||||
handle, hw_params, SND_PCM_FORMAT_S16)) | |||||
< 0) { | |||||
jack_error ("Sorry. The audio interface \"%s\"" | |||||
"doesn't support either of the two" | |||||
" hardware sample formats that " | |||||
"JACK can use.", | |||||
device_name); | |||||
return -1; | |||||
} | |||||
} | |||||
} else { | |||||
if ((err = snd_pcm_hw_params_set_format ( | |||||
handle, hw_params, SND_PCM_FORMAT_S16)) < 0) { | |||||
jack_error("Couldn't open %s for 16bit samples trying" | |||||
" 32bit instead",device_name); | |||||
if ((err = snd_pcm_hw_params_set_format ( | |||||
handle, hw_params, SND_PCM_FORMAT_S32)) | |||||
< 0) { | |||||
format = sample_width == 4 ? 0 : NOFORMATS - 1; | |||||
while (1) { | |||||
if ((err = snd_pcm_hw_params_set_format (handle, hw_params, formats[format].format)) < 0) { | |||||
int failed_format = format; | |||||
if (sample_width == 4 ? format++ < NOFORMATS - 1 : format-- > 0) { | |||||
jack_error ("Couldn't open %s for %s samples" | |||||
" trying %s instead", device_name, formats[failed_format].Name, formats[format].Name); | |||||
} else { | |||||
jack_error ("Sorry. The audio interface \"%s\"" | jack_error ("Sorry. The audio interface \"%s\"" | ||||
"doesn't support either of the two" | |||||
" hardware sample formats that " | |||||
"JACK can use.", | |||||
" doesn't support any of the" | |||||
" hardware sample formats that" | |||||
" JACK's alsa-driver can use.", | |||||
device_name); | device_name); | ||||
return -1; | return -1; | ||||
} | } | ||||
} | |||||
} | |||||
} else | |||||
break; | |||||
} | |||||
if ((err = snd_pcm_hw_params_set_rate_near (handle, hw_params, | if ((err = snd_pcm_hw_params_set_rate_near (handle, hw_params, | ||||
driver->frame_rate, 0)) | driver->frame_rate, 0)) | ||||
@@ -674,6 +696,7 @@ alsa_driver_set_parameters (alsa_driver_t *driver, | |||||
if (driver->playback_handle) { | if (driver->playback_handle) { | ||||
switch (driver->playback_sample_format) { | switch (driver->playback_sample_format) { | ||||
case SND_PCM_FORMAT_S32_LE: | case SND_PCM_FORMAT_S32_LE: | ||||
case SND_PCM_FORMAT_S24_3: | |||||
case SND_PCM_FORMAT_S16_LE: | case SND_PCM_FORMAT_S16_LE: | ||||
case SND_PCM_FORMAT_S32_BE: | case SND_PCM_FORMAT_S32_BE: | ||||
case SND_PCM_FORMAT_S16_BE: | case SND_PCM_FORMAT_S16_BE: | ||||
@@ -689,6 +712,7 @@ alsa_driver_set_parameters (alsa_driver_t *driver, | |||||
if (driver->capture_handle) { | if (driver->capture_handle) { | ||||
switch (driver->capture_sample_format) { | switch (driver->capture_sample_format) { | ||||
case SND_PCM_FORMAT_S32_LE: | case SND_PCM_FORMAT_S32_LE: | ||||
case SND_PCM_FORMAT_S24_3: | |||||
case SND_PCM_FORMAT_S16_LE: | case SND_PCM_FORMAT_S16_LE: | ||||
case SND_PCM_FORMAT_S32_BE: | case SND_PCM_FORMAT_S32_BE: | ||||
case SND_PCM_FORMAT_S16_BE: | case SND_PCM_FORMAT_S16_BE: | ||||
@@ -25,6 +25,14 @@ | |||||
#define ALSA_PCM_OLD_SW_PARAMS_API | #define ALSA_PCM_OLD_SW_PARAMS_API | ||||
#include <alsa/asoundlib.h> | #include <alsa/asoundlib.h> | ||||
#if __BYTE_ORDER == __LITTLE_ENDIAN | |||||
#define SND_PCM_FORMAT_S24_3 SND_PCM_FORMAT_S24_3LE | |||||
#elif __BYTE_ORDER == __BIG_ENDIAN | |||||
#define SND_PCM_FORMAT_S24_3 SND_PCM_FORMAT_S24_3BE | |||||
#endif | |||||
#include <jack/types.h> | #include <jack/types.h> | ||||
#include <jack/hardware.h> | #include <jack/hardware.h> | ||||
#include <jack/driver.h> | #include <jack/driver.h> | ||||
@@ -181,6 +181,163 @@ void sample_move_dither_shaped_d32u24_sS (char *dst, jack_default_audio_sample_ | |||||
state->idx = idx; | state->idx = idx; | ||||
} | } | ||||
void sample_move_d24u24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) | |||||
{ | |||||
long long y; | |||||
while (nsamples--) { | |||||
y = (long long)(*src * SAMPLE_MAX_24BIT); | |||||
if (y > (INT_MAX >> 8 )) { | |||||
y = (INT_MAX >> 8); | |||||
} else if (y < (INT_MIN >> 8 )) { | |||||
y = (INT_MIN >> 8 ); | |||||
} | |||||
#if __BYTE_ORDER == __LITTLE_ENDIAN | |||||
memcpy (dst, &y, 3); | |||||
#elif __BYTE_ORDER == __BIG_ENDIAN | |||||
memcpy (dst, (char *)&y + 5, 3); | |||||
#endif | |||||
dst += dst_skip; | |||||
src++; | |||||
} | |||||
} | |||||
void sample_move_dS_s24u24 (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 | |||||
memcpy((char*)&x + 1, src, 3); | |||||
#elif __BYTE_ORDER == __BIG_ENDIAN | |||||
memcpy(&x, src, 3); | |||||
#endif | |||||
x >>= 8; | |||||
*dst = x / SAMPLE_MAX_24BIT; | |||||
dst++; | |||||
src += src_skip; | |||||
} | |||||
} | |||||
void sample_move_dither_rect_d24u24_sS (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; | |||||
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)) { | |||||
y = (INT_MAX >> 8); | |||||
} else if (y < (INT_MIN >> 8)) { | |||||
y = (INT_MIN >> 8); | |||||
} | |||||
#if __BYTE_ORDER == __LITTLE_ENDIAN | |||||
memcpy (dst, &y, 3); | |||||
#elif __BYTE_ORDER == __BIG_ENDIAN | |||||
memcpy (dst, (char *)&y + 5, 3); | |||||
#endif | |||||
dst += dst_skip; | |||||
src++; | |||||
} | |||||
} | |||||
void sample_move_dither_tri_d24u24_sS (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; | |||||
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)) { | |||||
y = (INT_MAX >> 8); | |||||
} else if (y < (INT_MIN >> 8)) { | |||||
y = (INT_MIN >> 8); | |||||
} | |||||
#if __BYTE_ORDER == __LITTLE_ENDIAN | |||||
memcpy (dst, &y, 3); | |||||
#elif __BYTE_ORDER == __BIG_ENDIAN | |||||
memcpy (dst, (char *)&y + 5, 3); | |||||
#endif | |||||
dst += dst_skip; | |||||
src++; | |||||
} | |||||
state->rm1 = rm1; | |||||
} | |||||
void sample_move_dither_shaped_d24u24_sS (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; | |||||
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)) { | |||||
y = (INT_MAX >> 8); | |||||
} else if (y < (INT_MIN >> 8)) { | |||||
y = (INT_MIN >> 8); | |||||
} | |||||
#if __BYTE_ORDER == __LITTLE_ENDIAN | |||||
memcpy (dst, &y, 3); | |||||
#elif __BYTE_ORDER == __BIG_ENDIAN | |||||
memcpy (dst, (char *)&y + 5, 3); | |||||
#endif | |||||
dst += dst_skip; | |||||
src++; | |||||
} | |||||
state->rm1 = rm1; | |||||
state->idx = idx; | |||||
} | |||||
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_d16_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) | ||||
{ | { | ||||
@@ -368,6 +525,13 @@ void memset_interleave (char *dst, char val, unsigned long bytes, | |||||
bytes -= 4; | bytes -= 4; | ||||
} | } | ||||
break; | break; | ||||
default: | |||||
while (bytes) { | |||||
memset(dst, val, unit_bytes); | |||||
dst += skip_bytes; | |||||
bytes -= unit_bytes; | |||||
} | |||||
break; | |||||
} | } | ||||
} | } | ||||
@@ -434,6 +598,19 @@ merge_memcpy_interleave_d32_s32 (char *dst, char *src, unsigned long src_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) | |||||
{ | |||||
while (src_bytes) { | |||||
int acc = (*(int *)dst & 0xFFFFFF) + (*(int *)src & 0xFFFFFF); | |||||
memcpy(dst, &acc, 3); | |||||
dst += dst_skip_bytes; | |||||
src += src_skip_bytes; | |||||
src_bytes -= 3; | |||||
} | |||||
} | |||||
void | void | ||||
memcpy_interleave_d16_s16 (char *dst, char *src, unsigned long src_bytes, | memcpy_interleave_d16_s16 (char *dst, char *src, unsigned long src_bytes, | ||||
unsigned long dst_skip_bytes, unsigned long src_skip_bytes) | unsigned long dst_skip_bytes, unsigned long src_skip_bytes) | ||||
@@ -446,6 +623,19 @@ memcpy_interleave_d16_s16 (char *dst, char *src, unsigned long src_bytes, | |||||
} | } | ||||
} | } | ||||
void | |||||
memcpy_interleave_d24_s24 (char *dst, char *src, unsigned long src_bytes, | |||||
unsigned long dst_skip_bytes, unsigned long src_skip_bytes) | |||||
{ | |||||
while (src_bytes) { | |||||
memcpy(dst, src, 3); | |||||
dst += dst_skip_bytes; | |||||
src += src_skip_bytes; | |||||
src_bytes -= 3; | |||||
} | |||||
} | |||||
void | void | ||||
memcpy_interleave_d32_s32 (char *dst, char *src, unsigned long src_bytes, | memcpy_interleave_d32_s32 (char *dst, char *src, unsigned long src_bytes, | ||||
unsigned long dst_skip_bytes, unsigned long src_skip_bytes) | unsigned long dst_skip_bytes, unsigned long src_skip_bytes) | ||||
@@ -42,16 +42,21 @@ typedef struct { | |||||
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_d32u24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | ||||
void sample_move_d24u24_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_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_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_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_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_d24u24_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_d24u24_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_d24u24_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_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_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_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_s32u24 (jack_default_audio_sample_t *dst, char *src, unsigned long nsamples, unsigned long src_skip); | ||||
void sample_move_dS_s24u24 (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_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_d16_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state); | ||||
@@ -79,9 +84,11 @@ void memset_interleave (char *dst, char val, unsigned long bytes, | |||||
void memcpy_fake (char *dst, char *src, unsigned long src_bytes, unsigned long foo, unsigned long bar); | 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_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 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_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_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_d16_s16 (char *dst, char *src, unsigned long src_bytes, unsigned long foo, unsigned long bar); | ||||