From patchwork Sun Jan 30 06:27:30 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33906 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2c4e:0:0:0:0 with SMTP id x14csp1771172iov; Sat, 29 Jan 2022 22:31:46 -0800 (PST) X-Google-Smtp-Source: ABdhPJym584v5CgAxF5BIkWFXOXMT80gkuTU6eC/A0Khr+RfPgl9JKAoaIeiV9TaYDg/qRBpKXJ+ X-Received: by 2002:a05:6402:190d:: with SMTP id e13mr15625822edz.38.1643524306094; Sat, 29 Jan 2022 22:31:46 -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 v10si5417952edb.96.2022.01.29.22.31.45; Sat, 29 Jan 2022 22:31:46 -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=W4mfrqqG; 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 1CBBA68B250; Sun, 30 Jan 2022 08:28:53 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2108.outbound.protection.outlook.com [40.92.90.108]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 22B4568B22B for ; Sun, 30 Jan 2022 08:28:49 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=H9ZojHc9JG8UusE6VaFMDxT9viMKHrd6+AGFMI759N8Mu9vDg0n6x91+uICoA8yfDYf9TfvxTAxb4gdfP1GyuCAEuFYy6yYjFSFTqouQBK4+Vz6lW9XhgpFCIMGJEKdQ0QmsotKeOh9V8IHQe57iE7G8TqEzBv1tEKIbYSQPlnZCsgcY1BmrMIdpS1dvCdkY9HY2nRcjuJlIYseKczN8ycO1KkxZS6e//wgRitW9KtblGfdyN8zBWl6sq6j2HBhB/btVHLOsSSvuAicrXtLxiVkshbHf6MRRqEdjVo6sHzrLALxXeOF5gY40sRwQoV951y9U1O5xWkRfxbvM8qLDdg== 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=6URz4oiervSeGlEAhCztBSUUhYCX3hGt/8NO6Mhci9w=; b=mOo5JmmHK9Y5ljUDTNHjzDiOcvTDQUcr/BW4yQ/NMNBmWfmGPEJytEuuW+k3vGIRtaSrmT99rvF/NIM70MkHiYs4xMUrO3cNROeUt7xwXsR9dJZFg4CfgRcAeZLtc4iynrs2GNY95adnUAkD8Rba2S+4lyPlaBm2/pf0A6jB/o6XsCm6pPEYyoVbpsfhK1Yo1he12Cje/Q/thR5diAnjHFSpTx1dUJM128sxrh13gz9CTVEvKKXGTcY3+3YiPcig3dg7JadEwYP9iesrZtQqc8px1lx5Wh58nDpH1Cyg610XpQlqZvOqHFf1P6j9h7DUdPFoO6a+rdKt/jUVe3148w== 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=6URz4oiervSeGlEAhCztBSUUhYCX3hGt/8NO6Mhci9w=; b=W4mfrqqGMzvuxVknjt39kHYTO++ZTzmJKLx7lSZsGgaQ6kElqx4uTm/1E9BcY53FBiud4xCdrzSBj2VmpVRNiIDOz6rkOftiO8bpKAcW1E/NDPFnoIG0ut9/uchzKMLz4ZHoILiSkq+iWePVCtdyjvCECCQIcW3kqmypipjB143Rx58MLFIuQxL+DV4myNNA2pLlIOFg8aPQ+4psZlKcfrnYK+1kZlIZANd4iiC8NJr3gBqtSGlRkc7iKXSvnxSgvVykixRQYbCLl30CmzPeycAzc87DQK87YX8K6zHhqr8wMRkl3k8Wsu+iSBSx4McZ04v/T4nv8LA6hT8W9y2hFA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by PAXPR03MB7666.eurprd03.prod.outlook.com (2603:10a6:102:202::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4930.20; Sun, 30 Jan 2022 06:28:48 +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.4930.021; Sun, 30 Jan 2022 06:28:48 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Jan 2022 07:27:30 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [aekcYdaj09+ibk90e6jn1LO/6u9vufD1] X-ClientProxiedBy: AM6PR10CA0044.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:209:80::21) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220130062749.936489-21-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d25775dd-945c-4493-d291-08d9e3b9c62e X-MS-TrafficTypeDiagnostic: PAXPR03MB7666:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: xTePoysSa7A+20DazBgbS9ReTFaUPtOX+ST6ypDpBg8MiWyDLgNHMlXSmiboejKVf2yThx1R6HZ2KmSG1JigPPn666rhHKL+ipdCYpxPlHj7oL6Ak17Bw70xce8imOV9siGWY4yqRilqCOSQuJwAhF8+5KF04hSZglPC/XdmJP79fjvKtGV4qNxutYl3Fy9RVkXjp8+Lu/KnMNw2v04YtTZWZQyRaIFJBpHGIdDW0s1LrMfoqYvwoEXAMvPKhIH8AXabvADjz3uBfwuXLyV4QQ+Tr9Jgqun38qyIhHqaWX3u2fbtsnSpt06Ntn1nQdOynMqQCpZ67X27idULQUqfeAKUvy4z9/KiaP8V5szpVVEVSduONaj6FRvGvRnv49pofsayCYZZaTT96ndN49TQMQO7ILE9ySgBISNBIoHAGmxwv10ZavAhnQFz3sjRME9v88ZGgeGYEEeL+IGJILyLP85mIbhFft2qHH0nzqs2zkZBJl2DPCkjPaLHLAi6MsP8jAEfsCHfdhL65i7vKS8ctRXVlu4sigLjL25tr1ULyhQDWJn4KpBM3F/ppIvzoYRV X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 9XH5LWiIepKCEYThQWnr0jBq3NitujvSZysFM3REUJxAqVT3v3x7SEG8/j7h1+eHTJxshNHm6T+eQXdKQCsv/1P/QLCRB6egUNUUxysXl4owT8ZX9qnbKRVIVOoXxDLYELzeYN8SHxuOJ53nQiJrhC50GrfTUgZ+ZMsjqZdtigtf8oeBTN3cQFyb014h+NwqVmEA+pntBTxzieaxiJ5STr0jmW7y0ulhp0so/eqF5bk1IJ4TgLl7xhYvS3IPfe19P0W4tw3Cwoxume/aWFJVQkhK2mtK4+/SwYwS7Vy+Gaq2p3Y17L8ZBOCp6gpXJr2qnuQzCo91mtqZ3llzM+BTKC4a+2QOHzUjGecm9pBDvXKXXT0FxVeHlpQKnSVkG2M01A2NNQ//rpdYc2PVjMyV0NSXQZmUsXr+7xOBsSYmIgJ5M/hzvhg2YhrPLANqcmBC+iVeMQwut8X0cOoL/VTDb2XYafw4X6fwm3AxeO7OzDuKv7nxuViehiukHeRqgfh72xEO/ikx5bqOm90Oml7+zFbfVDyTRgluOysmCHzsBc+C8nBaQUrYaVashica2etvoTjl+h0Tnpe9crM03w0b+EUpSL7rUFC0+mZscBKxtyUtzc+11D7GQVDRGHKS6Eq45TEP9RPvNDhH5b7JiJmCZOuSTk5Qaddh/qpLbAI6VLJNHYmKtuk2t/0ykpVioVEC/3LFtoE5yzb14nlmwEbf1S0u2a1N8BunhGuE70A9MGxq1r4wUa9+/jj5T9tveG6KwAK5AonF6EHGQKM4PToivVpd6hMwiQ8UYRuKeRRSuKpVwLDNbZxY132G4puOxtysu+OmjVzp0gz6/qj+1r7qqPdVT2QtbYv0t0t2p6EGYC660zMvoX6JKpjsUoDBy649khsyumIWJprufjROHKfqqFe/0KgnNvgqCUAjY2L6TSadwxfBVDrdp/zUc86Xb4X/Eniugz4RA/H0YZbxECY/Cw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d25775dd-945c-4493-d291-08d9e3b9c62e X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jan 2022 06:28:48.3828 (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: PAXPR03MB7666 Subject: [FFmpeg-devel] [PATCH 22/41] 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: 7t2tByC/yp3x 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 7089160765..c679b7e531 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -84,7 +84,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 4da765a617..785aeb2aee 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -350,7 +350,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 > MAX_B_FRAMES) { av_log(avctx, AV_LOG_ERROR, "Too many B-frames requested, maximum " @@ -392,9 +392,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; } @@ -1380,7 +1380,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 @@ -1464,10 +1464,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 d32e4372a7..1c101d01ac 100644 --- a/libavcodec/mpegvideoenc.h +++ b/libavcodec/mpegvideoenc.h @@ -40,6 +40,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;