Revert "Fix jack backend to correctly support 24bit format. Could be highly improved performance-wise, but works"
This reverts commit 9c28a4695a
.
This commit is contained in:
parent
d9c0186809
commit
6e83bbbd07
|
@ -234,14 +234,13 @@ int jack_write(audio_backend_handle_t handle, char const* data, size_t size)
|
|||
|
||||
int jack_process_cb(jack_nframes_t nframes, void* arg)
|
||||
{
|
||||
static jack_default_audio_sample_t* buffers[VBAN_CHANNELS_MAX_NB];
|
||||
struct jack_backend_t* const jack_backend = (struct jack_backend_t*)arg;
|
||||
size_t sampleSize;
|
||||
size_t channel;
|
||||
size_t sample;
|
||||
char* buffer = 0;
|
||||
char* ptr = 0;
|
||||
size_t len = 0;
|
||||
jack_ringbuffer_data_t rb_data[2];
|
||||
static jack_default_audio_sample_t* buffers[VBAN_CHANNELS_MAX_NB];
|
||||
char const* ptr;
|
||||
size_t len;
|
||||
|
||||
if (arg == 0)
|
||||
{
|
||||
|
@ -258,44 +257,47 @@ int jack_process_cb(jack_nframes_t nframes, void* arg)
|
|||
buffers[channel] = (jack_default_audio_sample_t*)jack_port_get_buffer(jack_backend->ports[channel], nframes);
|
||||
}
|
||||
|
||||
sampleSize = VBanBitResolutionSize[jack_backend->bit_fmt];
|
||||
len = jack_ringbuffer_read_space(jack_backend->ring_buffer);
|
||||
if (len < (nframes * jack_backend->nb_channels * sampleSize))
|
||||
jack_ringbuffer_get_read_vector(jack_backend->ring_buffer, rb_data);
|
||||
|
||||
if ((rb_data[0].len == 0) && (rb_data[1].len == 0))
|
||||
{
|
||||
logger_log(LOG_WARNING, "%s: short read", __func__);
|
||||
goto end;
|
||||
logger_log(LOG_WARNING, "%s: no data available to read", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
buffer = malloc(nframes * jack_backend->nb_channels * sampleSize);
|
||||
if (buffer == 0)
|
||||
{
|
||||
logger_log(LOG_WARNING, "%s: alloc error", __func__);
|
||||
goto end;
|
||||
}
|
||||
|
||||
len = jack_ringbuffer_read(jack_backend->ring_buffer, buffer, (nframes * jack_backend->nb_channels * sampleSize));
|
||||
if (len != (nframes * jack_backend->nb_channels * sampleSize))
|
||||
{
|
||||
logger_log(LOG_WARNING, "%s: short read", __func__);
|
||||
goto end;
|
||||
}
|
||||
|
||||
ptr = buffer;
|
||||
|
||||
ptr = rb_data[0].buf;
|
||||
len = 0;
|
||||
for (sample = 0; sample != nframes; ++sample)
|
||||
{
|
||||
for (channel = 0; channel != jack_backend->nb_channels; ++channel)
|
||||
{
|
||||
if (len == rb_data[0].len)
|
||||
{
|
||||
if (rb_data[1].len != 0)
|
||||
{
|
||||
ptr = rb_data[1].buf;
|
||||
}
|
||||
else
|
||||
{
|
||||
logger_log(LOG_WARNING, "%s: short read", __func__);
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
else if (len == (rb_data[0].len + rb_data[1].len))
|
||||
{
|
||||
logger_log(LOG_WARNING, "%s: short read", __func__);
|
||||
goto end;
|
||||
}
|
||||
|
||||
buffers[channel][sample] = jack_convert_sample(ptr, jack_backend->bit_fmt);
|
||||
ptr += sampleSize;
|
||||
ptr += VBanBitResolutionSize[jack_backend->bit_fmt];
|
||||
len += VBanBitResolutionSize[jack_backend->bit_fmt];
|
||||
}
|
||||
}
|
||||
|
||||
end:
|
||||
if (buffer != 0)
|
||||
{
|
||||
free(buffer);
|
||||
}
|
||||
jack_ringbuffer_read_advance(jack_backend->ring_buffer, len);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -316,22 +318,22 @@ void jack_shutdown_cb(void* arg)
|
|||
|
||||
inline jack_default_audio_sample_t jack_convert_sample(char const* ptr, enum VBanBitResolution bit_fmt)
|
||||
{
|
||||
int32_t value;
|
||||
int value;
|
||||
|
||||
switch (bit_fmt)
|
||||
{
|
||||
case VBAN_BITFMT_8_INT:
|
||||
return (float)(*((int8_t const*)ptr)) / (float)(1 << 7);
|
||||
return (float)*((int8_t const*)ptr);
|
||||
|
||||
case VBAN_BITFMT_16_INT:
|
||||
return (float)(*((int16_t const*)ptr)) / (float)(1 << 15);
|
||||
return (float)(*((int16_t const*)ptr)) / 32768;
|
||||
|
||||
case VBAN_BITFMT_24_INT:
|
||||
value = ptr[2] << 16 | ((unsigned char const)(ptr[1]) << 8) | (unsigned char const)(ptr[0]);
|
||||
return (float)value / (float)(1 << 23);
|
||||
memcpy(&value, ptr, 3);
|
||||
return (float)value;
|
||||
|
||||
case VBAN_BITFMT_32_INT:
|
||||
return (float)(*((int32_t const*)ptr)) / (float)(1 << 31);
|
||||
return (float)*((int32_t const*)ptr);
|
||||
|
||||
case VBAN_BITFMT_32_FLOAT:
|
||||
return *(float const*)ptr;
|
||||
|
|
Loading…
Reference in New Issue