From patchwork Tue Feb 1 13:06:29 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 34005 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp606448iov; Tue, 1 Feb 2022 05:14:35 -0800 (PST) X-Google-Smtp-Source: ABdhPJyLZ5XhuWD8Cc1cgvTQL+zF7akcJKKWWEACkHLTXOhPCoietCKOb1KjVf6wfjAiYs6fkY2J X-Received: by 2002:a17:907:7215:: with SMTP id dr21mr20654433ejc.205.1643721274806; Tue, 01 Feb 2022 05:14:34 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id q3si9241999edj.73.2022.02.01.05.14.34; Tue, 01 Feb 2022 05:14:34 -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=@outlook.com header.s=selector1 header.b=gsocVTY1; arc=fail (body hash mismatch); 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=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8D2FF68B381; Tue, 1 Feb 2022 15:08:10 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-oln040092073057.outbound.protection.outlook.com [40.92.73.57]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 79D7268B37E for ; Tue, 1 Feb 2022 15:08:06 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oPYNv1CGnBb1+Q/w6d1yz5GU4oW2TWKemZTSgt2EkmKFHcZlNnZrDEg/2bcYD0RDsPPCxFAxaLSoPUyOnrPtdQ9cad0qvy6TA4hX8Hn4TAWzeUmbEwV4y6ORFn2iTeLwn3+qClUAVlCvphqgHFdqUHLA3AnNW0gRbTjhZwMTqQ2erggeH8CsvVMs91Jz0/PJWL00sVhMkqICG/A9/d0+74jo37dD4xwkfUxiRN02wKMBw04pb9bmnQrAJPxHVIkxuzA7F37bcLaj7Yy6NMc+zO8+9+3pZ14EjAENkW3fexe+QBye+QEFqFs3vEm2zsf8OCMoyUZHLKZFWG2ejiT66A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=UbaRaPdK/OtpHTD4Z6s4c+wGsV7L6BqTcoxLrL2DMuM=; b=GNdmnZnEfyNUIxk854of4RmKd6mpr/q/Lc4BUBEOg5rslKZjG0bZjvT5nvZZmrq8SL4Ce/droSgUTr3pmeFfPbItFcoOh33MzOKYkbtrN05SNu2DKQ0Dq5FH9MrFV6TOAC8lotFfp6LZ0izZIDh2ZJ9jnOpMssxs2odUrvIUdFXCH3wpuF9FPY+wyBn95Byqbq/YJBH0YHn2CHedub8Z3CxoSyI+YAx5g1O5WKetD5Zo6SKgCep5Pzc5bDS0OqXFP2fYyvW+kMw/uqFtqRiA1Jl+YB2QXYTxC1hfVf+10SvKWpxKi9tHIkoQJH2u9j+/X1y9asTozJMyWiQ7IqFH8w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UbaRaPdK/OtpHTD4Z6s4c+wGsV7L6BqTcoxLrL2DMuM=; b=gsocVTY1JDKX+h8zX3iwJ6Clq/fZQ7MC1zpj/pa3psnV0j0JK8G6WX/xJBA0JCfgwYMvf6Vl4+mn9MXYGF619SFdCopGLkeD1bOEXnfOFW4vb6hEy5HhnfARCsTdXffUOK9yfE8JOFzrekJoO9IA/XuJ8x+ypBXgYoYuaZXFKN2YlJJ4O3R3p/oNp3V94tUH5g5w/EmstiCpmhMeulnKPU8MnwgzrLxUv6FYb/R/bKXp1PiEStIrSCtfJl3aHlbsh6dSLc4sVXhHMXMZ2R0XIxEialP/fkMtRPj66SliPvr89OnMrWhVZWW25AYHOvoL6wYU53eXOB9hflmYxRz3hQ== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM9PR03MB6948.eurprd03.prod.outlook.com (2603:10a6:20b:2d9::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4930.22; Tue, 1 Feb 2022 13:08:00 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%6]) with mapi id 15.20.4951.011; Tue, 1 Feb 2022 13:08:00 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 1 Feb 2022 14:06:29 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [Fc/EzpHsvDNbzindyNawFUsce+5alHfl] X-ClientProxiedBy: AM6P195CA0092.EURP195.PROD.OUTLOOK.COM (2603:10a6:209:86::33) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220201130706.1420875-31-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d331f442-4fd7-458e-2ddd-08d9e583dfa5 X-MS-TrafficTypeDiagnostic: AM9PR03MB6948:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 39dmBl8fkrGor0wZQzOdWyrgpsdDeBZ0rb2A/ZV8/mSR5I8Y3axQHRJBmV3nhOpmSOlllcJapCTbdJF1kLv2RibWBuE84bZmXivUcL/TRVlb+d8FHwGp/iUUu9PgVUqKVuJ3Dfyrb9CbeWA0+ctpZmh1uFvR4y0F/49nEyDZ7o7s1XF3gzBuCkk5w4ZBViTd+SHxJmVmaSW6INqnzcBWYTJUkIqZi2mxNp0a3O+NXWjq8VapXOwTmj0nN7K76zFviRsoMCEn9WKUjRG80VGhIAKQI1a3zqs4WcRO00Feqix0Q3j6N0Gknt44aoiSzMhGLmHaAZP72etGSoxheCvaeg1c8GYW60cZo82RVOfKPBPT4O8T5dvMBWdhoYW+H771ubqYhdsxeeh8767tPea8RPYIbsYjRC9u4OtzXw319IHuMCTngX7c7tc3+XbtkuvJ3L0AhGayV8UxcoT7Q0GsTUkk1tkKHtqfd/MImjWuXkues5KBF7LyQBKFz0qhhRoGCTXxee7IcGm+FNNvmwPm5pnX5vuqNPlr6Od8jVEyHq2wJa5V0fmFyETjmxKnZPWM X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: CMEDh9Qhf65TB6N2lkBjen4KjQIVD2mZkw+mI2jm7Jz7dmR87zbbBZkh2FNFzYc9LbutONGffc18ErOHOsf2z+w9QyxeguZCPicQDmoOWlpEBRTwJS8G5nMVxIz5ro5kxBYbAHnkk0uIqw51xYYsHbOcJcYL/wmmqMRffHE+CYme35am1Xu8jgJRBWgYadesh6nfClcCHPMErvO+0kAeqAM6AiziEsEyO+EpKyrIWnkd1RSqH5XN3HZmceZmTZQFEdL45ZCM6FdwjODwmJc/AN8XB55gS+Mnr4O0RiI7WMviKqdbDeFu+hy1L9xZGLwMy7nSJEJefd2iq5e7/eYyW2VszZA/s759ZII3D2vSmJXO1RLrjBnaGo+A8nyzgVyNbgQtkZHGKFx7Zb8LKQeuFIld60ND6PE9Ot2WPTx7ndvnSev0cZo6H2QUzNUvx7XUpWvxWk+MZB4qismUh7SSbTPmEYXNMO3nmUCRJb8nD6w/ANp0A0oxK3tbiBwIOuPZLBGJhVUFGxNMLN5NrnCGo88nHd69Y+ac+Ya+LO/cJjxPsLM12j3V2KHt6oQDKQGojitulQlHeYFg+j5oQj9j2o0UFBPWu5YT6cWbAjindn/mfUVU4NaD+pAvZpDzarlf5onnz17I8Zft06Ce0J6KXtSXAyAzyf8aFNVq3b/d5w2XB6v4V4eA28IKvP7vvzsSE/gJG5UGBlHbL2nGaUNQRsHv2eI5YzhPcJBy6uqtDId++4RcpRQFl9mM6MWl1pqn9SI6T0N2PzJ4Ais3Prh8srl2hjDKfAiF0ror+JpRbVSATYmm2bTPzUPhnwMZ9Xo0F9OHAgAfoD0yDtxIsBt6SzRTK4kD7A3CqxtHD5GBuX4leapCCpOreSKzHsqUQ7XWLfb7IvfzcxRIPKg9LIEkFTDXFvgx6HrtqaqXL1ji/xZmrh3oznzeDkRSWlkQyooYq0iy0hYf0H/N+6NeaKlfAg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d331f442-4fd7-458e-2ddd-08d9e583dfa5 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Feb 2022 13:08:00.6350 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR03MB6948 Subject: [FFmpeg-devel] [PATCH v2 32/69] avcodec/mpegvideo: Move gop_size to MPVMainEncContext 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: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: fPVb6Chnqw6w Only used by the main encoding thread. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo.h | 1 - libavcodec/mpegvideo_enc.c | 14 +++++++------- libavcodec/mpegvideoenc.h | 2 ++ libavcodec/ratecontrol.c | 2 +- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index c59d4848a8..50c0fa42c4 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -81,7 +81,6 @@ typedef struct MPVContext { void *private_ctx; /* the following parameters must be initialized before encoding */ int width, height;///< picture size. must be a multiple of 16 - int gop_size; int intra_only; ///< if true, only intra pictures are generated int64_t bit_rate; ///< wanted bit rate enum OutputFormat out_format; ///< output format diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index b67f706504..77825e5b82 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -352,7 +352,7 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) avctx->gop_size, 600); avctx->gop_size = 600; } - s->gop_size = avctx->gop_size; + m->gop_size = avctx->gop_size; s->avctx = avctx; if (avctx->max_b_frames > MPVENC_MAX_B_FRAMES) { av_log(avctx, AV_LOG_ERROR, "Too many B-frames requested, maximum " @@ -394,9 +394,9 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) } s->user_specified_pts = AV_NOPTS_VALUE; - if (s->gop_size <= 1) { + if (m->gop_size <= 1) { s->intra_only = 1; - s->gop_size = 12; + m->gop_size = 12; } else { s->intra_only = 0; } @@ -1382,7 +1382,7 @@ static int select_input_picture(MPVMainEncContext *m) /* set next picture type & ordering */ if (!s->reordered_input_picture[0] && s->input_picture[0]) { if (s->frame_skip_threshold || s->frame_skip_factor) { - if (s->picture_in_gop_number < s->gop_size && + if (s->picture_in_gop_number < m->gop_size && s->next_picture_ptr && skip_check(m, s->input_picture[0], s->next_picture_ptr)) { // FIXME check that the gop check above is +-1 correct @@ -1466,10 +1466,10 @@ static int select_input_picture(MPVMainEncContext *m) "warning, too many B-frames in a row\n"); } - if (s->picture_in_gop_number + b_frames >= s->gop_size) { + if (s->picture_in_gop_number + b_frames >= m->gop_size) { if ((s->mpv_flags & FF_MPV_FLAG_STRICT_GOP) && - s->gop_size > s->picture_in_gop_number) { - b_frames = s->gop_size - s->picture_in_gop_number - 1; + m->gop_size > s->picture_in_gop_number) { + b_frames = m->gop_size - s->picture_in_gop_number - 1; } else { if (s->avctx->flags & AV_CODEC_FLAG_CLOSED_GOP) b_frames = 0; diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h index 06e14ad11f..09dabee223 100644 --- a/libavcodec/mpegvideoenc.h +++ b/libavcodec/mpegvideoenc.h @@ -42,6 +42,8 @@ typedef struct MPVMainEncContext { int me_penalty_compensation; int me_pre; ///< prepass for motion estimation + int gop_size; + /* bit rate control */ int64_t total_bits; int frame_bits; ///< bits used for the current frame diff --git a/libavcodec/ratecontrol.c b/libavcodec/ratecontrol.c index b0f319680b..4e7bbe49a7 100644 --- a/libavcodec/ratecontrol.c +++ b/libavcodec/ratecontrol.c @@ -632,7 +632,7 @@ av_cold int ff_rate_control_init(MPVMainEncContext *m) double bits = s->rc_initial_cplx * (i / 10000.0 + 1.0) * s->mb_num; RateControlEntry rce; - if (i % ((s->gop_size + 3) / 4) == 0) + if (i % ((m->gop_size + 3) / 4) == 0) rce.pict_type = AV_PICTURE_TYPE_I; else if (i % (s->max_b_frames + 1)) rce.pict_type = AV_PICTURE_TYPE_B;