diff options
Diffstat (limited to 'src/converter.c')
-rw-r--r-- | src/converter.c | 58 |
1 files changed, 29 insertions, 29 deletions
diff --git a/src/converter.c b/src/converter.c index d895d83..90dba34 100644 --- a/src/converter.c +++ b/src/converter.c @@ -21,7 +21,7 @@ #include "malloc.h" #include "resample.h" -/* Steps: byteswap -> convert -> volscale -> remap -> resample -> convert -> byteswap -> interleave */ +/* Steps: byteswap -> convert -> volscale -> remap -> resample -> convert -> byteswap -> interleave|serialize */ /* Sample formats we know to process natively */ static int native_pcm_format_process(sa_pcm_format_t f) { @@ -333,6 +333,8 @@ int sa_converter_init( if (sa_bbuffer_init(&c->bb_tmp, 1, 1) < 0) goto fail; + if (c + return 0; fail: @@ -391,8 +393,8 @@ void* sa_converter_get_zero_buffer(sa_converter_t *c, size_t size) { int sa_converter_go( sa_converter_t *c, - const void *const src[], const size_t sstr[], sa_bool_t sinterleave, - void **dst[], size_t *dstr[], sa_bool_t dinterleave, + const void *const src[], const size_t sstr[], sa_interleave_t sinterleave, + void **dst[], size_t *dstr[], sa_interleave_t dinterleave, size_t *size) { size_t* stride; @@ -406,8 +408,6 @@ int sa_converter_go( is_bounce = FALSE; stride = (size_t*) sstr; process_data = (void**) src; - interleave = !!sinterleave; - dinterleave = !!dinterleave; if (c->no_volume && !c->remap_required && @@ -422,12 +422,12 @@ int sa_converter_go( if (c->pre_byteswap_func) { size_t k; - k = dinterleave ? c->from_sample_size*c->from_nchannels : c->from_sample_size; + k = dinterleave == SA_INTERLEAVE_YES ? c->from_sample_size*c->from_nchannels : c->from_sample_size; for (i = 0; i < c->from_nchannels; i++) { void *b; - if (!(b = sa_bbuffer_get(&c->bb_pre_byteswap, i, *size, dinterleave))) + if (!(b = sa_bbuffer_get(&c->bb_pre_byteswap, i, *size, dinterleave == SA_INTERLEAVE_YES))) return SA_ERROR_OOM; c->pre_byteswap_func(b, k, process_data[i], stride[i], *size); @@ -455,12 +455,12 @@ int sa_converter_go( size_t k, new_size; new_size = *size / c->from_sample_size * c->work_sample_size; - k = dinterleave ? c->work_sample_size*c->from_nchannels : c->work_sample_size; + k = dinterleave == SA_INTERLEAVE_YES ? c->work_sample_size*c->from_nchannels : c->work_sample_size; for (i = 0; i < c->from_nchannels; i++) { void *b; - if (!(b = sa_bbuffer_get(&c->bb_pre_format, i, new_size, dinterleave))) + if (!(b = sa_bbuffer_get(&c->bb_pre_format, i, new_size, dinterleave == SA_INTERLEAVE_YES))) return SA_ERROR_OOM; c->pre_format_func(&c->bb_tmp, b, k, process_data[i], stride[i], *size); @@ -491,12 +491,12 @@ int sa_converter_go( } else { size_t k; - k = dinterleave ? c->work_sample_size*c->from_nchannels : c->work_sample_size; + k = dinterleave == SA_INTERLEAVE_YES ? c->work_sample_size*c->from_nchannels : c->work_sample_size; for (i = 0; i < c->from_nchannels; i++) { void *b; - if (!(b = sa_bbuffer_get(&c->bb_volscale, i, *size, dinterleave))) + if (!(b = sa_bbuffer_get(&c->bb_volscale, i, *size, dinterleave == SA_INTERLEAVE_YES))) return SA_ERROR_OOM; c->volscale_func(b, k, process_data[i], stride[i], c->volume_factor[i], c->volume_divisor[i], *size); @@ -513,9 +513,9 @@ int sa_converter_go( if (c->remap_required) { size_t k; - int need_proper_interleave = 0; + sa_bool_t need_proper_interleave = FALSE; - k = dinterleave ? c->work_sample_size*c->to_nchannels : c->work_sample_size; + k = dinterleave == SA_INTERLEAVE_YES ? c->work_sample_size*c->to_nchannels : c->work_sample_size; for (i = 0; i < c->to_nchannels; i++) { void *b; @@ -530,20 +530,20 @@ int sa_converter_go( c->to_process_data[i] = b; c->to_stride[i] = c->work_sample_size; - need_proper_interleave = 1; + need_proper_interleave = TRUE; } else if (p[1] == -1) { /* Just one channel, nothing to mix */ c->to_process_data[i] = process_data[p[0]]; c->to_stride[i] = stride[p[0]]; - need_proper_interleave = 1; + need_proper_interleave = TRUE; } else { int j; /* We have to mix two or more channels */ - if (!(b = sa_bbuffer_get(&c->bb_remap, i, *size, dinterleave))) + if (!(b = sa_bbuffer_get(&c->bb_remap, i, *size, dinterleave == SA_INTERLEAVE_YES))) return SA_ERROR_OOM; c->add_func(b, k, process_data[p[0]], stride[p[0]], process_data[p[1]], stride[p[1]], *size); @@ -558,7 +558,7 @@ int sa_converter_go( process_data = c->to_process_data; stride = c->to_stride; - interleave = need_proper_interleave ? -1 : dinterleave; + interleave = need_proper_interleave ? SA_INTERLEAVE_ANY : dinterleave; is_bounce = TRUE; } @@ -566,14 +566,14 @@ int sa_converter_go( size_t k; size_t new_size; - k = dinterleave ? c->work_sample_size*c->to_nchannels : c->work_sample_size; + k = dinterleave == SA_INTERLEAVE_YES ? c->work_sample_size*c->to_nchannels : c->work_sample_size; new_size = (size_t) (((((uint64_t) *size+c->work_sample_size-1)/c->work_sample_size)*c->to_rate)/c->from_rate+1)*c->work_sample_size; /* FIXME */ for (i = 0; i < c->to_nchannels; i++) { void *b; - if (!(b = sa_bbuffer_get(&c->bb_resample, i, new_size, dinterleave))) + if (!(b = sa_bbuffer_get(&c->bb_resample, i, new_size, dinterleave == SA_INTERLEAVE_YES))) return SA_ERROR_OOM; c->resample_func(c->speex, i, b, k, process_data[i], stride[i], *size, &new_size); @@ -601,13 +601,13 @@ int sa_converter_go( } else { size_t k, new_size; - k = dinterleave ? c->to_sample_size*c->to_nchannels : c->to_sample_size; + k = dinterleave == SA_INTERLEAVE_YES ? c->to_sample_size*c->to_nchannels : c->to_sample_size; new_size = *size / c->work_sample_size * c->to_sample_size; for (i = 0; i < c->to_nchannels; i++) { void *b; - if (!(b = sa_bbuffer_get(&c->bb_post_format, i, new_size, dinterleave))) + if (!(b = sa_bbuffer_get(&c->bb_post_format, i, new_size, dinterleave == SA_INTERLEAVE_YES))) return SA_ERROR_OOM; c->post_format_func(&c->bb_tmp, b, k, process_data[i], stride[i], *size); @@ -636,12 +636,12 @@ int sa_converter_go( } else { size_t k; - k = dinterleave ? c->to_sample_size*c->to_nchannels : c->to_sample_size; + k = dinterleave == SA_INTERLEAVE_YES ? c->to_sample_size*c->to_nchannels : c->to_sample_size; for (i = 0; i < c->to_nchannels; i++) { void *b; - if (!(b = sa_bbuffer_get(&c->bb_post_byteswap, i, *size, dinterleave))) + if (!(b = sa_bbuffer_get(&c->bb_post_byteswap, i, *size, dinterleave == SA_INTERLEAVE_YES))) return SA_ERROR_OOM; c->post_byteswap_func(b, k, process_data[i], stride[i], *size); @@ -659,15 +659,15 @@ int sa_converter_go( do_interleave: - if (interleave != dinterleave) { + if (dinterleave != SA_INTERLEAVE_ANY && interleave != dinterleave) { size_t k; - k = dinterleave ? c->to_sample_size*c->to_nchannels : c->to_sample_size; + k = dinterleave == SA_INTERLEAVE_YES ? c->to_sample_size*c->to_nchannels : c->to_sample_size; for (i = 0; i < c->to_nchannels; i++) { void *b; - if (!(b = sa_bbuffer_get(&c->bb_interleave, i, *size, dinterleave))) + if (!(b = sa_bbuffer_get(&c->bb_interleave, i, *size, dinterleave == SA_INTERLEAVE_ANY))) return SA_ERROR_OOM; c->interleave_func(b, k, process_data[i], stride[i], *size); @@ -723,7 +723,7 @@ void sa_converter_set_volume(sa_converter_t *c, const int32_t vol[]) { int sa_converter_go_interleaved( sa_converter_t *c, const void *const data, - void **dst[], size_t *dstr[], int dinterleave, + void **dst[], size_t *dstr[], sa_bool_t dinterleave, size_t *size) { unsigned i; @@ -731,12 +731,12 @@ int sa_converter_go_interleaved( unsigned stride = c->from_nchannels * c->from_sample_size; for (i = 0; i < c->from_nchannels; i++) { - c->from_process_data[i] = (void*) data; + c->from_process_data[i] = (void*) d; d += c->from_sample_size; c->from_stride[i] = stride; } - return sa_converter_go(c, (const void *const*) c->from_process_data, c->from_stride, 1, dst, dstr, dinterleave, size); + return sa_converter_go(c, (const void *const*) c->from_process_data, c->from_stride, SA_INTERLEAVE_YES, dst, dstr, dinterleave, size); } void sa_converter_set_ratio(sa_converter_t *c, unsigned rate1, unsigned rate2) { |