From patchwork Wed Mar 6 22:49:11 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 46858 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:d90e:b0:19e:cdac:8cce with SMTP id jd14csp690223pzb; Wed, 6 Mar 2024 14:49:31 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCUV83omQEEBX05RTWdQPQ8cQoYzMySrOBvPJV1eLkv9ALBDtyT6AfXIow3recTqZQ7J+BCz1i1d6ueibhJ5EZlUI8I5qH2kEud+kA== X-Google-Smtp-Source: AGHT+IEKM4stZpgYLzs4DGPDFja1hyCC6UkSLFQ85iL16SSU2qQaPHsvOxn6bKaVumlcFgeJ8fIF X-Received: by 2002:a2e:a168:0:b0:2d3:318c:7652 with SMTP id u8-20020a2ea168000000b002d3318c7652mr210724ljl.30.1709765371506; Wed, 06 Mar 2024 14:49:31 -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 f15-20020a0564021e8f00b005676773c28bsi2768873edf.188.2024.03.06.14.49.31; Wed, 06 Mar 2024 14:49:31 -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=EYboTZLn; 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 A224568CCE0; Thu, 7 Mar 2024 00:49:28 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-he1eur04olkn2098.outbound.protection.outlook.com [40.92.73.98]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5C87168BD37 for ; Thu, 7 Mar 2024 00:49:22 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BnJJQHpLG6z0CUphUyF4FGnc9/v8xMmqzqthzfnhRGKY3tSJW0GyDGP5sRno319BZUGESEfCJrx/GVSGhLJ6UyESW+TxOWWqC9NxSPt8FFA9gAJsy2b65IGYwpTFYoieQAwdlW6EFQRjst3/CYilaOvFRgsS5joHHWyjJbkxbSPlOszK3t8VnnYzbB1E1PVwNgrQjZxkDCAW/0X42rIqUoEtpZ+tbbyzmVGWXWMome4oDqvYUALGYCplLJJAHg5vRaGavELqtwO6Y6We320MH8wVo4HcuryACiVcSNPNBOYGZ7JFwfGySQmESsDYM89k6lWrje6cTiaN1BN+tTFDnw== 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=vvXbJCnapLK1e8g8ZoI3Z5qKIgIGUuMjZ3pLM60iD8g=; b=XJ4zTMrwupi4NZhWjihxO8nrwHoaxZW1KPAbG1mGJxPGWYZAlmkHT324OMoAEYH1v4rlF8GT4+5hNk6TTc2X+yvY1LhfpskW2Rr0j52q6KBe6lvGC8M5MA5pzdndZMsm1ZWp/+jJDZFnA0Xc2W/ISx5q4qO5pvQDjXHi6bSiyolFnC1O99RhE4aitGDxeW8VzMkD2/lnxE35DZE8a5oeHWM3TKFJCqj6NrKIgKmQAwOBOR1BxZS4ZCbX+H0ZmeJUqpg2ZivZujY2k3s7ueCPuM589MlB/6G+vVwFGEDLZnza5SUNY3xrtVyZA1XgbKQWP1Mt5VshBkv1IBpOS0atUw== 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=vvXbJCnapLK1e8g8ZoI3Z5qKIgIGUuMjZ3pLM60iD8g=; b=EYboTZLnBsmFdbSCHuBi5I0fg9lH126bKPs9hm9L99JoGl0SaTRooQ9q2XcqupWu4u32Ozbma59RIuqTRGNQCU9vsmCYGrMmLcNFpSP7KX+p4OLiZeFUKsoY9TWqS7nhCiaSz3KF09qwcCBYsGZMbi5zIQbzWk/vOMqfb5qHbGgOfSfoaJKPAf2hw/EVlq/OwWUyqus0MOfcylO+9gz1CdYxjk0lEycwnQSrepP+gGxJpRRlR7rswOA5+bysVUwvG+FePfIErMrUKeEZoTueDc/bLUWVUYvNoRNvo7vCotCwHju4ihg6iPCXBukMq6n2iMl1YQLjqdnfQXMSnPzFJA== Received: from GV1SPRMB0052.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:109::15) by AS8P250MB0379.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:37f::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7339.39; Wed, 6 Mar 2024 22:49:20 +0000 Received: from GV1SPRMB0052.EURP250.PROD.OUTLOOK.COM ([fe80::a8f2:5082:22e4:8d1b]) by GV1SPRMB0052.EURP250.PROD.OUTLOOK.COM ([fe80::a8f2:5082:22e4:8d1b%5]) with mapi id 15.20.7339.035; Wed, 6 Mar 2024 22:49:19 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 6 Mar 2024 23:49:11 +0100 Message-ID: X-Mailer: git-send-email 2.40.1 X-TMN: [v4e2fkzIuBvRvtyBwxUM/t3R1kACFwMN6A110sFBwWE=] X-ClientProxiedBy: FR3P281CA0088.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1f::16) To GV1SPRMB0052.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:109::15) X-Microsoft-Original-Message-ID: <20240306224911.3348309-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1SPRMB0052:EE_|AS8P250MB0379:EE_ X-MS-Office365-Filtering-Correlation-Id: 5786f2f7-0631-4887-821b-08dc3e2fa850 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: nOYd7zGki6P6K4ZyPWh0atvovSGyS2ZFtv9KkQwHxCEg04ZZ5uxnjgB3eVXmQVmEcRAR2B3fPMR19uycFNmKM4CUlfKOM9Bbltca5fDLQg0HvtDUo/CHwu4+GfY3cd/xY9VALHqgp7Ym3ExU9y/4cbPgJLy8kLutLBsGCTUJoV40IwW4l43jp8imPZ5hZ5yiNl/sGgHGsdadgAHZ+MUcclgZutUPrWsSoFgmKUJ9dIM9tZgu4o1fLyNKNFyK8r+InBgjSfMiCKBI/9HMhb8IOnSChjh8iueXGSfjl2JDpEw/Y4F8NufQHDHAdOcZjXG0+Z5gXjw3rj5zVwgUEXSHgBzY2wKTbaTN56wwJCOJ/VyRKsYn1Z71ItxhJz3WnTeLFcCudZdBDXVy7/vYn5a9IkCjCpNBEUol5Q/XwNgKhLnnpMjLVDKr897c/0g0QScETDuqwOoCWe/W6EIwp3P0+onmLofH3L0kBtr/JttWTmVEdONkiPbxZYMuGk8SjYAP475BYoNwgBQtuWO20N8/0I/FGfC/JOUe28cPFcMe1480y5aLJ/MY381afkUOxVXCtOOxyShxZMTXUptRC2IaOXMLuLMHAYIUfGJGvTtatcrVUsTpTK1OwH6HJuuJbQgYZZBRQYkEiQs5PKvcp93Q2ytzAIp1JMzZ7WvY8NdYARV6fWrHgm5kiERzzvu/YdxX X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: yAxadcmY/qk2mO6vdeF5I21kYEeSl2LugkGg3tux2uGSxii5DIha+dNYR0HF6KbK4piaLtHjEuMqnEnvWGONfDrCk/mCy5MxWwg2FjBZHZMyx5TobHn1jlv/By6VY7StWW2qTWvZjOdHxxSgcd/ocbkXuMhkhLLfqTkuzzD1S+stF59rKmTwKtatnjWNs4Mu2YdKpYenWpSYpktpPtYgnbTj5NaE/ittK9bxt8S3YcCpeP56PuOsJOtrpK1wUUuvRcibq25pXcxePQAHLZkLr7cTzt7Nc8zLF4yaNc/b6ksdPO8bL2aurAjNcsoW88UpdtokKKfkLlYaEHIMheStVA5Jmj5lJ7DY7BnY1umPE4WL3telsWQlZKqei4YlC5RtrCoNyZ5+K4xl2XeU4avMbXnQjd1LwH75Nb3NWlLEgCToYqT2m+ov1XcGrvjJLB1maLCyFyjfR+kCSTbhjqWPnFHgO6Ju/QCNVbd84cDb4+4wxvVBsWLWvFjkIO2iGbrTiyDKgTe26QemFyayNionZ8sitVCXbJ0p0Z714qCZRG2uxi+XwffJcymmcZjyQUmb3NsN22bVbyfvZs2MiIhCQGbH/mXJJ9h1rIELde+KO6VC3pPyNVWrXePdqhPcP4KwZpYQFb7IQr6d0xQaaaZrboBqMSLgq+IAG9Ul3fIaHY1i325Gk+kxvYZYUjlywsNgdagc1JscQDH3353MIdIM1BM45SlzFaUp25vj9OI69R7dFv2ICWDa/XBDrUchBcCqEWXsFEyXBybhpcXL4KPsobQQ+xfR0H7+qTNe4tymGi91C6vBlgGZmWp7AcZfIFrfuQzVBQriRXjksPTVwpqbEKUqtLUwityre2WIGdKivfBJtFmaM791nc7pXBZes+Z2woQmkLw8fAiohngn0wVYJPiLk6cbRa6PVm2uXn9n0biByCbuNT+jgZxwy4HiilYbjyirGIbbIhpJw6A80i881T9noWk/gtVpb9FWtGtx+jFntZhshn8OkgLE2iqs8yKTJrE3vqyM2QDIAfju1yVcW2RAZ0skipj6GDpCLbNTljcAOnFXUs03JmTVF87tD5T3VNLNoTLfIqVQbpKL7MIZGBVzvM4WUARHc/2rC1IRjzYiGBvqLgOUgcuc3TxEKT6xTowj2Du2zFI1nMOy7qF4MXXhPOBoXECKg0AN8y+eaturju8QPKjfsrMA1E7PyrWyGYTPnLgGQ72AKo2mUPpoS0jrgR8GMv1PH4EyyI+2TCGQ1pwwqWiEpY7yfsGmkjR0mv1uVXXG1vMN+vssnfeVGg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5786f2f7-0631-4887-821b-08dc3e2fa850 X-MS-Exchange-CrossTenant-AuthSource: GV1SPRMB0052.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Mar 2024 22:49:18.9753 (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: AS8P250MB0379 Subject: [FFmpeg-devel] [PATCH] avcodec/xbmdec: Use LUT for hex char->number conversion 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: 7ztBPhhAxzxy Improves performance by about 30%. Signed-off-by: Andreas Rheinhardt --- [1] is a patch that would also move the bitreverse into the LUT; it didn't make a difference in the benchmarks here, but if it is an improvement for someone else, it could still be applied. [1]: https://github.com/mkver/FFmpeg/commit/d4fdac5335d2ccf29f7b55fe3147edf388bb7efa libavcodec/xbmdec.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/libavcodec/xbmdec.c b/libavcodec/xbmdec.c index ecfc957a3f..2d84327e02 100644 --- a/libavcodec/xbmdec.c +++ b/libavcodec/xbmdec.c @@ -28,17 +28,22 @@ static int get_nibble(uint8_t x) { - int ret = 255; - - if (x <= '9') { - if (x >= '0') - ret = x - '0'; - } else if (x >= 'a') { - if (x <= 'f') - ret = x - ('a' - 10); - } else if (x >= 'A' && x <= 'F') - ret = x - ('A' - 10); - return ret; +#define TIMES256(idx) \ +TIMES64(4 * (idx)) TIMES64(4 * (idx) + 1) TIMES64(4 * (idx) + 2) TIMES64(4 * (idx) + 3) +#define TIMES64(idx) \ +TIMES16(4 * (idx)) TIMES16(4 * (idx) + 1) TIMES16(4 * (idx) + 2) TIMES16(4 * (idx) + 3) +#define TIMES16(idx) \ +TIMES4(4 * (idx)) TIMES4(4 * (idx) + 1) TIMES4(4 * (idx) + 2) TIMES4(4 * (idx) + 3) +#define TIMES4(idx) \ +ENTRY(4 * (idx)) ENTRY(4 * (idx) + 1) ENTRY(4 * (idx) + 2) ENTRY(4 * (idx) + 3) +#define ENTRY(x) [x] = ((x) >= 'a' && (x) <= 'f') ? (x) - ('a' - 10) : \ + ((x) >= 'A' && (x) <= 'F') ? (x) - ('A' - 10) : \ + ((x) >= '0' && (x) <= '9') ? (x) - '0' : 255, + + static const uint8_t lut[] = { + TIMES256(0) + }; + return lut[x]; } static int parse_str_int(const uint8_t *p, const uint8_t *end, const uint8_t *key)