From patchwork Tue Feb 1 13:06:50 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 34065 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a0c:e44f:0:0:0:0:0 with SMTP id d15csp3769068qvm; Tue, 1 Feb 2022 05:19:59 -0800 (PST) X-Google-Smtp-Source: ABdhPJwCKcvZkp1fWF+pQ4dAhZduzrsqqdljHn0IEy+Ga15veyKJR6cOx1mPFRP8dTg2a34v/JL7 X-Received: by 2002:aa7:d7c8:: with SMTP id e8mr25586553eds.110.1643721599272; Tue, 01 Feb 2022 05:19:59 -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 he20si7500006ejc.771.2022.02.01.05.19.58; Tue, 01 Feb 2022 05:19:59 -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=SXVTjLjq; 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 2BA1768B41A; Tue, 1 Feb 2022 15:08:57 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2064.outbound.protection.outlook.com [40.92.91.64]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2ADC068B3B7 for ; Tue, 1 Feb 2022 15:08:41 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ev0XRYDwpttmsf93Oi+sqqcL/oNN29cSn5ZpeehHddzlrKmDWu88eMeMlztBaeW+u8KZnfYcW0ynxP45j34YYFFPLRPNvKBj6qca1tuyrggKriNEHbnTOb7yRd3hwBGEmxKzzI8wGC1SJgw9l2lK41FlcGH0qHgNd0dGLLlaEnVVK0dERnsndlZXpNwMx967sCYm0uMtAR7aq1TUkgqY6XOFQ365wi9ZqxU/95EjoIJMA+15Yzb/RXU8L8g6vxDCiTYFxiVDqykQoV1REUeIQfHpD6hNEMcmwYAxXqWkPcfpkJVQgfgCkaid/wK4DSZGCpBJ67GHe3naGVklzsQ6/g== 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=zyza43r6vio4vqqTaL53xVTsL/wJ0nBgrweTUDYf1Ng=; b=KuGWgwRzMtqXleBzCFQY+k5eNfB82RBAhUR+/1sOFTPUVAOkUjlGjq/S13rn1t4qbCdvDQqKHIjntiJ39EOo18ANCcTfTLuZKqZqRD/FuMZohY9n/rsBbmRfiz6/I4Jjq01G4geORATBwaSGlF/DIo8cMy8v/KCIX9VaGGfiIkD0ov8DnIIAkF5oCE9Cxgh2Rv9US+lzJr+S3q+9n2/k4eTYe08fHigwIssqGn0DH8lTYmD9AyQbke2eTtt9zk3DoGVssp5M2jIbb0ZIFS5Hh3HiwqONBX8aHsPK/e7EKcPvQhRy4uAT33a2eSN44Q4KHsT3KKsqKCflwLl5PJiFsw== 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=zyza43r6vio4vqqTaL53xVTsL/wJ0nBgrweTUDYf1Ng=; b=SXVTjLjqzzlvnAGhX3o08tq9hmn2jpnFFlMvDlmBlRAhM42sGRgqydOXW8GWZ/GRJwa7I20Teu2ehtnjxF5eKrQhd8z83t8I5Z7HWWuVUoobtig/WCRCuxChIlyt3FfiZ9NWn7eOJDyr4s7ttQgGz39gXd82KwPRcEzQRXH11HD5R3ynkwmSeyjS0+zkIEJnACNqfvg2htVDoSTTnNEUjfHh3SdYe0XPhLP3amis2G9l7N1Cl8jZPXBzLYy9XdSizJmVMrQSfmwLbDIzPUDj4ADGETAIMTezP4dkSYfi0cOGJMRbLxZlSex/H4ayXuH81zNOwL+dNxYRsQ3xKHJWIw== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM9PR03MB7962.eurprd03.prod.outlook.com (2603:10a6:20b:439::17) 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:40 +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:40 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 1 Feb 2022 14:06:50 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [nhnNqcZe9dpiz5dZiQL+7XuRggsfoepc] 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-52-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d876ab18-c77c-43ed-09e3-08d9e583f570 X-MS-TrafficTypeDiagnostic: AM9PR03MB7962:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: jdqsThG3lC1lxyBHDofgYbKiK7gT9EjFBi6D2Qj88KELszyvo0SVaELc5HIAReQWZyEYO443dONB/eSOuDqtbcuYwWST8TiJMITDEH6/k3uwfRsgP6MzRYk8RY4YqqFMEXTioK0bBdWY2jJNTWEspq7ao+jy+sWHKMqNcAiSOz4H6Rw7huYXaHPVdB3IdSuMtGe8whav5fVjGtR2v1zkjcGa1oKRKl2+MSDjD//gjb5BzPTyvhFI2A78YLodz6/mHBUfjSdDgvGx8Wtjb3kU7FMDAGi3WMZfvV4H1u8ta5bFQ8l/EfNurw1oS7xIEaCzqIPKVyU/jVeXwy26Dw6Oj8iZoimnzTBX3ihd9jEeOMz3T7NxnE/dazWCT4hVnrCJZY1Y7tydHYwE7k0F3XFvQY3fMXa2BA+btyMuReWZF9KqAYLlsSGHw8cFB6kZG04wcRF7vs80krnTuEsxOoi0141I0rX31b7QX/r0ATmARd9UXfp5jxv5NdxXAmP0nR9e3PeILXUCwQh5NHv73IB74G9bef0MavYZU0ZSSSwqUIJzCJGQScav54yUt9SaMQJj X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: xSTgl6uGEY6Tp8/bG1IGPQ/n8GQxcfuLHr4ZHxXouJ3KxkEqotq7Soqrh3rmqtzA/4mOzG+4QnGIBYYozgYNURBl4hIiXmna60ligVO5y7H6ZxQ6nL+DAsZqa5w+BV8v5r806SiT9EFScog+KyEm+U1GXWi5Z/6qQBscYSZNNfAxNt1q+Ftj97VN4mJp33mZsaXOEPhxpsyij/ZcHN/mJjRlwrjgKnQv1NUCTUFb3UzZO0bjwnxIyZgWGiLFxrL060MTnOWhgTy4o3nCMRUZ1NAh16MB+OhEa76DOTK9D+6+ctpD6gHOT29Rw5+MWFurn4vNOgtiap/aB0VkLdBYdwTQDUnccDzUmXM59bCGj3DHqRm3yF+2GlScmVR63V4BpDKoF3GvGGYFk5Jc14m/YUQgxaLmputyqv4N07W3b8xq8PqWKzDQFWceTsJtIcM4gFRClyoQhM2N0R0VfYZQuHJUAubpV5BwsU6YTsFqavzaHTSorSTTXhM8j1D6snHQxrdNUeUXDM17WBMTAGNkiWRNxYNUVo7+kfsTdQyEljYXqk5ZdsndhtjfVUf0T6FHGMheNi5Jv4JW9K5nCpgoVDrlC3bLq/Eq3ceCnsmT8pqQX9+uxOCJCRvcWZzlK6eB4XpDZfmqPPOMCA4tYhy5HAXJMHXWxrP3tIAetIGSjwgSvsom4IJhQvsW6nE7ahGWPHYPX9/j3SHDnapMVha28DVgd/5OGHRC4gR1BcNZuAwCGkU8+wL6Vnqvg78x3kYA3v3nzEYC1tjFxjRx7MQ+3lFhWKPF8POhcbk5Fua+wjkXR0/LX8By+Iq2S/gKwUWHQjIkAGLViUsDFX3aYQR1qYSGeBqNs9FTxZ7Mayx1VdkuLQSIO/kC3N7FRveJiCJTU8fYC8i5LQoxF2+RMzmdRhmZp/GvR/UDUqytE8o6j2/ZOTLesad5Ml0pEMunW35INtuKi5gRfOyFqGIQzMcRLg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d876ab18-c77c-43ed-09e3-08d9e583f570 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:37.1653 (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: AM9PR03MB7962 Subject: [FFmpeg-devel] [PATCH v2 53/69] avcodec/mpegvideo: Move fixed_qscale 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: NnYR11OhLNHw Content-Length: 3750 Only used by the main encoding thread. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo.h | 1 - libavcodec/mpegvideo_enc.c | 10 +++++----- libavcodec/mpegvideoenc.h | 2 ++ 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 99361f0733..a379f65143 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -92,7 +92,6 @@ typedef struct MPVContext { int h263_flv; ///< use flv H.263 header enum AVCodecID codec_id; /* see AV_CODEC_ID_xxx */ - int fixed_qscale; ///< fixed qscale if non zero int encoding; ///< true if we are encoding (vs decoding) int max_b_frames; ///< max number of B-frames for encoding int luma_elim_threshold; diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index ecc25ba8a2..4dafc68cdd 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -401,7 +401,7 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) } /* Fixed QSCALE */ - s->fixed_qscale = !!(avctx->flags & AV_CODEC_FLAG_QSCALE); + m->fixed_qscale = !!(avctx->flags & AV_CODEC_FLAG_QSCALE); s->adaptive_quant = (avctx->lumi_masking || avctx->dark_masking || @@ -410,7 +410,7 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) avctx->p_masking || m->border_masking || (s->mpv_flags & FF_MPV_FLAG_QP_RD)) && - !s->fixed_qscale; + !m->fixed_qscale; s->loop_filter = !!(avctx->flags & AV_CODEC_FLAG_LOOP_FILTER); @@ -474,7 +474,7 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) return AVERROR(EINVAL); } - if (!s->fixed_qscale && + if (!m->fixed_qscale && avctx->bit_rate * av_q2d(avctx->time_base) > avctx->bit_rate_tolerance) { double nbt = avctx->bit_rate * av_q2d(avctx->time_base) * 5; @@ -3502,7 +3502,7 @@ static int estimate_qp(MPVMainEncContext *m, int dry_run) s->current_picture_ptr->f->quality = s->current_picture.f->quality = m->next_lambda; if (!dry_run) m->next_lambda= 0; - } else if (!s->fixed_qscale) { + } else if (!m->fixed_qscale) { int quality = ff_rate_estimate_qscale(m, dry_run); s->current_picture_ptr->f->quality = s->current_picture.f->quality = quality; @@ -3622,7 +3622,7 @@ static int encode_picture(MPVMainEncContext *m, int picture_number) for(i=0; imb_stride*s->mb_height; i++) s->mb_type[i]= CANDIDATE_MB_TYPE_INTRA; - if(!s->fixed_qscale){ + if (!m->fixed_qscale) { /* finding spatial complexity for I-frame rate control */ s->avctx->execute(s->avctx, mb_var_thread, &s->thread_context[0], NULL, context_count, sizeof(void*)); } diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h index 42731a5edc..5c579cc155 100644 --- a/libavcodec/mpegvideoenc.h +++ b/libavcodec/mpegvideoenc.h @@ -46,6 +46,8 @@ typedef struct MPVMainEncContext { int scenechange_threshold; + int fixed_qscale; ///< fixed qscale if non zero + int gop_size; int picture_in_gop_number; ///< 0-> first pic in gop, ... int input_picture_number; ///< used to set pic->display_picture_number, should not be used for/by anything else