From patchwork Thu Sep 14 15:10:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 43728 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4b2f:b0:149:dfde:5c0a with SMTP id fp47csp482589pzb; Thu, 14 Sep 2023 08:11:10 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEPw3Dx9CKTl4dfJkl/Wv6LzTCapednmwqt5I/7xNec3L/2kDwuN07E20L+9BKBftfL04G6 X-Received: by 2002:a17:906:300a:b0:9a2:19ea:88fc with SMTP id 10-20020a170906300a00b009a219ea88fcmr4415016ejz.71.1694704269960; Thu, 14 Sep 2023 08:11:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694704269; cv=none; d=google.com; s=arc-20160816; b=b9njxn5+HAUOO3vlEH7prv3Bm6MXCj473MsCM+Tc/FS8ZZ5eVow4ADqkqVLgk5O7Nz somAczMzG9xC4+MMVs2RYnZafmZWkm/0VhVKFSuwEBm4P1ExFgQ5mBjfT9xN81pK9U3z tMgcKYEVw9OH705h2yQzTuXhMRaN3rchWQTL6TuEWbsbuCl003kTgclyFI0+RdUFJrm8 DTwPtjmbRQEN8Ikbc3Dn9QAboTSoqdK4Ui00isKi+6pWW9iCOoAXmuJsyolcsr2SUISj fTtUu5/g1/JqvUbZU56NhLQspSDlYMaYF48Q0i5pQZjhEaGOXTkgkOeW09hcKrhxXY7p gSjw== 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 :delivered-to; bh=bh6oVOv+Qx/kpP403jucdASa6z6XLgO3/El0uwsGR5A=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=MfjbNpSP+h7Js9/nZPT5HjQ0dZyrQdSIq9MxYdOPOKW2p7b1StpOux+DOpR9ZTz8y4 RTfT8x9wEmHsogBsPid+0yscqp/4aFNBXvR/slLiI++GHxHcEI8GQLridEdwn5an5Hgb pJMkCsBJmLGW3JRqEPWEMCMGqLPMRHqLVjrc0f/IJ0A8mGha7unm1wJKyvsy7izm2HF+ U4L4LK3bDYzQRZ0QT+trZVJXLPhlwPUv6c/dD0n9OUn6VnJVRC9kstAlIl4F2ZkBh7wB 8MN+llCZJp127aj3+r86Dof3kXZkg6bC7f9eDMttR2fiy0dVJ7XFv9HoWyAmoHLk6Ghi SaQA== 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 y14-20020a170906470e00b00991dfb5dfb7si1327422ejq.573.2023.09.14.08.10.57; Thu, 14 Sep 2023 08:11: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 DA27E68C7D9; Thu, 14 Sep 2023 18:10:52 +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 40AEE68C56B for ; Thu, 14 Sep 2023 18:10:46 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id E785A240200 for ; Thu, 14 Sep 2023 17:10:45 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id Ur2dEdszwrdx for ; Thu, 14 Sep 2023 17:10:45 +0200 (CEST) Received: from mail1.khirnov.net (mail1.khirnov.net [IPv6:2a00:c500:561:206::5]) (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 "mail1.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id 824D42401E7 for ; Thu, 14 Sep 2023 17:10:45 +0200 (CEST) Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 0D822257E for ; Thu, 14 Sep 2023 17:10:38 +0200 (CEST) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id N7K3K5iFzwlN for ; Thu, 14 Sep 2023 17:10:33 +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 mail1.khirnov.net (Postfix) with ESMTPS id 2616D257C for ; Thu, 14 Sep 2023 17:10:33 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 9BD6C3A0376 for ; Thu, 14 Sep 2023 17:10:26 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Thu, 14 Sep 2023 17:10:18 +0200 Message-Id: <20230914151020.10415-1-anton@khirnov.net> X-Mailer: git-send-email 2.40.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/3] fftools/ffmpeg_enc: refactor setting encoding field_order 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: tj3ZzTdQzVcd Merge three blocks with slightly inconsistent checks into one, treating encoder input as interlaced when either: * at least one of ilme/ildct flags is set * the first frame in the stream is marked as interlaced * the user specified the -top option Stop modifying the frame passed to enc_open(). --- fftools/ffmpeg_enc.c | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c index f28884e50c..e878eb02b4 100644 --- a/fftools/ffmpeg_enc.c +++ b/fftools/ffmpeg_enc.c @@ -356,29 +356,18 @@ int enc_open(OutputStream *ost, AVFrame *frame) enc_ctx->colorspace = frame->colorspace; enc_ctx->chroma_sample_location = frame->chroma_location; - // Field order: autodetection - if (enc_ctx->flags & (AV_CODEC_FLAG_INTERLACED_DCT | AV_CODEC_FLAG_INTERLACED_ME) && - ost->top_field_first >= 0) - if (ost->top_field_first) - frame->flags |= AV_FRAME_FLAG_TOP_FIELD_FIRST; - else - frame->flags &= ~AV_FRAME_FLAG_TOP_FIELD_FIRST; + if (enc_ctx->flags & (AV_CODEC_FLAG_INTERLACED_DCT | AV_CODEC_FLAG_INTERLACED_ME) || + (frame->flags & AV_FRAME_FLAG_INTERLACED) || ost->top_field_first >= 0) { + int top_field_first = ost->top_field_first >= 0 ? + ost->top_field_first : !!(frame->flags & AV_FRAME_FLAG_TOP_FIELD_FIRST); - if (frame->flags & AV_FRAME_FLAG_INTERLACED) { if (enc->id == AV_CODEC_ID_MJPEG) - enc_ctx->field_order = (frame->flags & AV_FRAME_FLAG_TOP_FIELD_FIRST) ? AV_FIELD_TT:AV_FIELD_BB; + enc_ctx->field_order = top_field_first ? AV_FIELD_TT : AV_FIELD_BB; else - enc_ctx->field_order = (frame->flags & AV_FRAME_FLAG_TOP_FIELD_FIRST) ? AV_FIELD_TB:AV_FIELD_BT; + enc_ctx->field_order = top_field_first ? AV_FIELD_TB : AV_FIELD_BT; } else enc_ctx->field_order = AV_FIELD_PROGRESSIVE; - // Field order: override - if (ost->top_field_first == 0) { - enc_ctx->field_order = AV_FIELD_BB; - } else if (ost->top_field_first == 1) { - enc_ctx->field_order = AV_FIELD_TT; - } - break; } case AVMEDIA_TYPE_SUBTITLE: From patchwork Thu Sep 14 15:10:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 43729 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4b2f:b0:149:dfde:5c0a with SMTP id fp47csp482630pzb; Thu, 14 Sep 2023 08:11:12 -0700 (PDT) X-Google-Smtp-Source: AGHT+IH4OPZaNynyJFWgWw4mgWP8hsXYOHgm2W2SAU2QZdD/xhtHmH66U0d9b99Jc4VGi/dScL5P X-Received: by 2002:a05:6512:2805:b0:500:cb2b:866f with SMTP id cf5-20020a056512280500b00500cb2b866fmr6365458lfb.30.1694704271629; Thu, 14 Sep 2023 08:11:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694704271; cv=none; d=google.com; s=arc-20160816; b=jUCxQRiD3q4uCtoKB89hI4Kzi1is9qaH5Y3aAPEQx/aGjuux57o1Ny+KMFrhz4vkMg 0UXfmdaxwdVyZOeILUDUMjjcz8yjHoKV08I/CSGxhjumAAfcvjpxKRu0IeEjrfuiA1B/ izoVJSklyNCig6w6qp5roqrYj67tJSXf17BgX752Opaq5x4IV44Jjb7neNiSHTa/l4F/ 4wujZA5hnOtC9TVujZj49/IBZMRazBLGQ6TX/A1OhebgcC9f40h5qxxThc84tgkFLdpo NvmLDcnxq/AYo4WPNMZDcGj94tqKEY/N+ISnWedDHw/xQeXa75C1zP0V0Coain6S0JBY e9ww== 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:delivered-to; bh=DyMmumcxG9s2SU/ngqqEymtKjiLcB34V+xfbUQnj6HA=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=tBO3Wf/aPYd8CXpkKHUV4+k2Ay5HABESAKMRyCWIHfBz+nnT6Ujm1EZE9eiDdmuWUQ DPMzU5kxy9YDBicFqRzEwYc/nhw+riG+1Tq7pJAr+E8J9hE6igAEzRCPoabJ5FT1I2T4 dwpuDx0VCeSwGiYDXh1jq9Qq+SCSkieRI5YJ22BCD8FYXUBrnOavHglEBj6s1W2RamY+ sYMSA+i3yMTsvy1gn/2pLv4QNHkoNXak3ClDKw/k939PbV8fVVtvdnIpgBt0MMZ9wQw+ Mj5s04XOjF6mWxHMHb84aLxSkWbwoGcGASFqmAKYZ4TceTBSnCS+50QbcmIr6Y8abWNg 5QEA== 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 q8-20020aa7da88000000b0052a24fae423si1540476eds.685.2023.09.14.08.11.09; Thu, 14 Sep 2023 08:11:11 -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 DFD1568C7E3; Thu, 14 Sep 2023 18:10:53 +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 3E0DF68C534 for ; Thu, 14 Sep 2023 18:10:46 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 0051B2401E7 for ; Thu, 14 Sep 2023 17:10:46 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id 7Bov6JD7F0qh for ; Thu, 14 Sep 2023 17:10:45 +0200 (CEST) Received: from mail1.khirnov.net (mail1.khirnov.net [IPv6:2a00:c500:561:206::5]) (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 "mail1.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id 7A78C2401A4 for ; Thu, 14 Sep 2023 17:10:45 +0200 (CEST) Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 1100E27F1 for ; Thu, 14 Sep 2023 17:10:38 +0200 (CEST) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id 2T4VYPg-lbTe for ; Thu, 14 Sep 2023 17:10:33 +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 mail1.khirnov.net (Postfix) with ESMTPS id 240B315F8 for ; Thu, 14 Sep 2023 17:10:33 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id A90FF3A0D2D for ; Thu, 14 Sep 2023 17:10:26 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Thu, 14 Sep 2023 17:10:19 +0200 Message-Id: <20230914151020.10415-2-anton@khirnov.net> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230914151020.10415-1-anton@khirnov.net> References: <20230914151020.10415-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/3] fftools/ffmpeg_enc: apply -top to individual encoded frames 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: sRsd/60I+Nj1 Fixes #9339. --- fftools/ffmpeg_enc.c | 5 +++++ tests/ref/fate/concat-demuxer-extended-lavf-mxf_d10 | 2 +- tests/ref/fate/concat-demuxer-simple1-lavf-mxf_d10 | 2 +- tests/ref/lavf/mxf_d10 | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c index e878eb02b4..902ba3c37a 100644 --- a/fftools/ffmpeg_enc.c +++ b/fftools/ffmpeg_enc.c @@ -1156,6 +1156,11 @@ static int do_video_out(OutputFile *of, OutputStream *ost, AVFrame *frame) in_picture->quality = enc->global_quality; in_picture->pict_type = forced_kf_apply(ost, &ost->kf, enc->time_base, in_picture, i); + if (ost->top_field_first >= 0) { + in_picture->flags &= ~AV_FRAME_FLAG_TOP_FIELD_FIRST; + in_picture->flags |= AV_FRAME_FLAG_TOP_FIELD_FIRST * (!!ost->top_field_first); + } + ret = submit_encode_frame(of, ost, in_picture); if (ret == AVERROR_EOF) break; diff --git a/tests/ref/fate/concat-demuxer-extended-lavf-mxf_d10 b/tests/ref/fate/concat-demuxer-extended-lavf-mxf_d10 index 66fafd3e06..f7fd0e9c57 100644 --- a/tests/ref/fate/concat-demuxer-extended-lavf-mxf_d10 +++ b/tests/ref/fate/concat-demuxer-extended-lavf-mxf_d10 @@ -1 +1 @@ -9583eaa1d52e977c75da2ab3f14225c8 *tests/data/fate/concat-demuxer-extended-lavf-mxf_d10.ffprobe +8e95ee1001700a251bf5019cb2757729 *tests/data/fate/concat-demuxer-extended-lavf-mxf_d10.ffprobe diff --git a/tests/ref/fate/concat-demuxer-simple1-lavf-mxf_d10 b/tests/ref/fate/concat-demuxer-simple1-lavf-mxf_d10 index 98b922cc7f..abfe0675ad 100644 --- a/tests/ref/fate/concat-demuxer-simple1-lavf-mxf_d10 +++ b/tests/ref/fate/concat-demuxer-simple1-lavf-mxf_d10 @@ -68,5 +68,5 @@ video|0|33|1.320000|33|1.320000|1|0.040000|150000|1711104|K__|1|Strings Metadata audio|1|63360|1.320000|63360|1.320000|1920|0.040000|7680|1861632|K__|1|Strings Metadata video|0|34|1.360000|34|1.360000|1|0.040000|150000|1924096|K__|1|Strings Metadata audio|1|65280|1.360000|65280|1.360000|1920|0.040000|7680|2074624|K__|1|Strings Metadata -0|mpeg2video|0|video|[0][0][0][0]|0x0000|720|608|0|0|0|0|0|1:1|45:38|yuv422p|5|tv|unknown|unknown|unknown|topleft|tb|1|N/A|25/1|25/1|1/25|0|0.000000|N/A|N/A|30000000|N/A|N/A|N/A|N/A|35|22|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0x060A2B340101010501010D001300000000000000000000000000000000000001|CPB properties|30000000|0|0|1212416|-1 +0|mpeg2video|0|video|[0][0][0][0]|0x0000|720|608|0|0|0|0|0|1:1|45:38|yuv422p|5|tv|unknown|unknown|unknown|topleft|tt|1|N/A|25/1|25/1|1/25|0|0.000000|N/A|N/A|30000000|N/A|N/A|N/A|N/A|35|22|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0x060A2B340101010501010D001300000000000000000000000000000000000001|CPB properties|30000000|0|0|1212416|-1 1|pcm_s16le|unknown|audio|[0][0][0][0]|0x0000|s16|48000|2|unknown|16|0|N/A|0/0|0/0|1/48000|0|0.000000|N/A|N/A|1536000|N/A|N/A|N/A|N/A|35|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0x060A2B340101010501010D001300000000000000000000000000000000000001 diff --git a/tests/ref/lavf/mxf_d10 b/tests/ref/lavf/mxf_d10 index 4644c3424d..191e9f877c 100644 --- a/tests/ref/lavf/mxf_d10 +++ b/tests/ref/lavf/mxf_d10 @@ -1,3 +1,3 @@ -74269c0a64b19269b127f64f3ce7fa6a *tests/data/lavf/lavf.mxf_d10 +963758bdb2a5d64f4e68c205fc5aba96 *tests/data/lavf/lavf.mxf_d10 5332013 tests/data/lavf/lavf.mxf_d10 tests/data/lavf/lavf.mxf_d10 CRC=0x6c74d488 From patchwork Thu Sep 14 15:10:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 43730 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4b2f:b0:149:dfde:5c0a with SMTP id fp47csp482878pzb; Thu, 14 Sep 2023 08:11:30 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEXEwsV70LC8B10HvHHktcjQ/98zR0vIGkQ9qwi3s7PadLl+PhE9RHNOSIaPRgLTCii2g94 X-Received: by 2002:aa7:d4c2:0:b0:523:100b:462b with SMTP id t2-20020aa7d4c2000000b00523100b462bmr5668597edr.5.1694704290480; Thu, 14 Sep 2023 08:11:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694704290; cv=none; d=google.com; s=arc-20160816; b=VlhydriBY+Jhs1s5rgRqqnOIgAf9kIrYxvEaG5wFJNx+nml6NaCaMpvEyPw+nspWPO 7OM/PKt2B0F2R+29HJxzRa8LYdD3OafaPwUS7mOYq7Ys+2pcXDRjGAjL53DtJm2IDa3C +2jVy1N+84WFtlH1i09DnMGAKGBNqHojYxTvS77U8bDJn80UwQ6/9hUMr8vGvMtI+TWm t6Rvl/T2BTguvjt7JOstXqm0Zu0ZDOx5T40JTRcbjwPGEziHdwiGhXqVhKQ/aQZ9iJCT napshYAuL0/4cRuOg2Z0upQXEk7lToNwR9KJqS6qxG5PlxCn75g/3ckP9deKIi4n15Gq gNDQ== 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:delivered-to; bh=2j0gieiIDr6nt2Gg/Hy09QJ0SQWwXexZ53927dVCikU=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=0Wvr3X6MiHxvzXERxlFyoIpAZntFOenWPPD4tA/fB7R/qwwng/98iPHVXLwEoElLS7 sfJ/tO3wcxjAfbrjbswVb9gYuicMPipRxcqjFyDzYXjdoS6JtKatViju7yur9gcJKiB1 BNzAXew5PYl4X1lsa8C/0m9Q39IPN2rSYZqL8AkZx3kt/DRZz2wS/EI1IzlIpLaIL3RG B5mwLsnBQVCZzgfmPNBFR1iyRrbn6FN/UryAPkFYEwobW8YNs7797GGeZ/SaN3I8C9Tf BnAILpSspp0cANHTanOK3UTuTgVOnNjpE9Ooo/98vti3V54Zx0iOv8/dyTAL4+1FrMmz Quqg== 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 j9-20020aa7ca49000000b00523c00cdd04si1575343edt.614.2023.09.14.08.11.21; Thu, 14 Sep 2023 08:11:30 -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 EDE8968C7F7; Thu, 14 Sep 2023 18:10:55 +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 0364E68C6F8 for ; Thu, 14 Sep 2023 18:10:50 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id BDEC92404C3 for ; Thu, 14 Sep 2023 17:10:49 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id ybakmVJirHFJ for ; Thu, 14 Sep 2023 17:10:49 +0200 (CEST) Received: from mail1.khirnov.net (mail1.khirnov.net [IPv6:2a00:c500:561:206::5]) (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 "mail1.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id 049982401A4 for ; Thu, 14 Sep 2023 17:10:49 +0200 (CEST) Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id B840815F8 for ; Thu, 14 Sep 2023 17:10:42 +0200 (CEST) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id DEATxOQiC0vO for ; Thu, 14 Sep 2023 17:10:38 +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 mail1.khirnov.net (Postfix) with ESMTPS id 2285C6DA for ; Thu, 14 Sep 2023 17:10:33 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id B46F63A150F for ; Thu, 14 Sep 2023 17:10:26 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Thu, 14 Sep 2023 17:10:20 +0200 Message-Id: <20230914151020.10415-3-anton@khirnov.net> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230914151020.10415-1-anton@khirnov.net> References: <20230914151020.10415-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/3] fftools/ffmpeg: deprecate the -top option 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: 93zacyYRlXpE It is badly named (should have been -top_field_first, or at least -tff), underdocumented and underspecified, and (most importantly) entirely redundant with the setfield filter. --- Changelog | 1 + doc/ffmpeg.texi | 2 -- fftools/ffmpeg.h | 9 +++++++++ fftools/ffmpeg_dec.c | 6 +++++- fftools/ffmpeg_demux.c | 2 ++ fftools/ffmpeg_enc.c | 16 +++++++++++++--- fftools/ffmpeg_mux_init.c | 4 ++++ fftools/ffmpeg_opt.c | 6 +++++- tests/fate/lavf-container.mak | 8 ++++---- 9 files changed, 43 insertions(+), 11 deletions(-) diff --git a/Changelog b/Changelog index 0cfcecfb93..021218a453 100644 --- a/Changelog +++ b/Changelog @@ -32,6 +32,7 @@ version : - apsnr and asisdr audio filters - OSQ demuxer and decoder - Support HEVC,VP9,AV1 codec fourcclist in enhanced rtmp protocol +- ffmpeg CLI '-top' option deprecated in favor of the setfield filter version 6.0: diff --git a/doc/ffmpeg.texi b/doc/ffmpeg.texi index 2273c39214..d2864ff37e 100644 --- a/doc/ffmpeg.texi +++ b/doc/ffmpeg.texi @@ -1052,8 +1052,6 @@ Dump video coding statistics to @var{file}. See the Specify which version of the vstats format to use. Default is @code{2}. See the @ref{vstats_file_format,,vstats file format} section for the format description. -@item -top[:@var{stream_specifier}] @var{n} (@emph{output,per-stream}) -top=1/bottom=0/auto=-1 field first @item -vtag @var{fourcc/tag} (@emph{output}) Force video tag/fourcc. This is an alias for @code{-tag:v}. @item -vbsf @var{bitstream_filter} diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index b146f1f2dc..b059ecbb9f 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -57,6 +57,7 @@ #define FFMPEG_OPT_QPHIST 1 #define FFMPEG_OPT_ADRIFT_THRESHOLD 1 #define FFMPEG_OPT_ENC_TIME_BASE_NUM 1 +#define FFMPEG_OPT_TOP 1 enum VideoSyncMethod { VSYNC_AUTO = -1, @@ -218,8 +219,10 @@ typedef struct OptionsContext { int nb_inter_matrices; SpecifierOpt *chroma_intra_matrices; int nb_chroma_intra_matrices; +#if FFMPEG_OPT_TOP SpecifierOpt *top_field_first; int nb_top_field_first; +#endif SpecifierOpt *metadata_map; int nb_metadata_map; SpecifierOpt *presets; @@ -344,7 +347,9 @@ typedef struct InputStream { AVDictionary *decoder_opts; AVRational framerate; /* framerate forced with -r */ +#if FFMPEG_OPT_TOP int top_field_first; +#endif int autorotate; @@ -538,7 +543,9 @@ typedef struct OutputStream { enum VideoSyncMethod vsync_method; int is_cfr; int force_fps; +#if FFMPEG_OPT_TOP int top_field_first; +#endif #if FFMPEG_ROTATION_METADATA int rotate_overridden; #endif @@ -931,7 +938,9 @@ static inline int err_merge(int err0, int err1) extern const char * const opt_name_codec_names[]; extern const char * const opt_name_codec_tags[]; extern const char * const opt_name_frame_rates[]; +#if FFMPEG_OPT_TOP extern const char * const opt_name_top_field_first[]; +#endif static inline void pkt_move(void *dst, void *src) { diff --git a/fftools/ffmpeg_dec.c b/fftools/ffmpeg_dec.c index 8a3b52fd7e..1de8234a97 100644 --- a/fftools/ffmpeg_dec.c +++ b/fftools/ffmpeg_dec.c @@ -325,8 +325,12 @@ static int video_frame_process(InputStream *ist, AVFrame *frame) ist->dec_ctx->pix_fmt); } - if(ist->top_field_first>=0) +#if FFMPEG_OPT_TOP + if(ist->top_field_first>=0) { + av_log(ist, AV_LOG_WARNING, "-top is deprecated, use the setfield filter instead\n"); frame->flags |= AV_FRAME_FLAG_TOP_FIELD_FIRST; + } +#endif if (frame->format == d->hwaccel_pix_fmt) { int err = hwaccel_retrieve_data(ist->dec_ctx, frame); diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index 48edbd7f6b..c01852d4cf 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -1226,8 +1226,10 @@ static int ist_add(const OptionsContext *o, Demuxer *d, AVStream *st) } } +#if FFMPEG_OPT_TOP ist->top_field_first = -1; MATCH_PER_STREAM_OPT(top_field_first, i, ist->top_field_first, ic, st); +#endif ist->framerate_guessed = av_guess_frame_rate(ic, st, NULL); diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c index 902ba3c37a..b40a6211a9 100644 --- a/fftools/ffmpeg_enc.c +++ b/fftools/ffmpeg_enc.c @@ -357,9 +357,17 @@ int enc_open(OutputStream *ost, AVFrame *frame) enc_ctx->chroma_sample_location = frame->chroma_location; if (enc_ctx->flags & (AV_CODEC_FLAG_INTERLACED_DCT | AV_CODEC_FLAG_INTERLACED_ME) || - (frame->flags & AV_FRAME_FLAG_INTERLACED) || ost->top_field_first >= 0) { - int top_field_first = ost->top_field_first >= 0 ? - ost->top_field_first : !!(frame->flags & AV_FRAME_FLAG_TOP_FIELD_FIRST); + (frame->flags & AV_FRAME_FLAG_INTERLACED) +#if FFMPEG_OPT_TOP + || ost->top_field_first >= 0 +#endif + ) { + int top_field_first = +#if FFMPEG_OPT_TOP + ost->top_field_first >= 0 ? + ost->top_field_first : +#endif + !!(frame->flags & AV_FRAME_FLAG_TOP_FIELD_FIRST); if (enc->id == AV_CODEC_ID_MJPEG) enc_ctx->field_order = top_field_first ? AV_FIELD_TT : AV_FIELD_BB; @@ -1156,10 +1164,12 @@ static int do_video_out(OutputFile *of, OutputStream *ost, AVFrame *frame) in_picture->quality = enc->global_quality; in_picture->pict_type = forced_kf_apply(ost, &ost->kf, enc->time_base, in_picture, i); +#if FFMPEG_OPT_TOP if (ost->top_field_first >= 0) { in_picture->flags &= ~AV_FRAME_FLAG_TOP_FIELD_FIRST; in_picture->flags |= AV_FRAME_FLAG_TOP_FIELD_FIRST * (!!ost->top_field_first); } +#endif ret = submit_encode_frame(of, ost, in_picture); if (ret == AVERROR_EOF) diff --git a/fftools/ffmpeg_mux_init.c b/fftools/ffmpeg_mux_init.c index cf4cd2d5b7..9d6f442068 100644 --- a/fftools/ffmpeg_mux_init.c +++ b/fftools/ffmpeg_mux_init.c @@ -779,8 +779,12 @@ static int new_stream_video(Muxer *mux, const OptionsContext *o, MATCH_PER_STREAM_OPT(force_fps, i, ost->force_fps, oc, st); +#if FFMPEG_OPT_TOP ost->top_field_first = -1; MATCH_PER_STREAM_OPT(top_field_first, i, ost->top_field_first, oc, st); + if (ost->top_field_first >= 0) + av_log(ost, AV_LOG_WARNING, "-top is deprecated, use the setfield filter instead\n"); +#endif ost->vsync_method = video_sync_method; MATCH_PER_STREAM_OPT(fps_mode, str, fps_mode, oc, st); diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c index dc6044120a..304471dd03 100644 --- a/fftools/ffmpeg_opt.c +++ b/fftools/ffmpeg_opt.c @@ -56,7 +56,9 @@ const char *const opt_name_codec_names[] = {"c", "codec", "acodec", "vcodec", "scodec", "dcodec", NULL}; const char *const opt_name_frame_rates[] = {"r", NULL}; const char *const opt_name_codec_tags[] = {"tag", "atag", "vtag", "stag", NULL}; +#if FFMPEG_OPT_TOP const char *const opt_name_top_field_first[] = {"top", NULL}; +#endif HWDevice *filter_hw_device; @@ -1695,9 +1697,11 @@ const OptionDef options[] = { { "chroma_intra_matrix", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_STRING | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(chroma_intra_matrices) }, "specify intra matrix coeffs", "matrix" }, +#if FFMPEG_OPT_TOP { "top", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_INT| OPT_SPEC | OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(top_field_first) }, - "top=1/bottom=0/auto=-1 field first", "" }, + "deprecated, use the setfield video filter", "" }, +#endif { "vtag", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_PERFILE | OPT_INPUT | OPT_OUTPUT, { .func_arg = opt_old2new }, "force video tag/fourcc", "fourcc/tag" }, diff --git a/tests/fate/lavf-container.mak b/tests/fate/lavf-container.mak index 0081b45eea..d4a0ac7510 100644 --- a/tests/fate/lavf-container.mak +++ b/tests/fate/lavf-container.mak @@ -54,10 +54,10 @@ fate-lavf-mov_rtphint: CMD = lavf_container "" "-movflags +rtphint -c:a pcm_alaw fate-lavf-mp4: CMD = lavf_container_timecode "-c:v mpeg4 -an -threads 1" fate-lavf-mpg: CMD = lavf_container_timecode "-ar 44100 -threads 1" fate-lavf-mxf: CMD = lavf_container_timecode "-ar 48000 -bf 2 -threads 1" -fate-lavf-mxf_d10: CMD = lavf_container "-ar 48000 -ac 2" "-r 25 -vf scale=720:576,pad=720:608:0:32 -c:v mpeg2video -g 0 -flags +ildct+low_delay -dc 10 -non_linear_quant 1 -intra_vlc 1 -qscale 1 -ps 1 -qmin 1 -rc_max_vbv_use 1 -rc_min_vbv_use 1 -pix_fmt yuv422p -minrate 30000k -maxrate 30000k -b 30000k -bufsize 1200000 -top 1 -rc_init_occupancy 1200000 -qmax 12 -f mxf_d10" -fate-lavf-mxf_dv25: CMD = lavf_container "-ar 48000 -ac 2" "-r 25 -vf scale=720:576,setdar=4/3 -c:v dvvideo -pix_fmt yuv420p -b 25000k -top 0 -f mxf" -fate-lavf-mxf_dvcpro50: CMD = lavf_container "-ar 48000 -ac 2" "-r 25 -vf scale=720:576,setdar=16/9 -c:v dvvideo -pix_fmt yuv422p -b 50000k -top 0 -f mxf" -fate-lavf-mxf_dvcpro100: CMD = lavf_container "-ar 48000 -ac 2" "-r 25 -vf scale=1440:1080,setdar=16/9 -c:v dvvideo -pix_fmt yuv422p -b 100000k -top 0 -f mxf" +fate-lavf-mxf_d10: CMD = lavf_container "-ar 48000 -ac 2" "-r 25 -vf scale=720:576,pad=720:608:0:32,setfield=tff -c:v mpeg2video -g 0 -flags +ildct+low_delay -dc 10 -non_linear_quant 1 -intra_vlc 1 -qscale 1 -ps 1 -qmin 1 -rc_max_vbv_use 1 -rc_min_vbv_use 1 -pix_fmt yuv422p -minrate 30000k -maxrate 30000k -b 30000k -bufsize 1200000 -rc_init_occupancy 1200000 -qmax 12 -f mxf_d10" +fate-lavf-mxf_dv25: CMD = lavf_container "-ar 48000 -ac 2" "-r 25 -vf scale=720:576,setdar=4/3,setfield=bff -c:v dvvideo -pix_fmt yuv420p -b 25000k -f mxf" +fate-lavf-mxf_dvcpro50: CMD = lavf_container "-ar 48000 -ac 2" "-r 25 -vf scale=720:576,setdar=16/9,setfield=bff -c:v dvvideo -pix_fmt yuv422p -b 50000k -f mxf" +fate-lavf-mxf_dvcpro100: CMD = lavf_container "-ar 48000 -ac 2" "-r 25 -vf scale=1440:1080,setdar=16/9,setfield=bff -c:v dvvideo -pix_fmt yuv422p -b 100000k -f mxf" fate-lavf-mxf_ffv1: CMD = lavf_container "-an" "-r 25 -vf scale=720:576,setdar=4/3 -c:v ffv1 -level 3 -pix_fmt yuv420p -f mxf" fate-lavf-mxf_opatom: CMD = lavf_container "" "-s 1920x1080 -c:v dnxhd -pix_fmt yuv422p -vb 36M -f mxf_opatom -map 0" fate-lavf-mxf_opatom_audio: CMD = lavf_container "-ar 48000 -ac 1" "-f mxf_opatom -mxf_audio_edit_rate 25 -map 1"