From patchwork Fri Dec 24 03:23:31 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 32895 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp7811928iog; Thu, 23 Dec 2021 19:24:44 -0800 (PST) X-Google-Smtp-Source: ABdhPJzZBowEqdpnOXR+i5zxoWUZ/UKMPlokp3bSsxDg2G8Ygq5J1zI1b7O7Y7eaDNuvrfsinSmj X-Received: by 2002:a05:6402:524d:: with SMTP id t13mr4412279edd.356.1640316284555; Thu, 23 Dec 2021 19:24:44 -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 a20si2846436edb.545.2021.12.23.19.24.44; Thu, 23 Dec 2021 19:24:44 -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=S7d7siro; 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 6A31A68B26D; Fri, 24 Dec 2021 05:24:21 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-oln040092064061.outbound.protection.outlook.com [40.92.64.61]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5E31C68B22C for ; Fri, 24 Dec 2021 05:24:18 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=H4aIPYTMhfdqQKFOLMRLhlvZZKsagTm1t4744aWzfg0wL9MNdZhCsm3vAIv236Bq3xUj0RC19u8S9e6qr+fVFg3ZqSpumyXk6BHvdSUYIhoR8brAmFqEOnPpJVLjPZ3f+5JC9roUxrvZxq3mayHbzYkx07BaSV+CaKrMbPoa8IxIBG6kqoSfzhUYTF0PJJ7BOWFLmF1QHDv/i7sYQWzbomvOJ56yM9dYVoUEkARIpNR9cR98piejJQfGE8gvUL3fX95SUybY3HLJquaweY2xkgCkDTNdyi8JVb8KXucp09cwe66ka9lkYmLaxSsQUPYxZsmIZof6Zv8Wj1oYw76l1w== 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=Ys0AIabaJO3oNpti0J+ZWQ99YCljR/aSMT7vi1YOO6I=; b=AIgfQVkOnRlG1Fi4Tx1YomlPYdwzP/OyjVt9XiLcPU2Zb/fizon1PhvQf/lJlc9pSJj4+64mm2WF0vl/WOnj3ih9Q8lqtYrV4Ar/AjLYyWBDGt8uz/PxmeDO4a7lgCgUqqNPLAeywMgx1qKvCn10h6NSlYIsFySK2LTUXP6GK89Wuj1K9Qb2GUMK4yN7LwKCs1Dk8D7A6yT7WnpLlu7gf5TYUTc/NEPhZIZGCcvBTLyuLphhLDQBw5yE2pu9u/TK/xhtQZv/KIfx8dgsyfPIMONL1Hgypck2yyvsd2f5/TxKO/qm0MUMX4UpfC4jPbmfbUu3Ku6baVH9pnPqT9GDSQ== 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=Ys0AIabaJO3oNpti0J+ZWQ99YCljR/aSMT7vi1YOO6I=; b=S7d7sirojMALgflM+hcIjDEIgOAy/PHnCvStX4Le/rqtI8ZGuSXGFMO0e8aNosx+bxKCd7zJBauvKkyZXtfMZutJbHoMlAozwHBhlJVfHi5/jbCpvZ4ml71na3fiUAXTKyETs77hsVerFu82SOxtWySMLzzMeZkwznxh2G9LrbjcTKRRxLyZcrZBeRH35Y449PPTeIaGJwQfLKUd5paP+3ZfmHaFcr//L5GSy84J3Np35MF8JAyyabE49TLQgmcXm1BJffRbjgFehfdFcrH06YAce5oS4jwB+NRMan557dlFbVG6zMDKO22Vs9C6DYZe/bsDLnfOonppeaz12NbbKw== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB5249.eurprd03.prod.outlook.com (2603:10a6:20b:c9::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4823.18; Fri, 24 Dec 2021 03:24:17 +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; Fri, 24 Dec 2021 03:24:17 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 24 Dec 2021 04:23:31 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [X5UV49fsIL+Ih3DczgMKH2k3eATp7hNw] X-ClientProxiedBy: AS9PR0301CA0032.eurprd03.prod.outlook.com (2603:10a6:20b:469::30) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20211224032332.2104747-5-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 591012fa-e5dd-446b-4265-08d9c68cdd5b X-MS-Exchange-SLBlob-MailProps: gjx25WM8ZNWm3GLoeUntTG6KfWWWbWhlUZwqY0FFvGd7mlzbnHZt8XKa19AFzg33cVq75PANLReZYz6pQ6M8ScOqRV+6Ok4UNbtT1ikm+Rgx1qZsjwH+llAbx79QTv9ocvjIxecPhrtnn5whaZIrukATRmFj9x5vm7atT5RTcl7B+7vDpuV5v5GTwfDbrRIv6Qu0UZP/f/am6ttWcZsVazS8S2dpsJkF7GRnGpKEs9Ar64rem7UUarbCHTGCiyyxt2cZ+7P4SjbROKAj6gQMZlDxXbxRSWQWFYXSSPWC+WRAxMXlL5eDn3xHpEgNFx9rtFiUduHnDSBm+3JMFXCBaVNk/pKD/RUDPy0CQ9kwiB3SgBparZ6BxGgVl6Q/VXVpyNbK0rvsf2rST+Ro2fI7h0zhP+NgymhQoC9SM7813IZBJ66hbss9mVyMKx4UVf9NXr6wMD+CO2gn4lJJHbsrrqo7YGPgPoYVinCRFncn2N978tHAJx3mCAYqsDyyzLNXgGGkoNy7Vujp85EEKyJZLHbrVZFYtL5siW6lgzCKjRa2RRIY3qTaxEwC/M32b4/+X4mTSEgSAZhHh5oXlkvlr69FKMIuxNU3Y5jAAPCKEcGBvADK3xbLdq9X9EDn2k1+iO/4q4eZ08A1RdgKaS6uxmW198ivVaq5z4bSxcQuappgQE8Nk1jFPNCGdmrpDRkLK9Mavh17pqTBqMws5TIXkmjxCgguhubcdM8kxFOrUHk= X-MS-TrafficTypeDiagnostic: AM6PR03MB5249:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: t+I7yxlz32sxHtPqrwDlv+1hlXHaH7nkc567QyMkRq9AA2TqD8S+FCS0JTFe/eBoA15II4RtJzKstzE90kEICDet/CxVom3ZFIe+zeXbrBWd7lnoJ8m9wlzWc6u78OR7K+xUYwxTLa9SSn8Facmlj4XRHNG8FDnED3ixOaxZE+5o4SUKA5OViqm/+1IB8QOcRy58CJPdM5b+SFKCm5RVq87nDsYRG9ZlSaiVmjSrTc91Y031cHsaRyLvZ8uwXSiMbAewqP5RGFdl0Uh50meB0PjoZIlNSMk93tfRmCNYd87YvglhOhmqPFiyDXoD2rYrABXLGWYm0rtMHIuUIO098p+msmkmH24+8LOrSpYJIseNsZ5Voxp2i4CL9mmgYKcWLB/L1BaBgOjPfW8JOxe0dBUcKJX7TNBm2oPuBaHgWJi+Vx0u6ObPhLbvGdui5Knhe+0esjFmOlqzfEioK09W4kSJd8T0nwd9+Tjoqz/IZHshUmHCovQCiXFDY1z92iccpebbnNwcSNterN2//V0svJ7FFP4KZKirApJOvF72DZ0ywj+Ml+F7CthnEnwDbY8UOP/eaDp0yGD8XCnIQfj1ZA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: kvtdyRkJrrP26R3REsQMcJaGQieaDSjxqA20KsCLZ+5mD4zUQGO4NwYZOxoHqQ4S3Vpm6L0a1mZ4JO/Pv26AcExfmmaOFrzLvbqpW5gU8PQ0e6/h2TSzkk43S1+GxtDQVSfkBZNCGTFcfTlTk/v2WLqbqg1UvjgnyITzgSDpe8PbWnT4pU8iG/i6uom6g9h6MdBBXvI6zYhmh+0zts7HinK+Y5yc+wcq4Zs+6LFUHtEhvboTxtunL5APwv10FXdl4Hn6YVsZNZnHiPAYnp36k5pjwsk01FLy8ISLLk4oip9NKj4H+m+iU3G7speBioKPvYs//osojh6CTL1WinlWrYQ9x6RYDNNpL6gqgY99tGxGnmltlasWImG0myy1oVINQqHDL7Lj6Jp979ftJuihBPR0DZbJ2S4Fk4JZwKMz0Gx5ee0WF3VrYUm7tV2yulZVjQSsXxmoDXHdBIVU6LpaLKLF5A1kxpzkas1VNrdohA/YLoGBhPAC6CE45ajxYY9lanHP5yf93+qq0LiI+ltzsm94pyL2QGwpRQYXIsVWEilLrF+lH6FCSpSiBfBXZeqVCASCUUWKblQYWLh/tz3oQNU8KxXa+z1jfxmodeCZIknZQ6kWG5f7ktT6evkeYrejTuESdVmlTYP8TErbBpsXu3iI3rtUfEC3IrMlbs8UtKwSZ3hEyyrv5PYwjzqSZkYFvnJntRA8oBLzasIXnkbbqgJ54UO1BgVBWw68v78iAWUcQGxPuy2e0K76glOMSUh0CFIVOvj6nniEvnJBTSVtA8cExrsmQ1ugPq5qpibCRDTk/Tk7J37MGZEACKCaef/CV2HSfFhLnrKcVPMDcoxlD1XPkBemxP72lqLXdAv0H+w9KkpVks9L2bqXz2rFU2BpG9o9z7AGGS0zKE3JvdB4txnRC8FJYfwnfw4vt1Ph8Df+eNgGMCnwVT6BskJtashY9+4RS+POwiWwRuJIY7ueoQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 591012fa-e5dd-446b-4265-08d9c68cdd5b X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Dec 2021 03:24:17.5467 (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: AM6PR03MB5249 Subject: [FFmpeg-devel] [PATCH 35/36] avcodec/mpegvideo_enc: Improve inlining of chroma_format 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: tznSldV7fNWQ encode_mb() calls encode_mb_internal() three times, once for each supported chroma format. The reason for this is that some chroma format dependent parameters can then be inlined as encode_mb_internal() is marked as av_always_inline. Yet the most basic parameters based upon chroma format have not been inlined: The chroma format itself and the chroma subsampling parameters. This commit does so. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo_enc.c | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 0279816d3c..0ac8886246 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -2030,7 +2030,10 @@ static av_always_inline void encode_mb_internal(MpegEncContext *s, int motion_x, int motion_y, int mb_block_height, int mb_block_width, - int mb_block_count) + int mb_block_count, + int chroma_x_shift, + int chroma_y_shift, + int chroma_format) { int16_t weight[12][64]; int16_t orig[12][64]; @@ -2087,8 +2090,8 @@ static av_always_inline void encode_mb_internal(MpegEncContext *s, if((mb_x * 16 + 16 > s->width || mb_y * 16 + 16 > s->height) && s->codec_id != AV_CODEC_ID_AMV){ uint8_t *ebuf = s->sc.edge_emu_buffer + 38 * wrap_y; - int cw = (s->width + s->chroma_x_shift) >> s->chroma_x_shift; - int ch = (s->height + s->chroma_y_shift) >> s->chroma_y_shift; + int cw = (s->width + chroma_x_shift) >> chroma_x_shift; + int ch = (s->height + chroma_y_shift) >> chroma_y_shift; s->vdsp.emulated_edge_mc(ebuf, ptr_y, wrap_y, wrap_y, 16, 16, mb_x * 16, mb_y * 16, @@ -2128,8 +2131,8 @@ static av_always_inline void encode_mb_internal(MpegEncContext *s, dct_offset = wrap_y; uv_dct_offset = wrap_c; wrap_y <<= 1; - if (s->chroma_format == CHROMA_422 || - s->chroma_format == CHROMA_444) + if (chroma_format == CHROMA_422 || + chroma_format == CHROMA_444) wrap_c <<= 1; } } @@ -2146,10 +2149,10 @@ static av_always_inline void encode_mb_internal(MpegEncContext *s, } else { s->pdsp.get_pixels(s->block[4], ptr_cb, wrap_c); s->pdsp.get_pixels(s->block[5], ptr_cr, wrap_c); - if (!s->chroma_y_shift && s->chroma_x_shift) { /* 422 */ + if (chroma_format == CHROMA_422) { s->pdsp.get_pixels(s->block[6], ptr_cb + uv_dct_offset, wrap_c); s->pdsp.get_pixels(s->block[7], ptr_cr + uv_dct_offset, wrap_c); - } else if (!s->chroma_y_shift && !s->chroma_x_shift) { /* 444 */ + } else if (chroma_format == CHROMA_444) { s->pdsp.get_pixels(s->block[ 6], ptr_cb + 8, wrap_c); s->pdsp.get_pixels(s->block[ 7], ptr_cr + 8, wrap_c); s->pdsp.get_pixels(s->block[ 8], ptr_cb + uv_dct_offset, wrap_c); @@ -2213,7 +2216,7 @@ static av_always_inline void encode_mb_internal(MpegEncContext *s, dct_offset = wrap_y; uv_dct_offset = wrap_c; wrap_y <<= 1; - if (s->chroma_format == CHROMA_422) + if (chroma_format == CHROMA_422) wrap_c <<= 1; } } @@ -2232,7 +2235,7 @@ static av_always_inline void encode_mb_internal(MpegEncContext *s, } else { s->pdsp.diff_pixels(s->block[4], ptr_cb, dest_cb, wrap_c); s->pdsp.diff_pixels(s->block[5], ptr_cr, dest_cr, wrap_c); - if (!s->chroma_y_shift) { /* 422 */ + if (!chroma_y_shift) { /* 422 */ s->pdsp.diff_pixels(s->block[6], ptr_cb + uv_dct_offset, dest_cb + uv_dct_offset, wrap_c); s->pdsp.diff_pixels(s->block[7], ptr_cr + uv_dct_offset, @@ -2257,7 +2260,7 @@ static av_always_inline void encode_mb_internal(MpegEncContext *s, skip_dct[4] = 1; if (s->mecc.sad[1](NULL, ptr_cr, dest_cr, wrap_c, 8) < 20 * s->qscale) skip_dct[5] = 1; - if (!s->chroma_y_shift) { /* 422 */ + if (!chroma_y_shift) { /* 422 */ if (s->mecc.sad[1](NULL, ptr_cb + uv_dct_offset, dest_cb + uv_dct_offset, wrap_c, 8) < 20 * s->qscale) @@ -2283,7 +2286,7 @@ static av_always_inline void encode_mb_internal(MpegEncContext *s, get_visual_weight(weight[4], ptr_cb , wrap_c); if (!skip_dct[5]) get_visual_weight(weight[5], ptr_cr , wrap_c); - if (!s->chroma_y_shift) { /* 422 */ + if (!chroma_y_shift) { /* 422 */ if (!skip_dct[6]) get_visual_weight(weight[6], ptr_cb + uv_dct_offset, wrap_c); @@ -2341,7 +2344,7 @@ static av_always_inline void encode_mb_internal(MpegEncContext *s, s->block_last_index[5] = 0; s->block[4][0] = s->block[5][0] = (1024 + s->c_dc_scale / 2) / s->c_dc_scale; - if (!s->chroma_y_shift) { /* 422 / 444 */ + if (!chroma_y_shift) { /* 422 / 444 */ for (i=6; i<12; i++) { s->block_last_index[i] = 0; s->block[i][0] = s->block[4][0]; @@ -2413,9 +2416,12 @@ static av_always_inline void encode_mb_internal(MpegEncContext *s, static av_always_inline void encode_mb(MpegEncContext *s, int motion_x, int motion_y) { - if (s->chroma_format == CHROMA_420) encode_mb_internal(s, motion_x, motion_y, 8, 8, 6); - else if (s->chroma_format == CHROMA_422) encode_mb_internal(s, motion_x, motion_y, 16, 8, 8); - else encode_mb_internal(s, motion_x, motion_y, 16, 16, 12); + if (s->chroma_format == CHROMA_420) + encode_mb_internal(s, motion_x, motion_y, 8, 8, 6, 1, 1, CHROMA_420); + else if (s->chroma_format == CHROMA_422) + encode_mb_internal(s, motion_x, motion_y, 16, 8, 8, 1, 0, CHROMA_422); + else + encode_mb_internal(s, motion_x, motion_y, 16, 16, 12, 0, 0, CHROMA_444); } static inline void copy_context_before_encode(MpegEncContext *d, MpegEncContext *s, int type){