From 60fae8847eeef85b6cda99cc1d690c59e292ecf7 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Wed, 12 Jul 2017 17:04:39 +0200 Subject: IMAGE: Inline indeo getVLC2 --- image/codecs/indeo/get_bits.cpp | 60 ----------------------------------------- image/codecs/indeo/get_bits.h | 32 +++++++++++++++++++++- image/codecs/indeo/indeo.cpp | 9 +++---- image/codecs/indeo4.cpp | 24 ++++++++--------- image/codecs/indeo5.cpp | 8 +++--- 5 files changed, 51 insertions(+), 82 deletions(-) delete mode 100644 image/codecs/indeo/get_bits.cpp (limited to 'image/codecs') diff --git a/image/codecs/indeo/get_bits.cpp b/image/codecs/indeo/get_bits.cpp deleted file mode 100644 index f808a96e76..0000000000 --- a/image/codecs/indeo/get_bits.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "image/codecs/indeo/get_bits.h" - -namespace Image { -namespace Indeo { - -int GetBits::getVLC2(int16 (*table)[2], int bits, int maxDepth) { - int code; - int n, nbBits; - unsigned int index; - - index = peekBits(bits); - code = table[index][0]; - n = table[index][1]; - - if (maxDepth > 1 && n < 0) { - skip(bits); - nbBits = -n; - - index = peekBits(nbBits) + code; - code = table[index][0]; - n = table[index][1]; - - if (maxDepth > 2 && n < 0) { - skip(nbBits); - nbBits = -n; - - index = peekBits(nbBits) + code; - code = table[index][0]; - n = table[index][1]; - } - } - - skip(n); - return code; -} - -} // End of namespace Indeo -} // End of namespace Image diff --git a/image/codecs/indeo/get_bits.h b/image/codecs/indeo/get_bits.h index 359d8fcab0..c2d593bfb5 100644 --- a/image/codecs/indeo/get_bits.h +++ b/image/codecs/indeo/get_bits.h @@ -54,7 +54,37 @@ public: * read the longest vlc code * = (max_vlc_length + bits - 1) / bits */ - int getVLC2(int16 (*table)[2], int bits, int maxDepth); + template + int getVLC2(int16 (*table)[2], int bits) { + int code; + int n, nbBits; + unsigned int index; + + index = peekBits(bits); + code = table[index][0]; + n = table[index][1]; + + if (maxDepth > 1 && n < 0) { + skip(bits); + nbBits = -n; + + index = peekBits(nbBits) + code; + code = table[index][0]; + n = table[index][1]; + + if (maxDepth > 2 && n < 0) { + skip(nbBits); + nbBits = -n; + + index = peekBits(nbBits) + code; + code = table[index][0]; + n = table[index][1]; + } + } + + skip(n); + return code; + } }; } // End of namespace Indeo diff --git a/image/codecs/indeo/indeo.cpp b/image/codecs/indeo/indeo.cpp index 769790b76f..f420069139 100644 --- a/image/codecs/indeo/indeo.cpp +++ b/image/codecs/indeo/indeo.cpp @@ -1258,16 +1258,15 @@ int IndeoDecoderBase::decodeCodedBlocks(GetBits *gb, IVIBandDesc *band, // zero column flags memset(colFlags, 0, sizeof(colFlags)); while (scanPos <= numCoeffs) { - sym = gb->getVLC2(band->_blkVlc._tab->_table, - IVI_VLC_BITS, 1); + sym = gb->getVLC2<1>(band->_blkVlc._tab->_table, IVI_VLC_BITS); if (sym == rvmap->_eobSym) break; // End of block // Escape - run/val explicitly coded using 3 vlc codes if (sym == rvmap->_escSym) { - run = gb->getVLC2(band->_blkVlc._tab->_table, IVI_VLC_BITS, 1) + 1; - lo = gb->getVLC2(band->_blkVlc._tab->_table, IVI_VLC_BITS, 1); - hi = gb->getVLC2(band->_blkVlc._tab->_table, IVI_VLC_BITS, 1); + run = gb->getVLC2<1>(band->_blkVlc._tab->_table, IVI_VLC_BITS) + 1; + lo = gb->getVLC2<1>(band->_blkVlc._tab->_table, IVI_VLC_BITS); + hi = gb->getVLC2<1>(band->_blkVlc._tab->_table, IVI_VLC_BITS); // merge them and convert into signed val val = IVI_TOSIGNED((hi << 6) | lo); } else { diff --git a/image/codecs/indeo4.cpp b/image/codecs/indeo4.cpp index b6ac0882e7..4658068b27 100644 --- a/image/codecs/indeo4.cpp +++ b/image/codecs/indeo4.cpp @@ -484,8 +484,8 @@ int Indeo4Decoder::decodeMbInfo(IVIBandDesc *band, IVITile *tile) { mb->_qDelta = 0; if (!band->_plane && !band->_bandNum && _ctx._inQ) { - mb->_qDelta = _ctx._gb->getVLC2(_ctx._mbVlc._tab->_table, - IVI_VLC_BITS, 1); + mb->_qDelta = _ctx._gb->getVLC2<1>(_ctx._mbVlc._tab->_table, + IVI_VLC_BITS); mb->_qDelta = IVI_TOSIGNED(mb->_qDelta); } @@ -522,8 +522,8 @@ int Indeo4Decoder::decodeMbInfo(IVIBandDesc *band, IVITile *tile) { if (refMb) mb->_qDelta = refMb->_qDelta; } else if (mb->_cbp || (!band->_plane && !band->_bandNum && _ctx._inQ)) { - mb->_qDelta = _ctx._gb->getVLC2(_ctx._mbVlc._tab->_table, - IVI_VLC_BITS, 1); + mb->_qDelta = _ctx._gb->getVLC2<1>(_ctx._mbVlc._tab->_table, + IVI_VLC_BITS); mb->_qDelta = IVI_TOSIGNED(mb->_qDelta); } @@ -543,22 +543,22 @@ int Indeo4Decoder::decodeMbInfo(IVIBandDesc *band, IVITile *tile) { } } else { // decode motion vector deltas - mvDelta = _ctx._gb->getVLC2(_ctx._mbVlc._tab->_table, - IVI_VLC_BITS, 1); + mvDelta = _ctx._gb->getVLC2<1>(_ctx._mbVlc._tab->_table, + IVI_VLC_BITS); mvY += IVI_TOSIGNED(mvDelta); - mvDelta = _ctx._gb->getVLC2(_ctx._mbVlc._tab->_table, - IVI_VLC_BITS, 1); + mvDelta = _ctx._gb->getVLC2<1>(_ctx._mbVlc._tab->_table, + IVI_VLC_BITS); mvX += IVI_TOSIGNED(mvDelta); mb->_mvX = mvX; mb->_mvY = mvY; if (mb->_type == 3) { - mvDelta = _ctx._gb->getVLC2( + mvDelta = _ctx._gb->getVLC2<1>( _ctx._mbVlc._tab->_table, - IVI_VLC_BITS, 1); + IVI_VLC_BITS); mvY += IVI_TOSIGNED(mvDelta); - mvDelta = _ctx._gb->getVLC2( + mvDelta = _ctx._gb->getVLC2<1>( _ctx._mbVlc._tab->_table, - IVI_VLC_BITS, 1); + IVI_VLC_BITS); mvX += IVI_TOSIGNED(mvDelta); mb->_bMvX = -mvX; mb->_bMvY = -mvY; diff --git a/image/codecs/indeo5.cpp b/image/codecs/indeo5.cpp index aca49c3d55..858c634704 100644 --- a/image/codecs/indeo5.cpp +++ b/image/codecs/indeo5.cpp @@ -299,7 +299,7 @@ int Indeo5Decoder::decodeMbInfo(IVIBandDesc *band, IVITile *tile) { mb->_qDelta = 0; if (!band->_plane && !band->_bandNum && (_ctx._frameFlags & 8)) { - mb->_qDelta = _ctx._gb->getVLC2(_ctx._mbVlc._tab->_table, IVI_VLC_BITS, 1); + mb->_qDelta = _ctx._gb->getVLC2<1>(_ctx._mbVlc._tab->_table, IVI_VLC_BITS); mb->_qDelta = IVI_TOSIGNED(mb->_qDelta); } @@ -332,7 +332,7 @@ int Indeo5Decoder::decodeMbInfo(IVIBandDesc *band, IVITile *tile) { if (refMb) mb->_qDelta = refMb->_qDelta; } else if (mb->_cbp || (!band->_plane && !band->_bandNum && (_ctx._frameFlags & 8))) { - mb->_qDelta = _ctx._gb->getVLC2(_ctx._mbVlc._tab->_table, IVI_VLC_BITS, 1); + mb->_qDelta = _ctx._gb->getVLC2<1>(_ctx._mbVlc._tab->_table, IVI_VLC_BITS); mb->_qDelta = IVI_TOSIGNED(mb->_qDelta); } } @@ -351,9 +351,9 @@ int Indeo5Decoder::decodeMbInfo(IVIBandDesc *band, IVITile *tile) { } } else { // decode motion vector deltas - mvDelta = _ctx._gb->getVLC2(_ctx._mbVlc._tab->_table, IVI_VLC_BITS, 1); + mvDelta = _ctx._gb->getVLC2<1>(_ctx._mbVlc._tab->_table, IVI_VLC_BITS); mvY += IVI_TOSIGNED(mvDelta); - mvDelta = _ctx._gb->getVLC2(_ctx._mbVlc._tab->_table, IVI_VLC_BITS, 1); + mvDelta = _ctx._gb->getVLC2<1>(_ctx._mbVlc._tab->_table, IVI_VLC_BITS); mvX += IVI_TOSIGNED(mvDelta); mb->_mvX = mvX; mb->_mvY = mvY; -- cgit v1.2.3