From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id A13BD4A538 for ; Mon, 1 Jul 2024 12:02:28 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CAECD68D753; Mon, 1 Jul 2024 15:02:24 +0300 (EEST) 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: =?us-ascii?Q?JNAG1olFHCDtSt1xQO2gp+s/JNHu7GziMPAHPMzAkdEbami4FuWxbr5OgKBK?= =?us-ascii?Q?Xfod3oyQHu4BmjDikCkqTXvb19f0VKckY65hSb8xzkeqbPB3zfC15FvzOWpy?= =?us-ascii?Q?kx+AZa8tJXxA7N0KDwiLvHU/V2gdmo3lcvuu07gTwKRhnKrIpikHO3rjdbCy?= =?us-ascii?Q?FeRfC8Qd8plVG/3AGaoyYy8iFhbVpF5UJiM3TZb/TPQSsAQQGlBt61GSClB/?= =?us-ascii?Q?KkEnaFhuDut6+g0DI5mdINO8izZH85Fz5wB3FdYjnKoYMdMQiL+qt1hz++IA?= =?us-ascii?Q?+ZasQc3ztbRdazQ8kpbxiq1q1AOz8Sh/D0enlTdXEisBe64l08AOhxDVsRWq?= =?us-ascii?Q?VbEbrjefkliUL7Giey3MJPqnj2RGbv5uvb4apOy73QmQvwTkGQWwYHicr6Al?= =?us-ascii?Q?qo1fniz9vIBx1R5Pt1D9v2s2W6uKZwmZQySfIk5Q1gGEwYaxoi4m4s5vtFHx?= =?us-ascii?Q?7kdG7rp6VpKpZoy+l/tuvnl3ANf2/KmnvnfsBdHRp+SsQfPoPEO7sf2E60FJ?= =?us-ascii?Q?OnE8EekR7y9fTbXVzUMW+A5yZxzT3qJUXb5wD9vPi1/mGgUMsBuISBPXr5wL?= =?us-ascii?Q?byvJHIku31H3umTlnRFPs7pop3vQ1vdDNkVy1OB9qnYxaizL90Ribv62papN?= =?us-ascii?Q?tMPk9b6wP6vGkNsiFIPF86EqLvMWOVDBb1vzk6ijS2Q/1NYBJbrPNGFZa8/2?= =?us-ascii?Q?wA4iS6+Bsn7GWYKQiow8aKfHSqIUJAc2nDjgrEPqwElA3Ha1m9OZseQ9VW+A?= =?us-ascii?Q?qk2Ws4vfd4QizXFxdKlKrtdgaoyyV/fwx8GlUMbupeuiuojHB+jTCuUmessY?= =?us-ascii?Q?P1HffSC3o4CJWQLS6LfAe2jBlB+QZV8wAl92NA3rLN7k5Er2aPAyjXYoQSca?= =?us-ascii?Q?thMelq3Z2GuKS8PwKIDwJ30ZA+5vravr8umSnRcf/IqVT66KikJD76EgeW6n?= =?us-ascii?Q?CgPo/hTlcDkqahM2HVCfOdeph6yDC9DRDbjKMZbzmu198rLo1WHJO4xvQDc0?= =?us-ascii?Q?QTZQmJL+/hbdTepTuszYsrThl69+/U3XDvB6I6wQ9rOa02T1SEU9jOkNu/NH?= =?us-ascii?Q?lwBu6wGIAGg9Gayiq0XSvJdbn82zfpgU9l+1nkcS8cQw99n7z5dCKop1RL84?= =?us-ascii?Q?V28wgIRSjU5y5Fp0Fq9An3+zrG06nEpnNo3iDxm0A6JidN4X9jK60lA/DAnL?= =?us-ascii?Q?gz9FLJADQkOpuEVjQAaRigP81eZZ1FC8/fcojljIgDJ3j3jKLaeSK79rYd0q?= =?us-ascii?Q?gEfeXBxqwhdzpeh2ZGD8I1X7jvWH5xAIWHZCoV0urQ=3D=3D?= 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: 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) -- 2.40.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".