From patchwork Thu Dec 23 09:13:37 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 32866 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp7106691iog; Thu, 23 Dec 2021 01:16:08 -0800 (PST) X-Google-Smtp-Source: ABdhPJycnz3Qwp7U8OqWQ6Hr3rcTdogxoOR0iQHkwxiJcXl/AehOvR3DiEzsbsd36pfL1N6J9mKc X-Received: by 2002:a17:906:1256:: with SMTP id u22mr1171364eja.317.1640250968263; Thu, 23 Dec 2021 01:16:08 -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 l15si1862267ejd.293.2021.12.23.01.16.07; Thu, 23 Dec 2021 01:16:08 -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=F53VvV5b; 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 A52A568B1AE; Thu, 23 Dec 2021 11:14:25 +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-vi1eur05olkn2098.outbound.protection.outlook.com [40.92.90.98]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A09F668B18B for ; Thu, 23 Dec 2021 11:14:21 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=juJKGs4fuZKN1OnTMXziqb1AvNcS5Il+GY8CL4W80hFJXQeBMt/OYnSl9at43XfYff+0sb3TW7d2Gdoe5ZydEhX+4u/ob5O8oRrNlYLkZyoQzXbFdl1v43gaDObRUzXISi5zOR1q1Q4Hq3DnUueT6N1vTlkCU93lBIa850UBLFGEEwCuQSSNo/S5kH4LQcPXJRjcoJ9p0tSTRBUVfVjZcF5mjR4d97F0HBNRz4eEZZPBXWCYOPT2WcvWlbLoExyAY8kcoE05KhZaJf64Cp0F5PCvXZFajgh0IKIQaW844Hhnh5l4F38vtcSxgyAg0381o5xUhj4P2VKX99TqLyM25A== 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=v7etlJY94iK4YZzMDWO9ex3SpI9+x1NrS3VWTMLKDuU=; b=T5XBpA9iCevCfHK7yE/bSwka+5P4VqQZRaaUcwdnHw/EyFvh2z8zCwd4YEM5FPIBhmneSGfJShOJgWncbVz9TUIot/1JpEr/6oEnqaMAZL4NP8QlgU7TyxSXsY9BIT4aYnIcIpzWiO50DIFo0hoh4w3CvZl9HeVyYL4AXFLUhcFHdm/JLp9a3wpZmUtPDWFGL1Xw87SIEeFG8VqjuFv8YyjDXpvw9JH71DkA85gGM1CY9hFuLTI7LnbyGuN+J+D3bOY7dcMwNB6Nr7DxTYB3mMSUMzmuIna7qvI4h/sORm5bRTC47trvRL+UpWI0LIVFle5+0qNYuw1LqE9Fuw/3Uw== 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=v7etlJY94iK4YZzMDWO9ex3SpI9+x1NrS3VWTMLKDuU=; b=F53VvV5bG23S0tl1xUfbBNqCeFHdMOPSu4CEvt5aSscPTrebNfZ2GAcFukShOeIv6kZQfHEi7/Aj3hywwZIs5nq+HOa73rdAoTlC6Q3PfwokrRMF4bEccMh5Vf28b7QOSZ6BDQPEB3bw0qJP2wQ0/RXjBpLaINa0ZhC8HfdEByxkc6e4Fs1KDMtDD/7SzAE7HEaru2GimTsiMYxG7Bo4XwAd6+YlNNKhwJYUMtAwq5fUCMVG3voGA5ZS55lBC847tWpzfVRHbB0dW6RzoLu/5MzvVDLCDo1qiLhHB0VhGvI2uVHt81Hl/PNmqboyHnLekcpv15ub2k8K7vkS5Cy1QQ== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB5607.eurprd03.prod.outlook.com (2603:10a6:20b:fe::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4823.18; Thu, 23 Dec 2021 09:14:20 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::f0dc:92f5:6bc2:45ca]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::f0dc:92f5:6bc2:45ca%5]) with mapi id 15.20.4823.019; Thu, 23 Dec 2021 09:14:19 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 23 Dec 2021 10:13:37 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [fMR04nfqRRujOI8/3gXoD+ssSxDGSI+W] X-ClientProxiedBy: AM4P190CA0016.EURP190.PROD.OUTLOOK.COM (2603:10a6:200:56::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20211223091340.1450013-13-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 43bd43d2-1431-4eee-edc4-08d9c5f49a06 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiR3EehW4kxQzdNcP2D/mG1Jng1cyjo8kmHuiH96ZYGatgo1GgwF77bpn+3CiFmExjo5eN12q/GQybBW8NedLcZ6myQkEFWqouPS5gV/XWOYK9dBTMJ8SaWWCyTQM58eMG0SBJ5AyG73J6tAonCG/Cu56ti5VXNIMnFtMGeSfxEQw789GBCxWfgdiC08+j0xtLKEnkn3bARroOs2BcD1Ssy+mLfNQAIMTxTvoXUQN0Rfa5+51I17Fdv/vKqsFJXwBzjzHoyKbDWH/cj0G5HD3FS5al4mlopr58EyxyeAr3UjowIWLK0i/Q8bZshG1GOQCL4tCWvdMBkck4itgK6s6LdncNsRZFsNFKSIUrBw7pz/fEKLruoUPe3MpiMVuSMtijLl9SGU9LI8oB8rI30GHkLzOGg93aGy9jlmN1Qujb+fUoDabfVGUZ+QbrKiJRusvlr9dnxTCjXMplHTy6vaa8UOsfc5ZNNdgtZhoqD8829T6OR6dJZQN3wh2Xr1LFC5D505D8ghtzttZFODlPpxz+76zjwdQiwznLMDWOMGfQ2L6c/1poI/dabELfvefYqMFqJ18gkG1MSQ2uMrjDmXgNWxO58idQ/uQccoyARbBacgG7RPbhOQ6ki4XWxrPrPdhfEJcq+Yl1+SwoOeHAL9PGEzaQMeT/+9wgjv77VYvJE4wEPefTweai744TSoBjFC98rp9qyUtSI3wom7rkuK4BAzsle2gOXdWYU9Zg2tFnDUD8h3Sce8rTGhuYNDrAgDPgs= X-MS-TrafficTypeDiagnostic: AM6PR03MB5607:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: vcWrSruAtnhFDG0whea7UCvHh/iSq1S30sbLgc3hweH3JnJbYrslewxX7tftILh1IGbClzjWenqTepxGKrtnX8chDCT9n0x7ftRjH9OSWx1g+SODMlAcMUWXkaXj//AnsJV17sxV08AdCpSL+nK6QeenjW4GZqheCZeycndPqOg7XUtqdFOjJ7QL5azS5ne5M5BPY4VacWju4hcMsXBRXMusyCPZ4SftsrdZZ3vzIB+JAe0Qfz8Xmtpj1qFYoT7t52rh04FcvOOiGqb7QlTY33kJYuLuIpwtkUUZWsqXGebawxkHyqCFIKFi3uVK/KQq6kkDSo52SlDU1R8C6E5ylA+esW0kr+26JKTakLnfVIvG0VO09bcha63S50/Z4T7a2AwZku3wR0WDfdzosEunZcT1pp03st8KklWLLfvifDXV9fMldgvAxrwa2yprDR01+zuW14GSYfUzM9egIWBEylhjaVSoeWesgVjuEQ+tT533juMGm5xLWZDiiQ0WZ/0ZV7DLM66ZV8eVfNB98JU1Qo5vwoNW8M7Jr8Soqg6PWUScfBccayRHv9o7PYOSUzEY4KMBIsaF71KGty2FXggrrQ== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: r3b5j9BxOKIUguPjsCMNuphuB4WFUMUQQVKLvJUQWHfp2bvcocpTLYAFNS69WVux1yAz7HMq3NlXmoP37kMNESlBz/q3BLqlo9tHuzlVj55DMH0y5U4edBCak2O8tdUukCMXnv4/L9Wz98fRXnCkH7/fqvkaIt67iltx8HALJ8QR+0d+lGWxof4p/jWP7IPbiOHyeyzscDQpPtR8VM+Ev+kPBX+d4OBiVSUs2qdmkfJ95dMs6QSY4LZUZMQYvNXtDSnUx8T7CZmzvq5yCycUM+49M95gI2wWp99/UfIsqXMNsf9nR+yocyEYm7akhvAZL1tABp6UqUkmYLvlqTgJPTKw0tNiiEHRSy2m2T06J4mFX+H9c0aY4jQGRlO90CcMtFgt/R4UGYVENQrPFkqhrlZ4WdE4D7C7qkbsaXiHvhm+5FX6PneKajO1vOu8SOZiad8QIcqA4TgOuhP9sr3rPSftzJeVrrPhQfWTYqIoBZfxri/quT18bFbG6ysPJiIC8VJdQzMhA4FRm34dPXN/y1SmAp0YsK2iKBQTF6oPk0JJX2DJq5BF/xrTTqxEeeWCVn9fn5RMIGj1NebNTEqM7lH0qb3CKSj6OuH+ab/BHKX4qFx+xUsjjoA50S+ralD1P4RGqkso1RfTwwL5xq2//7k9edQTzpsuIhvqJB6iUjmunDU737+7v3SU1XLy3FV1xAxvwpaIMsmz3ybPzai14XgT9SsEZ6VgrFdqMKVbObJRT86H63AHeWcOprs0OD/wWgGniIJy6oWZwS3oCbxdRh0/JdclDwfbh1nd8KUHPFuebVyr3R5PxAqDtEj3cxd1NMQk1sy8BLmotOX4gCi4MxbQItc8Q1NL4MPa1JvMGY6nshdiaz6aW3xbDwPZb4sAXXX7IoUJUWcMwJyJ7cqu0AFWRLDmIKocWdOuEDkI1vzo4ruRpUYe38UkOfyAqNsjwA5rgPLmDtbziElQiRacbw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 43bd43d2-1431-4eee-edc4-08d9c5f49a06 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Dec 2021 09:14:19.9431 (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: AM6PR03MB5607 Subject: [FFmpeg-devel] [PATCH 27/30] avcodec/mpegvideo: Partially check for being encoder at compile-time 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: 4M9xoYlTDrAi Whether lowres is in use or not is inlined in mpv_reconstruct_mb_internal(), so one can use the fact that lowres is always zero during encoding to evaluate the checks for whether one is encoding or not at compile-time when one is in lowres mode. Also reorder the main check to check for whether it is an encoder first to shortcircuit it in the common case of a decoder. Signed-off-by: Andreas Rheinhardt --- lowres is currently only checked for decoders; should it also be checked for encoders? (The relevant AVOption is not marked as decoding, but not encoding parameter.) libavcodec/mpegvideo.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c index 4e6ad92473..5e1a1522a2 100644 --- a/libavcodec/mpegvideo.c +++ b/libavcodec/mpegvideo.c @@ -1961,6 +1961,7 @@ static av_always_inline void mpv_reconstruct_mb_internal(MpegEncContext *s, int16_t block[12][64], int lowres_flag, int is_mpeg12) { +#define IS_ENCODER(s) (CONFIG_MPEGVIDEOENC && !lowres_flag && (s)->encoding) const int mb_xy = s->mb_y * s->mb_stride + s->mb_x; s->current_picture.qscale_table[mb_xy] = s->qscale; @@ -1979,8 +1980,8 @@ void mpv_reconstruct_mb_internal(MpegEncContext *s, int16_t block[12][64], else if (!is_mpeg12 && (s->h263_pred || s->h263_aic)) s->mbintra_table[mb_xy]=1; - if ((s->avctx->flags & AV_CODEC_FLAG_PSNR) || s->frame_skip_threshold || s->frame_skip_factor || - !(s->encoding && (s->intra_only || s->pict_type == AV_PICTURE_TYPE_B) && + if (!IS_ENCODER(s) || (s->avctx->flags & AV_CODEC_FLAG_PSNR) || s->frame_skip_threshold || s->frame_skip_factor || + !((s->intra_only || s->pict_type == AV_PICTURE_TYPE_B) && s->avctx->mb_decision != FF_MB_DECISION_RD)) { // FIXME precalc uint8_t *dest_y, *dest_cb, *dest_cr; int dct_linesize, dct_offset; @@ -1988,12 +1989,12 @@ void mpv_reconstruct_mb_internal(MpegEncContext *s, int16_t block[12][64], qpel_mc_func (*op_qpix)[16]; const int linesize = s->current_picture.f->linesize[0]; //not s->linesize as this would be wrong for field pics const int uvlinesize = s->current_picture.f->linesize[1]; - const int readable= s->pict_type != AV_PICTURE_TYPE_B || s->encoding || s->avctx->draw_horiz_band || lowres_flag; + const int readable = s->pict_type != AV_PICTURE_TYPE_B || IS_ENCODER(s) || s->avctx->draw_horiz_band || lowres_flag; const int block_size= lowres_flag ? 8>>s->avctx->lowres : 8; /* avoid copy if macroblock skipped in last frame too */ /* skip only during decoding as we might trash the buffers during encoding a bit */ - if(!s->encoding){ + if (!IS_ENCODER(s)) { uint8_t *mbskip_ptr = &s->mbskip_table[mb_xy]; if (s->mb_skipped) { @@ -2023,7 +2024,7 @@ void mpv_reconstruct_mb_internal(MpegEncContext *s, int16_t block[12][64], if (!s->mb_intra) { /* motion handling */ /* decoding or more than one mb_type (MC was already done otherwise) */ - if(!s->encoding){ + if (!IS_ENCODER(s)) { if(HAVE_THREADS && s->avctx->active_thread_type&FF_THREAD_FRAME) { if (s->mv_dir & MV_DIR_FORWARD) { @@ -2075,7 +2076,7 @@ void mpv_reconstruct_mb_internal(MpegEncContext *s, int16_t block[12][64], } /* add dct residue */ - if(s->encoding || !( s->msmpeg4_version || s->codec_id==AV_CODEC_ID_MPEG1VIDEO || s->codec_id==AV_CODEC_ID_MPEG2VIDEO + if (IS_ENCODER(s) || !(s->msmpeg4_version || s->codec_id == AV_CODEC_ID_MPEG1VIDEO || s->codec_id == AV_CODEC_ID_MPEG2VIDEO || (s->codec_id==AV_CODEC_ID_MPEG4 && !s->mpeg_quant))){ add_dequant_dct(s, block[0], 0, dest_y , dct_linesize, s->qscale); add_dequant_dct(s, block[1], 1, dest_y + block_size, dct_linesize, s->qscale); @@ -2182,7 +2183,7 @@ void mpv_reconstruct_mb_internal(MpegEncContext *s, int16_t block[12][64], } } /* dct only in intra block */ - else if(s->encoding || !(s->codec_id==AV_CODEC_ID_MPEG1VIDEO || s->codec_id==AV_CODEC_ID_MPEG2VIDEO)){ + else if (IS_ENCODER(s) || !(s->codec_id == AV_CODEC_ID_MPEG1VIDEO || s->codec_id == AV_CODEC_ID_MPEG2VIDEO)) { put_dct(s, block[0], 0, dest_y , dct_linesize, s->qscale); put_dct(s, block[1], 1, dest_y + block_size, dct_linesize, s->qscale); put_dct(s, block[2], 2, dest_y + dct_offset , dct_linesize, s->qscale);