avutil/eval: Use even better PRNG

This is the 64bit version of Chris Doty-Humphreys SFC64

Compared to the LCGs these produce much better quality numbers.
Compared to LFGs this needs less state. (our LFG has 224 byte
state for its 32bit version) this has 32byte state
Also the initialization for our LFG is slower.
This is also much faster than KISS or PCG.

This commit replaces the broken LCG used before.
(broken as it had only a period ~200M due to being put in a double)

This changes the output from random() which is why libswresample.mak
is updated, update was done using the command in libswresample.mak

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
Michael Niedermayer 2024-01-02 01:53:40 +01:00
parent 36b402f80d
commit 278fea3664
No known key found for this signature in database
GPG Key ID: B18E8928B3948D64
4 changed files with 209 additions and 109 deletions

View File

@ -35,6 +35,7 @@
#include "internal.h"
#include "log.h"
#include "mathematics.h"
#include "sfc64.h"
#include "time.h"
#include "avstring.h"
#include "timer.h"
@ -55,6 +56,7 @@ typedef struct Parser {
void *log_ctx;
#define VARS 10
double *var;
FFSFC64 *prng_state;
} Parser;
static const AVClass eval_class = {
@ -173,6 +175,7 @@ struct AVExpr {
} a;
struct AVExpr *param[3];
double *var;
FFSFC64 *prng_state;
};
static double etime(double v)
@ -231,8 +234,14 @@ static double eval_expr(Parser *p, AVExpr *e)
#define COMPUTE_NEXT_RANDOM() \
int idx = av_clip(eval_expr(p, e->param[0]), 0, VARS-1); \
uint64_t r = isnan(p->var[idx]) ? 0 : p->var[idx]; \
r = r * 1664525 + 1013904223; \
FFSFC64 *s = p->prng_state + idx; \
uint64_t r; \
\
if (!s->counter) { \
r = isnan(p->var[idx]) ? 0 : p->var[idx]; \
ff_sfc64_init(s, r, r, r, 12); \
} \
r = ff_sfc64_get(s); \
p->var[idx] = r; \
case e_random: {
@ -329,7 +338,11 @@ static double eval_expr(Parser *p, AVExpr *e)
case e_div: return e->value * (d2 ? (d / d2) : d * INFINITY);
case e_add: return e->value * (d + d2);
case e_last:return e->value * d2;
case e_st : return e->value * (p->var[av_clip(d, 0, VARS-1)]= d2);
case e_st : {
int index = av_clip(d, 0, VARS-1);
p->prng_state[index].counter = 0;
return e->value * (p->var[index]= d2);
}
case e_hypot:return e->value * hypot(d, d2);
case e_atan2:return e->value * atan2(d, d2);
case e_bitand: return isnan(d) || isnan(d2) ? NAN : e->value * ((long int)d & (long int)d2);
@ -349,6 +362,7 @@ void av_expr_free(AVExpr *e)
av_expr_free(e->param[1]);
av_expr_free(e->param[2]);
av_freep(&e->var);
av_freep(&e->prng_state);
av_freep(&e);
}
@ -736,7 +750,8 @@ int av_expr_parse(AVExpr **expr, const char *s,
goto end;
}
e->var= av_mallocz(sizeof(double) *VARS);
if (!e->var) {
e->prng_state = av_mallocz(sizeof(*e->prng_state) *VARS);
if (!e->var || !e->prng_state) {
ret = AVERROR(ENOMEM);
goto end;
}
@ -778,6 +793,7 @@ double av_expr_eval(AVExpr *e, const double *const_values, void *opaque)
{
Parser p = { 0 };
p.var= e->var;
p.prng_state= e->prng_state;
p.const_values = const_values;
p.opaque = opaque;

84
libavutil/sfc64.h Normal file
View File

@ -0,0 +1,84 @@
/*
* Copyright (c) 2024 Michael Niedermayer <michael-ffmpeg@niedermayer.cc>
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
/**
* @file
* simple Pseudo Random Number Generator
*
* This is a implementation of SFC64, a 64-bit PRNG by Chris Doty-Humphrey.
*
* This Generator is much faster (0m1.872s) than 64bit KISS (0m3.823s) and PCG-XSH-RR-64/32 (0m2.700s)
* And passes testu01 and practrand test suits.
*/
#ifndef AVUTIL_SFC64_H
#define AVUTIL_SFC64_H
#include <inttypes.h>
typedef struct FFSFC64 {
uint64_t a,b,c,counter;
} FFSFC64;
static inline uint64_t ff_sfc64_get(FFSFC64 *s) {
uint64_t tmp = s->a + s->b + s->counter++;
s->a = s->b ^ (s->b >> 11);
s->b = s->c + (s->c << 3); // This is a multiply by 9
s->c = (s->c << 24 | s->c >> 40) + tmp;
return tmp;
}
/**
* Return the previous random value, and step the generator backward.
*
* It is safe to take values before the first, but such values can be highly
* correlated to the seeds.
*/
static inline uint64_t ff_sfc64_reverse_get(FFSFC64 *s) {
uint64_t prev_c = s->b * 0x8E38E38E38E38E39;
uint64_t tmp = s->c - (prev_c << 24 | prev_c >> 40);
s->b = s->a ^ (s->a >> 11);
s->b ^= s->b >> 22;
s->b ^= s->b >> 44;
s->a = tmp - s->b - --s->counter;
s->c = prev_c;
return tmp;
}
/**
* Initialize sfc64 with up to 3 seeds.
*
* @param rounds number of rounds mixing up state during init. Generally 8-18, larger numbers will help with bad quality seeds.
* 12 is a good choice if all 3 seeds are equal
*
*/
static inline void ff_sfc64_init(FFSFC64 *s, uint64_t seeda, uint64_t seedb, uint64_t seedc, int rounds) {
s->a = seeda;
s->b = seedb;
s->c = seedc;
s->counter = 1;
while (rounds--)
ff_sfc64_get(s);
}
#endif // AVUTIL_SFC64_H

View File

@ -367,17 +367,17 @@ fate-swr-resample_async-$(3)-$(1)-$(2): FUZZ = 0.1
fate-swr-resample_async-$(3)-$(1)-$(2): REF = tests/data/asynth-$(1)-1.wav
endef
fate-swr-resample_async-fltp-44100-8000: CMP_TARGET = 4020.60
fate-swr-resample_async-fltp-44100-8000: SIZE_TOLERANCE = 529200 - 20310
fate-swr-resample_async-fltp-44100-8000: CMP_TARGET = 3802.05
fate-swr-resample_async-fltp-44100-8000: SIZE_TOLERANCE = 529200 - 20386
fate-swr-resample_async-fltp-8000-44100: CMP_TARGET = 11186.66
fate-swr-resample_async-fltp-8000-44100: SIZE_TOLERANCE = 96000 - 20344
fate-swr-resample_async-fltp-8000-44100: CMP_TARGET = 10451.40
fate-swr-resample_async-fltp-8000-44100: SIZE_TOLERANCE = 96000 - 20350
fate-swr-resample_async-s16p-44100-8000: CMP_TARGET = 4020.71
fate-swr-resample_async-s16p-44100-8000: SIZE_TOLERANCE = 529200 - 20310
fate-swr-resample_async-s16p-44100-8000: CMP_TARGET = 3802.16
fate-swr-resample_async-s16p-44100-8000: SIZE_TOLERANCE = 529200 - 20386
fate-swr-resample_async-s16p-8000-44100: CMP_TARGET = 11186.94
fate-swr-resample_async-s16p-8000-44100: SIZE_TOLERANCE = 96000 - 20344
fate-swr-resample_async-s16p-8000-44100: CMP_TARGET = 10451.66
fate-swr-resample_async-s16p-8000-44100: SIZE_TOLERANCE = 96000 - 20350
define ARESAMPLE_EXACT
FATE_SWR_RESAMPLE += fate-swr-resample_exact-$(3)-$(1)-$(2)
@ -641,77 +641,77 @@ fate-swr-resample_exact_async-$(3)-$(1)-$(2): FUZZ = 0.1
fate-swr-resample_exact_async-$(3)-$(1)-$(2): REF = tests/data/asynth-$(1)-1.wav
endef
fate-swr-resample_exact_async-dblp-44100-48000: CMP_TARGET = 7791.50
fate-swr-resample_exact_async-dblp-44100-48000: SIZE_TOLERANCE = 529200 - 20300
fate-swr-resample_exact_async-dblp-44100-48000: CMP_TARGET = 5947.75
fate-swr-resample_exact_async-dblp-44100-48000: SIZE_TOLERANCE = 529200 - 20394
fate-swr-resample_exact_async-dblp-44100-8000: CMP_TARGET = 4022.87
fate-swr-resample_exact_async-dblp-44100-8000: SIZE_TOLERANCE = 529200 - 20310
fate-swr-resample_exact_async-dblp-44100-8000: CMP_TARGET = 3804.22
fate-swr-resample_exact_async-dblp-44100-8000: SIZE_TOLERANCE = 529200 - 20386
fate-swr-resample_exact_async-dblp-48000-44100: CMP_TARGET = 1923.97
fate-swr-resample_exact_async-dblp-48000-44100: SIZE_TOLERANCE = 576000 - 20298
fate-swr-resample_exact_async-dblp-48000-44100: CMP_TARGET = 3056.62
fate-swr-resample_exact_async-dblp-48000-44100: SIZE_TOLERANCE = 576000 - 20392
fate-swr-resample_exact_async-dblp-48000-8000: CMP_TARGET = 2592.00
fate-swr-resample_exact_async-dblp-48000-8000: SIZE_TOLERANCE = 576000 - 20304
fate-swr-resample_exact_async-dblp-48000-8000: CMP_TARGET = 3408.30
fate-swr-resample_exact_async-dblp-48000-8000: SIZE_TOLERANCE = 576000 - 20388
fate-swr-resample_exact_async-dblp-8000-44100: CMP_TARGET = 11187.24
fate-swr-resample_exact_async-dblp-8000-44100: SIZE_TOLERANCE = 96000 - 20344
fate-swr-resample_exact_async-dblp-8000-44100: CMP_TARGET = 10450.99
fate-swr-resample_exact_async-dblp-8000-44100: SIZE_TOLERANCE = 96000 - 20350
fate-swr-resample_exact_async-dblp-8000-48000: CMP_TARGET = 11326.80
fate-swr-resample_exact_async-dblp-8000-48000: SIZE_TOLERANCE = 96000 - 20344
fate-swr-resample_exact_async-dblp-8000-48000: CMP_TARGET = 10371.47
fate-swr-resample_exact_async-dblp-8000-48000: SIZE_TOLERANCE = 96000 - 20350
fate-swr-resample_exact_async-fltp-44100-48000: CMP_TARGET = 7791.50
fate-swr-resample_exact_async-fltp-44100-48000: SIZE_TOLERANCE = 529200 - 20300
fate-swr-resample_exact_async-fltp-44100-48000: CMP_TARGET = 5947.75
fate-swr-resample_exact_async-fltp-44100-48000: SIZE_TOLERANCE = 529200 - 20394
fate-swr-resample_exact_async-fltp-44100-8000: CMP_TARGET = 4022.87
fate-swr-resample_exact_async-fltp-44100-8000: SIZE_TOLERANCE = 529200 - 20310
fate-swr-resample_exact_async-fltp-44100-8000: CMP_TARGET = 3804.22
fate-swr-resample_exact_async-fltp-44100-8000: SIZE_TOLERANCE = 529200 - 20386
fate-swr-resample_exact_async-fltp-48000-44100: CMP_TARGET = 1923.97
fate-swr-resample_exact_async-fltp-48000-44100: SIZE_TOLERANCE = 576000 - 20298
fate-swr-resample_exact_async-fltp-48000-44100: CMP_TARGET = 3056.62
fate-swr-resample_exact_async-fltp-48000-44100: SIZE_TOLERANCE = 576000 - 20392
fate-swr-resample_exact_async-fltp-48000-8000: CMP_TARGET = 2592.00
fate-swr-resample_exact_async-fltp-48000-8000: SIZE_TOLERANCE = 576000 - 20304
fate-swr-resample_exact_async-fltp-48000-8000: CMP_TARGET = 3408.30
fate-swr-resample_exact_async-fltp-48000-8000: SIZE_TOLERANCE = 576000 - 20388
fate-swr-resample_exact_async-fltp-8000-44100: CMP_TARGET = 11187.24
fate-swr-resample_exact_async-fltp-8000-44100: SIZE_TOLERANCE = 96000 - 20344
fate-swr-resample_exact_async-fltp-8000-44100: CMP_TARGET = 10450.99
fate-swr-resample_exact_async-fltp-8000-44100: SIZE_TOLERANCE = 96000 - 20350
fate-swr-resample_exact_async-fltp-8000-48000: CMP_TARGET = 11326.80
fate-swr-resample_exact_async-fltp-8000-48000: SIZE_TOLERANCE = 96000 - 20344
fate-swr-resample_exact_async-fltp-8000-48000: CMP_TARGET = 10371.47
fate-swr-resample_exact_async-fltp-8000-48000: SIZE_TOLERANCE = 96000 - 20350
fate-swr-resample_exact_async-s16p-44100-48000: CMP_TARGET = 7791.50
fate-swr-resample_exact_async-s16p-44100-48000: SIZE_TOLERANCE = 529200 - 20300
fate-swr-resample_exact_async-s16p-44100-48000: CMP_TARGET = 5947.75
fate-swr-resample_exact_async-s16p-44100-48000: SIZE_TOLERANCE = 529200 - 20394
fate-swr-resample_exact_async-s16p-44100-8000: CMP_TARGET = 4023.05
fate-swr-resample_exact_async-s16p-44100-8000: SIZE_TOLERANCE = 529200 - 20310
fate-swr-resample_exact_async-s16p-44100-8000: CMP_TARGET = 3804.37
fate-swr-resample_exact_async-s16p-44100-8000: SIZE_TOLERANCE = 529200 - 20386
fate-swr-resample_exact_async-s16p-48000-44100: CMP_TARGET = 1923.96
fate-swr-resample_exact_async-s16p-48000-44100: SIZE_TOLERANCE = 576000 - 20298
fate-swr-resample_exact_async-s16p-48000-44100: CMP_TARGET = 3056.62
fate-swr-resample_exact_async-s16p-48000-44100: SIZE_TOLERANCE = 576000 - 20392
fate-swr-resample_exact_async-s16p-48000-8000: CMP_TARGET = 2592.15
fate-swr-resample_exact_async-s16p-48000-8000: SIZE_TOLERANCE = 576000 - 20304
fate-swr-resample_exact_async-s16p-48000-8000: CMP_TARGET = 3408.50
fate-swr-resample_exact_async-s16p-48000-8000: SIZE_TOLERANCE = 576000 - 20388
fate-swr-resample_exact_async-s16p-8000-44100: CMP_TARGET = 11187.58
fate-swr-resample_exact_async-s16p-8000-44100: SIZE_TOLERANCE = 96000 - 20344
fate-swr-resample_exact_async-s16p-8000-44100: CMP_TARGET = 10451.23
fate-swr-resample_exact_async-s16p-8000-44100: SIZE_TOLERANCE = 96000 - 20350
fate-swr-resample_exact_async-s16p-8000-48000: CMP_TARGET = 11327.48
fate-swr-resample_exact_async-s16p-8000-48000: SIZE_TOLERANCE = 96000 - 20344
fate-swr-resample_exact_async-s16p-8000-48000: CMP_TARGET = 10372.00
fate-swr-resample_exact_async-s16p-8000-48000: SIZE_TOLERANCE = 96000 - 20350
fate-swr-resample_exact_async-s32p-44100-48000: CMP_TARGET = 7791.50
fate-swr-resample_exact_async-s32p-44100-48000: SIZE_TOLERANCE = 529200 - 20300
fate-swr-resample_exact_async-s32p-44100-48000: CMP_TARGET = 5947.75
fate-swr-resample_exact_async-s32p-44100-48000: SIZE_TOLERANCE = 529200 - 20394
fate-swr-resample_exact_async-s32p-44100-8000: CMP_TARGET = 4022.87
fate-swr-resample_exact_async-s32p-44100-8000: SIZE_TOLERANCE = 529200 - 20310
fate-swr-resample_exact_async-s32p-44100-8000: CMP_TARGET = 3804.22
fate-swr-resample_exact_async-s32p-44100-8000: SIZE_TOLERANCE = 529200 - 20386
fate-swr-resample_exact_async-s32p-48000-44100: CMP_TARGET = 1923.96
fate-swr-resample_exact_async-s32p-48000-44100: SIZE_TOLERANCE = 576000 - 20298
fate-swr-resample_exact_async-s32p-48000-44100: CMP_TARGET = 3056.62
fate-swr-resample_exact_async-s32p-48000-44100: SIZE_TOLERANCE = 576000 - 20392
fate-swr-resample_exact_async-s32p-48000-8000: CMP_TARGET = 2592.00
fate-swr-resample_exact_async-s32p-48000-8000: SIZE_TOLERANCE = 576000 - 20304
fate-swr-resample_exact_async-s32p-48000-8000: CMP_TARGET = 3408.30
fate-swr-resample_exact_async-s32p-48000-8000: SIZE_TOLERANCE = 576000 - 20388
fate-swr-resample_exact_async-s32p-8000-44100: CMP_TARGET = 11187.24
fate-swr-resample_exact_async-s32p-8000-44100: SIZE_TOLERANCE = 96000 - 20344
fate-swr-resample_exact_async-s32p-8000-44100: CMP_TARGET = 10450.96
fate-swr-resample_exact_async-s32p-8000-44100: SIZE_TOLERANCE = 96000 - 20350
fate-swr-resample_exact_async-s32p-8000-48000: CMP_TARGET = 11326.79
fate-swr-resample_exact_async-s32p-8000-48000: SIZE_TOLERANCE = 96000 - 20344
fate-swr-resample_exact_async-s32p-8000-48000: CMP_TARGET = 10371.47
fate-swr-resample_exact_async-s32p-8000-48000: SIZE_TOLERANCE = 96000 - 20350
define ARESAMPLE_EXACT_LIN
FATE_SWR_RESAMPLE += fate-swr-resample_exact_lin-$(3)-$(1)-$(2)
@ -975,77 +975,77 @@ fate-swr-resample_exact_lin_async-$(3)-$(1)-$(2): FUZZ = 0.1
fate-swr-resample_exact_lin_async-$(3)-$(1)-$(2): REF = tests/data/asynth-$(1)-1.wav
endef
fate-swr-resample_exact_lin_async-dblp-44100-48000: CMP_TARGET = 7791.72
fate-swr-resample_exact_lin_async-dblp-44100-48000: SIZE_TOLERANCE = 529200 - 20300
fate-swr-resample_exact_lin_async-dblp-44100-48000: CMP_TARGET = 5948.03
fate-swr-resample_exact_lin_async-dblp-44100-48000: SIZE_TOLERANCE = 529200 - 20394
fate-swr-resample_exact_lin_async-dblp-44100-8000: CMP_TARGET = 4023.01
fate-swr-resample_exact_lin_async-dblp-44100-8000: SIZE_TOLERANCE = 529200 - 20310
fate-swr-resample_exact_lin_async-dblp-44100-8000: CMP_TARGET = 3804.55
fate-swr-resample_exact_lin_async-dblp-44100-8000: SIZE_TOLERANCE = 529200 - 20386
fate-swr-resample_exact_lin_async-dblp-48000-44100: CMP_TARGET = 1923.79
fate-swr-resample_exact_lin_async-dblp-48000-44100: SIZE_TOLERANCE = 576000 - 20298
fate-swr-resample_exact_lin_async-dblp-48000-44100: CMP_TARGET = 3056.76
fate-swr-resample_exact_lin_async-dblp-48000-44100: SIZE_TOLERANCE = 576000 - 20392
fate-swr-resample_exact_lin_async-dblp-48000-8000: CMP_TARGET = 2591.72
fate-swr-resample_exact_lin_async-dblp-48000-8000: SIZE_TOLERANCE = 576000 - 20304
fate-swr-resample_exact_lin_async-dblp-48000-8000: CMP_TARGET = 3408.48
fate-swr-resample_exact_lin_async-dblp-48000-8000: SIZE_TOLERANCE = 576000 - 20388
fate-swr-resample_exact_lin_async-dblp-8000-44100: CMP_TARGET = 11187.24
fate-swr-resample_exact_lin_async-dblp-8000-44100: SIZE_TOLERANCE = 96000 - 20344
fate-swr-resample_exact_lin_async-dblp-8000-44100: CMP_TARGET = 10451.07
fate-swr-resample_exact_lin_async-dblp-8000-44100: SIZE_TOLERANCE = 96000 - 20350
fate-swr-resample_exact_lin_async-dblp-8000-48000: CMP_TARGET = 11326.80
fate-swr-resample_exact_lin_async-dblp-8000-48000: SIZE_TOLERANCE = 96000 - 20344
fate-swr-resample_exact_lin_async-dblp-8000-48000: CMP_TARGET = 10371.52
fate-swr-resample_exact_lin_async-dblp-8000-48000: SIZE_TOLERANCE = 96000 - 20350
fate-swr-resample_exact_lin_async-fltp-44100-48000: CMP_TARGET = 7791.72
fate-swr-resample_exact_lin_async-fltp-44100-48000: SIZE_TOLERANCE = 529200 - 20300
fate-swr-resample_exact_lin_async-fltp-44100-48000: CMP_TARGET = 5948.03
fate-swr-resample_exact_lin_async-fltp-44100-48000: SIZE_TOLERANCE = 529200 - 20394
fate-swr-resample_exact_lin_async-fltp-44100-8000: CMP_TARGET = 4023.01
fate-swr-resample_exact_lin_async-fltp-44100-8000: SIZE_TOLERANCE = 529200 - 20310
fate-swr-resample_exact_lin_async-fltp-44100-8000: CMP_TARGET = 3804.55
fate-swr-resample_exact_lin_async-fltp-44100-8000: SIZE_TOLERANCE = 529200 - 20386
fate-swr-resample_exact_lin_async-fltp-48000-44100: CMP_TARGET = 1923.79
fate-swr-resample_exact_lin_async-fltp-48000-44100: SIZE_TOLERANCE = 576000 - 20298
fate-swr-resample_exact_lin_async-fltp-48000-44100: CMP_TARGET = 3056.76
fate-swr-resample_exact_lin_async-fltp-48000-44100: SIZE_TOLERANCE = 576000 - 20392
fate-swr-resample_exact_lin_async-fltp-48000-8000: CMP_TARGET = 2591.72
fate-swr-resample_exact_lin_async-fltp-48000-8000: SIZE_TOLERANCE = 576000 - 20304
fate-swr-resample_exact_lin_async-fltp-48000-8000: CMP_TARGET = 3408.48
fate-swr-resample_exact_lin_async-fltp-48000-8000: SIZE_TOLERANCE = 576000 - 20388
fate-swr-resample_exact_lin_async-fltp-8000-44100: CMP_TARGET = 11187.25
fate-swr-resample_exact_lin_async-fltp-8000-44100: SIZE_TOLERANCE = 96000 - 20344
fate-swr-resample_exact_lin_async-fltp-8000-44100: CMP_TARGET = 10451.07
fate-swr-resample_exact_lin_async-fltp-8000-44100: SIZE_TOLERANCE = 96000 - 20350
fate-swr-resample_exact_lin_async-fltp-8000-48000: CMP_TARGET = 11326.80
fate-swr-resample_exact_lin_async-fltp-8000-48000: SIZE_TOLERANCE = 96000 - 20344
fate-swr-resample_exact_lin_async-fltp-8000-48000: CMP_TARGET = 10371.52
fate-swr-resample_exact_lin_async-fltp-8000-48000: SIZE_TOLERANCE = 96000 - 20350
fate-swr-resample_exact_lin_async-s16p-44100-48000: CMP_TARGET = 7791.72
fate-swr-resample_exact_lin_async-s16p-44100-48000: SIZE_TOLERANCE = 529200 - 20300
fate-swr-resample_exact_lin_async-s16p-44100-48000: CMP_TARGET = 5948.03
fate-swr-resample_exact_lin_async-s16p-44100-48000: SIZE_TOLERANCE = 529200 - 20394
fate-swr-resample_exact_lin_async-s16p-44100-8000: CMP_TARGET = 4023.19
fate-swr-resample_exact_lin_async-s16p-44100-8000: SIZE_TOLERANCE = 529200 - 20310
fate-swr-resample_exact_lin_async-s16p-44100-8000: CMP_TARGET = 3804.70
fate-swr-resample_exact_lin_async-s16p-44100-8000: SIZE_TOLERANCE = 529200 - 20386
fate-swr-resample_exact_lin_async-s16p-48000-44100: CMP_TARGET = 1923.79
fate-swr-resample_exact_lin_async-s16p-48000-44100: SIZE_TOLERANCE = 576000 - 20298
fate-swr-resample_exact_lin_async-s16p-48000-44100: CMP_TARGET = 3056.76
fate-swr-resample_exact_lin_async-s16p-48000-44100: SIZE_TOLERANCE = 576000 - 20392
fate-swr-resample_exact_lin_async-s16p-48000-8000: CMP_TARGET = 2591.85
fate-swr-resample_exact_lin_async-s16p-48000-8000: SIZE_TOLERANCE = 576000 - 20304
fate-swr-resample_exact_lin_async-s16p-48000-8000: CMP_TARGET = 3408.68
fate-swr-resample_exact_lin_async-s16p-48000-8000: SIZE_TOLERANCE = 576000 - 20388
fate-swr-resample_exact_lin_async-s16p-8000-44100: CMP_TARGET = 11187.57
fate-swr-resample_exact_lin_async-s16p-8000-44100: SIZE_TOLERANCE = 96000 - 20344
fate-swr-resample_exact_lin_async-s16p-8000-44100: CMP_TARGET = 10451.31
fate-swr-resample_exact_lin_async-s16p-8000-44100: SIZE_TOLERANCE = 96000 - 20350
fate-swr-resample_exact_lin_async-s16p-8000-48000: CMP_TARGET = 11327.48
fate-swr-resample_exact_lin_async-s16p-8000-48000: SIZE_TOLERANCE = 96000 - 20344
fate-swr-resample_exact_lin_async-s16p-8000-48000: CMP_TARGET = 10372.05
fate-swr-resample_exact_lin_async-s16p-8000-48000: SIZE_TOLERANCE = 96000 - 20350
fate-swr-resample_exact_lin_async-s32p-44100-48000: CMP_TARGET = 7791.72
fate-swr-resample_exact_lin_async-s32p-44100-48000: SIZE_TOLERANCE = 529200 - 20300
fate-swr-resample_exact_lin_async-s32p-44100-48000: CMP_TARGET = 5948.03
fate-swr-resample_exact_lin_async-s32p-44100-48000: SIZE_TOLERANCE = 529200 - 20394
fate-swr-resample_exact_lin_async-s32p-44100-8000: CMP_TARGET = 4023.02
fate-swr-resample_exact_lin_async-s32p-44100-8000: SIZE_TOLERANCE = 529200 - 20310
fate-swr-resample_exact_lin_async-s32p-44100-8000: CMP_TARGET = 3804.54
fate-swr-resample_exact_lin_async-s32p-44100-8000: SIZE_TOLERANCE = 529200 - 20386
fate-swr-resample_exact_lin_async-s32p-48000-44100: CMP_TARGET = 1923.77
fate-swr-resample_exact_lin_async-s32p-48000-44100: SIZE_TOLERANCE = 576000 - 20298
fate-swr-resample_exact_lin_async-s32p-48000-44100: CMP_TARGET = 3056.76
fate-swr-resample_exact_lin_async-s32p-48000-44100: SIZE_TOLERANCE = 576000 - 20392
fate-swr-resample_exact_lin_async-s32p-48000-8000: CMP_TARGET = 2591.71
fate-swr-resample_exact_lin_async-s32p-48000-8000: SIZE_TOLERANCE = 576000 - 20304
fate-swr-resample_exact_lin_async-s32p-48000-8000: CMP_TARGET = 3408.47
fate-swr-resample_exact_lin_async-s32p-48000-8000: SIZE_TOLERANCE = 576000 - 20388
fate-swr-resample_exact_lin_async-s32p-8000-44100: CMP_TARGET = 11187.25
fate-swr-resample_exact_lin_async-s32p-8000-44100: SIZE_TOLERANCE = 96000 - 20344
fate-swr-resample_exact_lin_async-s32p-8000-44100: CMP_TARGET = 10451.04
fate-swr-resample_exact_lin_async-s32p-8000-44100: SIZE_TOLERANCE = 96000 - 20350
fate-swr-resample_exact_lin_async-s32p-8000-48000: CMP_TARGET = 11326.81
fate-swr-resample_exact_lin_async-s32p-8000-48000: SIZE_TOLERANCE = 96000 - 20344
fate-swr-resample_exact_lin_async-s32p-8000-48000: CMP_TARGET = 10371.53
fate-swr-resample_exact_lin_async-s32p-8000-48000: SIZE_TOLERANCE = 96000 - 20350
$(call CROSS_TEST,$(SAMPLERATES),ARESAMPLE,s16p,s16le,s16)
$(call CROSS_TEST,$(SAMPLERATES),ARESAMPLE,s32p,s32le,s16)

View File

@ -257,7 +257,7 @@ Evaluating 'root(sin(ld(0))+6+sin(ld(0)/12)-log(ld(0)), 100)'
'root(sin(ld(0))+6+sin(ld(0)/12)-log(ld(0)), 100)' -> 60.965601
Evaluating '7000000B*random(0)'
'7000000B*random(0)' -> 0.003078
'7000000B*random(0)' -> 12864914.486611
Evaluating 'squish(2)'
'squish(2)' -> 0.000335