From patchwork Mon Feb 1 03:50:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jose Da Silva X-Patchwork-Id: 25313 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id BEA86449034 for ; Mon, 1 Feb 2021 05:51:05 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A77F6689A52; Mon, 1 Feb 2021 05:51:05 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mx0-10.i-mecca.net (mx0-10.i-mecca.net [76.74.184.244]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9F01D6880FF for ; Mon, 1 Feb 2021 05:50:59 +0200 (EET) Received: from mx0.ehosting.ca (localhost [127.0.0.1]) by mx0.i-mecca.net (Postfix) with ESMTP id 40F16161664 for ; Sun, 31 Jan 2021 19:50:56 -0800 (PST) Received: from ns2.i-mecca.net (unknown [192.168.1.2]) by mx0.i-mecca.net (Postfix) with ESMTP id AA32E1614D5 for ; Sun, 31 Jan 2021 19:50:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=joescat.com; s=mail; h=date:from:to:subject; bh=Ly82wxNhNXQI0+GmBPTUrBRstUtyeS9WhrO1il96XY4=; b=ZQnfmRhQiK46eL5G1CXc+8j9pYmYWrt0MMSQhaNte9DbqBd0Scizghnx4vdqpjotYT Rzq2bf9DHiGH8sx1XFxsqFvKfzgWcp+8T+lWFul3w3JYHR8DlWLWOWh8Ytugh41k3V4i dEsC9n6fQnChw35RBzTRmNJPreJVS7qXDwEHC6kd4z5d5uKFJCl4aXg38rQTT2Bzx96F ++BA6uT2gouvVgNbhoqQGXzbeMKAgI0NSeB+qCWIEdLjKu9OAl3AgdbgYxbwJWZGKiHp 0S7F5oH5sqcKLNVfNPatAjFHSkquMpTtuWhO2iFKCZbQi1XT1VhrO8qHJMJ3anDhqqXw m8DA== X-MES: 1.0 X-MM: 1.0 Received: from drived.localnet (d66-183-117-75.bchsia.telus.net [66.183.117.75]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ns2.i-mecca.net (Postfix) with ESMTPSA id 50832300027 for ; Sun, 31 Jan 2021 22:50:54 -0500 (EST) From: Jose Da Silva To: ffmpeg-devel@ffmpeg.org Date: Sun, 31 Jan 2021 19:50:49 -0800 User-Agent: KMail/1.13.7 (Linux/2.6.38.8-desktop586-10.mga; KDE/4.6.5; i686; ; ) MIME-Version: 1.0 Message-Id: <202101311950.49730.digital@joescat.com> Subject: [FFmpeg-devel] [PATCH 1/4] avcodec/xbmenc: substitute end instead of recalculating end X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Minor speed increase, end is calculated before entering parse_str_int(), so let's take advantage of the value and avoid recalculating twice more. This also allows parse_str_int() to work with file size larger than int. Signed-off-by: Joe Da Silva --- libavcodec/xbmdec.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) -- 2.30.0 diff --git a/libavcodec/xbmdec.c b/libavcodec/xbmdec.c index d19bdaee23..2ce70204cf 100644 --- a/libavcodec/xbmdec.c +++ b/libavcodec/xbmdec.c @@ -37,10 +37,8 @@ static int convert(uint8_t x) return x; } -static int parse_str_int(const uint8_t *p, int len, const uint8_t *key) +static int parse_str_int(const uint8_t *p, const uint8_t *end, const uint8_t *key) { - const uint8_t *end = p + len; - for(; ppix_fmt = AV_PIX_FMT_MONOWHITE; end = avpkt->data + avpkt->size; - width = parse_str_int(avpkt->data, avpkt->size, "_width"); - height = parse_str_int(avpkt->data, avpkt->size, "_height"); + width = parse_str_int(avpkt->data, end, "_width"); + height = parse_str_int(avpkt->data, end, "_height"); if ((ret = ff_set_dimensions(avctx, width, height)) < 0) return ret; From patchwork Mon Feb 1 03:50:57 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jose Da Silva X-Patchwork-Id: 25314 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 22340449034 for ; Mon, 1 Feb 2021 05:51:07 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 011EC689FB4; Mon, 1 Feb 2021 05:51:07 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mx0-10.i-mecca.net (mx0-10.i-mecca.net [76.74.184.244]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2B2666880FF for ; Mon, 1 Feb 2021 05:51:00 +0200 (EET) Received: from mx0.ehosting.ca (localhost [127.0.0.1]) by mx0.i-mecca.net (Postfix) with ESMTP id C229616166F for ; Sun, 31 Jan 2021 19:50:58 -0800 (PST) Received: from ns2.i-mecca.net (unknown [192.168.1.2]) by mx0.i-mecca.net (Postfix) with ESMTP id 401CE1614D5 for ; Sun, 31 Jan 2021 19:50:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=joescat.com; s=mail; h=date:from:to:subject; bh=RffU2T1Xr/KhWUjjQ0qZY5NTFTnMF2Vvl5WPhS8EGlI=; b=UGLg5zruT5/79j/OhX1QA8H2HXkafas2tv/ra5PJZE3yn57BbYWIg/cXk7hS8kkkB5 A49lUqHfcExE5gWr6b4UZk8OZ7UFKAmK34Zaod9TJGrm8h99v3OH2dVz4dJmxDOdxh5d d885Kw+Twl9HNtZUO+7aBOUfv+SOTuEDLpD/9/U4dHrS1ttnsLES4l9eDetu+4q9TMgQ IkqDJj0OBXRZmopONAwQ046Z7dQ0U3mSS4jJdCK/A2+04jfYaewfAoNE2aOYCu/1dXd+ w6c1kKQbZpeMaePk5HZhUr1dQ6teg0vRsc5WUUqAsycutlWq0JEoGsalkmk/fEA4Chlg mKHg== X-MES: 1.0 X-MM: 1.0 Received: from drived.localnet (d66-183-117-75.bchsia.telus.net [66.183.117.75]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ns2.i-mecca.net (Postfix) with ESMTPSA id E3E9B300027 for ; Sun, 31 Jan 2021 22:50:56 -0500 (EST) From: Jose Da Silva To: ffmpeg-devel@ffmpeg.org Date: Sun, 31 Jan 2021 19:50:57 -0800 User-Agent: KMail/1.13.7 (Linux/2.6.38.8-desktop586-10.mga; KDE/4.6.5; i686; ; ) MIME-Version: 1.0 Message-Id: <202101311950.57434.digital@joescat.com> Subject: [FFmpeg-devel] [PATCH 2/4] avcodec/xbmenc: Pre-compute variables once for parse_str_int() X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Some compilers are very intuitive, and others are not so much, so let's pre-compute the variables e and keylen outside the for loop. Ensuring a minor speed increase regardless of if compiler is smart enough to solve this improvement for itself, or not. Signed-off-by: Joe Da Silva --- libavcodec/xbmdec.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) -- 2.30.0 diff --git a/libavcodec/xbmdec.c b/libavcodec/xbmdec.c index 2ce70204cf..b783d5abe5 100644 --- a/libavcodec/xbmdec.c +++ b/libavcodec/xbmdec.c @@ -39,11 +39,14 @@ static int convert(uint8_t x) static int parse_str_int(const uint8_t *p, const uint8_t *end, const uint8_t *key) { - for(; p= end) return INT_MIN; From patchwork Mon Feb 1 03:51:04 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jose Da Silva X-Patchwork-Id: 25315 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 0AEBE449034 for ; Mon, 1 Feb 2021 05:51:13 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DE85E689EA6; Mon, 1 Feb 2021 05:51:12 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mx0-10.i-mecca.net (mx0-10.i-mecca.net [76.74.184.244]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0A91B6880FF for ; Mon, 1 Feb 2021 05:51:07 +0200 (EET) Received: from mx0.ehosting.ca (localhost [127.0.0.1]) by mx0.i-mecca.net (Postfix) with ESMTP id 78B8A1614D5 for ; Sun, 31 Jan 2021 19:51:05 -0800 (PST) Received: from ns2.i-mecca.net (unknown [192.168.1.2]) by mx0.i-mecca.net (Postfix) with ESMTP id ECAC31616CF for ; Sun, 31 Jan 2021 19:51:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=joescat.com; s=mail; h=date:from:to:subject; bh=/QWbc4VFm72J05cHDgPUNgmjFFqMT9qOzsP48midbps=; b=LyoAKOwB+32d4ITK5MsAFgyIaYWCfBP8jJHu6eurcAPVB+L4HhNwpEIoL0L5cINqvB 9eD7w32HmuXil/dLg/ck5vkYh02YTg/cmEbLjiudaca8csRpAnlit0WEsKSwyjD8ZmPi bIr07HlxhwFKDiW6vNS1YG2nmlRFZxzgrDzMh25yo7hpR4/lSDiXvsE1Z7qlYGZq9Obz Q1ibeH1dWrDd0UyQEuV0S3cO/CijXYqTYw10zXcDLAge3ZKZ2QKh5XrmRhmR6hUyQn+L S4fcgA3BfbXDx31Q5rqM9htLyWL+1eCZlxgDvouDeOiizA47HIItVSCF/KxMZhWe0qJK LSTw== X-MES: 1.0 X-MM: 1.0 Received: from drived.localnet (d66-183-117-75.bchsia.telus.net [66.183.117.75]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ns2.i-mecca.net (Postfix) with ESMTPSA id A1B4D300027 for ; Sun, 31 Jan 2021 22:51:03 -0500 (EST) From: Jose Da Silva To: ffmpeg-devel@ffmpeg.org Date: Sun, 31 Jan 2021 19:51:04 -0800 User-Agent: KMail/1.13.7 (Linux/2.6.38.8-desktop586-10.mga; KDE/4.6.5; i686; ; ) MIME-Version: 1.0 Message-Id: <202101311951.04220.digital@joescat.com> Subject: [FFmpeg-devel] [PATCH 3/4] avcodec/xbmdec: convert() minor speed increase X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" If we test for {0..9} first, we have tested for 10/16th of all possible characters first and avoid testing the remaining 6/16th of all possible characters, which can be either 6/16th lowercase or 6/16th uppercase. Signed-off-by: Joe Da Silva --- libavcodec/xbmdec.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) -- 2.30.0 diff --git a/libavcodec/xbmdec.c b/libavcodec/xbmdec.c index b783d5abe5..52615dc7ab 100644 --- a/libavcodec/xbmdec.c +++ b/libavcodec/xbmdec.c @@ -28,12 +28,12 @@ static int convert(uint8_t x) { - if (x >= 'a') - x -= 87; - else if (x >= 'A') - x -= 55; - else + if (x <= '9') x -= '0'; + else if (x >= 'a') + x -= ('a' - 10); + else + x -= ('A' - 10); return x; } From patchwork Mon Feb 1 03:51:10 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jose Da Silva X-Patchwork-Id: 25316 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 45F72449034 for ; Mon, 1 Feb 2021 05:51:20 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2ECFF68A30C; Mon, 1 Feb 2021 05:51:20 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mx0-10.i-mecca.net (mx0-10.i-mecca.net [76.74.184.244]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5CF6668A26E for ; Mon, 1 Feb 2021 05:51:13 +0200 (EET) Received: from mx0.ehosting.ca (localhost [127.0.0.1]) by mx0.i-mecca.net (Postfix) with ESMTP id D1D3F16166F for ; Sun, 31 Jan 2021 19:51:11 -0800 (PST) Received: from ns2.i-mecca.net (unknown [192.168.1.2]) by mx0.i-mecca.net (Postfix) with ESMTP id 3504A161664 for ; Sun, 31 Jan 2021 19:51:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=joescat.com; s=mail; h=date:from:to:subject; bh=GxscE9YSogz1a+ZknGoSHZ43BwetnbjAldFMczeHLhU=; b=l3mKCMat0dE9AiZPrYhFmV6D2fZpolNjhh/y/XjOp/TlkitvG7fE52CiMVK5vwK/Yw owCs78BfNNI33ycNX89rzvDiFZoNaaj01j83jibfYRYzqM0xthtSdDZpWUUh+1C88bpY KJJ0x3uE4fnj64TCSf1DUmFvNkpMUJ2lZn17giDYPgFiI0T7DTu6hRVMiSHZ+X35R0ZH QWnjCcVInJ4+z7Q60y588h/8XOxYYv9dUTNsTRt4WPlstnw3GmqlpaceXm7Ya9yogN+w aRYKYjkxcyzgk9qRvgJEKEUdFL4T608bYcty9oP4MLCbnw7+HnbMEWu52d9/KYTuRph8 ULCg== X-MES: 1.0 X-MM: 1.0 Received: from drived.localnet (d66-183-117-75.bchsia.telus.net [66.183.117.75]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ns2.i-mecca.net (Postfix) with ESMTPSA id D27E63001FF for ; Sun, 31 Jan 2021 22:51:09 -0500 (EST) From: Jose Da Silva To: ffmpeg-devel@ffmpeg.org Date: Sun, 31 Jan 2021 19:51:10 -0800 User-Agent: KMail/1.13.7 (Linux/2.6.38.8-desktop586-10.mga; KDE/4.6.5; i686; ; ) MIME-Version: 1.0 Message-Id: <202101311951.10576.digital@joescat.com> Subject: [FFmpeg-devel] [PATCH 4/4] avcodec/xbmdec: get_nibble() minor speed increase, and binary reduction X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Replace av_isxdigit(*ptr) and convert(*ptr) with get_nibble(*ptr) which returns a valid nibble=={0x00..0x0f} or false==255 for all other values. This way we only need to work with *ptr once instead of twice. Removing inline av_isxdigit(x) functions also shrinks executable size. Signed-off-by: Joe Da Silva --- libavcodec/xbmdec.c | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) -- 2.30.0 diff --git a/libavcodec/xbmdec.c b/libavcodec/xbmdec.c index 52615dc7ab..c1fc6cb650 100644 --- a/libavcodec/xbmdec.c +++ b/libavcodec/xbmdec.c @@ -26,15 +26,19 @@ #include "internal.h" #include "mathops.h" -static int convert(uint8_t x) +static int get_nibble(uint8_t x) { - if (x <= '9') - x -= '0'; - else if (x >= 'a') - x -= ('a' - 10); - else - x -= ('A' - 10); - return 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; } static int parse_str_int(const uint8_t *p, const uint8_t *end, const uint8_t *key) @@ -94,22 +98,26 @@ static int xbm_decode_frame(AVCodecContext *avctx, void *data, for (i = 0; i < avctx->height; i++) { dst = p->data[0] + i * p->linesize[0]; for (j = 0; j < linesize; j++) { - uint8_t val; + uint8_t nib, val; while (ptr < end && *ptr != 'x' && *ptr != '$') ptr++; ptr ++; - if (ptr < end && av_isxdigit(*ptr)) { - val = convert(*ptr++); - if (av_isxdigit(*ptr)) - val = (val << 4) + convert(*ptr++); + if (ptr < end && (val = get_nibble(*ptr)) <= 15) { + ptr++; + if ((nib = get_nibble(*ptr)) <= 15) { + val = (val << 4) + nib; + ptr++; + } *dst++ = ff_reverse[val]; - if (av_isxdigit(*ptr) && j+1 < linesize) { + if ((val = get_nibble(*ptr)) <= 15 && j+1 < linesize) { j++; - val = convert(*ptr++); - if (av_isxdigit(*ptr)) - val = (val << 4) + convert(*ptr++); + ptr++; + if ((nib = get_nibble(*ptr)) <= 15) { + val = (val << 4) + nib; + ptr++; + } *dst++ = ff_reverse[val]; } } else {