From 9b9edcafdbdb8c6c3eaa291ee7cbf4b4a8c012b1 Mon Sep 17 00:00:00 2001 From: aikiriao Date: Sat, 15 Jun 2024 22:02:49 +0900 Subject: [PATCH] small decoder optimization. --- libs/srla_coder/src/srla_coder.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/libs/srla_coder/src/srla_coder.c b/libs/srla_coder/src/srla_coder.c index 1476eaf..bfa1545 100644 --- a/libs/srla_coder/src/srla_coder.c +++ b/libs/srla_coder/src/srla_coder.c @@ -215,21 +215,20 @@ static uint32_t Rice_GetCode(struct BitStream *stream, uint32_t k) \ SRLA_ASSERT(stream != NULL);\ SRLA_ASSERT(uval != NULL);\ + SRLA_ASSERT(k1 == (k2 + 1));\ \ /* 商部の取得 */\ - /* ランレングスが0の場合が多いため1bit先に取得してチェック */\ - BitReader_GetBits(stream, &__quot, 1);\ + BitReader_GetZeroRunLength(stream, &__quot);\ \ - if (__quot) {\ + if (!__quot) {\ /* ランレングス=0で1段目のパラメータで復号 */\ BitReader_GetBits(stream, uval, k1);\ break;\ }\ \ - /* ランレングスが1以上ならば改めてランレングス取得 */\ - BitReader_GetZeroRunLength(stream, &__quot);\ + /* ランレングスが1以上ならば2段目のパラメータで復号 */\ BitReader_GetBits(stream, uval, k2);\ - (*uval) += (1U << k1) + (__quot << k2);\ + (*uval) |= ((__quot + 1) << k2);\ } while (0); #else static void RecursiveRice_GetCode(struct BitStream *stream, uint32_t k1, uint32_t k2, uint32_t *uval) @@ -238,21 +237,21 @@ static void RecursiveRice_GetCode(struct BitStream *stream, uint32_t k1, uint32_ SRLA_ASSERT(stream != NULL); SRLA_ASSERT(uval != NULL); + SRLA_ASSERT(k1 == (k2 + 1)); /* 商部の取得 */ - /* ランレングスが0の場合が多いため1bit先に取得してチェック */ - BitReader_GetBits(stream, ", 1); + BitReader_GetZeroRunLength(stream, "); - if (quot) { + if (!quot) { /* ランレングス=0で1段目のパラメータで復号 */ BitReader_GetBits(stream, uval, k1); return; } - /* ランレングスが1以上ならば改めてランレングス取得 */ - BitReader_GetZeroRunLength(stream, "); + /* ランレングスが1以上ならば2段目のパラメータで復号 */ + BitReader_GetBits(stream, uval, k2); - (*uval) += (1U << k1) + (quot << k2); + (*uval) |= ((quot + 1) << k2); } #endif