From ca5b7d72c4dce60adab95dcc65ffeae8a940ac25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20T=C5=AFma?= Date: Mon, 8 Nov 2021 21:52:07 +0100 Subject: [PATCH] Optmization --- src/map/IMG/huffmanstream.h | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/map/IMG/huffmanstream.h b/src/map/IMG/huffmanstream.h index 0dcc7ea8..2bdef11e 100644 --- a/src/map/IMG/huffmanstream.h +++ b/src/map/IMG/huffmanstream.h @@ -41,10 +41,10 @@ bool HuffmanStream::read(int bits, quint32 &val) _symbolData = (_symbolData << nextSize) | next; _symbolDataSize += nextSize; - } - if (_symbolDataSize < (quint32)bits) - return false; + if (_symbolDataSize < (quint32)bits) + return false; + } val = (_symbolData << (32-_symbolDataSize)) >> (32 - bits); _symbolDataSize -= bits; @@ -56,14 +56,18 @@ template bool HuffmanStream::readSymbol(quint32 &symbol) { quint8 size; - quint32 next; - quint8 nextSize = qMin((quint64)(32 - _symbolDataSize), _bs.bitsAvailable()); - if (!_bs.read(nextSize, next)) - return false; + if (_symbolDataSize < _table.symBits()) { + quint32 next; + quint8 nextSize = qMin((quint64)(32 - _symbolDataSize), + _bs.bitsAvailable()); - _symbolData = (_symbolData << nextSize) | next; - _symbolDataSize += nextSize; + if (!_bs.read(nextSize, next)) + return false; + + _symbolData = (_symbolData << nextSize) | next; + _symbolDataSize += nextSize; + } symbol = _table.symbol(_symbolData << (32 - _symbolDataSize), size); if (size > _symbolDataSize)