From patchwork Tue Apr 14 10:24:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Gisquet X-Patchwork-Id: 18947 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 79E9144B934 for ; Tue, 14 Apr 2020 13:25:21 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 64DBA68B6CA; Tue, 14 Apr 2020 13:25:21 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C6E8168B5CB for ; Tue, 14 Apr 2020 13:25:12 +0300 (EEST) Received: by mail-wr1-f54.google.com with SMTP id k11so13057742wrp.5 for ; Tue, 14 Apr 2020 03:25:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=cH8NL+BnYClXRk5GoLMWhbi/2e66emoL/v6KEWeZIp8=; b=eZL07vRIIsRUMc27lZkJYS6UwYSIa2r7F2N9grG4O3fdIhHO4rx65fi9HKak/nkDDS hhVnBwiB/Xlnu4T0y3V3y3mCeHvWFKr7ymcJEyHQvw5id0rSuPf7AhW9dq4TBOC0up6f YAaKcGvgeYjEnwRw2WAG4v5NujRexslxPkMyUKhj0tgCaN4kX8ZTFa81Pz6RBVaF8CNd i9WCsvvKcChjQ2oh9vtX88DzKtQxhOGeFGlf9aiJCG0dJrlSv02Rr+Ov8imOsdcBQ8+D 23IJMTmL/3MmNbIRKduMKcXhUseCY2sRIO5TlAySxce6IFlbRWnoAp7Z51Z9rbE0goU3 iE2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=cH8NL+BnYClXRk5GoLMWhbi/2e66emoL/v6KEWeZIp8=; b=A9S4y9SsgW6EwJiu5UxexpeUiOkS1j7uRRNaC8Pcw7LCzKsWP35wukOj8TcTsvsSA3 HUvrxWLVKZ7vR7TYyt6UbQRoWhoskMezTOQCk5xpf9Dd300+jSs4VA9svnmU4pkxcwHD yl/3rdNjJd3axVDHfHfFJDdxdYmHglkq/5qHBsi1uI94NORgLosPLNK+ZL5hsXahjuk7 6DnZsZf75Yemk/+AsAhSNLy+9xf8/qttBvA8EHYbzubzGM/GIChcmuY0t3lN6RJZFeNm fwrdsKdcEsaS0Q68/wSHSFkrH5sT3zCSR94vMX9apsfi6ZN5xDawZYC9wljWp5H4escE Q3Dg== X-Gm-Message-State: AGi0PuZzKgD39TO1WCLKo8AF0DYiQQWUnzTwZumrd65tG+7Qsjuv4R4J QvGf3RYT40kah/UImt2R7W5MjxI= X-Google-Smtp-Source: APiQypL7YfLKFCiQO7Iq5eNBfVKD2mUr/Ey+Z16u7L5mj/UZWx7P9bptgQiFZkKgF2FWkWiS3sav4A== X-Received: by 2002:a5d:4d8c:: with SMTP id b12mr22773442wru.35.1586859911712; Tue, 14 Apr 2020 03:25:11 -0700 (PDT) Received: from localhost.localdomain (2a01cb0881b29e00157b082460d14b2a.ipv6.abo.wanadoo.fr. [2a01:cb08:81b2:9e00:157b:824:60d1:4b2a]) by smtp.gmail.com with ESMTPSA id i17sm8574487wru.39.2020.04.14.03.25.11 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Apr 2020 03:25:11 -0700 (PDT) From: Christophe Gisquet To: ffmpeg-devel@ffmpeg.org Date: Tue, 14 Apr 2020 10:24:59 +0000 Message-Id: <20200414102503.7858-4-christophe.gisquet@gmail.com> X-Mailer: git-send-email 2.26.0 In-Reply-To: <20200414102503.7858-1-christophe.gisquet@gmail.com> References: <20200414102503.7858-1-christophe.gisquet@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/7] get_xbits: request fewer bits 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" Also allows it to not break 32bits readers. --- libavcodec/get_bits.h | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/libavcodec/get_bits.h b/libavcodec/get_bits.h index cb4df98e54..59bfbdd88b 100644 --- a/libavcodec/get_bits.h +++ b/libavcodec/get_bits.h @@ -367,8 +367,24 @@ static inline void skip_remaining(GetBitContext *s, unsigned n) static inline int get_xbits(GetBitContext *s, int n) { #if CACHED_BITSTREAM_READER - int32_t cache = show_bits(s, 32); - int sign = ~cache >> 31; + int32_t cache; + int sign; + + if (n > s->bits_left) +#ifdef BITSTREAM_READER_LE + refill_half(s, 1); +#else + refill_half(s, 0); +#endif + +#if BITSTREAM_BITS == 32 + cache = s->cache; +#elif defined(BITSTREAM_READER_LE) + cache = s->cache & 0xFFFFFFFF; +#else + cache = s->cache >> 32; +#endif + sign = ~cache >> 31; skip_remaining(s, n); return ((((uint32_t)(sign ^ cache)) >> (32 - n)) ^ sign) - sign;