From patchwork Mon Feb 14 22:41:51 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 34290 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6838:14aa:0:0:0:0 with SMTP id bz10csp5923728nkb; Mon, 14 Feb 2022 14:42:38 -0800 (PST) X-Google-Smtp-Source: ABdhPJz/hJxLy50XVZyjsZ0kX74uM18iqXJ/yo+Yzu/zkMoetXV/muwa6xO6Xe1PJXzGZYP2Qy8Q X-Received: by 2002:a17:906:3d72:: with SMTP id r18mr751874ejf.111.1644878558731; Mon, 14 Feb 2022 14:42:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1644878558; cv=none; d=google.com; s=arc-20160816; b=KQwBnUqbVyj1WAJ/ujgWDwzhatRFTSJV2fdg+sNKA/IQJAHCfjHPjKlbjnHbP04F1v v27Pmq2uIqnxaDA9jO93GdzeBDO39SIopG0i7gUKokrPJTm//1RD/k0VfqIw9uNTvf6t Zk4ISYicsrIxRJExpr1xhVBUv0NEjmNHT8JZprdvF6XXRa1VjHw4v6PSumHYV80FqBdY Fjhe60VDieu87s8zbkRj7MYn9M3QzIW/w0ZGTP8Ys+ZczdFqWh1M32ewNDWXzKcC34yB v3wEj9tg65lgTFIe1SDZ5k6lOlLvG+Y7ndHZU2UgM3Lmg/VpKpS9j9VyHzNBYxLSV11Y Irag== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=tbErYO7/DfpIUQJTH1PRu8OeHlLIwudy7C0WrsuPsfI=; b=wVL7DXn70bjaZ8hGs8KQVQmzdFBZwTE8YdOS/qLJXAQl2pTg7rFAL/adMYOl8crdZy WC5GczoPHOavg43+u9kTWewTU2KucM9J1+tc/koDuR0qhPJpw1nLwa/f48+G8U+J/USL R0Vea0pR47e12OK2iXmHLgEXK7zuQlhBxejU4ix5PSsrSqF7okiEv+PilYH3mG4NaBE/ EWmNy2QvEkYal7lQK0x6RFRFwztYZZr2+PDuEm162IKH6cTNAKglmrqvchy9kEZwLxPa HnziA81GkSG70js07LzNbHREt/n12pxDKLpjgBu6k5onL/WItXrWXdhJRcfsF8KeScT7 ndkg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=BG+89CmL; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id g12si26162032edz.238.2022.02.14.14.42.22; Mon, 14 Feb 2022 14:42:38 -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=@gmail.com header.s=20210112 header.b=BG+89CmL; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1E2A568B17F; Tue, 15 Feb 2022 00:42:19 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi1-f170.google.com (mail-oi1-f170.google.com [209.85.167.170]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 52BB268AEE9 for ; Tue, 15 Feb 2022 00:42:16 +0200 (EET) Received: by mail-oi1-f170.google.com with SMTP id 4so18970238oil.11 for ; Mon, 14 Feb 2022 14:42:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=f9YIEFeJGmLNWkD+g9IYE1dh1xpPHSMrKbkD/oheJuQ=; b=BG+89CmLbqOwUV9AmA1bOGRgEj9VFUtYu3Kaz0aoBxGL4Cn2yIRyG/N49aXWf0CBnU N6yDlaM+N3x2gBm59KLJyt7DiG17K5moTpO7UmxGNgBTK+B9/gy1NKPBmrxQFNJKTWfF AqeuYSQvM8RcY6EOauAHK2g+SSqy1MolJ3tLuhZty31muuoOConXYoE7TFCvGw44+OO5 uQ74+bYHXkNrfvNWBetJ5cs57W3i2g/jkvvbfX6C9LW9IVZouO+yZnaG12xUkgLYguDV 3RxogDq0lJ4CxzCnu7cn8B8ApkLeO1aza2S4gp9QYYKu2PN0kqYgU7ADB3rxAGikL+J2 lgfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=f9YIEFeJGmLNWkD+g9IYE1dh1xpPHSMrKbkD/oheJuQ=; b=og6ftbJ3z/vztpTtE8+4lLiz6VoXJ1a85lc5/EUpv6dZGFqqjYiKnmNTo1pdVvQlMu 2GhTbVR9ZB/Wgn4/YSYbi/u/FFh5s6BFhyVP+hJDM2SqhPey3s9YsgEBTbuuJYtEpkZD XQVmR+m7ZdtiJ3aaKWMXr+2KQHIpv3C/8BoTjrlDOCViICp5X2Ev2+LIwWdcEjDssEVo dy3WOcS5ENBbe5GRIHgLxjcRjxbOzOeQ93j2Ti35r8RuAJWw4vCYSv076TNO+l88vwFl Os5v/PZs97rf1tIkIxsKCsEh6y4730pzSQg/A/TEz2OS4T2wqMDQQYvTWw/n2YWJ5XmC SyVA== X-Gm-Message-State: AOAM530Xj6q5FBklVL5jV9xJWI6MGf9uLJ4WDKc5agEphzuaVVQsuwm3 i5q7cjMBV9Rbs783Py0L1/IPsQLK91FxXw== X-Received: by 2002:aca:1717:0:b0:2c6:a730:dacb with SMTP id j23-20020aca1717000000b002c6a730dacbmr461568oii.87.1644878534525; Mon, 14 Feb 2022 14:42:14 -0800 (PST) Received: from localhost.localdomain ([186.136.131.95]) by smtp.gmail.com with ESMTPSA id a8sm13199885otj.47.2022.02.14.14.42.13 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Feb 2022 14:42:13 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Mon, 14 Feb 2022 19:41:51 -0300 Message-Id: <20220214224156.39862-1-jamrial@gmail.com> X-Mailer: git-send-email 2.35.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/6] ffmpeg: flush delayed frames in codec copy scenarios 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: XJ/Sm4YRaDVx Bitstream filters inserted between the input and output were never drained, resulting packets being lost if the bsf had any buffered. Signed-off-by: James Almer --- fftools/ffmpeg.c | 11 +++++++---- fftools/ffmpeg.h | 1 + fftools/ffmpeg_filter.c | 1 + fftools/ffmpeg_opt.c | 4 ++++ 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index 7beea11933..6aa0986f02 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -2733,7 +2733,9 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo } ist->pts = ist->dts; ist->next_pts = ist->next_dts; - } + } else if (!ist->decoding_needed) + eof_reached = 1; + for (i = 0; i < nb_output_streams; i++) { OutputStream *ost = output_streams[i]; @@ -4213,11 +4215,12 @@ static int process_input(int file_index) for (i = 0; i < ifile->nb_streams; i++) { ist = input_streams[ifile->ist_index + i]; avctx = ist->dec_ctx; - if (ist->decoding_needed) { + if (ist->processing_needed) { ret = process_input_packet(ist, NULL, 1); if (ret>0) return 0; - avcodec_flush_buffers(avctx); + if (ist->decoding_needed) + avcodec_flush_buffers(avctx); } } #if HAVE_THREADS @@ -4247,7 +4250,7 @@ static int process_input(int file_index) for (i = 0; i < ifile->nb_streams; i++) { ist = input_streams[ifile->ist_index + i]; - if (ist->decoding_needed) { + if (ist->processing_needed) { ret = process_input_packet(ist, NULL, 0); if (ret>0) return 0; diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index 81ec4d5970..1b8bbace3f 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -307,6 +307,7 @@ typedef struct InputStream { int decoding_needed; /* non zero if the packets must be decoded in 'raw_fifo', see DECODING_FOR_* */ #define DECODING_FOR_OST 1 #define DECODING_FOR_FILTER 2 + int processing_needed; /* non zero if the packets must be processed */ AVCodecContext *dec_ctx; const AVCodec *dec; diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c index 41d87377c7..8ec1f0ffaf 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -277,6 +277,7 @@ static void init_input_filter(FilterGraph *fg, AVFilterInOut *in) ist->discard = 0; ist->decoding_needed |= DECODING_FOR_FILTER; + ist->processing_needed = 1; ist->st->discard = AVDISCARD_NONE; ifilter = ALLOC_ARRAY_ELEM(fg->inputs, fg->nb_inputs); diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c index 3102851885..bf1bbcae4c 100644 --- a/fftools/ffmpeg_opt.c +++ b/fftools/ffmpeg_opt.c @@ -2610,6 +2610,7 @@ loop_end: if (ost->encoding_needed && ost->source_index >= 0) { InputStream *ist = input_streams[ost->source_index]; ist->decoding_needed |= DECODING_FOR_OST; + ist->processing_needed = 1; if (ost->st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO || ost->st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) { @@ -2622,6 +2623,9 @@ loop_end: exit_program(1); } } + } else if (ost->stream_copy && ost->source_index >= 0) { + InputStream *ist = input_streams[ost->source_index]; + ist->processing_needed = 1; } /* set the filter output constraints */ From patchwork Mon Feb 14 22:41:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 34289 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6838:14aa:0:0:0:0 with SMTP id bz10csp5923727nkb; Mon, 14 Feb 2022 14:42:38 -0800 (PST) X-Google-Smtp-Source: ABdhPJwm+9pMyvesAo6aawJzssfmDKmTdAZRZ8ic5UuAHh58xoyq39cTdL+cS0VzLWq+aiLqAz2L X-Received: by 2002:aa7:d941:: with SMTP id l1mr1122244eds.200.1644878558511; Mon, 14 Feb 2022 14:42:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1644878558; cv=none; d=google.com; s=arc-20160816; b=ooy2iNAkuDfjXy2WKWs0G0oVI4eBRrrggtAGW8DIJPQ2ZE1GFz2yK9wXQbX3Mp2Ai9 NqOlnV+HqyRkyZJkwV0hCraaWThD8bw5ezpCqxQsdVK5DvM801ScBtlMBZ5WDK0Z/okM LEIFW5LsLL3+s+3Ubt4ljoM/8GcvwMPkR2D990ECiwp5xcNdcXdyt+HWIX5p9JJ0LKe2 RaiP8I3+tbggTpmwh+D+dk84bz+myA5n6G3hgm84Ff5aU73JuA5w1eXKIIZzzfglzomu oP5qY+v0rGDcweHMH38DQhFnIRL7k1FF52oh890QTJCqAPL6boPhqta4xvLzwqRuTd+q 0GIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding: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:dkim-signature:delivered-to; bh=ih0sf/24QdrB01i1GZr/LzIkqnUqN9goDTuHy5rhg8g=; b=oX4Aw4Nn24smRr+c2cUZ52ZlVwYoP+t7dItHXEEBWaCmOjIJYMhBXsnK8a/2qlr9ZE QkonPrGhnQkf8hCF0ALGq41O8H2hy7Sp6flM+yXY9blyd9GlNatN1GJnS8oxXtuynlb6 yMkzomV/bk2HnjXuQDwerFjpTMgDlr14oTKXR8wKBKmVHwmMST6KUiSJGbWbZwZEVKz9 Qh4lCcWogmGRHF0gt3eeef8lbBegBwMt0ameoSB1AmGrccO/U6zYI2/mhnZzSeMQ1lrV IdT0wEAcZH/p8fWPtubP7Ny9jx9TT5W37xVpHp7m7UpZ8n3En/gcEnPvQJ2OF3+lkUan JIRg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=pSTn9lMk; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id hc13si14681305ejc.901.2022.02.14.14.42.33; Mon, 14 Feb 2022 14:42:38 -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=@gmail.com header.s=20210112 header.b=pSTn9lMk; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B6F0368B149; Tue, 15 Feb 2022 00:42:20 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oo1-f45.google.com (mail-oo1-f45.google.com [209.85.161.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0575268AEE9 for ; Tue, 15 Feb 2022 00:42:17 +0200 (EET) Received: by mail-oo1-f45.google.com with SMTP id i10-20020a4aab0a000000b002fccf890d5fso21100187oon.5 for ; Mon, 14 Feb 2022 14:42:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=UsTbFbKZ7mKxywbpMUgBPTkEOe1Z15VrmcO9PyQtsxg=; b=pSTn9lMkfxjKUlqLWNdcEkaCTgQg57961UJNr8e6fRaimFe9ZYZa2urbcL656WpNNi kUYWdPHrbYlZo6qjdBfngQ0KAWnZYaatkSsGfCkoeHq6ej1Y0mV3VkRRsYTZKmzxDpYy D2La+8VnOFHehxFppF/IsBdYFYEedsfKQwHqxse6IqT2SmMTm//LUjzy6LfRR5xQmDTY iKaMs3zpOsKcSfA/7pcnsHBotwNOK3IH8marsA+XNJUBc1TVN6do1W5U17uQ3zuky2zf yG5nYTOU62gp85TGpH/nnsnlmb6JHS8hgjeK3lLIafZpj3FBbtttLYiZEDoPy8JlkU29 u+DA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=UsTbFbKZ7mKxywbpMUgBPTkEOe1Z15VrmcO9PyQtsxg=; b=kPpUv4gQ1pkUjjG0oVexmmlWfhKCewl51h9nZ/ZZf9rT+OVx8tVoz7RrJHNf4x1lW0 UBTgplgPMr490S+f7m1M0S4GVW+dZI4NWkqxwXKEfpslh1VG4hdIkRDa6tw9tuSebSha 6PTaJYcx9+ylDFsgUJzZ1AlI63+7sogMFnxUv2JOC7If7c7p/+dFGhPXYFMd6cGbA9Pd /r5Lfcl+obupd9UZ19s9xp9RfM6PpN3Qj9/KsGr+GQfx2//+bo9P4fRlSNhkHAQwXk/J DLCwIHPeatw9O1D1TwQiC5SgYVczGAXpAl+bFMV/XObjU0SauVwdDP8fAYvJLZwTvj70 W9Ew== X-Gm-Message-State: AOAM530xjn5tY+g9oPfrzFP2x3eMG31NrjbFwwTXTiJAIPCIqIZBWFtH m6REGFznfBAzNavRjZD13r+AhKhslYcdmQ== X-Received: by 2002:a05:6870:e308:: with SMTP id z8mr387527oad.132.1644878535835; Mon, 14 Feb 2022 14:42:15 -0800 (PST) Received: from localhost.localdomain ([186.136.131.95]) by smtp.gmail.com with ESMTPSA id a8sm13199885otj.47.2022.02.14.14.42.14 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Feb 2022 14:42:15 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Mon, 14 Feb 2022 19:41:52 -0300 Message-Id: <20220214224156.39862-2-jamrial@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220214224156.39862-1-jamrial@gmail.com> References: <20220214224156.39862-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/6] avcodec/bsf: add a capabilities field to AVBitStreamFilter 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 0pA5GL8CP13B And a first flag to signal that the bsf buffers packets and needs to be drained Signed-off-by: James Almer --- Missing APIChanges entry and version bump. libavcodec/bsf.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/libavcodec/bsf.h b/libavcodec/bsf.h index 8c5355d186..798c6470ee 100644 --- a/libavcodec/bsf.h +++ b/libavcodec/bsf.h @@ -87,6 +87,12 @@ typedef struct AVBSFContext { AVRational time_base_out; } AVBSFContext; +/** + * The bitstream filter requires flushing with NULL input at the end in order + * to drain all buffered packets and give the complete and correct output. + */ +#define AV_BSF_CAP_DELAY (1 << 0) + typedef struct AVBitStreamFilter { const char *name; @@ -108,6 +114,12 @@ typedef struct AVBitStreamFilter { */ const AVClass *priv_class; + /** + * Filter capabilities. + * see AV_BSF_CAP_* + */ + int capabilities; + /***************************************************************** * No fields below this line are part of the public API. They * may not be used outside of libavcodec and can be changed and From patchwork Mon Feb 14 22:41:53 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 34293 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6838:14aa:0:0:0:0 with SMTP id bz10csp5923983nkb; Mon, 14 Feb 2022 14:43:06 -0800 (PST) X-Google-Smtp-Source: ABdhPJykeWO31hBWddRTcBdnyNFVrc1dNh7nJ//unCcR4pFk5IRZ28d4Od/ZmjqAf0lKjdYCz+jk X-Received: by 2002:aa7:da9a:: with SMTP id q26mr1114864eds.288.1644878586007; Mon, 14 Feb 2022 14:43:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1644878586; cv=none; d=google.com; s=arc-20160816; b=FF6CnTZCne3alA7MsOf+pUqbrPm5hkGa4Y75U4atn3jN1lfl/6ADk8pp3EIQO+8ae/ WlxkLwa4uDdTaUc/U4SE8Ncjf9oFtuBvjHLuTK6rLjqvI7izkiTAiF2IaYF+LJQZtY8Q 9WCAnQ8fYERy+3hezNbPoqS3urXFCBhtpcSG5eeF9O/sxTrRYo2s4CweIe6bFBRcD3lb svvV+fxjn6vvFnQ+WzMJKV6PQQ+tRwYe8onXCqlHz1D7xp+ft8Io/DSTQKzpE4zxkTn7 T+KD+EP4vRURODEw3nlBHXv6w6abq2Na1rRQHCL0RNgnoUlEkUttro50SdbotAei4JxN RBNg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding: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:dkim-signature:delivered-to; bh=L8Pz0DrfJStw5FUNMqJNctVhv9UZEQwR4FVn/vHSC/8=; b=cb2I0/lW33MGmuW3E4YehZ0+ILpoeSTAH6ytVu0QrvCip29skKccDankYRS1SWRGd5 Dr/x/agbebudAP4uHNt0js2FDt0UMwNhXtPJp//TXjkKAmrjjTXrkqKfVtVJa5N84rRh kKJ5jajE7FaaygzVskueKMcQmLYMAKI0ooS7IQ7hHR6MbOux8xuIGhcxS6WqU31+/RRM SnLkGhLL3g0L/rTbcUd6Xz1rFjECUQPyKYmYl1xwiCJNArWU54go9kUkNUZxRCXBOPkg okcaxcjd5kDQyEP7hZKAyzl7MHo2eXCloEBc3Clq+EmhMAKje55JuqfutKodyd3rmgYT 3dOg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=MmZdM+84; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id qk14si3449765ejc.66.2022.02.14.14.42.43; Mon, 14 Feb 2022 14:43:05 -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=@gmail.com header.s=20210112 header.b=MmZdM+84; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C985168B1B5; Tue, 15 Feb 2022 00:42:21 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi1-f169.google.com (mail-oi1-f169.google.com [209.85.167.169]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E8FB768B149 for ; Tue, 15 Feb 2022 00:42:18 +0200 (EET) Received: by mail-oi1-f169.google.com with SMTP id 13so880018oiz.12 for ; Mon, 14 Feb 2022 14:42:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=DWSp05OJDuplerne3Q0q7Uv9k2KzLJq4xM+ZXJ9nMY4=; b=MmZdM+84zBvq43Pmbm+M/VmvxAIIWgzjPmH/eFWwz7uKjCh/3R0N3ZoQLRx9soEbSG kAVBR+lrnN0EQlyXjnGSJeEcWkQKB4OmdnLrRxq2JRx8+9B+Hsk5pHxTe8EHAwU+s1DC db/ds5mhmivEihqDYtvK07aF6ejKnuRt0/h9xnmY+qdHwpngy8FAsuHSDjtsaxnnTlz1 AJ2/TjWqhCELhujbyjBQiS7SW5yJPkODnafwq4IDXxdY/pZH/tXdz69Cw3aPsWbC47/y 8VMkRVaTN7WqNG191CWCJZGpnF4Be7iMX8DD1IkUoOfNVpgESQG88sTSaFegNVSKF97T v7qw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=DWSp05OJDuplerne3Q0q7Uv9k2KzLJq4xM+ZXJ9nMY4=; b=8Nwkxa+Dgxt55HMrU4uatk8L8qlz9QoX5yPAGP9VusY5p+31edG9OB8jq6s6ntktrF BSTAP2nV8fvS8s00z9G8DkCONhAnewh0IcNvk5VzAhDPBtOXaH5DzRRVkWL5Jw6ayT+Z KeQOS2yzpNPPDAFAWeFzSWoUXHJvOq7gZLJwQgundY84tsW3qeFKnXIY80359jQBaJxg Vg2tZpLV8lygYlm0nn3P7UzlNB9Ph6ZkGVnyxJLIq9EBzXqOQVHMiirdgE/7ve7RnHaD K/0mwLGzJBf61YAjROthX67wp43avQO/d6OHcnOyoD8NSe4Hi9J+lV9CYE3xc8G/Wn1G BMeQ== X-Gm-Message-State: AOAM532D2wm4P2S+GlBjRJ5nqRVGvZNllEgyGUvjirapCY7L1j0+3Gkh FLMoTqdd7E0h+0n+aPgtqGNJ1d4BdcHArQ== X-Received: by 2002:a05:6808:23cc:: with SMTP id bq12mr469027oib.230.1644878537108; Mon, 14 Feb 2022 14:42:17 -0800 (PST) Received: from localhost.localdomain ([186.136.131.95]) by smtp.gmail.com with ESMTPSA id a8sm13199885otj.47.2022.02.14.14.42.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Feb 2022 14:42:16 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Mon, 14 Feb 2022 19:41:53 -0300 Message-Id: <20220214224156.39862-3-jamrial@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220214224156.39862-1-jamrial@gmail.com> References: <20220214224156.39862-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/6] avcodec/bsf: set delay capability on the list filter 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: b8dLAYSLPB1v AVBitStreamFilter structures are const, so we can't set its capabilities based on the filters added to the list. Set the delay cap to ensure correct behavior if any bsf in the list sets it. Signed-off-by: James Almer --- libavcodec/bsf.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libavcodec/bsf.c b/libavcodec/bsf.c index 8ba021cb47..a784aaaa95 100644 --- a/libavcodec/bsf.c +++ b/libavcodec/bsf.c @@ -406,6 +406,7 @@ static const AVBitStreamFilter list_bsf = { .filter = bsf_list_filter, .flush = bsf_list_flush, .close = bsf_list_close, + .capabilities = AV_BSF_CAP_DELAY, }; struct AVBSFList { From patchwork Mon Feb 14 22:41:54 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 34291 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6838:14aa:0:0:0:0 with SMTP id bz10csp5923880nkb; Mon, 14 Feb 2022 14:42:53 -0800 (PST) X-Google-Smtp-Source: ABdhPJxkqjhbAmugQ9Q3wbElUyHXVdRhwfvKSxiHbsO1vD7mYzP2QuJUj7DrB4ygTpSkhv1fk4Bq X-Received: by 2002:a17:906:7387:: with SMTP id f7mr773372ejl.139.1644878573548; Mon, 14 Feb 2022 14:42:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1644878573; cv=none; d=google.com; s=arc-20160816; b=jlnNIlmWkXqd0aPA2huREQPb19nE1nu997K+1uxxib1f8ttpfckEQl7IZje4r1f0Jy oKE9XoKk+LjoUqoJjdMcOZXfYuljBRRkIwxwTnG50hXX9/AM8PNQoa4dFVGant7cD7Bb leT9esI9hjwZgfeQrbE1z4v/68HOCSbtPYdmxN3F7z9VICfTL8VTb8G7d89qKdaswm1G uLe1RTMV2ueIwARNpZtagwsnfDzb0lCyKzWm2zCeYLNuSGvjiLZQPuMcFI2h6AZgS76o 9g1WQk1cgATeOqywycRnI9cKb1LoSDIut9TdDC2WhoHelkxMFrg0BoOv8Wa4LzX8Kiyq EsCA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding: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:dkim-signature:delivered-to; bh=72FHtbETITi9D0dY1fcAUCys3vTdla+v6f84896j9dQ=; b=ZFvxt4xrZ5VB8FCuZlHN9ow3ciX1KPq0eZBNqhJ8JHdNna8vEbVXM86s9O9YxYHWvP 2W8FAiFu6B9qbF7JU9vz+PU1APHA20bu3x0Ugwze1cpzQdKSBEXoRP77T+TFiOtr6ppY UrMLUlSHSv8Ht/VvoyDDE/mkHRSiNm64O1KPpAjCTsyD7gVi9nG/xcKyJ9O11VwyuMr3 959D5bLlc/Ilcw75ZUbS8bTHxpim0s3VQHKFBrCxulrRsAAq1HolLuzJu+O5r8DJ0cv1 bGhPHtyt5ULTjqef0npqwYxaHLw3vMFhYxAh5ze1f5pRidhcnRn43uGVHxWy7+SpPugC /lPA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=Ehu5InV3; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id l16si9114433edw.590.2022.02.14.14.42.53; Mon, 14 Feb 2022 14:42:53 -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=@gmail.com header.s=20210112 header.b=Ehu5InV3; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 23BA668B1C0; Tue, 15 Feb 2022 00:42:23 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi1-f170.google.com (mail-oi1-f170.google.com [209.85.167.170]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 00E8768B15A for ; Tue, 15 Feb 2022 00:42:19 +0200 (EET) Received: by mail-oi1-f170.google.com with SMTP id q8so19019286oiw.7 for ; Mon, 14 Feb 2022 14:42:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=KtBySlUweaMgDI0UKXWp1sHu+k9KOIE8XF2icKtaRlM=; b=Ehu5InV3rN/j3hAJEIQ1mC6XZCCjZnLJ74WOGMW00EvhczFPl1drAPxNGq8JOs2XTW e5aaxKZ4H66lABH6wsGEQMzdksxRltfW7JRiC68rAiujqpdkv5AYGiy2jcYYA74T7XLd +rJa2lTcEqkArwYgjarI5chJJL+gLrVdwQL/l2I2Zmqn9zTWEmmHn3f7W2ctk/Uo85RR zwU8Pms9HdF3BphO4tagSH1Bp32rIE61Y1zHNylEItp6gRz+mrGzVL68AE9eUY2JXrcm /cTGdhdpziQvkjXn/4bXa4THuFngqQ8H2RMt/ZM8vWnES7x30tN7sq8dGpz4jV2VeI3d u1rQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=KtBySlUweaMgDI0UKXWp1sHu+k9KOIE8XF2icKtaRlM=; b=Xmif6uDQLN5itx3HV3DhRHQUwuntpOT8EEsPlAOwcxg6Hu7sqMFUCf5Fk87zaO6XSS pND1PoT93WvM+B/ZxdAIr7Tk9v/SzISuv5w8jb6Yh4VSCioQsQYDofAMLSP6DfXs2vM7 WlHKw1t76BSwY9kkZ2bzYVpv9RLU6nP1ws4//XQt17Z6/NQina1hZmA87To0nUir5BXI zXroaZfUS2VwuTDbCLgLLaqDh6kMhQ3vVpZ6iwXPtAx5tAqupdxKl1fvsXTZ15RZD28c zgPJqoOWXX8D0EfsKX32zUGxUfbh7tssI/07NGMts6wQiyA/DAWF7oboGVlp87GRif1+ 59sQ== X-Gm-Message-State: AOAM531n0uZjlDXwY7ydrWudfrafzgVlir1YxqAhyJOwFGEV2hPR+8FV roWPXKNAEPJRr6bnXoeNruNat2f4g8/gXQ== X-Received: by 2002:a05:6808:23c9:: with SMTP id bq9mr502082oib.138.1644878538437; Mon, 14 Feb 2022 14:42:18 -0800 (PST) Received: from localhost.localdomain ([186.136.131.95]) by smtp.gmail.com with ESMTPSA id a8sm13199885otj.47.2022.02.14.14.42.17 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Feb 2022 14:42:18 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Mon, 14 Feb 2022 19:41:54 -0300 Message-Id: <20220214224156.39862-4-jamrial@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220214224156.39862-1-jamrial@gmail.com> References: <20220214224156.39862-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/6] ffmpeg: don't skip packets before a keyframe was seen if a bsf with delay is used 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Wvv7ZRh51pNT A keyframe could be buffered in the bsf and not be output until more packets had been fed to it. Signed-off-by: James Almer --- fftools/ffmpeg.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index 6aa0986f02..48d9016b4c 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -2026,7 +2026,8 @@ static void do_streamcopy(InputStream *ist, OutputStream *ost, const AVPacket *p } if ((!ost->frame_number && !(pkt->flags & AV_PKT_FLAG_KEY)) && - !ost->copy_initial_nonkeyframes) + !ost->copy_initial_nonkeyframes && + !(ost->bsf_ctx && ost->bsf_ctx->filter->capabilities & AV_BSF_CAP_DELAY)) return; if (!ost->frame_number && !ost->copy_prior_start) { From patchwork Mon Feb 14 22:41:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 34292 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6838:14aa:0:0:0:0 with SMTP id bz10csp5923963nkb; Mon, 14 Feb 2022 14:43:04 -0800 (PST) X-Google-Smtp-Source: ABdhPJwMpV3SOiPio5yRHa90+D5X1Zd9vzihwH5p0QFADr+H6Ycr3cztEX8f2//WF0DSHi/N7NoZ X-Received: by 2002:a05:6402:1d4b:: with SMTP id dz11mr1120411edb.202.1644878584535; Mon, 14 Feb 2022 14:43:04 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1644878584; cv=none; d=google.com; s=arc-20160816; b=lFgZC2LOMcFtrOtcW7eeZErmFp/Bf49QIoDiND5wX2Bdkf8guyE+YkURCfbzH57zju fRtJraOWkT/8gT9QVx9OvX5rgJv9xFcylo0VVRkv0w01/cot5AhRsraGJIL9hBETo+E2 ksvMdPz2bIKMNfWk9guZYdHECSsZ+gWBVlwZXDylMhHsdSl35CsX8JV6A8oZYRDmLqhU FVTZ26xqBE0S6nJjX4jFh3jWsVvAeA0zIMt+Y6nrLg6cXjGwD2+xiAllHLN9R7kILi8A UPJtDE0KhQK+8aP+m9TbXKjJltIvUEWE9fmYGoWpvhQG9fv9PnNm1ClV89lqYVL4Ti1P BRUw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding: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:dkim-signature:delivered-to; bh=M728h4f/EwI/TvQoSqjBRCrixCYgLnOTXVVpf/MEEw0=; b=XveZG3MBcfpVEPMehy/KQa2mf97TdGxNqU7Ywwms0Ne+O0q+8/yOCrjjYBTb7OPz51 ewyxfP6VRcPPBBwdatwukXR94MLdz7JrQMiWwl/BD4mJ13i5X6UUfUl1DYb6wY2gnFvW lMEAQaXEET6U+/hWOed2Nqb5MU7lsDLJDHSmFTT7w6oz9wB8YbcpECeL9WO6rCv8Sh1A OwKm8AqZNSrUdFYoFOD5B+JX5A3QNhVOmpH5b+vbmrBJjqYsEvYjXdsfRfN/poJxmRyz LMwJn8AZmSym4zeC0W5HUJQDcs31S+Aq2676YTdisnA1i6XRasUkiPe0CNn7qgNWTGxf FaOQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=drMQSjc4; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id hg3si1541521ejc.930.2022.02.14.14.43.03; Mon, 14 Feb 2022 14:43:04 -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=@gmail.com header.s=20210112 header.b=drMQSjc4; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1470768B1E7; Tue, 15 Feb 2022 00:42:24 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi1-f174.google.com (mail-oi1-f174.google.com [209.85.167.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A6DA268B1B5 for ; Tue, 15 Feb 2022 00:42:21 +0200 (EET) Received: by mail-oi1-f174.google.com with SMTP id 4so18970414oil.11 for ; Mon, 14 Feb 2022 14:42:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=C9KzgV7W+q3ugBCez/4IYJOH7POA+TYwHwpi7HN+Dag=; b=drMQSjc4JVr2KM33InxS8kuYEaKOyQZI+2878o1edFrZYyVOB+B2H6dY+tPQbKsx0M aqeF+MQpd0yLlUZwBYtIMUzk4Oi5hbU7nNMzH7wc49icN0qypVMACXGjELYZVOLKPXKP oENKwf7RqoNggaYpcM1NaOgAUDgivDzCsHxUEmr5ZVr+mlbL2VdrfvzVAP+EVZfzzAI1 3yPdjGuCg5Ukc/wyRNTjm/z0dWp5zHoXgC8EmG11pHuUGp/+74xA3/ezH9sC4/2UdlZU 4ogze+H4brkyCX+tuSSnt3xhC6ojUFUW8MFLOyQTwmxmq7FULtMRtlLqWFQwTO/VnOOk +mbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=C9KzgV7W+q3ugBCez/4IYJOH7POA+TYwHwpi7HN+Dag=; b=WcDC3CLjTcimdQMLXNZ0+rIJOhdDRrz1iPjz6HvGNWEdNEnBG4IABlTewhTFdoqwQB YrtoQqDUHMWmB6xp3qn2iMoa2XlWxn4c7GhoGH24JVg9ELq+n0WA8m2zTW7iCUjUlO9i 9y+F3W0oamTn3irOW/vm0o5HmUuy8x688iU0XqEI9fzMB3dcArJX0cRPYEImSwmIuhhf mki171jCdtEs0XNqhTjSty/Kkpl1DXU+JBPS5RvuYhjxsedW8yE27pVTI4dlom2ZwsOs Smwb9IorzFGVxsLUQXh4xiUj7Rq5cloFhqwmbx+t4ZV09aWEQ3gtMT94a9vPlK2548/o RCdw== X-Gm-Message-State: AOAM532QmRYPJSL430AghbC/aAMDFyudBX9iFlU0zAKvmFHVQxzF4PiL HoUjnLogudWnXHIXPBUR+e1NMXUTDacYMA== X-Received: by 2002:a05:6808:1b29:b0:2ce:6ee7:2cc5 with SMTP id bx41-20020a0568081b2900b002ce6ee72cc5mr431975oib.243.1644878539718; Mon, 14 Feb 2022 14:42:19 -0800 (PST) Received: from localhost.localdomain ([186.136.131.95]) by smtp.gmail.com with ESMTPSA id a8sm13199885otj.47.2022.02.14.14.42.18 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Feb 2022 14:42:19 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Mon, 14 Feb 2022 19:41:55 -0300 Message-Id: <20220214224156.39862-5-jamrial@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220214224156.39862-1-jamrial@gmail.com> References: <20220214224156.39862-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/6] avcodec/setts_bsf: add NEXT_PTS/DTS expression constants 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 52ZzeEZfbjdu They correspond to the relevant fields in the packet that follows the one where the expressions are being applied to. Signed-off-by: James Almer --- Missing doc changes. libavcodec/setts_bsf.c | 76 ++++++++++++++++++++++++++++-------------- 1 file changed, 51 insertions(+), 25 deletions(-) diff --git a/libavcodec/setts_bsf.c b/libavcodec/setts_bsf.c index d604f91f71..35266ee251 100644 --- a/libavcodec/setts_bsf.c +++ b/libavcodec/setts_bsf.c @@ -37,6 +37,8 @@ static const char *const var_names[] = { "PREV_INDTS", ///< previous input DTS "PREV_OUTPTS", ///< previous output PTS "PREV_OUTDTS", ///< previous output DTS + "NEXT_PTS", ///< next input PTS + "NEXT_DTS", ///< next input DTS "PTS", ///< original PTS in the file of the frame "DTS", ///< original DTS in the file of the frame "STARTPTS", ///< PTS at start of movie @@ -55,6 +57,8 @@ enum var_name { VAR_PREV_INDTS, VAR_PREV_OUTPTS, VAR_PREV_OUTDTS, + VAR_NEXT_PTS, + VAR_NEXT_DTS, VAR_PTS, VAR_DTS, VAR_STARTPTS, @@ -76,16 +80,16 @@ typedef struct SetTSContext { int64_t start_pts; int64_t start_dts; - int64_t prev_inpts; - int64_t prev_indts; - int64_t prev_outpts; - int64_t prev_outdts; double var_values[VAR_VARS_NB]; AVExpr *ts_expr; AVExpr *pts_expr; AVExpr *dts_expr; + + AVPacket *prev_inpkt; + AVPacket *prev_outpkt; + AVPacket *cur_pkt; } SetTSContext; static int setts_init(AVBSFContext *ctx) @@ -93,6 +97,12 @@ static int setts_init(AVBSFContext *ctx) SetTSContext *s = ctx->priv_data; int ret; + s->prev_inpkt = av_packet_alloc(); + s->prev_outpkt = av_packet_alloc(); + s->cur_pkt = av_packet_alloc(); + if (!s->prev_inpkt || !s->prev_outpkt || !s->cur_pkt) + return AVERROR(ENOMEM); + if ((ret = av_expr_parse(&s->ts_expr, s->ts_str, var_names, NULL, NULL, NULL, NULL, 0, ctx)) < 0) { av_log(ctx, AV_LOG_ERROR, "Error while parsing ts expression '%s'\n", s->ts_str); @@ -118,10 +128,6 @@ static int setts_init(AVBSFContext *ctx) s->frame_number= 0; s->start_pts = AV_NOPTS_VALUE; s->start_dts = AV_NOPTS_VALUE; - s->prev_inpts = AV_NOPTS_VALUE; - s->prev_indts = AV_NOPTS_VALUE; - s->prev_outpts = AV_NOPTS_VALUE; - s->prev_outdts = AV_NOPTS_VALUE; s->var_values[VAR_NOPTS] = AV_NOPTS_VALUE; return 0; @@ -134,24 +140,31 @@ static int setts_filter(AVBSFContext *ctx, AVPacket *pkt) int ret; ret = ff_bsf_get_packet_ref(ctx, pkt); - if (ret < 0) + if (ret < 0 && (ret != AVERROR_EOF || !s->cur_pkt->data)) return ret; + if (!s->cur_pkt->data) { + av_packet_move_ref(s->cur_pkt, pkt); + return AVERROR(EAGAIN); + } + if (s->start_pts == AV_NOPTS_VALUE) - s->start_pts = pkt->pts; + s->start_pts = s->cur_pkt->pts; if (s->start_dts == AV_NOPTS_VALUE) - s->start_dts = pkt->dts; + s->start_dts = s->cur_pkt->dts; s->var_values[VAR_N] = s->frame_number++; - s->var_values[VAR_TS] = pkt->dts; - s->var_values[VAR_POS] = pkt->pos; - s->var_values[VAR_PTS] = pkt->pts; - s->var_values[VAR_DTS] = pkt->dts; - s->var_values[VAR_PREV_INPTS] = s->prev_inpts; - s->var_values[VAR_PREV_INDTS] = s->prev_indts; - s->var_values[VAR_PREV_OUTPTS] = s->prev_outpts; - s->var_values[VAR_PREV_OUTDTS] = s->prev_outdts; + s->var_values[VAR_TS] = s->cur_pkt->dts; + s->var_values[VAR_POS] = s->cur_pkt->pos; + s->var_values[VAR_PTS] = s->cur_pkt->pts; + s->var_values[VAR_DTS] = s->cur_pkt->dts; + s->var_values[VAR_PREV_INPTS] = s->prev_inpkt->pts; + s->var_values[VAR_PREV_INDTS] = s->prev_inpkt->dts; + s->var_values[VAR_PREV_OUTPTS] = s->prev_outpkt->pts; + s->var_values[VAR_PREV_OUTDTS] = s->prev_outpkt->dts; + s->var_values[VAR_NEXT_PTS] = pkt->pts; + s->var_values[VAR_NEXT_DTS] = pkt->dts; s->var_values[VAR_STARTPTS] = s->start_pts; s->var_values[VAR_STARTDTS] = s->start_dts; s->var_values[VAR_TB] = ctx->time_base_out.den ? av_q2d(ctx->time_base_out) : 0; @@ -160,27 +173,35 @@ static int setts_filter(AVBSFContext *ctx, AVPacket *pkt) new_ts = llrint(av_expr_eval(s->ts_expr, s->var_values, NULL)); if (s->pts_str) { - s->var_values[VAR_TS] = pkt->pts; + s->var_values[VAR_TS] = s->cur_pkt->pts; new_pts = llrint(av_expr_eval(s->pts_expr, s->var_values, NULL)); } else { new_pts = new_ts; } if (s->dts_str) { - s->var_values[VAR_TS] = pkt->dts; + s->var_values[VAR_TS] = s->cur_pkt->dts; new_dts = llrint(av_expr_eval(s->dts_expr, s->var_values, NULL)); } else { new_dts = new_ts; } - s->prev_inpts = pkt->pts; - s->prev_indts = pkt->dts; - s->prev_outpts = new_pts; - s->prev_outdts = new_dts; + av_packet_unref(s->prev_inpkt); + av_packet_unref(s->prev_outpkt); + av_packet_move_ref(s->prev_inpkt, s->cur_pkt); + av_packet_move_ref(s->cur_pkt, pkt); + + ret = av_packet_ref(pkt, s->prev_inpkt); + if (ret < 0) + return ret; pkt->pts = new_pts; pkt->dts = new_dts; + ret = av_packet_ref(s->prev_outpkt, pkt); + if (ret < 0) + av_packet_unref(pkt); + return ret; } @@ -188,6 +209,10 @@ static void setts_close(AVBSFContext *bsf) { SetTSContext *s = bsf->priv_data; + av_packet_free(&s->prev_inpkt); + av_packet_free(&s->prev_outpkt); + av_packet_free(&s->cur_pkt); + av_expr_free(s->ts_expr); s->ts_expr = NULL; av_expr_free(s->pts_expr); @@ -220,4 +245,5 @@ const AVBitStreamFilter ff_setts_bsf = { .init = setts_init, .close = setts_close, .filter = setts_filter, + .capabilities = AV_BSF_CAP_DELAY, }; From patchwork Mon Feb 14 22:41:56 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 34294 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6838:14aa:0:0:0:0 with SMTP id bz10csp5924071nkb; Mon, 14 Feb 2022 14:43:14 -0800 (PST) X-Google-Smtp-Source: ABdhPJyW52MCi1MlHreOYqcWzigaFZM5iwflR+RMQIg4eRGTmvSt6oFmQrZweNlxOiEXQu63OS4k X-Received: by 2002:a05:6402:1e91:: with SMTP id f17mr1067814edf.407.1644878593921; Mon, 14 Feb 2022 14:43:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1644878593; cv=none; d=google.com; s=arc-20160816; b=NiNJK0IG4XDFFsWaDWFAPM3jRcPz+/FynWO1PKIGrZFouLH0l0tRmnBg5DaZ/fVof3 4w062lo3qml8cRzPSZSmvfhcY9fhkkTzHybJQS7QvpsqieHEqssODxnfOHWYL2mwxFg8 tET/+oFr1USSjODpgF5ecYIz31T3pvOC2Elm64Vdf/5ZH9aCfHrSHwr3IAjoD6UoqK5H +WagTEkUgAMTsm4yFKSxAdZjdDCi86jylN4It7MULxYrFOznMm0GPhOxTSFJGoaHNExj vDl/6z7AabNAl1vZkY/P1IHbPDm+MYfpIXhK07tZnYuEa8dhS2E6tUKaKxngJ3MPyISD NEBQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding: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:dkim-signature:delivered-to; bh=nvPAtj43JHWh8fbWt1clV+zuxra26LCsvBu3cuqvY7A=; b=K0FD0Fn7mq4zIPqZ/8NOVPCiBIGInDVAOeIKM78hTv79BLhmMfcJaQmdLNyslrDU4X m9DD87cOCTyjTXXtpmrjHiY18hFVKN2uFYkRK+M90qU9TikcLaDptxKJ28ZrCxMI4B1S hNn0ZPkSSF/2cTG+an20Oo/PN8JZleiCMQxlxGaV29NRGoKHcTzHlls+TFPiYqsyFrql 8DeWX68F6LspcUcmvR7qKx0dKDGbEVdMyi7UI5HYQleH8Cl5teYESI9Hl/9DUgV7bl20 Pkt7X+R8rH1scyWoD+hX5/6wCbxk8S7CwDCcM9LOicPkrhcM7wejkopYUmFAH7xBwwYt Iohg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=CcqPfX2x; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id hs6si7758878ejc.447.2022.02.14.14.43.13; Mon, 14 Feb 2022 14:43:13 -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=@gmail.com header.s=20210112 header.b=CcqPfX2x; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0090B68B1E9; Tue, 15 Feb 2022 00:42:25 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi1-f177.google.com (mail-oi1-f177.google.com [209.85.167.177]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4116368B1C1 for ; Tue, 15 Feb 2022 00:42:22 +0200 (EET) Received: by mail-oi1-f177.google.com with SMTP id 4so18970471oil.11 for ; Mon, 14 Feb 2022 14:42:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=944SdW6nEMSuoK6nMCtCLndulhEFnXqWPBSw2FySRjo=; b=CcqPfX2x41xjLD6GIbjV/zmoYMYh3LkmWzvtInkW0uQ8Krw6Fz9k64unvcOw0xM8EO MJrRWwmFvB9cbzFlO5Hf0YYgXgcbJHVj6ufbvXL0iL+GTuSdOn0Z+VMKHMPrH25aV2FQ bsRW2K7PBaMCppsMgOoYfVfdlCGftvU6DsrhwS8Lw34MGZTLiyyap1qRWxNMXJRCyrgv qUo1IV2Z/bChEX/ie8kjnnSO2MS8N95eh9bgVp7wKJZUmiWQ6XGQOssxyWVEsDDPRRy8 cE1ss4ad96mkJoRqhzNESGftg2DQ2+WfRsbuWdc4jv+XHHoBYm5/bm30X5fYN7oWNxnk WL0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=944SdW6nEMSuoK6nMCtCLndulhEFnXqWPBSw2FySRjo=; b=2guX5K9DLijlt3MBZ1zvONYJKY9eoPjdWhSeYy9Z5fuQoDLKHoo7yNb4BBXqA2RAx+ URY7k5wzQC1NAmM9SgaYumV04PQcTvfLOHuWy76xT5xwz5tTynQtsokXBmHT7HsoCW5I oIY6AMWB4/c7i4FQ9WP2ZADW8pY3sw6fTtm/xCr8bI0U75iPWz595EBYdg/0uQ6eXly5 QaKpnCDtidFgSmDWXMkG7mFRY86ngQP5JVhcG6fYyKgh6KXQTyEmpP9cU/ctrdTIMQYv jqSDzsJd/adFRTubI4dZR2DXZ+CWLzE4FdAfBxSJb4NKyuK/z1oFiyerEy2hlXgyM4ee LY0w== X-Gm-Message-State: AOAM530va1efYxk0QwMKuQtlhgnq80PbrYh+7uI1w+0Wd9Zh2kahJP71 ok/Rng868B3C7Obqm/Q+gunoAWWdCKBvQQ== X-Received: by 2002:aca:3787:0:b0:2cb:676a:47ed with SMTP id e129-20020aca3787000000b002cb676a47edmr470251oia.76.1644878541172; Mon, 14 Feb 2022 14:42:21 -0800 (PST) Received: from localhost.localdomain ([186.136.131.95]) by smtp.gmail.com with ESMTPSA id a8sm13199885otj.47.2022.02.14.14.42.19 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Feb 2022 14:42:20 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Mon, 14 Feb 2022 19:41:56 -0300 Message-Id: <20220214224156.39862-6-jamrial@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220214224156.39862-1-jamrial@gmail.com> References: <20220214224156.39862-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 6/6] avcodec/setts_bsf: add constants to modify packet duration 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Y2eg8sQ27Bo4 Signed-off-by: James Almer --- Missing doc changes. libavcodec/setts_bsf.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/libavcodec/setts_bsf.c b/libavcodec/setts_bsf.c index 35266ee251..46f9a30103 100644 --- a/libavcodec/setts_bsf.c +++ b/libavcodec/setts_bsf.c @@ -35,12 +35,16 @@ static const char *const var_names[] = { "POS", ///< original position in the file of the frame "PREV_INPTS", ///< previous input PTS "PREV_INDTS", ///< previous input DTS + "PREV_INDURATION", ///< previous input duration "PREV_OUTPTS", ///< previous output PTS "PREV_OUTDTS", ///< previous output DTS + "PREV_OUTDURATION", ///< previous output duration "NEXT_PTS", ///< next input PTS "NEXT_DTS", ///< next input DTS + "NEXT_DURATION", ///< next input duration "PTS", ///< original PTS in the file of the frame "DTS", ///< original DTS in the file of the frame + "DURATION", ///< original duration in the file of the frame "STARTPTS", ///< PTS at start of movie "STARTDTS", ///< DTS at start of movie "TB", ///< timebase of the stream @@ -55,12 +59,16 @@ enum var_name { VAR_POS, VAR_PREV_INPTS, VAR_PREV_INDTS, + VAR_PREV_INDUR, VAR_PREV_OUTPTS, VAR_PREV_OUTDTS, + VAR_PREV_OUTDUR, VAR_NEXT_PTS, VAR_NEXT_DTS, + VAR_NEXT_DUR, VAR_PTS, VAR_DTS, + VAR_DURATION, VAR_STARTPTS, VAR_STARTDTS, VAR_TB, @@ -75,6 +83,7 @@ typedef struct SetTSContext { char *ts_str; char *pts_str; char *dts_str; + char *duration_str; int64_t frame_number; @@ -86,6 +95,7 @@ typedef struct SetTSContext { AVExpr *ts_expr; AVExpr *pts_expr; AVExpr *dts_expr; + AVExpr *duration_expr; AVPacket *prev_inpkt; AVPacket *prev_outpkt; @@ -109,6 +119,12 @@ static int setts_init(AVBSFContext *ctx) return ret; } + if ((ret = av_expr_parse(&s->duration_expr, s->duration_str, + var_names, NULL, NULL, NULL, NULL, 0, ctx)) < 0) { + av_log(ctx, AV_LOG_ERROR, "Error while parsing duration expression '%s'\n", s->duration_str); + return ret; + } + if (s->pts_str) { if ((ret = av_expr_parse(&s->pts_expr, s->pts_str, var_names, NULL, NULL, NULL, NULL, 0, ctx)) < 0) { @@ -136,7 +152,7 @@ static int setts_init(AVBSFContext *ctx) static int setts_filter(AVBSFContext *ctx, AVPacket *pkt) { SetTSContext *s = ctx->priv_data; - int64_t new_ts, new_pts, new_dts; + int64_t new_ts, new_pts, new_dts, new_duration; int ret; ret = ff_bsf_get_packet_ref(ctx, pkt); @@ -159,18 +175,23 @@ static int setts_filter(AVBSFContext *ctx, AVPacket *pkt) s->var_values[VAR_POS] = s->cur_pkt->pos; s->var_values[VAR_PTS] = s->cur_pkt->pts; s->var_values[VAR_DTS] = s->cur_pkt->dts; + s->var_values[VAR_DURATION] = s->cur_pkt->duration; s->var_values[VAR_PREV_INPTS] = s->prev_inpkt->pts; s->var_values[VAR_PREV_INDTS] = s->prev_inpkt->dts; + s->var_values[VAR_PREV_INDUR] = s->prev_inpkt->duration; s->var_values[VAR_PREV_OUTPTS] = s->prev_outpkt->pts; s->var_values[VAR_PREV_OUTDTS] = s->prev_outpkt->dts; + s->var_values[VAR_PREV_OUTDUR] = s->prev_outpkt->duration; s->var_values[VAR_NEXT_PTS] = pkt->pts; s->var_values[VAR_NEXT_DTS] = pkt->dts; + s->var_values[VAR_NEXT_DUR] = pkt->duration; s->var_values[VAR_STARTPTS] = s->start_pts; s->var_values[VAR_STARTDTS] = s->start_dts; s->var_values[VAR_TB] = ctx->time_base_out.den ? av_q2d(ctx->time_base_out) : 0; s->var_values[VAR_SR] = ctx->par_in->sample_rate; new_ts = llrint(av_expr_eval(s->ts_expr, s->var_values, NULL)); + new_duration = llrint(av_expr_eval(s->duration_expr, s->var_values, NULL)); if (s->pts_str) { s->var_values[VAR_TS] = s->cur_pkt->pts; @@ -197,6 +218,7 @@ static int setts_filter(AVBSFContext *ctx, AVPacket *pkt) pkt->pts = new_pts; pkt->dts = new_dts; + pkt->duration = new_duration; ret = av_packet_ref(s->prev_outpkt, pkt); if (ret < 0) @@ -228,6 +250,7 @@ static const AVOption options[] = { { "ts", "set expression for packet PTS and DTS", OFFSET(ts_str), AV_OPT_TYPE_STRING, {.str="TS"}, 0, 0, FLAGS }, { "pts", "set expression for packet PTS", OFFSET(pts_str), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS }, { "dts", "set expression for packet DTS", OFFSET(dts_str), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS }, + { "duration", "set expression for packet duration", OFFSET(duration_str), AV_OPT_TYPE_STRING, {.str="DURATION"}, 0, 0, FLAGS }, { NULL }, };