From patchwork Tue Oct 27 18:30:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 23255 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id A703644A220 for ; Tue, 27 Oct 2020 20:36:39 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7756F6898C1; Tue, 27 Oct 2020 20:36:39 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf1-f50.google.com (mail-lf1-f50.google.com [209.85.167.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7F3686880B2 for ; Tue, 27 Oct 2020 20:36:33 +0200 (EET) Received: by mail-lf1-f50.google.com with SMTP id r127so3590686lff.12 for ; Tue, 27 Oct 2020 11:36:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=2GKvU4cUAqoV0orYwZnKRYj16U9nIiEX4n5nHO5vkLA=; b=e7vvjuAkd6Jgn+CpbxTkJUsDAyrT4bcgvm+9EEkAKAofdtKdtueRiNhYFslWKJrBID LHz2SKhJoamq0AK9XOpBtD0KhA/gjTGzFGavmiz65msLlIPeYXlhc1ertfTl5DJZpjb7 7S7SLAWQAWKHYGj463DrazF2mH5NtuVhoRJqzr+gcRYlB21mRGIcxqW0PIYMe3hTIxUU HO8D1jut2HMVtHlGcBN19Dv6ZfwoLUpylh/rIAHGVRI2SFMYQ/mgwm9Ia1h6BvkQ9QGq cer/GF0yL3GNm6j7lHpCmeOomONsz+ZZb3bXMLMhhesdcMTpQE1/jQrKi5DN/HzUxtTA yeFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=2GKvU4cUAqoV0orYwZnKRYj16U9nIiEX4n5nHO5vkLA=; b=qKhB4LFtikTiQnVnPNqu3W40lz9UdajGxVvIB6//c6Uc0IpcQJaBuyWXrAW5bQQY5V OtHbT5h7fGhU2xI5jJ+FW/D3uEVUVBMFb7pQvdQR6BnkD20PjCzRxJaW4CcJ2xF7HCO6 wtTH7D/3OG3sN7YIQiQa5ZflgpiqJFxSjq6I5aAjcqaz4cwH4w+y+tWU5GTV8mMcOAfS CrW+w+Vc5KfxBj5t30h+z7EUjEnYHoV73irLPFS/HEavWLaFaGErbujV2Ah+rd/LpIob aAC6j+AEX0MT/0uuBCfrHg8BfTSSPNOVf3/jLadwerQXcUG7SUGgjxnajQ/QofI/dIPv fkyA== X-Gm-Message-State: AOAM532dTS+Im8Mf5GIWIDdXb6vsCoBFYunSuJHBBvSzBHN1OhUpYs5D 418pnsGZi1f/Rgofs74capQCbqbBALc= X-Google-Smtp-Source: ABdhPJzIAGIv5yc0a/hzgG24RS+gfNEFbGAnHWiWD62ocjTEwmHy2GP093s6i2wT+baqdesLP0vhbQ== X-Received: by 2002:a05:651c:2db:: with SMTP id f27mr1553867ljo.394.1603823465157; Tue, 27 Oct 2020 11:31:05 -0700 (PDT) Received: from localhost.localdomain (91-159-194-103.elisa-laajakaista.fi. [91.159.194.103]) by smtp.gmail.com with ESMTPSA id a1sm255101lfg.63.2020.10.27.11.31.04 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Oct 2020 11:31:04 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Tue, 27 Oct 2020 20:30:56 +0200 Message-Id: <20201027183056.17993-6-jeebjp@gmail.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201027183056.17993-1-jeebjp@gmail.com> References: <20201027183056.17993-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4 5/5] ffmpeg: move field order decision making to encoder initialization X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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" We now have the possibility of getting AVFrames here, and we should not touch the muxer's codecpar after writing the header. Results of FATE tests change as the MXF and Matroska muxers actually write down the field/frame coding type of a stream in their respective headers. Before this change, these values in codecpar would only be set after the muxer was initialized. Now, the information is also available for encoder and muxer initialization. --- fftools/ffmpeg.c | 27 ++++++++++--------- .../fate/concat-demuxer-extended-lavf-mxf_d10 | 2 +- .../fate/concat-demuxer-simple1-lavf-mxf_d10 | 2 +- tests/ref/fate/rgb24-mkv | 4 +-- tests/ref/lavf/mxf_d10 | 2 +- 5 files changed, 19 insertions(+), 18 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index 20d191bcf6..788cf9c665 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -1123,7 +1123,6 @@ static void do_video_out(OutputFile *of, int ret, format_video_sync; AVPacket pkt; AVCodecContext *enc = ost->enc_ctx; - AVCodecParameters *mux_par = ost->st->codecpar; AVRational frame_rate; int nb_frames, nb0_frames, i; double delta, delta0; @@ -1285,18 +1284,6 @@ static void do_video_out(OutputFile *of, if (!check_recording_time(ost)) return; - if (enc->flags & (AV_CODEC_FLAG_INTERLACED_DCT | AV_CODEC_FLAG_INTERLACED_ME) && - ost->top_field_first >= 0) - in_picture->top_field_first = !!ost->top_field_first; - - if (in_picture->interlaced_frame) { - if (enc->codec->id == AV_CODEC_ID_MJPEG) - mux_par->field_order = in_picture->top_field_first ? AV_FIELD_TT:AV_FIELD_BB; - else - mux_par->field_order = in_picture->top_field_first ? AV_FIELD_TB:AV_FIELD_BT; - } else - mux_par->field_order = AV_FIELD_PROGRESSIVE; - in_picture->quality = enc->global_quality; in_picture->pict_type = 0; @@ -3433,6 +3420,20 @@ static int init_output_stream_encode(OutputStream *ost, AVFrame *frame) enc_ctx->field_order = AV_FIELD_TT; } + if (frame) { + if (enc_ctx->flags & (AV_CODEC_FLAG_INTERLACED_DCT | AV_CODEC_FLAG_INTERLACED_ME) && + ost->top_field_first >= 0) + frame->top_field_first = !!ost->top_field_first; + + if (frame->interlaced_frame) { + if (enc_ctx->codec->id == AV_CODEC_ID_MJPEG) + enc_ctx->field_order = frame->top_field_first ? AV_FIELD_TT:AV_FIELD_BB; + else + enc_ctx->field_order = frame->top_field_first ? AV_FIELD_TB:AV_FIELD_BT; + } else + enc_ctx->field_order = AV_FIELD_PROGRESSIVE; + } + if (ost->forced_keyframes) { if (!strncmp(ost->forced_keyframes, "expr:", 5)) { ret = av_expr_parse(&ost->forced_keyframes_pexpr, ost->forced_keyframes+5, diff --git a/tests/ref/fate/concat-demuxer-extended-lavf-mxf_d10 b/tests/ref/fate/concat-demuxer-extended-lavf-mxf_d10 index e3e76f217a..f6efc00ca4 100644 --- a/tests/ref/fate/concat-demuxer-extended-lavf-mxf_d10 +++ b/tests/ref/fate/concat-demuxer-extended-lavf-mxf_d10 @@ -1 +1 @@ -d66177ea3922692bc91cd0f8aa907650 *tests/data/fate/concat-demuxer-extended-lavf-mxf_d10.ffprobe +84496cfe2d668db395280ea67e5c6fbe *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 79ce1e2306..8f3f2e5265 100644 --- a/tests/ref/fate/concat-demuxer-simple1-lavf-mxf_d10 +++ b/tests/ref/fate/concat-demuxer-simple1-lavf-mxf_d10 @@ -78,5 +78,5 @@ video|0|34|1.360000|34|1.360000|1|0.040000|N/A|N/A|150000|1924096|K_|1 Strings Metadata audio|1|65280|1.360000|65280|1.360000|1920|0.040000|N/A|N/A|7680|2074624|K_|1 Strings Metadata -0|mpeg2video|0|video|1/25|[0][0][0][0]|0x0000|720|608|0|0|0|0|1:1|45:38|yuv422p|5|tv|unknown|unknown|unknown|topleft|tt|N/A|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|0|0|0|0|0|0|0|0|0|0|0|0|0x060A2B340101010501010D001300000000000000000000000000000000000001 +0|mpeg2video|0|video|1/25|[0][0][0][0]|0x0000|720|608|0|0|0|0|1:1|45:38|yuv422p|5|tv|unknown|unknown|unknown|topleft|tb|N/A|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|0|0|0|0|0|0|0|0|0|0|0|0|0x060A2B340101010501010D001300000000000000000000000000000000000001 1|pcm_s16le|unknown|audio|1/48000|[0][0][0][0]|0x0000|s16|48000|2|unknown|16|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|0x060A2B340101010501010D001300000000000000000000000000000000000001 diff --git a/tests/ref/fate/rgb24-mkv b/tests/ref/fate/rgb24-mkv index 34d028cbfd..3b14cd0ef0 100644 --- a/tests/ref/fate/rgb24-mkv +++ b/tests/ref/fate/rgb24-mkv @@ -1,5 +1,5 @@ -fdc02d700dbe99315a9f0d928a9b935e *tests/data/fate/rgb24-mkv.matroska -58213 tests/data/fate/rgb24-mkv.matroska +fde8903c4df0ba8235dafcfd8a2f368c *tests/data/fate/rgb24-mkv.matroska +58216 tests/data/fate/rgb24-mkv.matroska #tb 0: 1/10 #media_type 0: video #codec_id 0: rawvideo diff --git a/tests/ref/lavf/mxf_d10 b/tests/ref/lavf/mxf_d10 index 85e337d157..30701619e0 100644 --- a/tests/ref/lavf/mxf_d10 +++ b/tests/ref/lavf/mxf_d10 @@ -1,3 +1,3 @@ -36fc2a640368f6d33987d2b2d39df966 *tests/data/lavf/lavf.mxf_d10 +da0ebbebb50a530b14c0f06017f464b3 *tests/data/lavf/lavf.mxf_d10 5332013 tests/data/lavf/lavf.mxf_d10 tests/data/lavf/lavf.mxf_d10 CRC=0x6c74d488