mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-29 05:40:27 -04:00
audioconvert: move some things around
To make it easier to add other implementations later. Improve selection of resampler function
This commit is contained in:
parent
bf3ebb67aa
commit
0d1cef6b3a
12 changed files with 172 additions and 131 deletions
|
|
@ -29,7 +29,10 @@
|
|||
#include <errno.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "fmt-ops.c"
|
||||
#include "fmt-ops.h"
|
||||
|
||||
typedef void (*convert_func_t) (struct convert *conv, void * SPA_RESTRICT dst[],
|
||||
const void * SPA_RESTRICT src[], uint32_t n_samples);
|
||||
|
||||
struct stats {
|
||||
uint32_t n_samples;
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@
|
|||
#include <time.h>
|
||||
|
||||
#include "resample.h"
|
||||
#include "resample-native.h"
|
||||
|
||||
#define MAX_SAMPLES 4096
|
||||
#define MAX_CHANNELS 11
|
||||
|
|
@ -135,7 +134,7 @@ int main(int argc, char *argv[])
|
|||
r.i_rate = in_rates[i];
|
||||
r.o_rate = out_rates[i];
|
||||
r.quality = RESAMPLE_DEFAULT_QUALITY;
|
||||
impl_native_init(&r);
|
||||
resample_native_init(&r);
|
||||
run_test("native", "c", &r);
|
||||
resample_free(&r);
|
||||
}
|
||||
|
|
@ -147,7 +146,7 @@ int main(int argc, char *argv[])
|
|||
r.i_rate = in_rates[i];
|
||||
r.o_rate = out_rates[i];
|
||||
r.quality = RESAMPLE_DEFAULT_QUALITY;
|
||||
impl_native_init(&r);
|
||||
resample_native_init(&r);
|
||||
run_test("native", "sse", &r);
|
||||
resample_free(&r);
|
||||
}
|
||||
|
|
@ -160,7 +159,7 @@ int main(int argc, char *argv[])
|
|||
r.i_rate = in_rates[i];
|
||||
r.o_rate = out_rates[i];
|
||||
r.quality = RESAMPLE_DEFAULT_QUALITY;
|
||||
impl_native_init(&r);
|
||||
resample_native_init(&r);
|
||||
run_test("native", "ssse3", &r);
|
||||
resample_free(&r);
|
||||
}
|
||||
|
|
@ -173,7 +172,7 @@ int main(int argc, char *argv[])
|
|||
r.i_rate = in_rates[i];
|
||||
r.o_rate = out_rates[i];
|
||||
r.quality = RESAMPLE_DEFAULT_QUALITY;
|
||||
impl_native_init(&r);
|
||||
resample_native_init(&r);
|
||||
run_test("native", "avx", &r);
|
||||
resample_free(&r);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
audioconvert_sources = ['audioadapter.c',
|
||||
'audioconvert.c',
|
||||
'fmtconvert.c',
|
||||
'fmt-ops.c',
|
||||
'channelmix.c',
|
||||
'channelmix-ops.c',
|
||||
'merger.c',
|
||||
'plugin.c',
|
||||
'resample.c',
|
||||
|
|
@ -13,8 +11,11 @@ simd_cargs = []
|
|||
simd_dependencies = []
|
||||
|
||||
audioconvert_c = static_library('audioconvert_c',
|
||||
['resample-native-c.c',
|
||||
['fmt-ops.c',
|
||||
'channelmix-ops.c',
|
||||
'channelmix-ops-c.c',
|
||||
'resample-native.c',
|
||||
'resample-peaks.c',
|
||||
'fmt-ops-c.c' ],
|
||||
c_args : ['-O3'],
|
||||
include_directories : [spa_inc],
|
||||
|
|
@ -25,6 +26,7 @@ simd_dependencies += audioconvert_c
|
|||
if have_sse
|
||||
audioconvert_sse = static_library('audioconvert_sse',
|
||||
['resample-native-sse.c',
|
||||
'resample-peaks-sse.c',
|
||||
'channelmix-ops-sse.c' ],
|
||||
c_args : [sse_args, '-O3', '-DHAVE_SSE'],
|
||||
include_directories : [spa_inc],
|
||||
|
|
@ -145,7 +147,7 @@ foreach a : benchmark_apps
|
|||
dependencies : [dl_lib, pthread_lib, mathlib, ],
|
||||
include_directories : [spa_inc ],
|
||||
c_args : [ simd_cargs, '-D_GNU_SOURCE' ],
|
||||
link_with : simd_dependencies,
|
||||
link_with : [ simd_dependencies, audioconvertlib ],
|
||||
install : false),
|
||||
env : [
|
||||
'SPA_PLUGIN_DIR=@0@/spa/plugins/'.format(meson.build_root()),
|
||||
|
|
|
|||
|
|
@ -1,54 +0,0 @@
|
|||
/* Spa
|
||||
*
|
||||
* Copyright © 2019 Wim Taymans
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the next
|
||||
* paragraph) shall be included in all copies or substantial portions of the
|
||||
* Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "resample-native-impl.h"
|
||||
|
||||
static void inner_product_c(float *d, const float * SPA_RESTRICT s,
|
||||
const float * SPA_RESTRICT taps, uint32_t n_taps)
|
||||
{
|
||||
float sum = 0.0f;
|
||||
uint32_t i;
|
||||
|
||||
for (i = 0; i < n_taps; i++)
|
||||
sum += s[i] * taps[i];
|
||||
*d = sum;
|
||||
}
|
||||
|
||||
static void inner_product_ip_c(float *d, const float * SPA_RESTRICT s,
|
||||
const float * SPA_RESTRICT t0, const float * SPA_RESTRICT t1, float x,
|
||||
uint32_t n_taps)
|
||||
{
|
||||
float sum[2] = { 0.0f, 0.0f };
|
||||
uint32_t i;
|
||||
|
||||
for (i = 0; i < n_taps; i++) {
|
||||
sum[0] += s[i] * t0[i];
|
||||
sum[1] += s[i] * t1[i];
|
||||
}
|
||||
*d = (sum[1] - sum[0]) * x + sum[0];
|
||||
}
|
||||
|
||||
MAKE_RESAMPLER_COPY(c);
|
||||
MAKE_RESAMPLER_FULL(c);
|
||||
MAKE_RESAMPLER_INTER(c);
|
||||
|
|
@ -32,6 +32,14 @@ typedef void (*resample_func_t)(struct resample *r,
|
|||
const void * SPA_RESTRICT src[], uint32_t ioffs, uint32_t *in_len,
|
||||
void * SPA_RESTRICT dst[], uint32_t ooffs, uint32_t *out_len);
|
||||
|
||||
struct resample_info {
|
||||
uint32_t format;
|
||||
uint32_t cpu_flags;
|
||||
resample_func_t process_copy;
|
||||
resample_func_t process_full;
|
||||
resample_func_t process_inter;
|
||||
};
|
||||
|
||||
struct native_data {
|
||||
double rate;
|
||||
uint32_t n_taps;
|
||||
|
|
@ -48,6 +56,7 @@ struct native_data {
|
|||
resample_func_t func;
|
||||
float *filter;
|
||||
float *hist_mem;
|
||||
const struct resample_info *info;
|
||||
};
|
||||
|
||||
#define DEFINE_RESAMPLER(type,arch) \
|
||||
|
|
|
|||
|
|
@ -22,6 +22,10 @@
|
|||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
#include <spa/param/audio/format.h>
|
||||
|
||||
#include "resample-native-impl.h"
|
||||
|
||||
struct quality {
|
||||
|
|
@ -77,6 +81,69 @@ static int build_filter(float *taps, uint32_t stride, uint32_t n_taps, uint32_t
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void inner_product_c(float *d, const float * SPA_RESTRICT s,
|
||||
const float * SPA_RESTRICT taps, uint32_t n_taps)
|
||||
{
|
||||
float sum = 0.0f;
|
||||
uint32_t i;
|
||||
|
||||
for (i = 0; i < n_taps; i++)
|
||||
sum += s[i] * taps[i];
|
||||
*d = sum;
|
||||
}
|
||||
|
||||
static void inner_product_ip_c(float *d, const float * SPA_RESTRICT s,
|
||||
const float * SPA_RESTRICT t0, const float * SPA_RESTRICT t1, float x,
|
||||
uint32_t n_taps)
|
||||
{
|
||||
float sum[2] = { 0.0f, 0.0f };
|
||||
uint32_t i;
|
||||
|
||||
for (i = 0; i < n_taps; i++) {
|
||||
sum[0] += s[i] * t0[i];
|
||||
sum[1] += s[i] * t1[i];
|
||||
}
|
||||
*d = (sum[1] - sum[0]) * x + sum[0];
|
||||
}
|
||||
|
||||
MAKE_RESAMPLER_COPY(c);
|
||||
MAKE_RESAMPLER_FULL(c);
|
||||
MAKE_RESAMPLER_INTER(c);
|
||||
|
||||
static struct resample_info resample_table[] =
|
||||
{
|
||||
#if defined (HAVE_NEON)
|
||||
{ SPA_AUDIO_FORMAT_F32, SPA_CPU_FLAG_NEON,
|
||||
do_resample_copy_c, do_resample_full_neon, do_resample_inter_neon },
|
||||
#endif
|
||||
#if defined(HAVE_AVX) && defined(HAVE_FMA)
|
||||
{ SPA_AUDIO_FORMAT_F32, SPA_CPU_FLAG_AVX | SPA_CPU_FLAG_FMA3,
|
||||
do_resample_copy_c, do_resample_full_avx, do_resample_inter_avx },
|
||||
#endif
|
||||
#if defined (HAVE_SSSE3)
|
||||
{ SPA_AUDIO_FORMAT_F32, SPA_CPU_FLAG_SSSE3 | SPA_CPU_FLAG_SLOW_UNALIGNED,
|
||||
do_resample_copy_c, do_resample_full_ssse3, do_resample_inter_ssse3 },
|
||||
#endif
|
||||
#if defined (HAVE_SSE)
|
||||
{ SPA_AUDIO_FORMAT_F32, SPA_CPU_FLAG_SSE,
|
||||
do_resample_copy_c, do_resample_full_sse, do_resample_inter_sse },
|
||||
#endif
|
||||
{ SPA_AUDIO_FORMAT_F32, 0,
|
||||
do_resample_copy_c, do_resample_full_c, do_resample_inter_c },
|
||||
};
|
||||
|
||||
#define MATCH_CPU_FLAGS(a,b) ((a) == 0 || ((a) & (b)) == a)
|
||||
static const struct resample_info *find_resample_info(uint32_t format, uint32_t cpu_flags)
|
||||
{
|
||||
size_t i;
|
||||
for (i = 0; i < SPA_N_ELEMENTS(resample_table); i++) {
|
||||
if (resample_table[i].format == format &&
|
||||
MATCH_CPU_FLAGS(resample_table[i].cpu_flags, cpu_flags))
|
||||
return &resample_table[i];
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void impl_native_free(struct resample *r)
|
||||
{
|
||||
free(r->data);
|
||||
|
|
@ -118,32 +185,16 @@ static void impl_native_update_rate(struct resample *r, double rate)
|
|||
data->inc = data->in_rate / data->out_rate;
|
||||
data->frac = data->in_rate % data->out_rate;
|
||||
|
||||
if (data->in_rate == data->out_rate)
|
||||
data->func = data->info->process_copy;
|
||||
else if (rate == 1.0)
|
||||
data->func = data->info->process_full;
|
||||
else
|
||||
data->func = data->info->process_inter;
|
||||
|
||||
spa_log_trace_fp(r->log, "native %p: rate:%f in:%d out:%d phase:%d inc:%d frac:%d", r,
|
||||
rate, data->in_rate, data->out_rate, data->phase, data->inc, data->frac);
|
||||
|
||||
if (data->in_rate == data->out_rate)
|
||||
data->func = do_resample_copy_c;
|
||||
else {
|
||||
bool is_full = rate == 1.0;
|
||||
|
||||
data->func = is_full ? do_resample_full_c : do_resample_inter_c;
|
||||
#if defined (HAVE_NEON)
|
||||
if (SPA_FLAG_IS_SET(r->cpu_flags, SPA_CPU_FLAG_NEON))
|
||||
data->func = is_full ? do_resample_full_neon : do_resample_inter_neon;
|
||||
#endif
|
||||
#if defined (HAVE_SSE)
|
||||
if (SPA_FLAG_IS_SET(r->cpu_flags, SPA_CPU_FLAG_SSE))
|
||||
data->func = is_full ? do_resample_full_sse : do_resample_inter_sse;
|
||||
#endif
|
||||
#if defined (HAVE_SSSE3)
|
||||
if (SPA_FLAG_IS_SET(r->cpu_flags, SPA_CPU_FLAG_SSSE3 | SPA_CPU_FLAG_SLOW_UNALIGNED))
|
||||
data->func = is_full ? do_resample_full_ssse3 : do_resample_inter_ssse3;
|
||||
#endif
|
||||
#if defined(HAVE_AVX) && defined(HAVE_FMA)
|
||||
if (SPA_FLAG_IS_SET(r->cpu_flags, SPA_CPU_FLAG_AVX | SPA_CPU_FLAG_FMA3))
|
||||
data->func = is_full ? do_resample_full_avx : do_resample_inter_avx;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
static uint32_t impl_native_in_len(struct resample *r, uint32_t out_len)
|
||||
|
|
@ -264,7 +315,7 @@ static uint32_t impl_native_delay (struct resample *r)
|
|||
return d->n_taps / 2;
|
||||
}
|
||||
|
||||
static int impl_native_init(struct resample *r)
|
||||
int resample_native_init(struct resample *r)
|
||||
{
|
||||
struct native_data *d;
|
||||
const struct quality *q;
|
||||
|
|
@ -326,8 +377,13 @@ static int impl_native_init(struct resample *r)
|
|||
|
||||
build_filter(d->filter, d->filter_stride, n_taps, n_phases, scale);
|
||||
|
||||
spa_log_debug(r->log, "native %p: q:%d in:%d out:%d n_taps:%d n_phases:%d",
|
||||
r, r->quality, in_rate, out_rate, n_taps, n_phases);
|
||||
d->info = find_resample_info(SPA_AUDIO_FORMAT_F32, r->cpu_flags);
|
||||
|
||||
spa_log_debug(r->log, "native %p: q:%d in:%d out:%d n_taps:%d n_phases:%d features:%08x:%08x",
|
||||
r, r->quality, in_rate, out_rate, n_taps, n_phases,
|
||||
r->cpu_flags, d->info->cpu_flags);
|
||||
|
||||
r->cpu_flags = d->info->cpu_flags;
|
||||
|
||||
impl_native_reset(r);
|
||||
impl_native_update_rate(r, 1.0);
|
||||
|
|
@ -26,6 +26,8 @@
|
|||
|
||||
#include <xmmintrin.h>
|
||||
|
||||
#include "resample-peaks-impl.h"
|
||||
|
||||
static inline float hmax_ps(__m128 val)
|
||||
{
|
||||
__m128 t = _mm_movehl_ps(val, val);
|
||||
|
|
@ -35,7 +37,7 @@ static inline float hmax_ps(__m128 val)
|
|||
return _mm_cvtss_f32(val);
|
||||
}
|
||||
|
||||
static void impl_peaks_process_sse(struct resample *r,
|
||||
void resample_peaks_process_sse(struct resample *r,
|
||||
const void * SPA_RESTRICT src[], uint32_t *in_len,
|
||||
void * SPA_RESTRICT dst[], uint32_t *out_len)
|
||||
{
|
||||
|
|
@ -23,28 +23,13 @@
|
|||
*/
|
||||
|
||||
#include <math.h>
|
||||
#include <errno.h>
|
||||
|
||||
struct peaks_data {
|
||||
uint32_t o_count;
|
||||
uint32_t i_count;
|
||||
float max_f[0];
|
||||
};
|
||||
#include <spa/param/audio/format.h>
|
||||
|
||||
#if defined (__SSE__)
|
||||
#include "resample-peaks-sse.h"
|
||||
#endif
|
||||
#include "resample-peaks-impl.h"
|
||||
|
||||
static void impl_peaks_free(struct resample *r)
|
||||
{
|
||||
free(r->data);
|
||||
r->data = NULL;
|
||||
}
|
||||
|
||||
static void impl_peaks_update_rate(struct resample *r, double rate)
|
||||
{
|
||||
}
|
||||
|
||||
static void impl_peaks_process(struct resample *r,
|
||||
static void resample_peaks_process_c(struct resample *r,
|
||||
const void * SPA_RESTRICT src[], uint32_t *in_len,
|
||||
void * SPA_RESTRICT dst[], uint32_t *out_len)
|
||||
{
|
||||
|
|
@ -90,32 +75,73 @@ static void impl_peaks_process(struct resample *r,
|
|||
}
|
||||
}
|
||||
|
||||
struct resample_info {
|
||||
uint32_t format;
|
||||
uint32_t cpu_flags;
|
||||
void (*process) (struct resample *r,
|
||||
const void * SPA_RESTRICT src[], uint32_t *in_len,
|
||||
void * SPA_RESTRICT dst[], uint32_t *out_len);
|
||||
};
|
||||
|
||||
static struct resample_info resample_table[] =
|
||||
{
|
||||
#if defined (HAVE_SSE)
|
||||
{ SPA_AUDIO_FORMAT_F32, SPA_CPU_FLAG_SSE, resample_peaks_process_sse, },
|
||||
#endif
|
||||
{ SPA_AUDIO_FORMAT_F32, 0, resample_peaks_process_c, },
|
||||
};
|
||||
|
||||
#define MATCH_CPU_FLAGS(a,b) ((a) == 0 || ((a) & (b)) == a)
|
||||
static const struct resample_info *find_resample_info(uint32_t format, uint32_t cpu_flags)
|
||||
{
|
||||
size_t i;
|
||||
for (i = 0; i < SPA_N_ELEMENTS(resample_table); i++) {
|
||||
if (resample_table[i].format == format &&
|
||||
MATCH_CPU_FLAGS(resample_table[i].cpu_flags, cpu_flags)) {
|
||||
return &resample_table[i];
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void impl_peaks_free(struct resample *r)
|
||||
{
|
||||
free(r->data);
|
||||
r->data = NULL;
|
||||
}
|
||||
|
||||
static void impl_peaks_update_rate(struct resample *r, double rate)
|
||||
{
|
||||
}
|
||||
|
||||
static void impl_peaks_reset (struct resample *r)
|
||||
{
|
||||
struct peaks_data *d = r->data;
|
||||
d->i_count = d->o_count = 0;
|
||||
}
|
||||
|
||||
static int impl_peaks_init(struct resample *r)
|
||||
int resample_peaks_init(struct resample *r)
|
||||
{
|
||||
struct peaks_data *d;
|
||||
const struct resample_info *info;
|
||||
|
||||
r->free = impl_peaks_free;
|
||||
r->update_rate = impl_peaks_update_rate;
|
||||
#if defined (__SSE__)
|
||||
if (r->cpu_flags & SPA_CPU_FLAG_SSE)
|
||||
r->process = impl_peaks_process_sse;
|
||||
else
|
||||
#endif
|
||||
r->process = impl_peaks_process;
|
||||
|
||||
if ((info = find_resample_info(SPA_AUDIO_FORMAT_F32, r->cpu_flags)) == NULL)
|
||||
return -ENOTSUP;
|
||||
|
||||
r->process = info->process;
|
||||
r->reset = impl_peaks_reset;
|
||||
|
||||
d = r->data = calloc(1, sizeof(struct peaks_data) * sizeof(float) * r->channels);
|
||||
if (r->data == NULL)
|
||||
return -errno;
|
||||
|
||||
spa_log_debug(r->log, "peaks %p: in:%d out:%d", r, r->i_rate, r->o_rate);
|
||||
spa_log_debug(r->log, "peaks %p: in:%d out:%d features:%08x:%08x", r,
|
||||
r->i_rate, r->o_rate, r->cpu_flags, info->cpu_flags);
|
||||
|
||||
r->cpu_flags = info->cpu_flags;
|
||||
d->i_count = d->o_count = 0;
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -40,9 +40,6 @@
|
|||
|
||||
#include "resample.h"
|
||||
|
||||
#include "resample-peaks.h"
|
||||
#include "resample-native.h"
|
||||
|
||||
#define NAME "resample"
|
||||
|
||||
#define DEFAULT_RATE 48000
|
||||
|
|
@ -166,9 +163,9 @@ static int setup_convert(struct impl *this,
|
|||
this->resample.quality = this->props.quality;
|
||||
|
||||
if (this->peaks)
|
||||
err = impl_peaks_init(&this->resample);
|
||||
err = resample_peaks_init(&this->resample);
|
||||
else
|
||||
err = impl_native_init(&this->resample);
|
||||
err = resample_native_init(&this->resample);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,4 +59,7 @@ struct resample {
|
|||
#define resample_reset(r) (r)->reset(r)
|
||||
#define resample_delay(r) (r)->delay(r)
|
||||
|
||||
int resample_native_init(struct resample *r);
|
||||
int resample_peaks_init(struct resample *r);
|
||||
|
||||
#endif /* RESAMPLE_H */
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@
|
|||
SPA_LOG_IMPL(logger);
|
||||
|
||||
#include "resample.h"
|
||||
#include "resample-native.h"
|
||||
|
||||
#define DEFAULT_QUALITY RESAMPLE_DEFAULT_QUALITY
|
||||
|
||||
|
|
@ -166,7 +165,7 @@ static int do_conversion(struct data *d)
|
|||
r.i_rate = d->iinfo.samplerate;
|
||||
r.o_rate = d->oinfo.samplerate;
|
||||
r.quality = d->quality < 0 ? DEFAULT_QUALITY : d->quality;
|
||||
impl_native_init(&r);
|
||||
resample_native_init(&r);
|
||||
|
||||
for (j = 0; j < channels; j++)
|
||||
src[j] = &in[MAX_SAMPLES * j];
|
||||
|
|
|
|||
|
|
@ -35,7 +35,6 @@
|
|||
SPA_LOG_IMPL(logger);
|
||||
|
||||
#include "resample.h"
|
||||
#include "resample-native.h"
|
||||
|
||||
#define N_SAMPLES 253
|
||||
#define N_CHANNELS 11
|
||||
|
|
@ -73,7 +72,7 @@ static void test_native(void)
|
|||
r.i_rate = 44100;
|
||||
r.o_rate = 44100;
|
||||
r.quality = RESAMPLE_DEFAULT_QUALITY;
|
||||
impl_native_init(&r);
|
||||
resample_native_init(&r);
|
||||
|
||||
feed_1(&r);
|
||||
|
||||
|
|
@ -83,7 +82,7 @@ static void test_native(void)
|
|||
r.i_rate = 44100;
|
||||
r.o_rate = 48000;
|
||||
r.quality = RESAMPLE_DEFAULT_QUALITY;
|
||||
impl_native_init(&r);
|
||||
resample_native_init(&r);
|
||||
|
||||
feed_1(&r);
|
||||
}
|
||||
|
|
@ -126,7 +125,7 @@ static void test_in_len(void)
|
|||
r.i_rate = 32000;
|
||||
r.o_rate = 48000;
|
||||
r.quality = RESAMPLE_DEFAULT_QUALITY;
|
||||
impl_native_init(&r);
|
||||
resample_native_init(&r);
|
||||
|
||||
pull_blocks(&r, 1024);
|
||||
|
||||
|
|
@ -136,7 +135,7 @@ static void test_in_len(void)
|
|||
r.i_rate = 44100;
|
||||
r.o_rate = 48000;
|
||||
r.quality = RESAMPLE_DEFAULT_QUALITY;
|
||||
impl_native_init(&r);
|
||||
resample_native_init(&r);
|
||||
|
||||
pull_blocks(&r, 1024);
|
||||
|
||||
|
|
@ -146,7 +145,7 @@ static void test_in_len(void)
|
|||
r.i_rate = 48000;
|
||||
r.o_rate = 44100;
|
||||
r.quality = RESAMPLE_DEFAULT_QUALITY;
|
||||
impl_native_init(&r);
|
||||
resample_native_init(&r);
|
||||
|
||||
pull_blocks(&r, 1024);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue