From patchwork Sat Jan 13 03:51:06 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 45591 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:8199:b0:199:de12:6fa6 with SMTP id pd25csp257191pzb; Fri, 12 Jan 2024 19:51:20 -0800 (PST) X-Google-Smtp-Source: AGHT+IG4LyxpC5WLZ7on3ynrj0ToSvau79Kbuv5wxpyqbOECedXydxiUzwDq2On5hzlLo7UmCog6 X-Received: by 2002:a17:906:f841:b0:a2a:6ff5:b111 with SMTP id ks1-20020a170906f84100b00a2a6ff5b111mr1234561ejb.149.1705117880604; Fri, 12 Jan 2024 19:51:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1705117880; cv=none; d=google.com; s=arc-20160816; b=imHcDyaxkIVSsEtXhLdD7qz2hr6AuhnpYvDkZ4VkGQd893wr+iuoMKkinaFU/h709k 4L8sD+WxJbZOm3aQbpWKGW0aZN9+ZfYnlKHyWtfuLku6k8FgmwlRVyv9cgxlWEGgAFww ktdRKIRsGYwX+0MWfIkeLgrTnMuZlg5bFNHTL2lZw6KB5AsVMwaVZpcohOd235CpaY3C mjPs5K2gokYOcXBMn1vZCUjMk8Af47SPqpgdm3X2NygruOzHWDDKb8N6T1ykVEAPw2qd +Kx/eTTJRNh9IQaX0tsUIVCq5xuWUTo0VmzvqtHACLxMYt2F1eqTV7uVDLGG2hBozb/q k1RQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to; bh=pZ23FEUMTASiv5LTvOc5wcEludxSfCdP6tV37VQiqrc=; fh=e5zN9xSzcxLA6bGo3lF+CqTbY/oLwzApV03EO/RBfgQ=; b=Yk3ad4fO0ZlqV8t4Yz0kSsrw3KbhSXP0yKw0opeIPmeoFYh80nb/DkmQYbqBNxn6QQ xlAnRlpxUf/+cgkJGVd84YeP6FxmVsp2mB2+7M/R5ZcMokADiTJNQ2uCvOdQM5sJh8db Ft89o4/A0dWWUJXnEHUV0KMNa55LkGZNOXnH4NRL27kwrFmQaGmZXVA0L0BLUHKnleVS HuCvyF0Kux4xKYPM6gZzNp1PtMVhqNAqG+SdX5dcgTZW1tcsbClb3FAU8+DVqYWsH8mf T4GhGlwXWQYsgiJPyiFg7Fwd29Y+7HqQOEDa+H+G5Mka321F+nx4hrx2D967QQK0VYvS qHxQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@niedermayer.cc header.s=gm1 header.b=f7wl9JdK; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id x17-20020a170906711100b00a2ccecadc1asi901307ejj.33.2024.01.12.19.51.19; Fri, 12 Jan 2024 19:51:20 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@niedermayer.cc header.s=gm1 header.b=f7wl9JdK; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0B50968CED1; Sat, 13 Jan 2024 05:51:15 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net [217.70.183.201]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2D37F68CD4B for ; Sat, 13 Jan 2024 05:51:08 +0200 (EET) Received: by mail.gandi.net (Postfix) with ESMTPSA id 405711BF203 for ; Sat, 13 Jan 2024 03:51:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=niedermayer.cc; s=gm1; t=1705117867; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc; bh=VirzTRq2abZ1M4YZXge4gU2W9L/AMSqAuZob1K3Yfww=; b=f7wl9JdKEqGKkuxqsPYC97aMsJTT4LOrxF9Rw9HSu6XwME8eN1mFQKQWJCXJRST5w5Z2Ci B8znjcnoL9DzSMGVO+RExgFSUAHiNNq/7pauTnkm46Ggb3kYPfywk40nC0D/ENKFNUbTlZ VplZJCABme5WYod3K3j/jh6UMZ1g+toKTpAu+asWrj4ONPgPuIFuGJGJoxY/qoWHMEGgo+ fysbRXQH0OeEJXunkFKfuv1Kbk1YZmmmk8JvHzGis0bYFVHGEbnVuSViyLyxoT0cSbYA+v tTo3cPoK0Exn/f0A3a3M4JHVFgQodc1gwRKGuniLH55euXjOswflIumffJj3EQ== From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Sat, 13 Jan 2024 04:51:06 +0100 Message-Id: <20240113035106.26365-1-michael@niedermayer.cc> X-Mailer: git-send-email 2.17.1 X-GND-Sasl: michael@niedermayer.cc Subject: [FFmpeg-devel] [PATCH] avutil/eval: Use even better PRNG X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: KLhGbIMlXh8j 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 --- libavutil/eval.c | 24 +++- libavutil/sfc64.h | 85 ++++++++++++++ tests/fate/libswresample.mak | 208 +++++++++++++++++------------------ tests/ref/fate/eval | 2 +- 4 files changed, 210 insertions(+), 109 deletions(-) create mode 100644 libavutil/sfc64.h diff --git a/libavutil/eval.c b/libavutil/eval.c index dc6b3697bc2..349015d4fa3 100644 --- a/libavutil/eval.c +++ b/libavutil/eval.c @@ -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; diff --git a/libavutil/sfc64.h b/libavutil/sfc64.h new file mode 100644 index 00000000000..05f1e84cc68 --- /dev/null +++ b/libavutil/sfc64.h @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2024 Michael Niedermayer + * + * 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 + * + * 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. + * + */ + +/** + * @file + * simple Pseudo Random Number Generator + * + */ + +#ifndef AVUTIL_SFC64_H +#define AVUTIL_SFC64_H + +#include + +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; +} + +/** + * returns the previous random value, and steps the generator backward. + * + * Its 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 diff --git a/tests/fate/libswresample.mak b/tests/fate/libswresample.mak index 0d29f760248..2fc55ea61af 100644 --- a/tests/fate/libswresample.mak +++ b/tests/fate/libswresample.mak @@ -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) diff --git a/tests/ref/fate/eval b/tests/ref/fate/eval index 5b4d93f4274..441f9846c46 100644 --- a/tests/ref/fate/eval +++ b/tests/ref/fate/eval @@ -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