From patchwork Tue May 2 13:43:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41449 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp4002196pzb; Tue, 2 May 2023 06:44:18 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7PhcRlkZ6rv3XJfrU9EtKeoc8OxcIb5qGiQsziZc18mv62H7XzQ5vBpJHdpcC9bME2xQzl X-Received: by 2002:a17:907:8687:b0:94a:5819:5a2b with SMTP id qa7-20020a170907868700b0094a58195a2bmr15933171ejc.33.1683035058477; Tue, 02 May 2023 06:44:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683035058; cv=none; d=google.com; s=arc-20160816; b=rlplGQ6DU8OzHEm7PytaEAWBhT0ibovAERJS1+knWVZfZ/Uv30viUK4uj9uIrxT6sP Dt2Xr/HypXWqqiXNe4gyqbnzS4Rs+iv3vHgFE3Q4oiU2rRqBIt8333ye2ghpKU1iw6BL 5jgJUgPizKkQVTPFT3be60KfVK6QnFEcS5C+8HGLeMlSfCEUlSmrD5oLNnpOKOp79n9e EoIlrHWF4AFfT/xblUbOWGC7sEmjhFZ/iOv1ZRiM09not+dQ6lsrP2sdBR6V96kz71kV Y/dYIqAIJzo5KaTCHTC81mNbAE+3Hi9ntL+v1qL/PwbiR2cmQTz0hgm4Wm6xDQHFTAn9 DXAg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:message-id:date:to:from :delivered-to; bh=d4Z5l9SCcrB8GXnDCQGGEdczpyhvZNj1szbtVvxy0cE=; b=Cgrs+JnhbzakxB68stj0mTiDKEfGhYKG0eWQ7oFJOOP7euaj13n0tS6ltgq8KVcXQh 0W6iKfFNZbynNwWOmJm3KE+piCaUzCMpa6XUKbCqHBFMf+d+EZZSNXSONkDvdbliFoJz SfHBnfacGvPz3iykqawfFLKcE9UM2HOyBnk/BXoj2/y2hNbPEm5tzZdnaatZ/VikuByA tWRfNN/LZHDJTuxiUgAhPZHz7iyb0q+z5f0T+z1QBR4Ej7jO7OphodFhNY4HgX3OHWzA mJl7DpKOcUwD5qzbSxe0Ogmu+/V039pveXPo0ACqqN8q/r8TGwoUdn72R3NKXIMGyWRv iKWg== ARC-Authentication-Results: i=1; mx.google.com; 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 v16-20020a17090610d000b0094f282eaf17si21667440ejv.707.2023.05.02.06.44.18; Tue, 02 May 2023 06:44:18 -0700 (PDT) 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; 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 246AE68C163; Tue, 2 May 2023 16:44:06 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 24AE568C11E for ; Tue, 2 May 2023 16:43:59 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id E42DB2404F5; Tue, 2 May 2023 15:43:58 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id cIO5oIZIltyQ; Tue, 2 May 2023 15:43:58 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id 61CB62404EC; Tue, 2 May 2023 15:43:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id F00F83A02A7; Tue, 2 May 2023 15:43:56 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Tue, 2 May 2023 15:43:13 +0200 Message-Id: <20230502134316.10496-1-anton@khirnov.net> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/4] fftools/ffmpeg: add ability to set a input burst time before readrate is enforced 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 Cc: ddurham@davyandbeth.com Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 2RlSkkxbWa5P From: Davy Durham Signed-off-by: Anton Khirnov --- Picking up this patch because it interacts with my ongoing work on ffmpeg CLI. Applied my review comments, including renaming the option to -readrate_initial_burst. CCing the original author, please let me know if you'd prefer to handle this patch yourself. --- Changelog | 1 + doc/ffmpeg.texi | 3 +++ fftools/ffmpeg.h | 1 + fftools/ffmpeg_demux.c | 18 +++++++++++++++++- fftools/ffmpeg_opt.c | 3 +++ 5 files changed, 25 insertions(+), 1 deletion(-) diff --git a/Changelog b/Changelog index 4901ef6ad7..2061aaf462 100644 --- a/Changelog +++ b/Changelog @@ -7,6 +7,7 @@ version : - Extend VAAPI support for libva-win32 on Windows - afireqsrc audio source filter - arls filter +- ffmpeg CLI new option: -readrate_initial_burst version 6.0: - Radiance HDR image support diff --git a/doc/ffmpeg.texi b/doc/ffmpeg.texi index 0fea0bacb1..a12700e2f3 100644 --- a/doc/ffmpeg.texi +++ b/doc/ffmpeg.texi @@ -1708,6 +1708,9 @@ it may cause packet loss. It is useful for when flow speed of output packets is important, such as live streaming. @item -re (@emph{input}) Read input at native frame rate. This is equivalent to setting @code{-readrate 1}. +@item -readrate_initial_burst @var{seconds} +Set an initial read burst time, in seconds, after which @option{-re/-readrate} +will be enforced. @item -vsync @var{parameter} (@emph{global}) @itemx -fps_mode[:@var{stream_specifier}] @var{parameter} (@emph{output,per-stream}) Set video sync method / framerate mode. vsync is applied to all output video streams diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index b6389d7f99..a03a6b0302 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -126,6 +126,7 @@ typedef struct OptionsContext { int loop; int rate_emu; float readrate; + double readrate_initial_burst; int accurate_seek; int thread_queue_size; int input_sync_ref; diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index 26426c7ac1..37d7649da9 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -81,6 +81,8 @@ typedef struct Demuxer { /* number of streams that the user was warned of */ int nb_streams_warn; + double readrate_initial_burst; + AVThreadMessageQueue *in_thread_queue; int thread_queue_size; pthread_t thread; @@ -455,6 +457,7 @@ int ifile_get_packet(InputFile *f, AVPacket **pkt) (f->start_time != AV_NOPTS_VALUE ? f->start_time : 0) ); float scale = f->rate_emu ? 1.0 : f->readrate; + int64_t burst_until = AV_TIME_BASE * d->readrate_initial_burst; for (i = 0; i < f->nb_streams; i++) { InputStream *ist = f->streams[i]; int64_t stream_ts_offset, pts, now; @@ -462,7 +465,7 @@ int ifile_get_packet(InputFile *f, AVPacket **pkt) stream_ts_offset = FFMAX(ist->first_dts != AV_NOPTS_VALUE ? ist->first_dts : 0, file_start); pts = av_rescale(ist->dts, 1000000, AV_TIME_BASE); now = (av_gettime_relative() - ist->start) * scale + stream_ts_offset; - if (pts > now) + if (pts - burst_until > now) return AVERROR(EAGAIN); } } @@ -1236,6 +1239,19 @@ int ifile_open(const OptionsContext *o, const char *filename) f->rate_emu = 0; } + if (f->readrate || f->rate_emu) { + d->readrate_initial_burst = o->readrate_initial_burst ? o->readrate_initial_burst : 0.0; + if (d->readrate_initial_burst < 0.0) { + av_log(d, AV_LOG_ERROR, + "Option -readrate_initial_burst is %0.3f; it must be non-negative.\n", + d->readrate_initial_burst); + exit_program(1); + } + } else if (o->readrate_initial_burst) { + av_log(d, AV_LOG_WARNING, "Option -readrate_initial_burst ignored " + "since neither -readrate nor -re were given\n"); + } + d->thread_queue_size = o->thread_queue_size; /* update the current parameters so that they match the one of the input stream */ diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c index cf385c388e..7f22b22604 100644 --- a/fftools/ffmpeg_opt.c +++ b/fftools/ffmpeg_opt.c @@ -1454,6 +1454,9 @@ const OptionDef options[] = { { "readrate", HAS_ARG | OPT_FLOAT | OPT_OFFSET | OPT_EXPERT | OPT_INPUT, { .off = OFFSET(readrate) }, "read input at specified rate", "speed" }, + { "readrate_initial_burst", HAS_ARG | OPT_DOUBLE | OPT_OFFSET | + OPT_EXPERT | OPT_INPUT, { .off = OFFSET(readrate_initial_burst) }, + "The initial amount of input to burst read before imposing any readrate", "seconds" }, { "target", HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_target }, "specify target file type (\"vcd\", \"svcd\", \"dvd\", \"dv\" or \"dv50\" " "with optional prefixes \"pal-\", \"ntsc-\" or \"film-\")", "type" }, From patchwork Tue May 2 13:43:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41451 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp4002403pzb; Tue, 2 May 2023 06:44:38 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ59mW4JWsS+VYfk4C6ZotnTjRYZq8gQDLHekHtEJxQ/IFDzVFq5SCsEJxYunMqFGrMMd46Y X-Received: by 2002:a17:907:6e8c:b0:953:291a:6705 with SMTP id sh12-20020a1709076e8c00b00953291a6705mr7441ejc.17.1683035077946; Tue, 02 May 2023 06:44:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683035077; cv=none; d=google.com; s=arc-20160816; b=IxvWquF1zzYTbwj4vEurIOLDk+36b3PCn0NeV4pji6fHJ5DyFwepJVcmadtFl0lilF AnnAbWYNYkojb/GmgzpK60+c6nU+duYHlxBh2MsxmI8rLljjUbawYIc3bk8E8r02GuTW ZV9a0r33rtlCAvxvzIWVtG/edAwZNI26uOqXC0NA+9fbgGdxgxICxv23+v9GE4Xcn3vI ofvRw5KE/MpD01ALDDOncb6iv2QcuURL+KM1Aea3OxiaP7R0laZBaPH1utifN+LW7xCu ld+yRVuTj1oX5j6pvfSR6wsgmPNo/2zq6qEQHErZbIIJHLVXlyVqRSgRs7W7qSF9idx0 zwMg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:delivered-to; bh=USyMrVIVJhOYuSl5XAczX7516MrSQRL/nOyfZoEJsuI=; b=rttDviNOK6EeoNkakPKOHeMyzO849kYXnD+aFCzogHDu8m1OGFBA52sTo5/1H6DeVt vnX3ZC9f0xKmsUTqk617rDNHovCHB7e/uUOOw8L1unkSUkZICRQe2NDFOb6htaYie2Cs 0CXnKFld6k/HXJn8w/b0FXMrw0FlT+9l7BBssxAJAC3Uz5nvpTUk5WRo31bjJuDyCR59 VsA4YYGgiyhRp3HjIjUTQRuWfP1DwKmCFEynvabtuDAg4cO99EEZlPRqwugH8SOceIzT B3bmzKcJ2WyIH3r6NRDtHEgOMUwjhr7/ump2DhFd7VyKJyWGtoXuK6LnDB36TA95uW7v 0nuw== ARC-Authentication-Results: i=1; mx.google.com; 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 a6-20020a17090680c600b009538667be57si23064865ejx.130.2023.05.02.06.44.37; Tue, 02 May 2023 06:44:37 -0700 (PDT) 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; 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 288BA68C16F; Tue, 2 May 2023 16:44:08 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E97DB68C15C for ; Tue, 2 May 2023 16:43:59 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id A88F12404EE; Tue, 2 May 2023 15:43:59 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id pkW-jOHbSKpE; Tue, 2 May 2023 15:43:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id 4A72A240177; Tue, 2 May 2023 15:43:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 08CE43A048F; Tue, 2 May 2023 15:43:57 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Tue, 2 May 2023 15:43:14 +0200 Message-Id: <20230502134316.10496-2-anton@khirnov.net> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230502134316.10496-1-anton@khirnov.net> References: <20230502134316.10496-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/4] fftools/ffmpeg: use a non-zero default for -readrate_initial_burst 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 Cc: ddurham@davyandbeth.com Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: sU3f0gcKzVph Use it to replace a hack added in 6f206852289. --- fftools/ffmpeg_demux.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index 37d7649da9..e6f700f6c3 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -461,7 +461,7 @@ int ifile_get_packet(InputFile *f, AVPacket **pkt) for (i = 0; i < f->nb_streams; i++) { InputStream *ist = f->streams[i]; int64_t stream_ts_offset, pts, now; - if (!ist->nb_packets || (ist->decoding_needed && !ist->got_output)) continue; + if (!ist->nb_packets) continue; stream_ts_offset = FFMAX(ist->first_dts != AV_NOPTS_VALUE ? ist->first_dts : 0, file_start); pts = av_rescale(ist->dts, 1000000, AV_TIME_BASE); now = (av_gettime_relative() - ist->start) * scale + stream_ts_offset; @@ -1240,7 +1240,7 @@ int ifile_open(const OptionsContext *o, const char *filename) } if (f->readrate || f->rate_emu) { - d->readrate_initial_burst = o->readrate_initial_burst ? o->readrate_initial_burst : 0.0; + d->readrate_initial_burst = o->readrate_initial_burst ? o->readrate_initial_burst : 0.5; if (d->readrate_initial_burst < 0.0) { av_log(d, AV_LOG_ERROR, "Option -readrate_initial_burst is %0.3f; it must be non-negative.\n", From patchwork Tue May 2 13:43:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41450 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp4002296pzb; Tue, 2 May 2023 06:44:30 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ431JSe60RAh9RLZv8bQFlGV2MIC9x1DlTNO7sjex5MsSTGPOHJae7adjlIFKx94weBNA3W X-Received: by 2002:a17:906:7308:b0:94f:1a23:2f1d with SMTP id di8-20020a170906730800b0094f1a232f1dmr17526949ejc.64.1683035069740; Tue, 02 May 2023 06:44:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683035069; cv=none; d=google.com; s=arc-20160816; b=Vw2bzCevfo1bzS7CgHIS5I/48FUn+mCrfRduuMBET1+ER1WAXDOb3gYvuQUoP2EZ2A 77boP4J9EJUOGcTB/A9gTVJXbV169zswsaK82sNGDoJVU5VO6M8B20Rlb1c3ySE4r5CU embPzc6/I5aS0GM/Lk/oWGnKitap50AB3bbK4tCNjFv1kDHIMOb21RtRXYDxDUcItNYJ VWGkJrV2HtFhji91JvBHFdRQitsEtqLjpczpUXQC8nBWJow+kKanHLQgKrhxNueWWK1P I9D/ZEwdNg5Efmd63R8kZkROV9/x0d02zIqp7HHizmubmGzXee+zDuFB38WQXrMYjRmj vfeA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:delivered-to; bh=6EssHcQikbSjJw6/Xk4Io26KAqxtZoNEXqeh8q0k7Bk=; b=mG3LtoDVsz28g9GMz64X6GLDo6EV+M7KcTg8Iaf8jdfVDh1FE6xuVeDTLIVxAP5CgM Qv7kpQc1GULUiwkDSWYqybq6k+WzmJrvhpM9Rr/jN2SHAVeHllAkkWMZapSfuQH1ggR9 AFSHG0aSU1SEe2bA9qo9JgkJTPgJf35dpTYEYPOVO7LuyykD5Qb0uu1/ve6rnb/EHNKB yvtjbY6H2zRn+ITQHmRl2k7t9/9tkr80kdnVTAl1L4bsjwNBCzTDzQlCpXVgCTjFXAD5 /BLQyNul9bD46vdxw7xpCXOUtW8xCVplZAXH6M7DSSQySrOvE0WONn1XaDQSDdGPQjqA M+BQ== ARC-Authentication-Results: i=1; mx.google.com; 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 ss26-20020a170907c01a00b00961acf31204si2833229ejc.251.2023.05.02.06.44.28; Tue, 02 May 2023 06:44:29 -0700 (PDT) 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; 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 1098168C160; Tue, 2 May 2023 16:44:07 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A013A68C148 for ; Tue, 2 May 2023 16:43:59 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 640682404EC; Tue, 2 May 2023 15:43:59 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id iCnItp_jiFEE; Tue, 2 May 2023 15:43:58 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id 750392404EE; Tue, 2 May 2023 15:43:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 13B973A11B4; Tue, 2 May 2023 15:43:57 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Tue, 2 May 2023 15:43:15 +0200 Message-Id: <20230502134316.10496-3-anton@khirnov.net> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230502134316.10496-1-anton@khirnov.net> References: <20230502134316.10496-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/4] fftools/ffmpeg: reduce -re to -readrate 1 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 Cc: ddurham@davyandbeth.com Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Z2xqU0JnjqSE They are exactly equivalent, so there is no point in maintaining a separate flag for -re. --- fftools/ffmpeg.c | 2 +- fftools/ffmpeg.h | 1 - fftools/ffmpeg_demux.c | 16 ++++++++-------- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index be9a3b2e34..27bfc28798 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -1564,7 +1564,7 @@ static int transcode_init(void) /* init framerate emulation */ for (int i = 0; i < nb_input_files; i++) { InputFile *ifile = input_files[i]; - if (ifile->readrate || ifile->rate_emu) + if (ifile->readrate) for (int j = 0; j < ifile->nb_streams; j++) ifile->streams[j]->start = av_gettime_relative(); } diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index a03a6b0302..b30f0758ec 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -484,7 +484,6 @@ typedef struct InputFile { InputStream **streams; int nb_streams; - int rate_emu; float readrate; int accurate_seek; diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index e6f700f6c3..9eea5a4eec 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -450,13 +450,12 @@ int ifile_get_packet(InputFile *f, AVPacket **pkt) return ret; } - if (f->readrate || f->rate_emu) { + if (f->readrate) { int i; int64_t file_start = copy_ts * ( (f->start_time_effective != AV_NOPTS_VALUE ? f->start_time_effective * !start_at_zero : 0) + (f->start_time != AV_NOPTS_VALUE ? f->start_time : 0) ); - float scale = f->rate_emu ? 1.0 : f->readrate; int64_t burst_until = AV_TIME_BASE * d->readrate_initial_burst; for (i = 0; i < f->nb_streams; i++) { InputStream *ist = f->streams[i]; @@ -464,7 +463,7 @@ int ifile_get_packet(InputFile *f, AVPacket **pkt) if (!ist->nb_packets) continue; stream_ts_offset = FFMAX(ist->first_dts != AV_NOPTS_VALUE ? ist->first_dts : 0, file_start); pts = av_rescale(ist->dts, 1000000, AV_TIME_BASE); - now = (av_gettime_relative() - ist->start) * scale + stream_ts_offset; + now = (av_gettime_relative() - ist->start) * f->readrate + stream_ts_offset; if (pts - burst_until > now) return AVERROR(EAGAIN); } @@ -1223,7 +1222,6 @@ int ifile_open(const OptionsContext *o, const char *filename) f->input_sync_ref = o->input_sync_ref; f->input_ts_offset = o->input_ts_offset; f->ts_offset = o->input_ts_offset - (copy_ts ? (start_at_zero && ic->start_time != AV_NOPTS_VALUE ? ic->start_time : 0) : timestamp); - f->rate_emu = o->rate_emu; f->accurate_seek = o->accurate_seek; d->loop = o->loop; d->duration = 0; @@ -1234,12 +1232,14 @@ int ifile_open(const OptionsContext *o, const char *filename) av_log(d, AV_LOG_ERROR, "Option -readrate is %0.3f; it must be non-negative.\n", f->readrate); exit_program(1); } - if (f->readrate && f->rate_emu) { - av_log(d, AV_LOG_WARNING, "Both -readrate and -re set. Using -readrate %0.3f.\n", f->readrate); - f->rate_emu = 0; + if (o->rate_emu) { + if (f->readrate) { + av_log(d, AV_LOG_WARNING, "Both -readrate and -re set. Using -readrate %0.3f.\n", f->readrate); + } else + f->readrate = 1.0f; } - if (f->readrate || f->rate_emu) { + if (f->readrate) { d->readrate_initial_burst = o->readrate_initial_burst ? o->readrate_initial_burst : 0.5; if (d->readrate_initial_burst < 0.0) { av_log(d, AV_LOG_ERROR, From patchwork Tue May 2 13:43:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41448 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp4002081pzb; Tue, 2 May 2023 06:44:09 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5pFl0KvhZbrgVPKlP+dgMtU6ojBzGlUHDtUf4TfFfsiCjbvgYefRGsKhP0NUU//X1jxnA3 X-Received: by 2002:a17:907:6da9:b0:958:46aa:7f99 with SMTP id sb41-20020a1709076da900b0095846aa7f99mr10744ejc.7.1683035049256; Tue, 02 May 2023 06:44:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683035049; cv=none; d=google.com; s=arc-20160816; b=qtZ6Kob48n29xDnkoKi5HimCiOudi0+C6qUUj5r4kd84dwe31XgE/9x8YRHzB7AodM S7/zGS3fZK0Sb+Mx8j/VrnET6V0VJW/Vhcm1G9VFluGE/TPK5ce6FyAr5U9bu8b+3D3A 9cZdcVOHqM0vpa5kR7FZcgRE5wa/XaFMmVA6bW+bHQsrDpNVWVrMh+fHPQuqGKlbeYJC dIu7LoMpB5S5WpbDow3MUyLyfK6HWiVO6NS4cyuU3NDF9SaNK/0rVFOtpQuMtLPmu/7w ZMBmhLk3oMVNkIS54y5hdqf+OqahfdhmLamJ6OckR5rOrKBpPyUnydp52vGGO8nVuuVl twOw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:delivered-to; bh=hPq+YKmGj5vcWzdmae3HvcLsFOrLz7ESW028iMl4+7A=; b=kXNWvvAU4Kqg99L7bfGKSKDGtPDpLOdu+4v2ycH80bS1VhWIcoF1YDn7ekpyogCOnr UD7MB7OzznkwX0qAp5VIPs56ua2Mc1j/API6DdopJohJcUL1kvRHmSb977EkonEG15th tNAZGygfmIn1PuZT1fySgF+1P5VYgIMEHdNgOxks1NTBeQalQwiNrkMUMXUm9BbsDkGG S+gXrD1IerPGNJLos5X+rIThc3Ply+H4IzTJEC+i/de5ICX0V5hwJBkl5ilq/0MojCBA agKH8ucRmrRRfdrK3nnbXqlEvfJLcncVJBZ1DG2+SVXD/DLQhI8YLfsG+UwmntdxF2W1 DaLw== ARC-Authentication-Results: i=1; mx.google.com; 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 f13-20020a170906084d00b0094f3efcbe15si18610262ejd.504.2023.05.02.06.44.08; Tue, 02 May 2023 06:44:09 -0700 (PDT) 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; 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 2220F68C15C; Tue, 2 May 2023 16:44:05 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7B81F68C11E for ; Tue, 2 May 2023 16:43:58 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 3F5C02404F8; Tue, 2 May 2023 15:43:58 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id sICgQk3q-0vm; Tue, 2 May 2023 15:43:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id 79A552404F5; Tue, 2 May 2023 15:43:57 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 1F4293A11DB; Tue, 2 May 2023 15:43:57 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Tue, 2 May 2023 15:43:16 +0200 Message-Id: <20230502134316.10496-4-anton@khirnov.net> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230502134316.10496-1-anton@khirnov.net> References: <20230502134316.10496-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/4] fftools/ffmpeg: deprecate -re 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 Cc: ddurham@davyandbeth.com Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: meq9QFGHHfo8 It is exactly equivalent to -readrate 1.0 --- Changelog | 1 + doc/ffmpeg.texi | 2 +- fftools/ffmpeg.h | 3 +++ fftools/ffmpeg_demux.c | 5 +++++ fftools/ffmpeg_opt.c | 4 +++- 5 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Changelog b/Changelog index 2061aaf462..5feb4fd24e 100644 --- a/Changelog +++ b/Changelog @@ -8,6 +8,7 @@ version : - afireqsrc audio source filter - arls filter - ffmpeg CLI new option: -readrate_initial_burst +- ffmpeg CLI option -re deprecated in favor of -readrate 1.0 version 6.0: - Radiance HDR image support diff --git a/doc/ffmpeg.texi b/doc/ffmpeg.texi index a12700e2f3..01fd2ae0fe 100644 --- a/doc/ffmpeg.texi +++ b/doc/ffmpeg.texi @@ -1707,7 +1707,7 @@ it may cause packet loss. It is useful for when flow speed of output packets is important, such as live streaming. @item -re (@emph{input}) -Read input at native frame rate. This is equivalent to setting @code{-readrate 1}. +This option is deprecated and equivalent to setting @code{-readrate 1}. @item -readrate_initial_burst @var{seconds} Set an initial read burst time, in seconds, after which @option{-re/-readrate} will be enforced. diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index b30f0758ec..ec4c580b91 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -56,6 +56,7 @@ #define FFMPEG_ROTATION_METADATA 1 #define FFMPEG_OPT_QPHIST 1 #define FFMPEG_OPT_ADRIFT_THRESHOLD 1 +#define FFMPEG_OPT_RE 1 enum VideoSyncMethod { VSYNC_AUTO = -1, @@ -124,7 +125,9 @@ typedef struct OptionsContext { /* input options */ int64_t input_ts_offset; int loop; +#if FFMPEG_OPT_RE int rate_emu; +#endif float readrate; double readrate_initial_burst; int accurate_seek; diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index 9eea5a4eec..6727193697 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -1232,12 +1232,17 @@ int ifile_open(const OptionsContext *o, const char *filename) av_log(d, AV_LOG_ERROR, "Option -readrate is %0.3f; it must be non-negative.\n", f->readrate); exit_program(1); } +#if FFMPEG_OPT_RE if (o->rate_emu) { + av_log(d, AV_LOG_WARNING, "Option -re is deprecated and will be removed. " + "Use -readrate 1.0 instead\n"); + if (f->readrate) { av_log(d, AV_LOG_WARNING, "Both -readrate and -re set. Using -readrate %0.3f.\n", f->readrate); } else f->readrate = 1.0f; } +#endif if (f->readrate) { d->readrate_initial_burst = o->readrate_initial_burst ? o->readrate_initial_burst : 0.5; diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c index 7f22b22604..9670b65a96 100644 --- a/fftools/ffmpeg_opt.c +++ b/fftools/ffmpeg_opt.c @@ -1448,9 +1448,11 @@ const OptionDef options[] = { "dump each input packet" }, { "hex", OPT_BOOL | OPT_EXPERT, { &do_hex_dump }, "when dumping packets, also dump the payload" }, +#if FFMPEG_OPT_RE { "re", OPT_BOOL | OPT_EXPERT | OPT_OFFSET | OPT_INPUT, { .off = OFFSET(rate_emu) }, - "read input at native frame rate; equivalent to -readrate 1", "" }, + "deprecated, equivalent to -readrate 1.0", "" }, +#endif { "readrate", HAS_ARG | OPT_FLOAT | OPT_OFFSET | OPT_EXPERT | OPT_INPUT, { .off = OFFSET(readrate) }, "read input at specified rate", "speed" },