From patchwork Tue Feb 1 13:06:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 34064 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a0c:e44f:0:0:0:0:0 with SMTP id d15csp3768711qvm; Tue, 1 Feb 2022 05:19:27 -0800 (PST) X-Google-Smtp-Source: ABdhPJzrKTncttOtjtaW6XTNmb+dQ9DbXOk7iZsmRtxxw3GtkrIZD0w+p4YH/GvSjTU+KyrEwhU5 X-Received: by 2002:a05:6402:1601:: with SMTP id f1mr25040765edv.165.1643721567306; Tue, 01 Feb 2022 05:19:27 -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 hb7si8224040ejc.437.2022.02.01.05.19.26; Tue, 01 Feb 2022 05:19:27 -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=T2V658jH; 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 855D868B411; Tue, 1 Feb 2022 15:08:55 +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 E1FFC68B315 for ; Tue, 1 Feb 2022 15:08:40 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FB4GkrjmZ+Zpj8qfeeDap3leKlsGmGbnDa6KtLE7+jREf/iHerwFz4sx5reKtZBqM3kuBT5M0+3VOkNLZVPQIbyJ/4613phJx4OV07JVOQEk+eCBJzv0EMU/yCNfAU2qZOJTX2kCDCaryrefqVmu6oCV9tOpJCPJTriqlu46CUWjF7Ke1fqCIDd4ztMw6SmUgozdhk0TYzPaI/4aJH8VVeLwnIXqfuQ4J20SjsTAmTib0fRgQg1djVtkMJqnaiQz8DZ2DLNsBZ+seA/cK/Ske8mJasOztmqVtD5AwbNU96+jNCtSGrbpzty9bPom9k6uJvHFu4fiSWJgVhjNzUNWyQ== 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=1/SwwgSOkTVYrPb2u4swP0eOkeOE4u8goLabIYyT5hA=; b=e3ey3pQf1OoUj5M3/NpqEYdgvlwFtJYmOrXFcCzvRGnsFWsi2ctv8HAVuNQIi8WkIIKDnZS0xw1UmmBMRI1sovFeJt3gLlVrCKuGumJuBcn5oxwRMCXbOx2ZAAsHvN5EwDbPVkJgyqxDRXD1rxVv8BJF+bZD2TFHjdXS+LuBZCV769I58DtvBnQRNCiitt63jBCPSVSuSEt0aXAhdM0zdtkea2jNg/wXwgaRjy0rSMyOs4yfHfBKy7a5jbVvqvBd4cjQeUSaKonsBzAm4xj4DdrqZ7KuvY8yNq2CrtScS4LfEX/UaiaOwxlBOvPCdXwB0DtmEgI8p4JsbL/dEMJHQQ== 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=1/SwwgSOkTVYrPb2u4swP0eOkeOE4u8goLabIYyT5hA=; b=T2V658jH00ZojnWKPAJVmhoCukrU83W3TuXt9KLyQU3j7n3bKGLkskraZbsXhQCgr+0CG2m5ptjie2OHK9An82+lBm42Kn2IrfryY21aLSBvdZ0tkrtq+/WGR89ViCT6tglKTCWDEfvq42uRmhBL+7de5grhU00hi/7pFVtfI8XJVF/SotY7Q+RzHBq0kcDtpgggDUHahz1YaBio4oaKDo9jQOZllj1h9LAF53vImLeUvJm8/Ri5aII/Td9X1jKAiX7lDCKMzKbvyzqh30MLswI0zduKEbsrHORv/73UW39JRnjnYmunGORIvtzd9QfA8mL/iAmroiN1rSrnCOm0qw== 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:39 +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:39 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 1 Feb 2022 14:06:48 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [AIOJu7sEgK5InM73FpTcdbrKFGiOyCw2] 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-50-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: cd0f4e18-ab75-4e49-8c99-08d9e583f170 X-MS-TrafficTypeDiagnostic: AM9PR03MB7962:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: vK5g/80836DTmXnSvT6YTD4GB6pNtegKsequlVcnSbQi9kmF+QKA2DSn6MGnzNN27qeCyiQBUupNz5fDZptNqWzI+lbjj7p8OUWSBahD9x6lNTTdfPa0DoOBU/Le8oOuErNUS8Zu4He+cBi2I1OpQ+Sa1SSjJnw7GU5JUF16n9zmDwVnSveXH4QRlbtuF0ViMS00iNzvsW51Ti8Yua3AaM0ULZ+NtVPKB4K7ApYoBzy9AAITIPL1XmzbW5u3FDLORmjpSUKhAbPulteCzIdZPIVTvKG18RJM4anuraCZXlK1V5O8EVY2BVwoaoU2tcc1OoyrOK1WVI5TK+QxJrXynuiFyPvGfZGtdVFpWKF591bX3fhK+GJW1WpZPfoBxBFBJj52DF2IZwFaz5hKfX6GS8T1jApvN+JA24tGXuSTHaXgfj1N0Og/2R4/q0vETctTTwzEJNJlT6vJjwDUk8EooAN1EGHaORDSAHM0zXyGNPFEbON7Up5KxQRvGujGpyesc8Ub8kBF2irnxofqYot7BGYnyyXjFd1RhCmibokYH9n1jV2oco0+CyH8wX/Cxhyr X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Jd2l1tj9Z+IyL3SbYJ2iI89ZoIRlHs+YW9Wxg+ZZ1n0VQAyYftel89ho7R1jMDeSdqfY9LseW96zDk7y5Rc4Gx+BuqIGIjyj8A2Zxmpb7JJG+eWTRcxy0mhg6iPEaPOnBJiDIXCbLJbJC5uxC20OdwT5URN0I6FzrE7zVeR1l3aYTEvWoBIXNuaey0uup/7IbQk7hE+udwUWXlGvDOrcB21Or0LRlGulG1usljBYMO/crQk8jjWla86x4CaGqMpFBHB2jbojm4VJ3lwqpSKRWlciGcht7KYN98+ILolFbnasE4XCJ8n6ukwHRm2AhYPXkVvKsSNXt9MLxMR9wq2SQ73LLpmuuHe7SZZAkVa6AeX4Y1/A4b6uyGuR4BeuzatJN/qKxFJvmZKf3gMa7zIObEJQB07KzclSvWq2gHKCfWecMPiAerg9Tp7EzYGtXBndP2K7CZ+n1bm4VpD9cyBAhNbyf2+p5+9vJEhUT8zVT89yw372Wc232T7O2wcwl4ZGUtODUCd1bLAu9CT3HYiW93H2QzDJixIWInhVvhm3wr2ZBZgRql3OXDgGTFWs1LZYEUbvg0bAgCJeggbxLUZzyPPpz5KXWjIocduZghjY5XyGtS88CMJCqqrlErYnlbHlzOUqFbMxILhLMg/CfJ2VlqveVjwSYnakYsl4c5Z+L+Eqmn2IAF5OAwb5tHCdIg61FjPcomBaoaoSlfcxk27BUwdZPWr6TjLj8axkgvRlKqHa/6JT9g5Fml5axFwKx8EjXpVhKvj7SmU22BQOKN7aeKQaawNwqW9Q5jNXLuwTqFPqrZznQu8JFZ+uAlNj54JYaYJP+7oPYYNSLTdQxyuRhT1cXiX9JiQH/DjvgnnJGKDkGc1pSG+Gcdz6pDRxu49lUQhOhe9iLW+AAMYuAnRlFC/e6eNOFSJznnL+2ePIL0pG3GpSVgjCTgAAgwpW+hAg098FZhQhTYH78AWVAbSvSA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: cd0f4e18-ab75-4e49-8c99-08d9e583f170 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:30.5047 (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 51/69] avcodec/mpegvideo: Move frame_skip_(exp|cmp) 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: ypnPLR06NmIM Content-Length: 4754 Only used by the main encoding thread. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo.h | 2 -- libavcodec/mpegvideo_enc.c | 8 ++++---- libavcodec/mpegvideoenc.h | 7 +++++-- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 9002c0549e..ce2d36ab15 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -475,8 +475,6 @@ typedef struct MPVContext { /* frame skip options for encoding */ int frame_skip_threshold; int frame_skip_factor; - int frame_skip_exp; - int frame_skip_cmp; int noise_reduction; diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 093f3b948f..06c6e5cca1 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -894,7 +894,7 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) s->quant_precision = 5; ff_set_cmp(&s->mecc, s->mecc.ildct_cmp, avctx->ildct_cmp); - ff_set_cmp(&s->mecc, s->mecc.frame_skip_cmp, s->frame_skip_cmp); + ff_set_cmp(&s->mecc, s->mecc.frame_skip_cmp, m->frame_skip_cmp); if (CONFIG_H261_ENCODER && s->out_format == FMT_H261) { ff_h261_encode_init(m); @@ -1236,7 +1236,7 @@ static int skip_check(MPVMainEncContext *m, Picture *p, Picture *ref) uint8_t *rptr = ref->f->data[plane] + 8 * (x + y * stride); int v = s->mecc.frame_skip_cmp[1](s, dptr, rptr, stride, 8); - switch (FFABS(s->frame_skip_exp)) { + switch (FFABS(m->frame_skip_exp)) { case 0: score = FFMAX(score, v); break; case 1: score += FFABS(v); break; case 2: score64 += v * (int64_t)v; break; @@ -1250,9 +1250,9 @@ static int skip_check(MPVMainEncContext *m, Picture *p, Picture *ref) if (score) score64 = score; - if (s->frame_skip_exp < 0) + if (m->frame_skip_exp < 0) score64 = pow(score64 / (double)(s->mb_width * s->mb_height), - -1.0/s->frame_skip_exp); + -1.0/m->frame_skip_exp); if (score64 < s->frame_skip_threshold) return 1; diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h index 51610c051b..8f6d069369 100644 --- a/libavcodec/mpegvideoenc.h +++ b/libavcodec/mpegvideoenc.h @@ -89,6 +89,9 @@ typedef struct MPVMainEncContext { /* temp buffers for rate control */ float *cplx_tab, *bits_tab; + int frame_skip_exp; + int frame_skip_cmp; + /* temporary frames used by b_frame_strategy == 2 */ AVFrame *tmp_frames[MPVENC_MAX_B_FRAMES + 2]; int b_frame_strategy; @@ -183,8 +186,8 @@ FF_MPV_OPT_CMP_FUNC, \ { "xone", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_XONE }, 0, 0, FF_MPV_OPT_FLAGS, "motion_est" }, \ {"skip_threshold", "Frame skip threshold", FF_MPV_OFFSET(frame_skip_threshold), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ {"skip_factor", "Frame skip factor", FF_MPV_OFFSET(frame_skip_factor), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ -{"skip_exp", "Frame skip exponent", FF_MPV_OFFSET(frame_skip_exp), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ -{"skip_cmp", "Frame skip compare function", FF_MPV_OFFSET(frame_skip_cmp), AV_OPT_TYPE_INT, {.i64 = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ +{"skip_exp", "Frame skip exponent", FF_MPV_MAIN_OFFSET(frame_skip_exp), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ +{"skip_cmp", "Frame skip compare function", FF_MPV_MAIN_OFFSET(frame_skip_cmp), AV_OPT_TYPE_INT, {.i64 = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ {"sc_threshold", "Scene change threshold", FF_MPV_MAIN_OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ {"noise_reduction", "Noise reduction", FF_MPV_OFFSET(noise_reduction), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ {"ps", "RTP payload size in bytes", FF_MPV_OFFSET(rtp_payload_size), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \