From patchwork Mon Oct 17 01:34:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 38755 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4a86:b0:9d:28a3:170e with SMTP id fn6csp1375762pzb; Sun, 16 Oct 2022 18:34:49 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7E2RG9vFyJahQ6NifjbvG3aDv+53pkFdBZpNkvAXzqsDUrthoCd2ou6aTy43bLXLvN2qRE X-Received: by 2002:a17:907:2723:b0:78e:22f9:f16a with SMTP id d3-20020a170907272300b0078e22f9f16amr6582035ejl.682.1665970489605; Sun, 16 Oct 2022 18:34:49 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id m13-20020a056402510d00b0045d9ceae669si1268797edd.404.2022.10.16.18.34.49; Sun, 16 Oct 2022 18:34:49 -0700 (PDT) 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="Q/J7rxvN"; 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 333A768BC85; Mon, 17 Oct 2022 04:34:47 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR02-AM0-obe.outbound.protection.outlook.com (mail-am0eur02olkn2105.outbound.protection.outlook.com [40.92.49.105]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DBBFF68BB29 for ; Mon, 17 Oct 2022 04:34:40 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Rp6rZQ2PycbiOVrkJyH6Ol7VRhOu7XbUo2v3cGNguW76GlJv3+YhOXIZ0p/2aSE6leJ+Q48pftBaKbGAxHICEIglPW/HzRNn9Ku1TjZXlqTrPZBDKMe2QLXma3+Hpk63F5O1qK6OH9k9Vi1v8TdDI7l+eV0QCXen8wv/Cq3FPJsNxjnCMwmxstuafS02U+NupZH7sQBXPXSvSr3scNGXNsTTmNTIhrjZZkj0CfxP832wYStyb47cBCdOukQcee5ShogYLNtl9o4zNJQK1C+yw6XNDLmzMxXpm7+DBK3e0Zis7cZBz42PKJ6mDqhL90h8r+S7N2zRSOz5JKOjYW7Ozg== 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=DtpkCnz3XwYwa4Uez/n6h0nBHNA1G8EUpV8xNboeWvM=; b=TFT24QbHW0za6O5J36ftBOZSMUkt24VVAQN4Av2rYb3XSgBS0jd9UFOBFk7YB4yp/Hh+NNJ7NuDqMfquk8xQrLaoidykA9B8Zha6IxlE8w4AAh+4cB5anWW1Nr68Pw7913YdZ7plWBfC1fAweGbqwmc/BKdAM+TL/nNq3jSzXkoNI6uHGS33wsPRPWt1kfvexSq6Al1sKSkxFadUzE5cs9Qx6RKQj0nueqIZoIbAJy2i7QnPOYC0IN56lshd+4kSwmDG3DEkRpXn6cHpLTPxTUW45D8WPK++L23nLz4dMZbgntiPwhfclr43Ks5exHM53dmqG2Koh1nMPXbBcXDB6A== 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=DtpkCnz3XwYwa4Uez/n6h0nBHNA1G8EUpV8xNboeWvM=; b=Q/J7rxvNExRjIbiEqIlG0jQleYZvSIInwgJq8FIXQEkWdoTYP2YF7hJdlyw3zG5L+ToQng6czGckPJa2lxmVvZl5t6elX8UwtkyV8RnynfbzbRXR5d3BoccYlt6Cer2axxpL5ywZdTe2n3mg211uV9ncvhTD04jZiFEkVFqq8Mk0gmmvZ/LswLIilwiP9pb4mNrdzJgUhGVHWR/yqbvw0ZtvlBQaLM0EgVGnI8yWqcjNt/71ICn2u3nfKll51E+YwI5y4Rn0MRgbDR9XoSi7GKzW5YcqOACBh+gGrhfXMvDiOfqmO9Vf4sigeLI66fY2cXUC3W/XWKkw/nf8Mq/kEg== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by DU0P250MB0916.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:3ec::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.26; Mon, 17 Oct 2022 01:34:39 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::20c0:9c9e:87f:79f]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::20c0:9c9e:87f:79f%2]) with mapi id 15.20.5723.033; Mon, 17 Oct 2022 01:34:39 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Oct 2022 03:34:38 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [u2R+la1k4Dv/J41u+djK+4tGkP1oEKDKFsJpkVEhdo8=] X-ClientProxiedBy: FR3P281CA0056.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:4b::6) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20221017013442.944352-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|DU0P250MB0916:EE_ X-MS-Office365-Filtering-Correlation-Id: 87eec863-f5b0-438f-32f1-08daafdfc1f2 X-MS-Exchange-SLBlob-MailProps: AZnQBsB9XmriMkceEMr8g00cHUekKy/u+afc6hYnzg+51sD1wUhiuV3UUFsiO1fnLfkY/V12Z6EemMx5UR8OMFTbeE7shX95Cvn/P2Q5mDOrJHLCUrJ9gQIRIlrOTgoAUPTQ4fa/AYDiV3RM4OfcttKvrnRUWHUV+3/44JANlPprS0YN6yxHAntMkXRhOs1I5V8uuiCWQC5ZX6qKdvTTpBNzank71cMHrvHY60QM5KVBw4l3aLUfCBMOPlMKigzprWfNWUSMDMLcNc6p69AZ8RgoVY7FBDmIs+FCAZTdWLKKX7Pe6r6r2H7Amd3vCAm/vPvCy2X9BEDzdBtlDDx5/dOOk0Im4ogLtRTSwYcmuusswdpW0CAlR/VUKaDs5bII0DedPvQQLatLOz6ss+9tVn9vgvtPhw+cSSQ/DyC6wACFtY0cb7njTdsYIBPzT0UKh1se+VYsKZ5XE/EY+C9p2dFl5JcCUAMchbAE006n4cBMk2/a+QS0CWE6R8uQex+REb2RA+Aql18SW9foXubRkUO/fyQM7U73wfrFYKnPTiItXoL6W45dHpdlzS+UNwY9x4UfTKADTjLJWPuQ+t0PIEbnTyd7dKgHKhWNpEjonXyd+TIwfAKBO0mN1VLc+MvehAlsax1IsH87d9WHlfouijTvjFSiqCjv4rwwqaazg8ofeKFYIzBRzPUP263dpfQu6a8PO8G4CwlMw60XwAfBZOykLLkVMqRyQuowlGr7yDDmfKmWB+Lrsnh/nbgwltQTkXq4N6iU/a0= X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: umIbvuL+WIz2z4FF3R+sXaPIlhMOEJ0pEnFdqvjwiBQlKip2JWPr9Th12xFDPDq6CsH/ufg6Y8uwEu23tcTSnmA6IuiM7g95DfuMaVGcpvQGlY1gervhvZUUQcyq3/H84mMVEh1yDrwbMmuXTr8c/JIaaSXp1Z5PRtukf6eZXfmY4VcJcpVU4I+vJqrkGDs4wSBGCPfAkN95h9dzII7l5OsEaQz739x4y9GMm0c4EhnlxmzCvPncA2lDbiOhAR33IK3ltGw2InEHIqSm+0oRMArF3rn5ZJNcyH/jQ7v/2l7S9wolTu/bD6lLaR8Na2DQDpstvoswPXeOdv6FRez4GEgzHj6Ihe5ihXpKtV1AvPewGq8uN7vWWfaNBPmfLQ9AviYtW0IjsQWa1xIgkH8tXwiOfHiefaFenWqi+m4nRgqz2sDazkd5mtATW1VzPbmYiWGqQLjvkpRf8DNk1CAsnWry2Nv483BGPyDL6M7dcyAFM5SvT3r0bJJYKiHUrXCdAASNyIvfvWK3fpoAY9Vh+ITuUkQ53JqayB2rMDnkvQ1u9dUimottg6zIU0SIA2Q1ZQvCa9M5m1vudmkwWBG9E4xkekJAmv/RqKrj/3Hf2dtWROoxixHmxxD7wpJAx2FmkRPLDTMPZQNnMvMVXJ84mUtdXj+VNF+Js4yjjVmla7Rk0ZExo2BJNaVbfCmXxkAa X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: b3BKKZ7srn2l5s/f0fiYGwoY1j89ceZj5YLgam5/BeBVY6ZSiDD5ajEoMa3K9LKZ/SRfYi7SlqjBrBzhnGIk1XJ2B8uR0fDoirF7fa4ZsA/Iey45zFA9dQtfl8D72uK6CjSIioHB6MBuStMLg8cVWHbV/cSiPiRktkeYUuifeRnTBrEhH9ge8h/UamQyyyGpAwnskmJ/u9QMgmqZX8mNr738x4cqyoG4v11J0ZfUrh5ypQfRWvWhgidjbEh8bR4MRx+u1tl9cbt2xz7C5r/GIqqtQj3dlWAtlJKVxzvx8G8UE6pN2nJE5NB0Rsdwi93rOwR6nkNeXeBFyQTIkPJofjnJQFedQFvYLTxEBSwZjadydFDko1kl9WCQZjnTgYl1o7SSVWgFd7BKviOEZOx+k/iaquKxFJjGWK5Mqdg43zIgF2gEXcxyEVT4wA2mxpKeiLo9bcWump39iJA7NHoGXrMcrf3lMcy7WpJEf/c9exFt6DeP8Y2p8yUKcGujZ9pzzXY71wcD07hqjJCnVQ60gXc8V3X3Cb6xvxFQXTpm0mSIgmR+A3Zw3TKXWbr4mA3cxxIP6P6Dhu+Lb8y2pqNwJkqRJ61yjOwS+4xz0YtE5n1xvobk1XvD2wYj3vh1+2vVg1Rfi+/j6sT5mbunxMMIfPyLqSLZ4fxYUQOh2Rg0pr7D7oS8SzNN9dcAHRje9lXeBtZIDf8hB5F6WBVoqenyZLjTmVHAjDJJ5vMcmv7rY4cR4B1eEPiiOB1JXnIZwy9L2jVM7GKDg+yvEO/sE3P1e4KZQ3CZPDOQJFbUhEZp0cGyyggw9uQiaQKUYVgi9c9QHFyMdM7l4HtIaYoBwne6mjqIGZ3x6sSYJVSXJlYaVrPpcFFuKCDr8qxVjZN6Gn4+BPzoLKJrwdf5M9yUo4vxvE6x+3CKAhtLeCdHj1sYL9ZybUC6NmR2LqZcZzeriJ4Xi+mob7Bag2oGKyMkBT9j1PqdKLpqEW6wjXwHv/uFFSWguu3ljoRh59hDqsFl2f2eQ8ivYy0g40MyyKs/Si4P5vHBXliwumudoIVBLqMPtpWbUepyqRMhBiJTQCiMDh4C+n4GipGl/YCaRl7+zu11I71xFL+yZWZxetNFtXCeMgNvw3JUAfL8BZITXfsFKYxWg4Eqfo9+X4Jo/VcziWaxwndmxyxxkDdQXAw8A5LgDFy8S+uossB/zBNdS0cLLl4PMYsLj5mU+tynvWtBRcAbZpIgGnZO4srr3zMFB+5pO4h7Nh1J5I+ZQclmhA6az8mGLi6dnXUeuCEvM6zBMW7s1we7XxjPLcqa5XgYxDygIwQSRUMDunRBe22x8ublaSr0 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 87eec863-f5b0-438f-32f1-08daafdfc1f2 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2022 01:34:39.4508 (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: DU0P250MB0916 Subject: [FFmpeg-devel] [PATCH 2/6] avcodec/mpegvideo: Make inlining is_mpeg12 more flexible 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: IB0DzBJsDuEC There are two types of checks for whether the current codec is MPEG-1/2 in mpv_reconstruct_mb_internal(): Those that are required for correctness and those that are not; an example of the latter is "is_mpeg12 || (s->codec_id != AV_CODEC_ID_WMV2)". The reason for the existence of such checks is that mpv_reconstruct_mb_internal() has the av_always_inline attribute and is_mpeg12 is usually inlined, so that in case we are dealing with MPEG-1/2 the above check can be completely optimized away. But is_mpeg12 is not always inlined: it is not in case CONFIG_SMALL is true in which case is_mpeg12 is always zero, so that the checks required for correctness need to check out_format explicitly. This is currently done via a macro in mpv_reconstruct_mb_internal(), so that the fact that it is CONFIG_SMALL that determines this is encoded at two places. This commit changes this by making is_mpeg12 a three-state: DEFINITELY_MPEG12, MAY_BE_MPEG12 and NOT_MPEG12. In the second case, one has to resort to check out_format, in the other cases is_mpeg12 can be taken at face-value. This will allow to make inlining is_mpeg12 more flexible in a future commit. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo.c | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c index 448b65bb96..c2fedbfdaa 100644 --- a/libavcodec/mpegvideo.c +++ b/libavcodec/mpegvideo.c @@ -1294,6 +1294,10 @@ void ff_clean_intra_table_entries(MpegEncContext *s) s->mbintra_table[xy]= 0; } +#define NOT_MPEG12 0 +#define MAY_BE_MPEG12 1 +#define DEFINITELY_MPEG12 2 + /* generic function called after a macroblock has been parsed by the decoder or after it has been encoded by the encoder. @@ -1309,14 +1313,14 @@ 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) -#define IS_MPEG12(s) (CONFIG_SMALL ? ((s)->out_format == FMT_MPEG1) : is_mpeg12) +#define IS_MPEG12(s) (is_mpeg12 == MAY_BE_MPEG12 ? ((s)->out_format == FMT_MPEG1) : is_mpeg12) const int mb_xy = s->mb_y * s->mb_stride + s->mb_x; s->current_picture.qscale_table[mb_xy] = s->qscale; /* update DC predictors for P macroblocks */ if (!s->mb_intra) { - if (!is_mpeg12 && (s->h263_pred || s->h263_aic)) { + if (is_mpeg12 != DEFINITELY_MPEG12 && (s->h263_pred || s->h263_aic)) { if(s->mbintra_table[mb_xy]) ff_clean_intra_table_entries(s); } else { @@ -1324,8 +1328,7 @@ void mpv_reconstruct_mb_internal(MpegEncContext *s, int16_t block[12][64], s->last_dc[1] = s->last_dc[2] = 128 << s->intra_dc_precision; } - } - else if (!is_mpeg12 && (s->h263_pred || s->h263_aic)) + } else if (is_mpeg12 != DEFINITELY_MPEG12 && (s->h263_pred || s->h263_aic)) s->mbintra_table[mb_xy]=1; if (!IS_ENCODER(s) || (s->avctx->flags & AV_CODEC_FLAG_PSNR) || s->frame_skip_threshold || s->frame_skip_factor || @@ -1399,7 +1402,7 @@ void mpv_reconstruct_mb_internal(MpegEncContext *s, int16_t block[12][64], } }else{ op_qpix = s->me.qpel_put; - if ((is_mpeg12 || !s->no_rounding) || s->pict_type == AV_PICTURE_TYPE_B) { + if ((is_mpeg12 == DEFINITELY_MPEG12 || !s->no_rounding) || s->pict_type == AV_PICTURE_TYPE_B) { op_pix = s->hdsp.put_pixels_tab; }else{ op_pix = s->hdsp.put_no_rnd_pixels_tab; @@ -1444,7 +1447,7 @@ void mpv_reconstruct_mb_internal(MpegEncContext *s, int16_t block[12][64], add_dequant_dct(s, block[7], 7, dest_cr + dct_offset, dct_linesize, s->chroma_qscale); } } - } else if(is_mpeg12 || (s->codec_id != AV_CODEC_ID_WMV2)){ + } else if (is_mpeg12 == DEFINITELY_MPEG12 || (s->codec_id != AV_CODEC_ID_WMV2)){ add_dct(s, block[0], 0, dest_y , dct_linesize); add_dct(s, block[1], 1, dest_y + block_size, dct_linesize); add_dct(s, block[2], 2, dest_y + dct_offset , dct_linesize); @@ -1477,7 +1480,8 @@ void mpv_reconstruct_mb_internal(MpegEncContext *s, int16_t block[12][64], } else { /* Only MPEG-4 Simple Studio Profile is supported in > 8-bit mode. TODO: Integrate 10-bit properly into mpegvideo.c so that ER works properly */ - if (!is_mpeg12 && CONFIG_MPEG4_DECODER && /* s->codec_id == AV_CODEC_ID_MPEG4 && */ + if (is_mpeg12 != DEFINITELY_MPEG12 && CONFIG_MPEG4_DECODER && + /* s->codec_id == AV_CODEC_ID_MPEG4 && */ s->avctx->bits_per_raw_sample > 8) { ff_mpeg4_decode_studio(s, dest_y, dest_cb, dest_cr, block_size, uvlinesize, dct_linesize, dct_offset); @@ -1558,12 +1562,16 @@ void ff_mpv_reconstruct_mb(MpegEncContext *s, int16_t block[12][64]) #if !CONFIG_SMALL if(s->out_format == FMT_MPEG1) { - if(s->avctx->lowres) mpv_reconstruct_mb_internal(s, block, 1, 1); - else mpv_reconstruct_mb_internal(s, block, 0, 1); - } else + if (s->avctx->lowres) mpv_reconstruct_mb_internal(s, block, 1, DEFINITELY_MPEG12); + else mpv_reconstruct_mb_internal(s, block, 0, DEFINITELY_MPEG12); + } else { + if (s->avctx->lowres) mpv_reconstruct_mb_internal(s, block, 1, NOT_MPEG12); + else mpv_reconstruct_mb_internal(s, block, 0, NOT_MPEG12); + } +#else + if (s->avctx->lowres) mpv_reconstruct_mb_internal(s, block, 1, MAY_BE_MPEG12); + else mpv_reconstruct_mb_internal(s, block, 0, MAY_BE_MPEG12); #endif - if(s->avctx->lowres) mpv_reconstruct_mb_internal(s, block, 1, 0); - else mpv_reconstruct_mb_internal(s, block, 0, 0); } void ff_init_block_index(MpegEncContext *s){ //FIXME maybe rename