mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-03 09:01:54 -05:00
resample: make quality configurable
This commit is contained in:
parent
f726a77385
commit
454e743d1a
5 changed files with 14 additions and 3 deletions
|
|
@ -134,6 +134,7 @@ int main(int argc, char *argv[])
|
|||
r.cpu_flags = 0;
|
||||
r.i_rate = in_rates[i];
|
||||
r.o_rate = out_rates[i];
|
||||
r.quality = RESAMPLE_DEFAULT_QUALITY;
|
||||
impl_native_init(&r);
|
||||
run_test("native", "c", &r);
|
||||
resample_free(&r);
|
||||
|
|
@ -145,6 +146,7 @@ int main(int argc, char *argv[])
|
|||
r.cpu_flags = SPA_CPU_FLAG_SSE;
|
||||
r.i_rate = in_rates[i];
|
||||
r.o_rate = out_rates[i];
|
||||
r.quality = RESAMPLE_DEFAULT_QUALITY;
|
||||
impl_native_init(&r);
|
||||
run_test("native", "sse", &r);
|
||||
resample_free(&r);
|
||||
|
|
@ -157,6 +159,7 @@ int main(int argc, char *argv[])
|
|||
r.cpu_flags = SPA_CPU_FLAG_SSSE3 | SPA_CPU_FLAG_SLOW_UNALIGNED;
|
||||
r.i_rate = in_rates[i];
|
||||
r.o_rate = out_rates[i];
|
||||
r.quality = RESAMPLE_DEFAULT_QUALITY;
|
||||
impl_native_init(&r);
|
||||
run_test("native", "ssse3", &r);
|
||||
resample_free(&r);
|
||||
|
|
@ -169,6 +172,7 @@ int main(int argc, char *argv[])
|
|||
r.cpu_flags = SPA_CPU_FLAG_AVX | SPA_CPU_FLAG_FMA3;
|
||||
r.i_rate = in_rates[i];
|
||||
r.o_rate = out_rates[i];
|
||||
r.quality = RESAMPLE_DEFAULT_QUALITY;
|
||||
impl_native_init(&r);
|
||||
run_test("native", "avx", &r);
|
||||
resample_free(&r);
|
||||
|
|
|
|||
|
|
@ -29,8 +29,6 @@ struct quality {
|
|||
double cutoff;
|
||||
};
|
||||
|
||||
#define DEFAULT_QUALITY 4
|
||||
|
||||
static const struct quality blackman_qualities[] = {
|
||||
{ 8, 0.5, },
|
||||
{ 16, 0.6, },
|
||||
|
|
@ -256,7 +254,7 @@ static uint32_t impl_native_delay (struct resample *r)
|
|||
static int impl_native_init(struct resample *r)
|
||||
{
|
||||
struct native_data *d;
|
||||
const struct quality *q = &blackman_qualities[DEFAULT_QUALITY];
|
||||
const struct quality *q = &blackman_qualities[r->quality];
|
||||
double scale;
|
||||
uint32_t c, n_taps, n_phases, filter_size, in_rate, out_rate, gcd, filter_stride;
|
||||
uint32_t history_stride, history_size, oversample;
|
||||
|
|
|
|||
|
|
@ -161,6 +161,7 @@ static int setup_convert(struct impl *this,
|
|||
this->resample.i_rate = src_info->info.raw.rate;
|
||||
this->resample.o_rate = dst_info->info.raw.rate;
|
||||
this->resample.log = this->log;
|
||||
this->resample.quality = RESAMPLE_DEFAULT_QUALITY;
|
||||
|
||||
if (this->peaks)
|
||||
err = impl_peaks_init(&this->resample);
|
||||
|
|
|
|||
|
|
@ -28,6 +28,8 @@
|
|||
#include <spa/support/cpu.h>
|
||||
#include <spa/support/log.h>
|
||||
|
||||
#define RESAMPLE_DEFAULT_QUALITY 4
|
||||
|
||||
struct resample {
|
||||
uint32_t cpu_flags;
|
||||
uint32_t channels;
|
||||
|
|
@ -35,6 +37,7 @@ struct resample {
|
|||
uint32_t o_rate;
|
||||
struct spa_log *log;
|
||||
double rate;
|
||||
int quality;
|
||||
|
||||
void (*free) (struct resample *r);
|
||||
void (*update_rate) (struct resample *r, double rate);
|
||||
|
|
|
|||
|
|
@ -72,6 +72,7 @@ static void test_native(void)
|
|||
r.channels = 1;
|
||||
r.i_rate = 44100;
|
||||
r.o_rate = 44100;
|
||||
r.quality = RESAMPLE_DEFAULT_QUALITY;
|
||||
impl_native_init(&r);
|
||||
|
||||
feed_1(&r);
|
||||
|
|
@ -81,6 +82,7 @@ static void test_native(void)
|
|||
r.channels = 1;
|
||||
r.i_rate = 44100;
|
||||
r.o_rate = 48000;
|
||||
r.quality = RESAMPLE_DEFAULT_QUALITY;
|
||||
impl_native_init(&r);
|
||||
|
||||
feed_1(&r);
|
||||
|
|
@ -123,6 +125,7 @@ static void test_in_len(void)
|
|||
r.channels = 1;
|
||||
r.i_rate = 32000;
|
||||
r.o_rate = 48000;
|
||||
r.quality = RESAMPLE_DEFAULT_QUALITY;
|
||||
impl_native_init(&r);
|
||||
|
||||
pull_blocks(&r, 1024);
|
||||
|
|
@ -132,6 +135,7 @@ static void test_in_len(void)
|
|||
r.channels = 1;
|
||||
r.i_rate = 44100;
|
||||
r.o_rate = 48000;
|
||||
r.quality = RESAMPLE_DEFAULT_QUALITY;
|
||||
impl_native_init(&r);
|
||||
|
||||
pull_blocks(&r, 1024);
|
||||
|
|
@ -141,6 +145,7 @@ static void test_in_len(void)
|
|||
r.channels = 1;
|
||||
r.i_rate = 48000;
|
||||
r.o_rate = 44100;
|
||||
r.quality = RESAMPLE_DEFAULT_QUALITY;
|
||||
impl_native_init(&r);
|
||||
|
||||
pull_blocks(&r, 1024);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue