ffmpeg | branch: master | Andreas Rheinhardt <[email protected]> | Wed Mar 6 23:16:22 2024 +0100| [9e36e2fb7b0153e3e216870e8d88018f0546f8e6] | committer: Andreas Rheinhardt
avcodec/xpmdec: Use LUT for hex char->number conversion Speeds up decoding and also reduces binary size. Signed-off-by: Andreas Rheinhardt <[email protected]> > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=9e36e2fb7b0153e3e216870e8d88018f0546f8e6 --- libavcodec/xpmdec.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/libavcodec/xpmdec.c b/libavcodec/xpmdec.c index e7f8a90fdc..b915abe0bf 100644 --- a/libavcodec/xpmdec.c +++ b/libavcodec/xpmdec.c @@ -193,15 +193,22 @@ static const ColorEntry color_table[] = { static unsigned hex_char_to_number(uint8_t x) { - if (x >= 'a' && x <= 'f') - x -= 'a' - 10; - else if (x >= 'A' && x <= 'F') - x -= 'A' - 10; - else if (x >= '0' && x <= '9') - x -= '0'; - else - x = 0; - return x; +#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' : 0, + + static const uint8_t lut[] = { + TIMES256(0) + }; + return lut[x]; } /* _______________________________________________ ffmpeg-cvslog mailing list [email protected] https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email [email protected] with subject "unsubscribe".
