From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 9E42A48A54 for ; Thu, 28 Dec 2023 11:01:39 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A0BEB68CBF5; Thu, 28 Dec 2023 13:01:35 +0200 (EET) Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04olkn2041.outbound.protection.outlook.com [40.92.75.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8583068CBB5 for ; Thu, 28 Dec 2023 13:01:29 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kg8+cS97vdXWwzqJ1Vzg6DCTuQorb15c00piWKwoPdRcVxSuCqvFbI+dXO2hS/lfXyj2Aa9ReVK9wMJuO8pCzOHhzAX3y9F1TatnZXYlXe0T6qGCxrjBQ0hbB49IXi2C/b8Qod4SHYgM4mZ6Y8hFI5CMn478jkHgB76O8ncVtP5bJG0ydyuBlJ7Zx0G0/Ig7nMltcIPYf9nGEmyvpl7x3lbZ2F5xMS3/FBvTdiJMu7ZYHCmTPtn38KrzX4ThCsStwRY2WA7NheugwCOkPc3lGW0i8Q8JRqeAHO9iF1eFC2AJTQoPyqrsxf2aYkB219J+8FnzRthqFW/ojNNKMg6tRQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=tNE2nKCtzslhcc92HOlMdiwmg9zI4EbfqUFbMbdFh8U=; b=WzE+Nq/UAXNnxYZ1Qmke5v2yrnlWwOUfgAl2t5hQ0VcrH4CE892rZyPNe5fl7c9v6IipPXjIf1E9LK01n9O9fwqRRwDIq21UGhmEQy4HboKOtYnCPZTDOYNRafs+r6z0wI1T6mBestT1oixPiwGrwSi5Qnuc6RTuhSQgC3z5QHJP7dW6YifANAtkdbQNdPgtBNvvx/xLHjbwfjgre05iXqmfi6m8eIe0uHnBuG3OjVP9b3RWaltkyPBw+rpg0I7Q77/ZEiTYtAIdsXR1q+EyNrPmJHqi6SY//5h6TITc3NC0izQTAN5WGP5wIBGmVAoXzOZ3uTpndduMeQiDmeMnzg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tNE2nKCtzslhcc92HOlMdiwmg9zI4EbfqUFbMbdFh8U=; b=O1zRphVccA2GbW+/IxY3D/AuNkFTpTraH2c2+QuksEA2lOzMzSmCXDnbiFmfu4Lv3eqiZMrX+Qm9iSarVbhbFjyvpoHjaU41g04p5kbyVYfpAreXnu6zjm3W6Ds4DOjUmsEpGSJAMYI4db87EisUtYCzJeAwYRQXgPB+UYsWXGq+NA4nhPp+rZsMsXs5hmGAvlK+iPsYDUnNjXNi8+i+d5iRvINvMXS9zOrz4f+t0sil194o/dAYA9UZ8V975xyM0aIUseZAq+MbIpFWwwhrWf+BULRiKPEeaIm9CtDIO3hyTH7f12518IPpSAG48p/pjXqwuvq06PhbsR2lHWpqWQ== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by AM8P250MB0183.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:326::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7135.20; Thu, 28 Dec 2023 11:01:27 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::65aa:deb0:a18e:d48d]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::65aa:deb0:a18e:d48d%5]) with mapi id 15.20.7113.028; Thu, 28 Dec 2023 11:01:27 +0000 Message-ID: Date: Thu, 28 Dec 2023 12:02:59 +0100 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: <20231228003839.860894-1-stefasab@gmail.com> Content-Language: en-US From: Andreas Rheinhardt In-Reply-To: <20231228003839.860894-1-stefasab@gmail.com> X-TMN: [/exIs2X4EKf3B6lpPwIfhqi5g6XhN0sOiYX4/aPZ35k=] X-ClientProxiedBy: ZR2P278CA0015.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:50::19) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <4eb514aa-24a9-42e9-b971-3411c261924d@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|AM8P250MB0183:EE_ X-MS-Office365-Filtering-Correlation-Id: d0771799-3570-46f7-8fdd-08dc07945693 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 6zFD5OsZz0du+XyNR7eH5Rikt1DuOK9RAbEWIAIT7WKwq7ur9AqEORtyGZOJmIh612kRPyf2vV+sMjHKMWBxvjnzRyUvBiI78EKeq0UeA1LPFR2/cLdCBrbcKgx5LbaUXItZ9qVyy6VbQ+XO7eDGnzZXh+zyuUOnlWL0zme5St8Mdrqfjh0SP3bRTbq3FIaFEg7RCLcykgu4mWzbsnT+TrT7fCdnEK2hoK757OOdfVUUevQ0sHtio7AnJa4HVS2cLk9JqFi1cCUxAEfeEZHsRaAF32jdi6tdUKBrFvXwAI8Fdu44UWxeLytp0C9QxU5mpHPEBJoIIT6XpPjZOHXqHAjt51QEolyTLG/jZNjcrC3TF+8PKFBv1t525i4K/LM+CA4kMFw/gdKID3Fw/M7doJgeYl4Dd00vZB3rNcREaP8KofEV4d7cn1T2etIUZ85YSKR7GuFa/V6/QH9n6bRfqx+7fQEpJY6Fx5yzMlUW+4dSiz+J0uuHoggbdQuQo68nR4OtVt2Mbmb+i3j4loGisdtPCFIavhsZ8Ta1bWBaHzUgGZ5l6udXEml0hy76FbP6 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZVl5Z2JJc0NSQ2dkMnZQczNhZXViSG5JUU5NeHZLUFkycVVEdC93ZjBJRzRJ?= =?utf-8?B?Y0pzWExPYmJRR3JhdmVRanBXTGNUUmVHYjlBb2hKblc3VHRNL09mYy9DU1V5?= =?utf-8?B?OFpYMTFSR2Z3bEhaUXlhZ2gxMWxBcE1ncEUwakVrZTJnWnRNLzRjejlxZWNV?= =?utf-8?B?Z1NrNEY2WU5VcGxmY05RbmtscGtVZzNNbjFDSktqTjMyNGh6RWpITnM1cStX?= =?utf-8?B?MlAwL1YwTUpoNFRFQTJuS0JHRytXSitBVFZTQjdhUWsvSlZzb3BmN1BWdGh1?= =?utf-8?B?MWg1Z0NHTkI4dHd4dVV2WldZYXpwdVlYMVIzdnF0akVxYTNxTkNKNFpQQXNB?= =?utf-8?B?eXpXb1J6VVdCaXBkbVMzd3Q1L1FlTjNuanhUR0wxMFo4Zlo1Sy95RU4vaXZ1?= =?utf-8?B?QllNK0lUZmlCT1hoM1dLZUs0NUxHSnlFWEZFV3lzTHRHWlpoK0ZJc1pmV0dJ?= =?utf-8?B?RHdGaFZoeS9VOXFFMDU4ZWhtcTZ1N1FnL0Mva1JMUHgrQUZVQ3Q3MHNZNmpX?= =?utf-8?B?eFVjZVVoSWErcHdMSmxXcWJOMUJRN2t4cEVqOGUwdUFMZFZEMld1cmNBWFZC?= =?utf-8?B?dHRxY1YxbXM5bmtadGZhZWNTcFA5bjlQeCtNbGpLK2dvbHY2KzFLN3VyaDJm?= =?utf-8?B?eWJJd2xMbzd6QXdkK2NPZ0FzcGRVVFZzUlZzUFBKOFVvY24rMlNoUnpHcG56?= =?utf-8?B?TUp4bGdIQlM3ZU1HMkdPMEFWbmptTEtKUklXdmNkYjlzL0krZTZGRWRVeDcr?= =?utf-8?B?eXV3dkJuMHE5QUxTTWhHT1RkczIzWGVid29pcGdhL29XdEFvaUQ0Tk5nYkpw?= =?utf-8?B?TE50TmdzY0xSQWtqdVNxYXRLaStyZDlWVDlPY0hZS3l6bUFUL3hRZjJUb3dl?= =?utf-8?B?RmZHUGJRWStIdlpldk0vRk83ZWl0VXRmSkxYdXcvZlVtb1BGQjhFMk9TVUxM?= =?utf-8?B?UHNaNXp5azh3STd3b1ZzbzNTRlFKOWdlYzFJSmZnWFFweXc2VTJteFRYQVFy?= =?utf-8?B?Z2gxTXd3eUxDOUx5WTh0QVZHU3IxTTFGTlhOREtHK2J0d24rU1p2WUwyRWxS?= =?utf-8?B?am5qZkxzU1NhR2drTG9lWFJOT1ZaNGhUM0pDOENuVFN1eXRvTzV1eEVzOElG?= =?utf-8?B?MTFLZHU1SEVzRVdudGV3UE5VOGExamlteFFLY2xnazk3VXlETFBKOStZRWVx?= =?utf-8?B?Mkk2YnZYL3JnMWdnd3FXV29oMVBTalE0U0V4N1NuY0xjQmtqK3R5cHFTR0lo?= =?utf-8?B?eXJTdGc2U1RjQXZrWHFBTUtVNWtpMDIwTURLMTFSTU1nWDBKNnNPeGczUUU5?= =?utf-8?B?Yk1LL2p1QU9TZ3gxejA2ODlLL21UQUxOaGFSdE5jK2RTc2VBWkNHaWk1QWZC?= =?utf-8?B?UHpmRmZtdUtxaldUNFRkM2x0STQxdjk4UmFCZHZEam1mWjFCS1krL09EZy95?= =?utf-8?B?bkhyOVBaNGVxVS9PQkpsTmhJYlVvczdvaFpkWlB5c3p1QjdCaE1QQWs4RVZh?= =?utf-8?B?em42M3lMTStXNFFLYm5LMDRFVUtZM0lzdWdCdEFBVmMwSldHR3FjRUpMTXha?= =?utf-8?B?MjJYc0g0YkV0c2FTLysrMkRUYkxyWHpXcllaYUZZUkJUS21YaWFvbnNnRXV5?= =?utf-8?B?clJwcDdPeEVNdHdQY3dKdFFPVUxKZkZFb1JDTkVEdk1DcHd6UHI2OGg1Nkgz?= =?utf-8?Q?vsmB8hT8ieFGI9B+xMyd?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d0771799-3570-46f7-8fdd-08dc07945693 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Dec 2023 11:01:27.2018 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8P250MB0183 Subject: Re: [FFmpeg-devel] [PATCH 2/2] lavfi/setpts: introduce rand() function in expression 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Stefano Sabatini: > This is useful to simulate random jitter. > --- > Changelog | 1 + > doc/filters.texi | 10 +++++++++- > libavfilter/setpts.c | 39 +++++++++++++++++++++++++++++++++------ > 3 files changed, 43 insertions(+), 7 deletions(-) > > diff --git a/Changelog b/Changelog > index 424bfc11af..ed01c53264 100644 > --- a/Changelog > +++ b/Changelog > @@ -15,6 +15,7 @@ version : > - tiltandshift filter > - qrencode filter and qrencodesrc source > - quirc filter > +- lavfi/setpts: introduce rand() function in expression > > version 6.1: > - libaribcaption decoder > diff --git a/doc/filters.texi b/doc/filters.texi > index d1f95b9781..1d9a5d6c7d 100644 > --- a/doc/filters.texi > +++ b/doc/filters.texi > @@ -30946,7 +30946,7 @@ The expression which is evaluated for each frame to construct its timestamp. > @end table > > The expression is evaluated through the eval API and can contain the following > -constants: > +constants and functions: > > @table @option > @item FRAME_RATE, FR > @@ -31010,6 +31010,8 @@ The timebase of the input timestamps. > @item T_CHANGE > Time of the first frame after command was applied or time of the first frame if no commands. > > +@item rand(min, max) > +a random number included between min and max > @end table > > @subsection Examples > @@ -31021,6 +31023,12 @@ Start counting PTS from zero > setpts=PTS-STARTPTS > @end example > > +@item > +Apply a random jitter effect of +/-100 TB units: > +@example > +setpts=PTS+100rand(-100\,100) > +@end example > + > @item > Apply fast motion effect: > @example > diff --git a/libavfilter/setpts.c b/libavfilter/setpts.c > index 88a8d6af86..0f24a900b3 100644 > --- a/libavfilter/setpts.c > +++ b/libavfilter/setpts.c > @@ -32,6 +32,8 @@ > #include "libavutil/internal.h" > #include "libavutil/mathematics.h" > #include "libavutil/opt.h" > +#include "libavutil/lfg.h" > +#include "libavutil/random_seed.h" > #include "libavutil/time.h" > #include "audio.h" > #include "avfilter.h" > @@ -101,18 +103,39 @@ typedef struct SetPTSContext { > AVExpr *expr; > double var_values[VAR_VARS_NB]; > enum AVMediaType type; > + AVLFG lfg; > } SetPTSContext; > > #define V(name_) \ > setpts->var_values[VAR_##name_] > > +static double drand(void *ctx, double min, double max) > +{ > + SetPTSContext *setpts = ((AVFilterContext *)ctx)->priv; > + > + return min + (max-min) / UINT_MAX * av_lfg_get(&setpts->lfg); > +} > + > +typedef double (*eval_func2)(void *, double a, double b); > + > +static const eval_func2 fun2[] = { > + drand, > + NULL > +}; > + > +static const char *const fun2_names[] = { > + "rand" > +}; > + > static av_cold int init(AVFilterContext *ctx) > { > SetPTSContext *setpts = ctx->priv; > int ret; > > + av_lfg_init(&setpts->lfg, av_get_random_seed()); > + > if ((ret = av_expr_parse(&setpts->expr, setpts->expr_str, > - var_names, NULL, NULL, NULL, NULL, 0, ctx)) < 0) { > + var_names, NULL, NULL, fun2_names, fun2, 0, ctx)) < 0) { > av_log(ctx, AV_LOG_ERROR, "Error while parsing expression '%s'\n", setpts->expr_str); > return ret; > } > @@ -126,6 +149,7 @@ static av_cold int init(AVFilterContext *ctx) > V(STARTPTS) = NAN; > V(STARTT) = NAN; > V(T_CHANGE) = NAN; > + > return 0; > } > > @@ -159,8 +183,10 @@ static inline char *double2int64str(char *buf, double v) > return buf; > } > > -static double eval_pts(SetPTSContext *setpts, AVFilterLink *inlink, AVFrame *frame, int64_t pts) > +static double eval_pts(AVFilterContext *ctx, AVFilterLink *inlink, AVFrame *frame, int64_t pts) > { > + SetPTSContext *setpts = ctx->priv; > + > if (isnan(V(STARTPTS))) { > V(STARTPTS) = TS2D(pts); > V(STARTT ) = TS2T(pts, inlink->time_base); > @@ -186,17 +212,18 @@ FF_ENABLE_DEPRECATION_WARNINGS > } > } > > - return av_expr_eval(setpts->expr, setpts->var_values, NULL); > + return av_expr_eval(setpts->expr, setpts->var_values, ctx); > } > #define d2istr(v) double2int64str((char[BUF_SIZE]){0}, v) > > static int filter_frame(AVFilterLink *inlink, AVFrame *frame) > { > - SetPTSContext *setpts = inlink->dst->priv; > + AVFilterContext *ctx = inlink->dst; > + SetPTSContext *setpts = ctx->priv; > int64_t in_pts = frame->pts; > double d; > > - d = eval_pts(setpts, inlink, frame, frame->pts); > + d = eval_pts(ctx, inlink, frame, frame->pts); > frame->pts = D2TS(d); > > av_log(inlink->dst, AV_LOG_TRACE, > @@ -250,7 +277,7 @@ static int activate(AVFilterContext *ctx) > return filter_frame(inlink, in); > > if (ff_inlink_acknowledge_status(inlink, &status, &pts)) { > - double d = eval_pts(setpts, inlink, NULL, pts); > + double d = eval_pts(ctx, inlink, NULL, pts); > > av_log(ctx, AV_LOG_TRACE, "N:EOF PTS:%s T:%f -> PTS:%s T:%f\n", > d2istr(V(PTS)), V(T), d2istr(d), TS2T(d, inlink->time_base)); Why is this added here and not in lavu/eval so that it is available with all expressions? - Andreas _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".