From patchwork Mon Jul 1 12:01:55 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 50241 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:cc64:0:b0:482:c625:d099 with SMTP id k4csp1729135vqv; Mon, 1 Jul 2024 05:02:30 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWbwiqRyzTXhzpPFtC8VGs4sxDtBkQtUxene+G24lybET0Nk9ze4oIBnqhtkFKyfO+muAo37StnJ9EMeCXW4T2+FqoV6ewx1qoyqg== X-Google-Smtp-Source: AGHT+IH+r3hB6ikJNo4qhQi0D+CvfDuzVKbhkS2wYinyUXxOca59rZbcZBiloHur46lZmueoysyp X-Received: by 2002:a05:6512:3b91:b0:52e:7f87:4e66 with SMTP id 2adb3069b0e04-52e826ee70amr4174524e87.49.1719835350129; Mon, 01 Jul 2024 05:02:30 -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 2adb3069b0e04-52e7ab3d5bdsi2263487e87.646.2024.07.01.05.02.29; Mon, 01 Jul 2024 05:02:30 -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=dJAp5Vfh; 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 403DD68D759; Mon, 1 Jul 2024 15:02:26 +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-am0eur02olkn2056.outbound.protection.outlook.com [40.92.49.56]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 730DD68D6BA for ; Mon, 1 Jul 2024 15:02:18 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mwjE8EJS5vDGzGvsERbDBQgmbh4h3JdZuSZ+fP2TAavy52Ue27KDWV2UMbqqYCV+aHFWVPudfqU3L+7Vcf/6VBzkM3W+oXTaZ3oMpAlSLYixIXTXgGa1FoI/EAdsbmV3ucEyDR+dcxNLSfCDEMoRYrC60cAD0cSK1o0LKC2QVdbheOWs4j2GXtcJbAPSOPzriznZb+/LVcMP42ZPGXSKh2dMR24su+XwkShCURICAYn11d4+Ymmo9l7FFrX6AwTBEY3AsKkRpJMWpJ20SG7jC8IO8A6lbADnppeV32IeszJzD9/BoIo4pGLcY30p7IvrOHsapBLm3IlEOtUWjMZlzQ== 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=JnjkD4oHuzkcwrScPVamE3Y1qvQjCtwOzjKgdJ0iJgQ=; b=AJ4TWa+vknM+YFoZJNIE10ahyNNzkJioHUbQhJmy4p2E1TJp8skBiAIMw5McDn4On2RMjwOsaDyiiEK9Y5bbtxpc45vpx4j3Px++Ih7Zofs/85I2fsbKxDEp9gBq6Ca60lNMPKxSOC1e0E55Zw5KSSQv2lw4Aw1yJbN4aHfs3Hc4u9MJPORSH0qR1+fWcCXOKHYMJcCkA2Lwos6M5ciH+Ti6ciL9njZAYvQlHN550ngpa/wFNKr812rzXjYscXPBWAruRkkUjcofn6iLpohfVP3Vr30EWvxZN8eUWpoOjl+TTYl84PHDHZMN9IgO8OTpwPfWtMAKhjhmX18LrMVuFA== 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=JnjkD4oHuzkcwrScPVamE3Y1qvQjCtwOzjKgdJ0iJgQ=; b=dJAp5Vfhxk4tUqPCvVO3Y+LIThj6jdy2lUygmAb2622F/eLawxkGGCEJD6VmtzJFeYmbz6ZJXCxjUBRL9bi1h0+km1nEHlxeZsgMisBkVmPoZGL70FjdF+AsXU4PzZRrqAoYev42mVJrMJn7wjp9NiV44hXRgfP36PDcZ1vxq6Ecy3Z+qUvBnV33UjD7qHZlaHwsalVoS4vVUAgXCXgyw/C39NI4ugeS9l19Ejy/gGXxYyP8ZDzcHJ/oLK7DmzamfT/Brh69KrpI+a9GbtEqwd9AEYRF6wy0N5Z8JABzqEACbdBBAC5rVudNXZZx/TrZYpLLfAyLkvU1vzm2flb6ow== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by PR3P250MB0257.EURP250.PROD.OUTLOOK.COM (2603:10a6:102:17c::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7719.29; Mon, 1 Jul 2024 12:02:16 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::d6a1:e3af:a5f1:b614]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::d6a1:e3af:a5f1:b614%5]) with mapi id 15.20.7719.029; Mon, 1 Jul 2024 12:02:15 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 1 Jul 2024 14:01:55 +0200 Message-ID: X-Mailer: git-send-email 2.40.1 X-TMN: [S4XXNVqaK8ZP4Myt8LRtT3SLN3t//LaF3pQUx2BOgOQ=] X-ClientProxiedBy: ZR0P278CA0150.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:41::14) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20240701120207.3560793-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|PR3P250MB0257:EE_ X-MS-Office365-Filtering-Correlation-Id: c3d6d11f-e2ce-4e33-2440-08dc99c5a62e X-Microsoft-Antispam: BCL:0; ARA:14566002|8060799006|461199028|3412199025|440099028|1710799026; X-Microsoft-Antispam-Message-Info: ovnzKr5/1OSXx2BzYOQ4/sHpfyKLebWxK2zDeIn9j0MJOzscKWFEnMfpQFSXdcLZeACzOymauUtTZXj7JfJZH02PJhSVooa4ARS15VdDGiD4RF10FMoe/5mcj/rmn8ovZ4VnhBv0W1yBYF8AZKGsXshiYG6B13huXqGOKVIVQzSN9AtMe/rt3WW243Q+nU2F0TqjPl7vXNcXxXtrEISZOY/abUZANbNdxOPiG/G9lAunKMaPCHs1kLHlFybODb5hFEfd5soaOQDC28UhppMizIEPknGDBT3trPgfmvdggDjL2MGEyvDbAIXNFbRcD6OZvhdYaN0WyG7aCx4kOmzIHYXJsFMvcjyVRX2cdMWliA75K+l3PTkSrnzs3wHDryhgot2FYysQpWp6o3kyiXo2JF4CfUS3RFWvKrgDUWjR5TbD6ecgeXiKbI0FgmPbiJxkBAc9qndoQ57L9FzsE9OPjxvg8uUaicDoMk4IJzqt914NhRVCUFT9/324yaIYxBKyIg4jxwdiYolrplqx6JUOWkA33eIQPWIVqlTquMvt/yutjaTKubijqzGrhNcfZJsW3oNf5MGmhWpsLbUbiG19x216ZXABXn4URKCJZJIofbyaMZOu0qsCIQ2DmVJoP8nKatFX2nW41ZveYydKv96Gxg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: JNAG1olFHCDtSt1xQO2gp+s/JNHu7GziMPAHPMzAkdEbami4FuWxbr5OgKBKXfod3oyQHu4BmjDikCkqTXvb19f0VKckY65hSb8xzkeqbPB3zfC15FvzOWpykx+AZa8tJXxA7N0KDwiLvHU/V2gdmo3lcvuu07gTwKRhnKrIpikHO3rjdbCyFeRfC8Qd8plVG/3AGaoyYy8iFhbVpF5UJiM3TZb/TPQSsAQQGlBt61GSClB/KkEnaFhuDut6+g0DI5mdINO8izZH85Fz5wB3FdYjnKoYMdMQiL+qt1hz++IA+ZasQc3ztbRdazQ8kpbxiq1q1AOz8Sh/D0enlTdXEisBe64l08AOhxDVsRWqVbEbrjefkliUL7Giey3MJPqnj2RGbv5uvb4apOy73QmQvwTkGQWwYHicr6Alqo1fniz9vIBx1R5Pt1D9v2s2W6uKZwmZQySfIk5Q1gGEwYaxoi4m4s5vtFHx7kdG7rp6VpKpZoy+l/tuvnl3ANf2/KmnvnfsBdHRp+SsQfPoPEO7sf2E60FJOnE8EekR7y9fTbXVzUMW+A5yZxzT3qJUXb5wD9vPi1/mGgUMsBuISBPXr5wLbyvJHIku31H3umTlnRFPs7pop3vQ1vdDNkVy1OB9qnYxaizL90Ribv62papNtMPk9b6wP6vGkNsiFIPF86EqLvMWOVDBb1vzk6ijS2Q/1NYBJbrPNGFZa8/2wA4iS6+Bsn7GWYKQiow8aKfHSqIUJAc2nDjgrEPqwElA3Ha1m9OZseQ9VW+Aqk2Ws4vfd4QizXFxdKlKrtdgaoyyV/fwx8GlUMbupeuiuojHB+jTCuUmessYP1HffSC3o4CJWQLS6LfAe2jBlB+QZV8wAl92NA3rLN7k5Er2aPAyjXYoQScathMelq3Z2GuKS8PwKIDwJ30ZA+5vravr8umSnRcf/IqVT66KikJD76EgeW6nCgPo/hTlcDkqahM2HVCfOdeph6yDC9DRDbjKMZbzmu198rLo1WHJO4xvQDc0QTZQmJL+/hbdTepTuszYsrThl69+/U3XDvB6I6wQ9rOa02T1SEU9jOkNu/NHlwBu6wGIAGg9Gayiq0XSvJdbn82zfpgU9l+1nkcS8cQw99n7z5dCKop1RL84V28wgIRSjU5y5Fp0Fq9An3+zrG06nEpnNo3iDxm0A6JidN4X9jK60lA/DAnLgz9FLJADQkOpuEVjQAaRigP81eZZ1FC8/fcojljIgDJ3j3jKLaeSK79rYd0qgEfeXBxqwhdzpeh2ZGD8I1X7jvWH5xAIWHZCoV0urQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c3d6d11f-e2ce-4e33-2440-08dc99c5a62e X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jul 2024 12:02:15.9276 (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: PR3P250MB0257 Subject: [FFmpeg-devel] [PATCH 01/13] avcodec/h261enc: Use LUT to write motion vector differences 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: g7iXAgjyujz9 Signed-off-by: Andreas Rheinhardt --- libavcodec/h261enc.c | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/libavcodec/h261enc.c b/libavcodec/h261enc.c index a901c32e42..d3d724bef6 100644 --- a/libavcodec/h261enc.c +++ b/libavcodec/h261enc.c @@ -39,6 +39,7 @@ #define H261_MAX_RUN 26 #define H261_MAX_LEVEL 15 #define H261_ESC_LEN (6 + 6 + 8) +#define MV_TAB_OFFSET 32 static struct VLCLUT { uint8_t len; @@ -47,6 +48,7 @@ static struct VLCLUT { static uint8_t uni_h261_rl_len [64 * 128]; static uint8_t uni_h261_rl_len_last[64 * 128]; +static uint8_t h261_mv_codes[64][2]; typedef struct H261EncContext { MpegEncContext s; @@ -140,20 +142,8 @@ void ff_h261_reorder_mb_index(MpegEncContext *s) static void h261_encode_motion(PutBitContext *pb, int val) { - int sign, code; - if (val == 0) { - // Corresponds to ff_h261_mv_tab[0] - put_bits(pb, 1, 1); - } else { - if (val > 15) - val -= 32; - if (val < -16) - val += 32; - sign = val < 0; - code = sign ? -val : val; - put_bits(pb, ff_h261_mv_tab[code][1], ff_h261_mv_tab[code][0]); - put_bits(pb, 1, sign); - } + put_bits(pb, h261_mv_codes[MV_TAB_OFFSET + val][1], + h261_mv_codes[MV_TAB_OFFSET + val][0]); } static inline int get_cbp(MpegEncContext *s, int16_t block[6][64]) @@ -323,6 +313,7 @@ void ff_h261_encode_mb(MpegEncContext *s, int16_t block[6][64], static av_cold void h261_encode_init_static(void) { + uint8_t (*const mv_codes)[2] = h261_mv_codes + MV_TAB_OFFSET; memset(uni_h261_rl_len, H261_ESC_LEN, sizeof(uni_h261_rl_len)); memset(uni_h261_rl_len_last, H261_ESC_LEN + 2 /* EOB */, sizeof(uni_h261_rl_len_last)); @@ -341,6 +332,20 @@ static av_cold void h261_encode_init_static(void) uni_h261_rl_len_last[UNI_AC_ENC_INDEX(run, 64 + level)] = len + 2; uni_h261_rl_len_last[UNI_AC_ENC_INDEX(run, 64 - level)] = len + 2; } + + for (size_t i = 1;; i++) { + // sign-one MV codes; diff -16..-1, 16..31 + mv_codes[32 - i][0] = mv_codes[-i][0] = (ff_h261_mv_tab[i][0] << 1) | 1 /* sign */; + mv_codes[32 - i][1] = mv_codes[-i][1] = ff_h261_mv_tab[i][1] + 1; + if (i == 16) + break; + // sign-zero MV codes: diff -31..-17, 1..15 + mv_codes[i][0] = mv_codes[i - 32][0] = ff_h261_mv_tab[i][0] << 1; + mv_codes[i][1] = mv_codes[i - 32][1] = ff_h261_mv_tab[i][1] + 1; + } + // MV code for difference zero; has no sign + mv_codes[0][0] = 1; + mv_codes[0][1] = 1; } av_cold int ff_h261_encode_init(MpegEncContext *s)