* [FFmpeg-devel] [PATCH 01/10] avcodec/hq{xvlc, _hqadata}: Deduplicate and hardcode cbp, table
@ 2025-04-09 20:36 Andreas Rheinhardt
2025-04-11 12:24 ` Andreas Rheinhardt
0 siblings, 1 reply; 2+ messages in thread
From: Andreas Rheinhardt @ 2025-04-09 20:36 UTC (permalink / raw)
To: FFmpeg development discussions and patches
[-- Attachment #1: Type: text/plain, Size: 29 bytes --]
Patches attached.
- Andreas
[-- Attachment #2: 0001-avcodec-hq-xvlc-_hqadata-Deduplicate-and-hardcode-cb.patch --]
[-- Type: text/x-patch, Size: 9943 bytes --]
From 1275029955768a373c571a261ed5f9aab362d124 Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Date: Wed, 9 Apr 2025 16:26:56 +0200
Subject: [PATCH 01/10] avcodec/hq{xvlc,_hqadata}: Deduplicate and hardcode cbp
table
This table is so small (32 elements amounting to 128 bytes)
that it is more efficient size-wise to hardcode it instead
of initializing it at runtime.
Also stop duplicating it in hq_hqa.o and hqx.o.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
libavcodec/Makefile | 4 ++--
libavcodec/hq_common.c | 44 +++++++++++++++++++++++++++++++++++++++++
libavcodec/hq_common.h | 29 +++++++++++++++++++++++++++
libavcodec/hq_hqa.c | 10 +++-------
libavcodec/hq_hqadata.h | 9 ---------
libavcodec/hqx.c | 7 +++----
libavcodec/hqxvlc.h | 16 +--------------
7 files changed, 82 insertions(+), 37 deletions(-)
create mode 100644 libavcodec/hq_common.c
create mode 100644 libavcodec/hq_common.h
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index 3c3ac640e0..5ec2b7f5ad 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -465,8 +465,8 @@ OBJS-$(CONFIG_HEVC_V4L2M2M_DECODER) += v4l2_m2m_dec.o
OBJS-$(CONFIG_HEVC_V4L2M2M_ENCODER) += v4l2_m2m_enc.o
OBJS-$(CONFIG_HEVC_VIDEOTOOLBOX_ENCODER) += videotoolboxenc.o
OBJS-$(CONFIG_HNM4_VIDEO_DECODER) += hnm4video.o
-OBJS-$(CONFIG_HQ_HQA_DECODER) += hq_hqa.o hq_hqadsp.o canopus.o
-OBJS-$(CONFIG_HQX_DECODER) += hqx.o hqxdsp.o canopus.o
+OBJS-$(CONFIG_HQ_HQA_DECODER) += hq_hqa.o hq_hqadsp.o hq_common.o canopus.o
+OBJS-$(CONFIG_HQX_DECODER) += hqx.o hqxdsp.o hq_common.o canopus.o
OBJS-$(CONFIG_HUFFYUV_DECODER) += huffyuv.o huffyuvdec.o
OBJS-$(CONFIG_HUFFYUV_ENCODER) += huffyuv.o huffyuvenc.o
OBJS-$(CONFIG_HYMT_DECODER) += huffyuv.o huffyuvdec.o
diff --git a/libavcodec/hq_common.c b/libavcodec/hq_common.c
new file mode 100644
index 0000000000..3cb793f2f6
--- /dev/null
+++ b/libavcodec/hq_common.c
@@ -0,0 +1,44 @@
+/*
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "hq_common.h"
+
+#define REPEAT(x) x x
+#define ELEM(_sym, _len) {.sym = _sym, .len = _len },
+#define LEN5(sym) ELEM(sym, 5)
+#define LEN4(sym) REPEAT(ELEM(sym, 4))
+#define LEN2(sym) REPEAT(REPEAT(REPEAT(ELEM(sym, 2))))
+
+const VLCElem ff_hq_cbp_vlc[1 << HQ_CBP_VLC_BITS] = {
+ LEN2(0xF)
+ LEN4(0x0)
+ LEN4(0xE)
+ LEN4(0xD)
+ LEN4(0xB)
+ LEN4(0x7)
+ LEN4(0x3)
+ LEN4(0xC)
+ LEN4(0x5)
+ LEN4(0xA)
+ LEN5(0x9)
+ LEN5(0x6)
+ LEN5(0x1)
+ LEN5(0x2)
+ LEN5(0x4)
+ LEN5(0x8)
+};
\ No newline at end of file
diff --git a/libavcodec/hq_common.h b/libavcodec/hq_common.h
new file mode 100644
index 0000000000..e438ac7d07
--- /dev/null
+++ b/libavcodec/hq_common.h
@@ -0,0 +1,29 @@
+/*
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef AVCODEC_HQ_COMMON_H
+#define AVCODEC_HQ_COMMON_H
+
+#include "vlc.h"
+#include "libavutil/attributes_internal.h"
+
+#define HQ_CBP_VLC_BITS 5
+
+EXTERN const VLCElem ff_hq_cbp_vlc[1 << HQ_CBP_VLC_BITS];
+
+#endif /* AVCODEC_HQ_COMMON_H */
diff --git a/libavcodec/hq_hqa.c b/libavcodec/hq_hqa.c
index 738ed9868d..76af754115 100644
--- a/libavcodec/hq_hqa.c
+++ b/libavcodec/hq_hqa.c
@@ -30,6 +30,7 @@
#include "codec_internal.h"
#include "decode.h"
#include "get_bits.h"
+#include "hq_common.h"
#include "hq_hqadata.h"
#include "hq_hqadsp.h"
#include "vlc.h"
@@ -58,7 +59,6 @@ typedef struct HQContext {
} HQContext;
static VLCElem hq_ac_vlc[1184];
-static VLCElem hqa_cbp_vlc[32];
static inline void put_blocks(HQContext *c, AVFrame *pic,
int plane, int x, int y, int ilace,
@@ -192,18 +192,17 @@ static int hqa_decode_mb(HQContext *c, AVFrame *pic, int qgroup,
GetBitContext *gb, int x, int y)
{
int flag = 0;
- int i, ret, cbp;
+ int i, ret;
if (get_bits_left(gb) < 1)
return AVERROR_INVALIDDATA;
- cbp = get_vlc2(gb, hqa_cbp_vlc, 5, 1);
-
for (i = 0; i < 12; i++)
memset(c->block[i], 0, sizeof(*c->block));
for (i = 0; i < 12; i++)
c->block[i][0] = -128 * (1 << 6);
+ int cbp = get_vlc2(gb, ff_hq_cbp_vlc, HQ_CBP_VLC_BITS, 1);
if (cbp) {
flag = get_bits1(gb);
@@ -373,9 +372,6 @@ static int hq_hqa_decode_frame(AVCodecContext *avctx, AVFrame *pic,
static av_cold void hq_init_vlcs(void)
{
- VLC_INIT_STATIC_TABLE(hqa_cbp_vlc, 5, FF_ARRAY_ELEMS(cbp_vlc_lens),
- cbp_vlc_lens, 1, 1, cbp_vlc_bits, 1, 1, 0);
-
VLC_INIT_STATIC_TABLE(hq_ac_vlc, 9, NUM_HQ_AC_ENTRIES,
hq_ac_bits, 1, 1, hq_ac_codes, 2, 2, 0);
}
diff --git a/libavcodec/hq_hqadata.h b/libavcodec/hq_hqadata.h
index 2faf47f003..d592ac0c21 100644
--- a/libavcodec/hq_hqadata.h
+++ b/libavcodec/hq_hqadata.h
@@ -36,15 +36,6 @@ typedef struct HQProfile {
#define MAT_SIZE 64
-static const uint8_t cbp_vlc_bits[16] = {
- 0x04, 0x1C, 0x1D, 0x09, 0x1E, 0x0B, 0x1B, 0x08,
- 0x1F, 0x1A, 0x0C, 0x07, 0x0A, 0x06, 0x05, 0x00,
-};
-
-static const uint8_t cbp_vlc_lens[16] = {
- 4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 4, 4, 4, 4, 4, 2,
-};
-
static const int32_t qmat00[MAT_SIZE] = {
0x0040000, 0x000B18B, 0x00058C5, 0x000B1B1, 0x00082D3, 0x000B1B1,
0x000A953, 0x000827B, 0x00104F7, 0x000A953, 0x0009000, 0x000EADD,
diff --git a/libavcodec/hqx.c b/libavcodec/hqx.c
index 2e9698ee6c..0819575aa4 100644
--- a/libavcodec/hqx.c
+++ b/libavcodec/hqx.c
@@ -35,6 +35,7 @@
#include "hqxdsp.h"
#include "hqxvlc.h"
+#include "hq_common.h"
/* HQX has four modes - 422, 444, 422alpha and 444alpha - all 12-bit */
enum HQXFormat {
@@ -219,13 +220,12 @@ static int hqx_decode_422a(HQXContext *ctx, int slice_no, int x, int y)
int flag = 0;
int last_dc;
int i, ret;
- int cbp;
memset(slice->block, 0, sizeof(*slice->block) * 12);
for (i = 0; i < 12; i++)
slice->block[i][0] = -0x800;
- cbp = get_vlc2(gb, cbp_vlc, HQX_CBP_VLC_BITS, 1);
+ int cbp = get_vlc2(gb, ff_hq_cbp_vlc, HQ_CBP_VLC_BITS, 1);
if (cbp) {
const unsigned *quants;
@@ -305,13 +305,12 @@ static int hqx_decode_444a(HQXContext *ctx, int slice_no, int x, int y)
int flag = 0;
int last_dc;
int i, ret;
- int cbp;
memset(slice->block, 0, sizeof(*slice->block) * 16);
for (i = 0; i < 16; i++)
slice->block[i][0] = -0x800;
- cbp = get_vlc2(gb, cbp_vlc, HQX_CBP_VLC_BITS, 1);
+ int cbp = get_vlc2(gb, ff_hq_cbp_vlc, HQ_CBP_VLC_BITS, 1);
if (cbp) {
const unsigned *quants;
diff --git a/libavcodec/hqxvlc.h b/libavcodec/hqxvlc.h
index 28c55b20e0..abf81f60ad 100644
--- a/libavcodec/hqxvlc.h
+++ b/libavcodec/hqxvlc.h
@@ -28,7 +28,6 @@
#include "libavutil/attributes.h"
#include "libavutil/macros.h"
-#define HQX_CBP_VLC_BITS 5
#define HQX_DC_VLC_BITS 9
enum HQXACMode {
@@ -46,15 +45,6 @@ typedef struct HQXAC {
const RL_VLC_ELEM *lut;
} HQXAC;
-static const uint8_t cbp_vlc_bits[16] = {
- 0x04, 0x1C, 0x1D, 0x09, 0x1E, 0x0B, 0x1B, 0x08,
- 0x1F, 0x1A, 0x0C, 0x07, 0x0A, 0x06, 0x05, 0x00,
-};
-
-static const uint8_t cbp_vlc_lens[16] = {
- 4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 4, 4, 4, 4, 4, 2,
-};
-
static const uint16_t dc9_vlc_bits[512] = {
0x0010, 0x0008, 0x0022, 0x0024, 0x0026, 0x0028, 0x002A, 0x002C,
0x002E, 0x0030, 0x0032, 0x0034, 0x0074, 0x0076, 0x0078, 0x007A,
@@ -1529,11 +1519,10 @@ static const uint8_t hqx_ac_lens[] = {
static const uint16_t hqx_ac_nb_elems[] = { 815, 907, 512, 354, 257, 194 };
-static VLCElem cbp_vlc[(1 << HQX_CBP_VLC_BITS) + 896 /* dc9 */ + 1344 /* dc10 */
+static VLCElem cbp_vlc[896 /* dc9 */ + 1344 /* dc10 */
+ 15630 /* RL_VLC_ELEMS for hqx_ac */];
static const VLCElem *dc_vlc[2];
-
#define INIT_DC_TABLE(idx, name) \
do { \
dc_vlc[idx] = ff_vlc_init_tables(&state, HQX_DC_VLC_BITS, \
@@ -1548,9 +1537,6 @@ static av_cold av_unused void hqx_init_static(void)
const uint8_t *lens = hqx_ac_lens;
const int16_t *run_level = hqx_ac_run_level;
- ff_vlc_init_tables(&state, HQX_CBP_VLC_BITS, FF_ARRAY_ELEMS(cbp_vlc_lens),
- cbp_vlc_lens, 1, 1, cbp_vlc_bits, 1, 1, 0);
-
INIT_DC_TABLE(0, dc9);
INIT_DC_TABLE(1, dc10);
--
2.45.2
[-- Attachment #3: 0002-avcodec-hq-Include-alpha-in-cbp-VLC-table.patch --]
[-- Type: text/x-patch, Size: 2028 bytes --]
From f9a364e9e5ae9ef1b8cfbf736f98b54ecb503354 Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Date: Wed, 9 Apr 2025 16:30:57 +0200
Subject: [PATCH 02/10] avcodec/hq: Include alpha in cbp VLC table
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
libavcodec/hq_common.c | 2 +-
libavcodec/hq_hqa.c | 1 -
libavcodec/hqx.c | 2 --
3 files changed, 1 insertion(+), 4 deletions(-)
diff --git a/libavcodec/hq_common.c b/libavcodec/hq_common.c
index 3cb793f2f6..ec5b89245c 100644
--- a/libavcodec/hq_common.c
+++ b/libavcodec/hq_common.c
@@ -19,7 +19,7 @@
#include "hq_common.h"
#define REPEAT(x) x x
-#define ELEM(_sym, _len) {.sym = _sym, .len = _len },
+#define ELEM(_sym, _len) {.sym = _sym << 4 | _sym, .len = _len },
#define LEN5(sym) ELEM(sym, 5)
#define LEN4(sym) REPEAT(ELEM(sym, 4))
#define LEN2(sym) REPEAT(REPEAT(REPEAT(ELEM(sym, 2))))
diff --git a/libavcodec/hq_hqa.c b/libavcodec/hq_hqa.c
index 76af754115..48fc4896ee 100644
--- a/libavcodec/hq_hqa.c
+++ b/libavcodec/hq_hqa.c
@@ -206,7 +206,6 @@ static int hqa_decode_mb(HQContext *c, AVFrame *pic, int qgroup,
if (cbp) {
flag = get_bits1(gb);
- cbp |= cbp << 4;
if (cbp & 0x3)
cbp |= 0x500;
if (cbp & 0xC)
diff --git a/libavcodec/hqx.c b/libavcodec/hqx.c
index 0819575aa4..9ec6672580 100644
--- a/libavcodec/hqx.c
+++ b/libavcodec/hqx.c
@@ -234,7 +234,6 @@ static int hqx_decode_422a(HQXContext *ctx, int slice_no, int x, int y)
quants = hqx_quants[get_bits(gb, 4)];
- cbp |= cbp << 4; // alpha CBP
if (cbp & 0x3) // chroma CBP - top
cbp |= 0x500;
if (cbp & 0xC) // chroma CBP - bottom
@@ -319,7 +318,6 @@ static int hqx_decode_444a(HQXContext *ctx, int slice_no, int x, int y)
quants = hqx_quants[get_bits(gb, 4)];
- cbp |= cbp << 4; // alpha CBP
cbp |= cbp << 8; // chroma CBP
for (i = 0; i < 16; i++) {
if (!(i & 3))
--
2.45.2
[-- Attachment #4: 0003-avcodec-hq_hqa-Don-t-zero-in-small-chunks-don-t-zero.patch --]
[-- Type: text/x-patch, Size: 1896 bytes --]
From 4d3d4c2842bf752c403a5a9e4207acb42463a12c Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Date: Wed, 9 Apr 2025 16:44:12 +0200
Subject: [PATCH 03/10] avcodec/hq_hqa: Don't zero in small chunks, don't zero
twice
Up until now, hq_decode_block() zeroed every block (of 128 bytes)
before decoding a block; yet this is suboptimal for all modes,
because all modes need to reset all the blocks they use anyway
and so it should be done in one go for all blocks.
For the alpha mode (where blocks need not be coded) all blocks
are zeroed initially anyway, because decode_block() might not
be doing it, so zeroing there again for the coded blocks is
a waste.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
libavcodec/hq_hqa.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/libavcodec/hq_hqa.c b/libavcodec/hq_hqa.c
index 48fc4896ee..a16478b918 100644
--- a/libavcodec/hq_hqa.c
+++ b/libavcodec/hq_hqa.c
@@ -78,8 +78,6 @@ static int hq_decode_block(HQContext *c, GetBitContext *gb, int16_t block[64],
const int32_t *q;
int val, pos = 1;
- memset(block, 0, 64 * sizeof(*block));
-
if (!is_hqa) {
block[0] = get_sbits(gb, 9) * 64;
q = hq_quants[qsel][is_chroma][get_bits(gb, 2)];
@@ -109,6 +107,8 @@ static int hq_decode_mb(HQContext *c, AVFrame *pic,
int qgroup, flag;
int i, ret;
+ memset(c->block, 0, 8 * sizeof(c->block[0]));
+
qgroup = get_bits(gb, 4);
flag = get_bits1(gb);
@@ -197,8 +197,7 @@ static int hqa_decode_mb(HQContext *c, AVFrame *pic, int qgroup,
if (get_bits_left(gb) < 1)
return AVERROR_INVALIDDATA;
- for (i = 0; i < 12; i++)
- memset(c->block[i], 0, sizeof(*c->block));
+ memset(c->block, 0, sizeof(c->block));
for (i = 0; i < 12; i++)
c->block[i][0] = -128 * (1 << 6);
--
2.45.2
[-- Attachment #5: 0004-avcodec-hq_hqadata-Avoid-relocations.patch --]
[-- Type: text/x-patch, Size: 47891 bytes --]
From 214490ccfbce84dee1d1ca10154436981010b459 Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Date: Wed, 9 Apr 2025 17:16:28 +0200
Subject: [PATCH 04/10] avcodec/hq_hqadata: Avoid relocations
Initialize a list of 128 pointers at decoder init
instead of using a const list of pointers (which
will be initialized at runtime when libavcodec
is loaded when using pic code with Elf); the former
takes only 128 bytes (+ a bit of initialization code),
the latter 1KiB on 64 bit systems (+3KiB on x64 elf
for relocation information).
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
libavcodec/hq_hqa.c | 13 +-
libavcodec/hq_hqadata.h | 506 ++++++++++++++++++++--------------------
2 files changed, 268 insertions(+), 251 deletions(-)
diff --git a/libavcodec/hq_hqa.c b/libavcodec/hq_hqa.c
index a16478b918..b5bad01392 100644
--- a/libavcodec/hq_hqa.c
+++ b/libavcodec/hq_hqa.c
@@ -58,6 +58,8 @@ typedef struct HQContext {
DECLARE_ALIGNED(16, int16_t, block)[12][64];
} HQContext;
+static const int32_t *hq_quants[NUM_HQ_QUANTS][2][4];
+
static VLCElem hq_ac_vlc[1184];
static inline void put_blocks(HQContext *c, AVFrame *pic,
@@ -368,10 +370,17 @@ static int hq_hqa_decode_frame(AVCodecContext *avctx, AVFrame *pic,
return avpkt->size;
}
-static av_cold void hq_init_vlcs(void)
+static av_cold void hq_init_static(void)
{
VLC_INIT_STATIC_TABLE(hq_ac_vlc, 9, NUM_HQ_AC_ENTRIES,
hq_ac_bits, 1, 1, hq_ac_codes, 2, 2, 0);
+
+ for (size_t i = 0; i < FF_ARRAY_ELEMS(hq_quants); ++i) {
+ for (size_t j = 0; j < FF_ARRAY_ELEMS(hq_quants[0]); ++j) {
+ for (size_t k = 0; k < FF_ARRAY_ELEMS(hq_quants[0][0]); ++k)
+ hq_quants[i][j][k] = qmats[hq_quant_map[i][j][k]];
+ }
+ }
}
static av_cold int hq_hqa_decode_init(AVCodecContext *avctx)
@@ -382,7 +391,7 @@ static av_cold int hq_hqa_decode_init(AVCodecContext *avctx)
ff_hqdsp_init(&ctx->hqhqadsp);
- ff_thread_once(&init_static_once, hq_init_vlcs);
+ ff_thread_once(&init_static_once, hq_init_static);
return 0;
}
diff --git a/libavcodec/hq_hqadata.h b/libavcodec/hq_hqadata.h
index d592ac0c21..31f6dc88a4 100644
--- a/libavcodec/hq_hqadata.h
+++ b/libavcodec/hq_hqadata.h
@@ -34,9 +34,92 @@ typedef struct HQProfile {
int tab_w, tab_h;
} HQProfile;
+enum {
+ QMAT00,
+ QMAT01,
+ QMAT02,
+ QMAT03,
+ QMAT04,
+ QMAT05,
+ QMAT06,
+ QMAT07,
+ QMAT08,
+ QMAT09,
+ QMAT0A,
+ QMAT0B,
+ QMAT0C,
+ QMAT0D,
+ QMAT0E,
+ QMAT0F,
+ QMAT10,
+ QMAT11,
+ QMAT12,
+ QMAT13,
+ QMAT14,
+ QMAT15,
+ QMAT16,
+ QMAT17,
+ QMAT18,
+ QMAT19,
+ QMAT1A,
+ QMAT1B,
+ QMAT1C,
+ QMAT1D,
+ QMAT1E,
+ QMAT1F,
+ QMAT20,
+ QMAT21,
+ QMAT22,
+ QMAT23,
+ QMAT24,
+ QMAT25,
+ QMAT26,
+ QMAT27,
+ QMAT28,
+ QMAT29,
+ QMAT2A,
+ QMAT2B,
+ QMAT2C,
+ QMAT2D,
+ QMAT2E,
+ QMAT2F,
+ QMAT30,
+ QMAT31,
+ QMAT32,
+ QMAT33,
+ QMAT34,
+ QMAT35,
+ QMAT36,
+ QMAT37,
+ QMAT38,
+ QMAT39,
+ QMAT3A,
+ QMAT3B,
+ QMAT3C,
+ QMAT3D,
+ QMAT3E,
+ QMAT3F,
+ QMAT40,
+ QMAT41,
+ QMAT42,
+ QMAT43,
+ QMAT44,
+ QMAT45,
+ QMAT46,
+ QMAT47,
+ QMAT48,
+ QMAT49,
+ QMAT4A,
+ QMAT4B,
+ QMAT4C,
+ QMAT4D,
+ NUM_QMATS
+};
+
#define MAT_SIZE 64
-static const int32_t qmat00[MAT_SIZE] = {
+static const int32_t qmats[NUM_QMATS][MAT_SIZE] = {
+[QMAT00] = {
0x0040000, 0x000B18B, 0x00058C5, 0x000B1B1, 0x00082D3, 0x000B1B1,
0x000A953, 0x000827B, 0x00104F7, 0x000A953, 0x0009000, 0x000EADD,
0x001037B, 0x000756E, 0x0009000, 0x000776D, 0x000696A, 0x000E987,
@@ -48,9 +131,8 @@ static const int32_t qmat00[MAT_SIZE] = {
0x00229B2, 0x001FCB2, 0x0019FA3, 0x000D94C, 0x000CFD2, 0x0007F2D,
0x000DEED, 0x0014D5E, 0x0029ABD, 0x0037BB5, 0x002D16B, 0x001FECE,
0x000B45B, 0x0011521, 0x0022A42, 0x0012B9C,
-};
-
-static const int32_t qmat01[MAT_SIZE] = {
+},
+[QMAT01] = {
0x0040000, 0x000B18B, 0x00058C5, 0x000B1B1, 0x00082D3, 0x000B1B1,
0x000EB2D, 0x000B53A, 0x0016A73, 0x000EB2D, 0x000D000, 0x0014632,
0x0016314, 0x000A319, 0x000D000, 0x000A36D, 0x0009041, 0x0014BDA,
@@ -62,9 +144,8 @@ static const int32_t qmat01[MAT_SIZE] = {
0x0045365, 0x007FD2A, 0x00675E5, 0x0036A1F, 0x0033AF3, 0x001FF4B,
0x001C010, 0x0029E24, 0x0053C47, 0x007003E, 0x005A9C7, 0x004024C,
0x0016A72, 0x0022A42, 0x0045485, 0x0025738,
-};
-
-static const int32_t qmat02[MAT_SIZE] = {
+},
+[QMAT02] = {
0x0040000, 0x0016315, 0x000B18B, 0x0016363, 0x00105A6, 0x0016363,
0x00152A7, 0x00104F7, 0x00209EE, 0x00152A7, 0x0012000, 0x001D5B9,
0x00206F6, 0x000EADD, 0x0012000, 0x000EEDA, 0x000D2D4, 0x001D30D,
@@ -76,9 +157,8 @@ static const int32_t qmat02[MAT_SIZE] = {
0x0045365, 0x003F964, 0x0033F47, 0x001B297, 0x0019FA3, 0x000FE59,
0x001BDDA, 0x0029ABD, 0x0053579, 0x006F76A, 0x005A2D7, 0x003FD9D,
0x00168B6, 0x0022A42, 0x0045485, 0x0025738,
-};
-
-static const int32_t qmat03[MAT_SIZE] = {
+},
+[QMAT03] = {
0x0040000, 0x0016315, 0x000B18B, 0x0016363, 0x00105A6, 0x0016363,
0x001D65A, 0x0016A73, 0x002D4E7, 0x001D65A, 0x001A000, 0x0028C65,
0x002C628, 0x0014632, 0x001A000, 0x00146D9, 0x0012081, 0x00297B5,
@@ -90,9 +170,8 @@ static const int32_t qmat03[MAT_SIZE] = {
0x008A6CA, 0x00FFA54, 0x00CEBCA, 0x006D43E, 0x00675E5, 0x003FE95,
0x003801F, 0x0053C47, 0x00A788E, 0x00E007C, 0x00B538D, 0x0080498,
0x002D4E3, 0x0045485, 0x008A90A, 0x004AE71,
-};
-
-static const int32_t qmat04[MAT_SIZE] = {
+},
+[QMAT04] = {
0x0040000, 0x00214A0, 0x0010A50, 0x0021514, 0x0018879, 0x0021514,
0x001FBFA, 0x0018772, 0x0030EE5, 0x001FBFA, 0x001B000, 0x002C096,
0x0030A71, 0x001604B, 0x001B000, 0x0016647, 0x0013C3F, 0x002BC94,
@@ -104,9 +183,8 @@ static const int32_t qmat04[MAT_SIZE] = {
0x0067D17, 0x005F616, 0x004DEEA, 0x0028BE3, 0x0026F75, 0x0017D86,
0x0029CC8, 0x003E81B, 0x007D036, 0x00A731F, 0x0087442, 0x005FC6B,
0x0021D11, 0x0033F64, 0x0067EC7, 0x00382D5,
-};
-
-static const int32_t qmat05[MAT_SIZE] = {
+},
+[QMAT05] = {
0x0040000, 0x00214A0, 0x0010A50, 0x0021514, 0x0018879, 0x0021514,
0x002C186, 0x0021FAD, 0x0043F5A, 0x002C186, 0x0027000, 0x003D297,
0x004293C, 0x001E94C, 0x0027000, 0x001EA46, 0x001B0C2, 0x003E38F,
@@ -118,9 +196,8 @@ static const int32_t qmat05[MAT_SIZE] = {
0x00CFA2F, 0x017F77F, 0x01361B0, 0x00A3E5C, 0x009B0D8, 0x005FDE0,
0x005402F, 0x007DA6B, 0x00FB4D5, 0x01500BA, 0x010FD54, 0x00C06E5,
0x0043F55, 0x0067EC7, 0x00CFD8F, 0x00705A9,
-};
-
-static const int32_t qmat06[MAT_SIZE] = {
+},
+[QMAT06] = {
0x0040000, 0x002C62A, 0x0016315, 0x002C6C5, 0x0020B4C, 0x002C6C5,
0x002A54E, 0x00209EE, 0x00413DC, 0x002A54E, 0x0024000, 0x003AB73,
0x0040DEC, 0x001D5B9, 0x0024000, 0x001DDB4, 0x001A5A9, 0x003A61B,
@@ -132,9 +209,8 @@ static const int32_t qmat06[MAT_SIZE] = {
0x008A6CA, 0x007F2C9, 0x0067E8E, 0x003652F, 0x0033F47, 0x001FCB2,
0x0037BB5, 0x0053579, 0x00A6AF3, 0x00DEED4, 0x00B45AE, 0x007FB39,
0x002D16B, 0x0045485, 0x008A90A, 0x004AE71,
-};
-
-static const int32_t qmat07[MAT_SIZE] = {
+},
+[QMAT07] = {
0x0040000, 0x002C62A, 0x0016315, 0x002C6C5, 0x0020B4C, 0x002C6C5,
0x003ACB3, 0x002D4E7, 0x005A9CE, 0x003ACB3, 0x0034000, 0x00518CA,
0x0058C50, 0x0028C65, 0x0034000, 0x0028DB3, 0x0024102, 0x0052F69,
@@ -146,9 +222,8 @@ static const int32_t qmat07[MAT_SIZE] = {
0x0114D94, 0x01FF4A9, 0x019D795, 0x00DA87B, 0x00CEBCA, 0x007FD2A,
0x007003E, 0x00A788E, 0x014F11C, 0x01C00F8, 0x016A71B, 0x0100931,
0x005A9C7, 0x008A90A, 0x0115214, 0x0095CE2,
-};
-
-static const int32_t qmat08[MAT_SIZE] = {
+},
+[QMAT08] = {
0x0040000, 0x00377B5, 0x001BBDA, 0x0037876, 0x0028E1E, 0x0037876,
0x0034EA1, 0x0028C69, 0x00518D3, 0x0034EA1, 0x002D000, 0x004964F,
0x0051167, 0x0024B28, 0x002D000, 0x0025521, 0x0020F13, 0x0048FA1,
@@ -160,9 +235,8 @@ static const int32_t qmat08[MAT_SIZE] = {
0x00AD07C, 0x009EF7B, 0x0081E31, 0x0043E7A, 0x0040F19, 0x0027BDF,
0x0045AA2, 0x00682D8, 0x00D05B0, 0x0116A89, 0x00E1719, 0x009FA07,
0x00385C6, 0x00569A6, 0x00AD34C, 0x005DA0D,
-};
-
-static const int32_t qmat09[MAT_SIZE] = {
+},
+[QMAT09] = {
0x0040000, 0x00377B5, 0x001BBDA, 0x0037876, 0x0028E1E, 0x0037876,
0x00497E0, 0x0038A21, 0x0071441, 0x00497E0, 0x0041000, 0x0065EFC,
0x006EF64, 0x0032F7E, 0x0041000, 0x003311F, 0x002D143, 0x0067B44,
@@ -174,9 +248,8 @@ static const int32_t qmat09[MAT_SIZE] = {
0x015A0F9, 0x027F1D3, 0x0204D7A, 0x011129A, 0x01026BD, 0x009FC75,
0x008C04E, 0x00D16B2, 0x01A2D64, 0x0230136, 0x01C50E1, 0x0140B7D,
0x0071438, 0x00AD34C, 0x015A699, 0x00BB41A,
-};
-
-static const int32_t qmat0A[MAT_SIZE] = {
+},
+[QMAT0A] = {
0x0040000, 0x004293F, 0x00214A0, 0x0042A28, 0x00310F1, 0x0042A28,
0x003F7F5, 0x0030EE5, 0x0061DCA, 0x003F7F5, 0x0036000, 0x005812C,
0x00614E2, 0x002C096, 0x0036000, 0x002CC8E, 0x002787D, 0x0057928,
@@ -188,9 +261,8 @@ static const int32_t qmat0A[MAT_SIZE] = {
0x00CFA2F, 0x00BEC2D, 0x009BDD5, 0x00517C6, 0x004DEEA, 0x002FB0B,
0x005398F, 0x007D036, 0x00FA06C, 0x014E63E, 0x010E885, 0x00BF8D6,
0x0043A21, 0x0067EC7, 0x00CFD8F, 0x00705A9,
-};
-
-static const int32_t qmat0B[MAT_SIZE] = {
+},
+[QMAT0B] = {
0x0040000, 0x004293F, 0x00214A0, 0x0042A28, 0x00310F1, 0x0042A28,
0x005830D, 0x0043F5A, 0x0087EB5, 0x005830D, 0x004E000, 0x007A52F,
0x0085278, 0x003D297, 0x004E000, 0x003D48C, 0x0036183, 0x007C71E,
@@ -202,9 +274,8 @@ static const int32_t qmat0B[MAT_SIZE] = {
0x019F45E, 0x02FEEFD, 0x026C35F, 0x0147CB9, 0x01361B0, 0x00BFBBF,
0x00A805D, 0x00FB4D5, 0x01F69AB, 0x02A0174, 0x021FAA8, 0x0180DC9,
0x0087EAA, 0x00CFD8F, 0x019FB1E, 0x00E0B52,
-};
-
-static const int32_t qmat0C[MAT_SIZE] = {
+},
+[QMAT0C] = {
0x0040000, 0x004DACA, 0x0026D65, 0x004DBD9, 0x00393C4, 0x004DBD9,
0x004A148, 0x0039160, 0x00722C1, 0x004A148, 0x003F000, 0x0066C09,
0x007185D, 0x0033604, 0x003F000, 0x00343FB, 0x002E1E8, 0x00662AF,
@@ -216,9 +287,8 @@ static const int32_t qmat0C[MAT_SIZE] = {
0x00F23E1, 0x00DE8DF, 0x00B5D78, 0x005F111, 0x005AEBC, 0x0037A38,
0x006187D, 0x0091D95, 0x0123B29, 0x01861F3, 0x013B9F0, 0x00DF7A4,
0x004EE7C, 0x00793E9, 0x00F27D1, 0x0083145,
-};
-
-static const int32_t qmat0D[MAT_SIZE] = {
+},
+[QMAT0D] = {
0x0040000, 0x004DACA, 0x0026D65, 0x004DBD9, 0x00393C4, 0x004DBD9,
0x0066E3A, 0x004F494, 0x009E928, 0x0066E3A, 0x005B000, 0x008EB61,
0x009B58C, 0x00475B1, 0x005B000, 0x00477F9, 0x003F1C4, 0x00912F8,
@@ -230,9 +300,8 @@ static const int32_t qmat0D[MAT_SIZE] = {
0x01E47C3, 0x037EC27, 0x02D3944, 0x017E6D8, 0x0169CA2, 0x00DFB0A,
0x00C406D, 0x01252F9, 0x024A5F2, 0x03101B2, 0x027A46F, 0x01C1016,
0x009E91C, 0x00F27D1, 0x01E4FA3, 0x010628B,
-};
-
-static const int32_t qmat0E[MAT_SIZE] = {
+},
+[QMAT0E] = {
0x0040000, 0x0058C54, 0x002C62A, 0x0058D8A, 0x0041697, 0x0058D8A,
0x0054A9C, 0x00413DC, 0x00827B8, 0x0054A9C, 0x0048000, 0x00756E5,
0x0081BD8, 0x003AB73, 0x0048000, 0x003BB68, 0x0034B52, 0x0074C35,
@@ -244,9 +313,8 @@ static const int32_t qmat0E[MAT_SIZE] = {
0x0114D94, 0x00FE591, 0x00CFD1C, 0x006CA5D, 0x0067E8E, 0x003F964,
0x006F76A, 0x00A6AF3, 0x014D5E6, 0x01BDDA8, 0x0168B5C, 0x00FF672,
0x005A2D7, 0x008A90A, 0x0115214, 0x0095CE2,
-};
-
-static const int32_t qmat0F[MAT_SIZE] = {
+},
+[QMAT0F] = {
0x0040000, 0x0058C54, 0x002C62A, 0x0058D8A, 0x0041697, 0x0058D8A,
0x0075967, 0x005A9CE, 0x00B539C, 0x0075967, 0x0068000, 0x00A3194,
0x00B18A0, 0x00518CA, 0x0068000, 0x0051B65, 0x0048204, 0x00A5ED3,
@@ -258,9 +326,8 @@ static const int32_t qmat0F[MAT_SIZE] = {
0x0229B27, 0x03FE951, 0x033AF2A, 0x01B50F6, 0x019D795, 0x00FFA54,
0x00E007C, 0x014F11C, 0x029E239, 0x03801F0, 0x02D4E36, 0x0201262,
0x00B538D, 0x0115214, 0x022A428, 0x012B9C3,
-};
-
-static const int32_t qmat10[MAT_SIZE] = {
+},
+[QMAT10] = {
0x0040000, 0x006EF69, 0x00377B5, 0x006F0ED, 0x0051C3D, 0x006F0ED,
0x0069D43, 0x00518D3, 0x00A31A6, 0x0069D43, 0x005A000, 0x0092C9F,
0x00A22CD, 0x004964F, 0x005A000, 0x004AA42, 0x0041E26, 0x0091F43,
@@ -272,9 +339,8 @@ static const int32_t qmat10[MAT_SIZE] = {
0x015A0F9, 0x013DEF5, 0x0103C63, 0x0087CF4, 0x0081E31, 0x004F7BD,
0x008B544, 0x00D05B0, 0x01A0B5F, 0x022D511, 0x01C2E32, 0x013F40F,
0x0070B8D, 0x00AD34C, 0x015A699, 0x00BB41A,
-};
-
-static const int32_t qmat11[MAT_SIZE] = {
+},
+[QMAT11] = {
0x0040000, 0x006EF69, 0x00377B5, 0x006F0ED, 0x0051C3D, 0x006F0ED,
0x0092FC0, 0x0071441, 0x00E2883, 0x0092FC0, 0x0082000, 0x00CBDF9,
0x00DDEC8, 0x0065EFC, 0x0082000, 0x006623F, 0x005A285, 0x00CF687,
@@ -286,9 +352,8 @@ static const int32_t qmat11[MAT_SIZE] = {
0x02B41F1, 0x04FE3A6, 0x0409AF4, 0x0222534, 0x0204D7A, 0x013F8E9,
0x011809B, 0x01A2D64, 0x0345AC7, 0x046026C, 0x038A1C3, 0x02816FA,
0x00E2871, 0x015A699, 0x02B4D32, 0x0176834,
-};
-
-static const int32_t qmat12[MAT_SIZE] = {
+},
+[QMAT12] = {
0x0040000, 0x008527E, 0x004293F, 0x0085450, 0x00621E3, 0x0085450,
0x007EFEA, 0x0061DCA, 0x00C3B94, 0x007EFEA, 0x006C000, 0x00B0258,
0x00C29C3, 0x005812C, 0x006C000, 0x005991C, 0x004F0FB, 0x00AF250,
@@ -300,9 +365,8 @@ static const int32_t qmat12[MAT_SIZE] = {
0x019F45E, 0x017D85A, 0x0137BAA, 0x00A2F8C, 0x009BDD5, 0x005F616,
0x00A731F, 0x00FA06C, 0x01F40D9, 0x029CC7B, 0x021D109, 0x017F1AB,
0x0087442, 0x00CFD8F, 0x019FB1E, 0x00E0B52,
-};
-
-static const int32_t qmat13[MAT_SIZE] = {
+},
+[QMAT13] = {
0x0040000, 0x008527E, 0x004293F, 0x0085450, 0x00621E3, 0x0085450,
0x00B061A, 0x0087EB5, 0x010FD69, 0x00B061A, 0x009C000, 0x00F4A5E,
0x010A4F0, 0x007A52F, 0x009C000, 0x007A918, 0x006C307, 0x00F8E3C,
@@ -314,9 +378,8 @@ static const int32_t qmat13[MAT_SIZE] = {
0x033E8BB, 0x05FDDFA, 0x04D86BE, 0x028F971, 0x026C35F, 0x017F77F,
0x01500BA, 0x01F69AB, 0x03ED355, 0x05402E9, 0x043F550, 0x0301B93,
0x010FD54, 0x019FB1E, 0x033F63C, 0x01C16A5,
-};
-
-static const int32_t qmat14[MAT_SIZE] = {
+},
+[QMAT14] = {
0x0040000, 0x009B593, 0x004DACA, 0x009B7B2, 0x0072789, 0x009B7B2,
0x0094291, 0x00722C1, 0x00E4582, 0x0094291, 0x007E000, 0x00CD812,
0x00E30B9, 0x0066C09, 0x007E000, 0x00687F5, 0x005C3CF, 0x00CC55D,
@@ -328,9 +391,8 @@ static const int32_t qmat14[MAT_SIZE] = {
0x01E47C3, 0x01BD1BE, 0x016BAF1, 0x00BE223, 0x00B5D78, 0x006F46F,
0x00C30F9, 0x0123B29, 0x0247652, 0x030C3E5, 0x02773E0, 0x01BEF48,
0x009DCF8, 0x00F27D1, 0x01E4FA3, 0x010628B,
-};
-
-static const int32_t qmat15[MAT_SIZE] = {
+},
+[QMAT15] = {
0x0040000, 0x009B593, 0x004DACA, 0x009B7B2, 0x0072789, 0x009B7B2,
0x00CDC74, 0x009E928, 0x013D250, 0x00CDC74, 0x00B6000, 0x011D6C3,
0x0136B18, 0x008EB61, 0x00B6000, 0x008EFF2, 0x007E388, 0x01225F0,
@@ -342,9 +404,8 @@ static const int32_t qmat15[MAT_SIZE] = {
0x03C8F85, 0x06FD84F, 0x05A7289, 0x02FCDAF, 0x02D3944, 0x01BF614,
0x01880D9, 0x024A5F2, 0x0494BE4, 0x0620365, 0x04F48DE, 0x038202B,
0x013D237, 0x01E4FA3, 0x03C9F46, 0x020C516,
-};
-
-static const int32_t qmat16[MAT_SIZE] = {
+},
+[QMAT16] = {
0x0040000, 0x00B18A8, 0x0058C54, 0x00B1B15, 0x0082D2E, 0x00B1B15,
0x00A9538, 0x00827B8, 0x0104F6F, 0x00A9538, 0x0090000, 0x00EADCB,
0x01037AF, 0x00756E5, 0x0090000, 0x00776CF, 0x00696A4, 0x00E986B,
@@ -356,9 +417,8 @@ static const int32_t qmat16[MAT_SIZE] = {
0x0229B27, 0x01FCB22, 0x019FA38, 0x00D94BA, 0x00CFD1C, 0x007F2C9,
0x00DEED4, 0x014D5E6, 0x029ABCC, 0x037BB4F, 0x02D16B7, 0x01FECE4,
0x00B45AE, 0x0115214, 0x022A428, 0x012B9C3,
-};
-
-static const int32_t qmat17[MAT_SIZE] = {
+},
+[QMAT17] = {
0x0040000, 0x00B18A8, 0x0058C54, 0x00B1B15, 0x0082D2E, 0x00B1B15,
0x00EB2CD, 0x00B539C, 0x016A737, 0x00EB2CD, 0x00D0000, 0x0146328,
0x0163140, 0x00A3194, 0x00D0000, 0x00A36CB, 0x0090409, 0x014BDA5,
@@ -370,9 +430,8 @@ static const int32_t qmat17[MAT_SIZE] = {
0x045364F, 0x07FD2A3, 0x0675E53, 0x036A1ED, 0x033AF2A, 0x01FF4A9,
0x01C00F8, 0x029E239, 0x053C472, 0x07003E1, 0x05A9C6B, 0x04024C4,
0x016A71B, 0x022A428, 0x0454850, 0x0257386,
-};
-
-static const int32_t qmat18[MAT_SIZE] = {
+},
+[QMAT18] = {
0x0040000, 0x00C7BBD, 0x0063DDF, 0x00C7E77, 0x00932D4, 0x00C7E77,
0x00BE7DF, 0x0092CAF, 0x012595D, 0x00BE7DF, 0x00A2000, 0x0108384,
0x0123EA5, 0x00841C2, 0x00A2000, 0x00865A9, 0x0076978, 0x0106B78,
@@ -384,9 +443,8 @@ static const int32_t qmat18[MAT_SIZE] = {
0x026EE8C, 0x023C486, 0x01D397F, 0x00F4751, 0x00E9CBF, 0x008F122,
0x00FACAE, 0x01770A2, 0x02EE145, 0x03EB2B9, 0x032B98E, 0x023EA81,
0x00CAE64, 0x0137C56, 0x026F8AD, 0x01510FC,
-};
-
-static const int32_t qmat19[MAT_SIZE] = {
+},
+[QMAT19] = {
0x0040000, 0x00C7BBD, 0x0063DDF, 0x00C7E77, 0x00932D4, 0x00C7E77,
0x0108927, 0x00CBE0F, 0x0197C1E, 0x0108927, 0x00EA000, 0x016EF8D,
0x018F768, 0x00B77C6, 0x00EA000, 0x00B7DA4, 0x00A248A, 0x017555A,
@@ -398,9 +456,8 @@ static const int32_t qmat19[MAT_SIZE] = {
0x04DDD19, 0x08FCCF7, 0x0744A1D, 0x03D762A, 0x03A250F, 0x023F33E,
0x01F8117, 0x02F1E80, 0x05E3D00, 0x07E045D, 0x065EFF9, 0x048295C,
0x0197BFE, 0x026F8AD, 0x04DF15A, 0x02A21F7,
-};
-
-static const int32_t qmat1A[MAT_SIZE] = {
+},
+[QMAT1A] = {
0x0040000, 0x00DDED2, 0x006EF69, 0x00DE1DA, 0x00A387A, 0x00DE1DA,
0x00D3A86, 0x00A31A6, 0x014634B, 0x00D3A86, 0x00B4000, 0x012593E,
0x014459B, 0x0092C9F, 0x00B4000, 0x0095483, 0x0083C4D, 0x0123E85,
@@ -412,9 +469,8 @@ static const int32_t qmat1A[MAT_SIZE] = {
0x02B41F1, 0x027BDEB, 0x02078C6, 0x010F9E9, 0x0103C63, 0x009EF7B,
0x0116A89, 0x01A0B5F, 0x03416BE, 0x045AA23, 0x0385C65, 0x027E81E,
0x00E1719, 0x015A699, 0x02B4D32, 0x0176834,
-};
-
-static const int32_t qmat1B[MAT_SIZE] = {
+},
+[QMAT1B] = {
0x0040000, 0x00DDED2, 0x006EF69, 0x00DE1DA, 0x00A387A, 0x00DE1DA,
0x0125F81, 0x00E2883, 0x01C5105, 0x0125F81, 0x0104000, 0x0197BF2,
0x01BBD90, 0x00CBDF9, 0x0104000, 0x00CC47E, 0x00B450B, 0x019ED0E,
@@ -426,9 +482,8 @@ static const int32_t qmat1B[MAT_SIZE] = {
0x05683E3, 0x09FC74C, 0x08135E8, 0x0444A68, 0x0409AF4, 0x027F1D3,
0x0230136, 0x0345AC7, 0x068B58E, 0x08C04D9, 0x0714386, 0x0502DF5,
0x01C50E1, 0x02B4D32, 0x0569A64, 0x02ED068,
-};
-
-static const int32_t qmat1C[MAT_SIZE] = {
+},
+[QMAT1C] = {
0x0040000, 0x00F41E7, 0x007A0F4, 0x00F453D, 0x00B3E20, 0x00F453D,
0x00E8D2D, 0x00B369D, 0x0166D39, 0x00E8D2D, 0x00C6000, 0x0142EF7,
0x0164C91, 0x00A177B, 0x00C6000, 0x00A435D, 0x0090F21, 0x0141193,
@@ -440,9 +495,8 @@ static const int32_t qmat1C[MAT_SIZE] = {
0x02F9556, 0x02BB74F, 0x023B80D, 0x012AC80, 0x011DC06, 0x00AEDD4,
0x0132863, 0x01CA61C, 0x0394C38, 0x04CA18D, 0x03DFF3C, 0x02BE5BA,
0x00F7FCF, 0x017D0DB, 0x02FA1B7, 0x019BF6C,
-};
-
-static const int32_t qmat1D[MAT_SIZE] = {
+},
+[QMAT1D] = {
0x0040000, 0x00F41E7, 0x007A0F4, 0x00F453D, 0x00B3E20, 0x00F453D,
0x01435DA, 0x00F92F6, 0x01F25EC, 0x01435DA, 0x011E000, 0x01C0857,
0x01E83B8, 0x00E042B, 0x011E000, 0x00E0B57, 0x00C658C, 0x01C84C3,
@@ -454,9 +508,8 @@ static const int32_t qmat1D[MAT_SIZE] = {
0x05F2AAD, 0x0AFC1A0, 0x08E21B2, 0x04B1EA5, 0x04710D9, 0x02BF068,
0x0268155, 0x039970E, 0x0732E1D, 0x09A0555, 0x07C9713, 0x058328D,
0x01F25C5, 0x02FA1B7, 0x05F436E, 0x0337ED9,
-};
-
-static const int32_t qmat1E[MAT_SIZE] = {
+},
+[QMAT1E] = {
0x0040000, 0x010A4FD, 0x008527E, 0x010A89F, 0x00C43C5, 0x010A89F,
0x00FDFD3, 0x00C3B94, 0x0187727, 0x00FDFD3, 0x00D8000, 0x01604B0,
0x0185387, 0x00B0258, 0x00D8000, 0x00B3237, 0x009E1F6, 0x015E4A0,
@@ -468,9 +521,8 @@ static const int32_t qmat1E[MAT_SIZE] = {
0x033E8BB, 0x02FB0B3, 0x026F754, 0x0145F17, 0x0137BAA, 0x00BEC2D,
0x014E63E, 0x01F40D9, 0x03E81B1, 0x05398F7, 0x043A213, 0x02FE357,
0x010E885, 0x019FB1E, 0x033F63C, 0x01C16A5,
-};
-
-static const int32_t qmat1F[MAT_SIZE] = {
+},
+[QMAT1F] = {
0x0040000, 0x010A4FD, 0x008527E, 0x010A89F, 0x00C43C5, 0x010A89F,
0x0160C34, 0x010FD69, 0x021FAD3, 0x0160C34, 0x0138000, 0x01E94BC,
0x02149E1, 0x00F4A5E, 0x0138000, 0x00F5230, 0x00D860D, 0x01F1C78,
@@ -482,9 +534,8 @@ static const int32_t qmat1F[MAT_SIZE] = {
0x067D176, 0x0BFBBF4, 0x09B0D7D, 0x051F2E3, 0x04D86BE, 0x02FEEFD,
0x02A0174, 0x03ED355, 0x07DA6AB, 0x0A805D1, 0x087EAA1, 0x0603726,
0x021FAA8, 0x033F63C, 0x067EC78, 0x0382D4A,
-};
-
-static const int32_t qmat20[MAT_SIZE] = {
+},
+[QMAT20] = {
0x0040000, 0x0136B27, 0x009B593, 0x0136F64, 0x00E4F11, 0x0136F64,
0x0128521, 0x00E4582, 0x01C8B03, 0x0128521, 0x00FC000, 0x019B023,
0x01C6172, 0x00CD812, 0x00FC000, 0x00D0FEB, 0x00B879F, 0x0198ABB,
@@ -496,9 +547,8 @@ static const int32_t qmat20[MAT_SIZE] = {
0x03C8F85, 0x037A37C, 0x02D75E2, 0x017C446, 0x016BAF1, 0x00DE8DF,
0x01861F3, 0x0247652, 0x048ECA4, 0x06187CA, 0x04EE7C1, 0x037DE90,
0x013B9F0, 0x01E4FA3, 0x03C9F46, 0x020C516,
-};
-
-static const int32_t qmat21[MAT_SIZE] = {
+},
+[QMAT21] = {
0x0040000, 0x0136B27, 0x009B593, 0x0136F64, 0x00E4F11, 0x0136F64,
0x019B8E7, 0x013D250, 0x027A4A1, 0x019B8E7, 0x016C000, 0x023AD86,
0x026D631, 0x011D6C3, 0x016C000, 0x011DFE3, 0x00FC70F, 0x0244BE1,
@@ -510,9 +560,8 @@ static const int32_t qmat21[MAT_SIZE] = {
0x0791F0A, 0x0DFB09D, 0x0B4E511, 0x05F9B5E, 0x05A7289, 0x037EC27,
0x03101B2, 0x0494BE4, 0x09297C7, 0x0C406C9, 0x09E91BC, 0x0704057,
0x027A46F, 0x03C9F46, 0x0793E8C, 0x0418A2B,
-};
-
-static const int32_t qmat22[MAT_SIZE] = {
+},
+[QMAT22] = {
0x0040000, 0x0163151, 0x00B18A8, 0x0163629, 0x0105A5D, 0x0163629,
0x0152A6F, 0x0104F6F, 0x0209EDF, 0x0152A6F, 0x0120000, 0x01D5B96,
0x0206F5E, 0x00EADCB, 0x0120000, 0x00EED9F, 0x00D2D48, 0x01D30D5,
@@ -524,9 +573,8 @@ static const int32_t qmat22[MAT_SIZE] = {
0x045364F, 0x03F9644, 0x033F46F, 0x01B2974, 0x019FA38, 0x00FE591,
0x01BDDA8, 0x029ABCC, 0x0535797, 0x06F769E, 0x05A2D6E, 0x03FD9C9,
0x0168B5C, 0x022A428, 0x0454850, 0x0257386,
-};
-
-static const int32_t qmat23[MAT_SIZE] = {
+},
+[QMAT23] = {
0x0040000, 0x0163151, 0x00B18A8, 0x0163629, 0x0105A5D, 0x0163629,
0x01D659B, 0x016A737, 0x02D4E6E, 0x01D659B, 0x01A0000, 0x028C650,
0x02C6281, 0x0146328, 0x01A0000, 0x0146D96, 0x0120812, 0x0297B4A,
@@ -538,9 +586,8 @@ static const int32_t qmat23[MAT_SIZE] = {
0x08A6C9E, 0x0FFA546, 0x0CEBCA6, 0x06D43D9, 0x0675E53, 0x03FE951,
0x03801F0, 0x053C472, 0x0A788E4, 0x0E007C1, 0x0B538D6, 0x0804988,
0x02D4E36, 0x0454850, 0x08A90A0, 0x04AE70D,
-};
-
-static const int32_t qmat24[MAT_SIZE] = {
+},
+[QMAT24] = {
0x0040000, 0x018F77B, 0x00C7BBD, 0x018FCEF, 0x01265A8, 0x018FCEF,
0x017CFBD, 0x012595D, 0x024B2BB, 0x017CFBD, 0x0144000, 0x0210708,
0x0247D4A, 0x0108384, 0x0144000, 0x010CB53, 0x00ED2F1, 0x020D6F0,
@@ -552,9 +599,8 @@ static const int32_t qmat24[MAT_SIZE] = {
0x04DDD19, 0x047890D, 0x03A72FD, 0x01E8EA3, 0x01D397F, 0x011E243,
0x01F595C, 0x02EE145, 0x05DC28A, 0x07D6572, 0x065731C, 0x047D502,
0x0195CC7, 0x026F8AD, 0x04DF15A, 0x02A21F7,
-};
-
-static const int32_t qmat25[MAT_SIZE] = {
+},
+[QMAT25] = {
0x0040000, 0x018F77B, 0x00C7BBD, 0x018FCEF, 0x01265A8, 0x018FCEF,
0x021124E, 0x0197C1E, 0x032F83C, 0x021124E, 0x01D4000, 0x02DDF1A,
0x031EED1, 0x016EF8D, 0x01D4000, 0x016FB49, 0x0144914, 0x02EAAB3,
@@ -566,9 +612,8 @@ static const int32_t qmat25[MAT_SIZE] = {
0x09BBA32, 0x11F99EF, 0x0E8943B, 0x07AEC54, 0x0744A1D, 0x047E67C,
0x03F022E, 0x05E3D00, 0x0BC7A00, 0x0FC08BA, 0x0CBDFF1, 0x09052B9,
0x032F7FC, 0x04DF15A, 0x09BE2B4, 0x05443EE,
-};
-
-static const int32_t qmat26[MAT_SIZE] = {
+},
+[QMAT26] = {
0x0040000, 0x01BBDA5, 0x00DDED2, 0x01BC3B4, 0x01470F4, 0x01BC3B4,
0x01A750B, 0x014634B, 0x028C697, 0x01A750B, 0x0168000, 0x024B27B,
0x0288B36, 0x012593E, 0x0168000, 0x012A906, 0x010789A, 0x0247D0B,
@@ -580,9 +625,8 @@ static const int32_t qmat26[MAT_SIZE] = {
0x05683E3, 0x04F7BD5, 0x040F18B, 0x021F3D1, 0x02078C6, 0x013DEF5,
0x022D511, 0x03416BE, 0x0682D7D, 0x08B5446, 0x070B8CA, 0x04FD03B,
0x01C2E32, 0x02B4D32, 0x0569A64, 0x02ED068,
-};
-
-static const int32_t qmat27[MAT_SIZE] = {
+},
+[QMAT27] = {
0x0040000, 0x01BBDA5, 0x00DDED2, 0x01BC3B4, 0x01470F4, 0x01BC3B4,
0x024BF01, 0x01C5105, 0x038A20A, 0x024BF01, 0x0208000, 0x032F7E4,
0x0377B21, 0x0197BF2, 0x0208000, 0x01988FB, 0x0168A16, 0x033DA1D,
@@ -594,9 +638,8 @@ static const int32_t qmat27[MAT_SIZE] = {
0x0AD07C5, 0x13F8E97, 0x1026BD0, 0x08894CF, 0x08135E8, 0x04FE3A6,
0x046026C, 0x068B58E, 0x0D16B1D, 0x11809B2, 0x0E2870C, 0x0A05BEA,
0x038A1C3, 0x0569A64, 0x0AD34C8, 0x05DA0D0,
-};
-
-static const int32_t qmat28[MAT_SIZE] = {
+},
+[QMAT28] = {
0x0040000, 0x01E83CF, 0x00F41E7, 0x01E8A79, 0x0167C3F, 0x01E8A79,
0x01D1A59, 0x0166D39, 0x02CDA72, 0x01D1A59, 0x018C000, 0x0285DEE,
0x02C9921, 0x0142EF7, 0x018C000, 0x01486BA, 0x0121E43, 0x0282325,
@@ -608,9 +651,8 @@ static const int32_t qmat28[MAT_SIZE] = {
0x05F2AAD, 0x0576E9E, 0x0477019, 0x0255900, 0x023B80D, 0x015DBA7,
0x02650C6, 0x0394C38, 0x0729870, 0x0994319, 0x07BFE78, 0x057CB74,
0x01EFF9E, 0x02FA1B7, 0x05F436E, 0x0337ED9,
-};
-
-static const int32_t qmat29[MAT_SIZE] = {
+},
+[QMAT29] = {
0x0040000, 0x01E83CF, 0x00F41E7, 0x01E8A79, 0x0167C3F, 0x01E8A79,
0x0286BB5, 0x01F25EC, 0x03E4BD8, 0x0286BB5, 0x023C000, 0x03810AE,
0x03D0771, 0x01C0857, 0x023C000, 0x01C16AE, 0x018CB18, 0x0390986,
@@ -622,9 +664,8 @@ static const int32_t qmat29[MAT_SIZE] = {
0x0BE5559, 0x15F8340, 0x11C4364, 0x0963D4B, 0x08E21B2, 0x057E0D0,
0x04D02AB, 0x0732E1D, 0x0E65C39, 0x1340AAA, 0x0F92E27, 0x0B0651B,
0x03E4B8A, 0x05F436E, 0x0BE86DC, 0x066FDB2,
-};
-
-static const int32_t qmat2A[MAT_SIZE] = {
+},
+[QMAT2A] = {
0x0040000, 0x02149F9, 0x010A4FD, 0x021513E, 0x018878B, 0x021513E,
0x01FBFA7, 0x0187727, 0x030EE4E, 0x01FBFA7, 0x01B0000, 0x02C0961,
0x030A70D, 0x01604B0, 0x01B0000, 0x016646E, 0x013C3EC, 0x02BC940,
@@ -636,9 +677,8 @@ static const int32_t qmat2A[MAT_SIZE] = {
0x067D176, 0x05F6166, 0x04DEEA7, 0x028BE2E, 0x026F754, 0x017D85A,
0x029CC7B, 0x03E81B1, 0x07D0363, 0x0A731ED, 0x0874425, 0x05FC6AD,
0x021D109, 0x033F63C, 0x067EC78, 0x0382D4A,
-};
-
-static const int32_t qmat2B[MAT_SIZE] = {
+},
+[QMAT2B] = {
0x0040000, 0x02149F9, 0x010A4FD, 0x021513E, 0x018878B, 0x021513E,
0x02C1868, 0x021FAD3, 0x043F5A6, 0x02C1868, 0x0270000, 0x03D2978,
0x04293C1, 0x01E94BC, 0x0270000, 0x01EA461, 0x01B0C1A, 0x03E38EF,
@@ -650,9 +690,8 @@ static const int32_t qmat2B[MAT_SIZE] = {
0x0CFA2ED, 0x17F77E9, 0x1361AF9, 0x0A3E5C6, 0x09B0D7D, 0x05FDDFA,
0x05402E9, 0x07DA6AB, 0x0FB4D56, 0x1500BA2, 0x10FD541, 0x0C06E4C,
0x043F550, 0x067EC78, 0x0CFD8F0, 0x0705A93,
-};
-
-static const int32_t qmat2C[MAT_SIZE] = {
+},
+[QMAT2C] = {
0x0040000, 0x0241023, 0x0120812, 0x0241803, 0x01A92D7, 0x0241803,
0x02264F5, 0x01A8115, 0x035022A, 0x02264F5, 0x01D4000, 0x02FB4D3,
0x034B4F9, 0x017DA6A, 0x01D4000, 0x0184222, 0x0156995, 0x02F6F5B,
@@ -664,9 +703,8 @@ static const int32_t qmat2C[MAT_SIZE] = {
0x0707840, 0x067542F, 0x0546D35, 0x02C235D, 0x02A369B, 0x019D50C,
0x02D4830, 0x043B72B, 0x0876E56, 0x0B520C1, 0x09289D3, 0x067C1E6,
0x024A275, 0x0384AC1, 0x0709582, 0x03CDBBA,
-};
-
-static const int32_t qmat2D[MAT_SIZE] = {
+},
+[QMAT2D] = {
0x0040000, 0x0241023, 0x0120812, 0x0241803, 0x01A92D7, 0x0241803,
0x02FC51B, 0x024CFBA, 0x0499F73, 0x02FC51B, 0x02A4000, 0x0424242,
0x0482011, 0x0212121, 0x02A4000, 0x0213214, 0x01D4D1D, 0x0436858,
@@ -678,9 +716,8 @@ static const int32_t qmat2D[MAT_SIZE] = {
0x0E0F081, 0x19F6C92, 0x14FF28E, 0x0B18E41, 0x0A7F947, 0x067DB24,
0x05B0327, 0x0881F39, 0x1103E72, 0x16C0C9A, 0x1267C5C, 0x0D0777D,
0x0499F17, 0x0709582, 0x0E12B04, 0x079B775,
-};
-
-static const int32_t qmat2E[MAT_SIZE] = {
+},
+[QMAT2E] = {
0x0040000, 0x026D64D, 0x0136B27, 0x026DEC9, 0x01C9E22, 0x026DEC9,
0x0250A43, 0x01C8B03, 0x0391606, 0x0250A43, 0x01F8000, 0x0336046,
0x038C2E5, 0x019B023, 0x01F8000, 0x01A1FD6, 0x0170F3E, 0x0331575,
@@ -692,9 +729,8 @@ static const int32_t qmat2E[MAT_SIZE] = {
0x0791F0A, 0x06F46F7, 0x05AEBC3, 0x02F888B, 0x02D75E2, 0x01BD1BE,
0x030C3E5, 0x048ECA4, 0x091D948, 0x0C30F95, 0x09DCF81, 0x06FBD20,
0x02773E0, 0x03C9F46, 0x0793E8C, 0x0418A2B,
-};
-
-static const int32_t qmat2F[MAT_SIZE] = {
+},
+[QMAT2F] = {
0x0040000, 0x026D64D, 0x0136B27, 0x026DEC9, 0x01C9E22, 0x026DEC9,
0x03371CF, 0x027A4A1, 0x04F4941, 0x03371CF, 0x02D8000, 0x0475B0C,
0x04DAC61, 0x023AD86, 0x02D8000, 0x023BFC6, 0x01F8E1F, 0x04897C2,
@@ -706,9 +742,8 @@ static const int32_t qmat2F[MAT_SIZE] = {
0x0F23E14, 0x1BF613A, 0x169CA23, 0x0BF36BC, 0x0B4E511, 0x06FD84F,
0x0620365, 0x09297C7, 0x1252F8F, 0x1880D93, 0x13D2377, 0x0E080AE,
0x04F48DE, 0x0793E8C, 0x0F27D18, 0x0831457,
-};
-
-static const int32_t qmat30[MAT_SIZE] = {
+},
+[QMAT30] = {
0x0040000, 0x02C62A1, 0x0163151, 0x02C6C53, 0x020B4B9, 0x02C6C53,
0x02A54DF, 0x0209EDF, 0x0413DBE, 0x02A54DF, 0x0240000, 0x03AB72B,
0x040DEBC, 0x01D5B96, 0x0240000, 0x01DDB3E, 0x01A5A90, 0x03A61AB,
@@ -720,9 +755,8 @@ static const int32_t qmat30[MAT_SIZE] = {
0x08A6C9E, 0x07F2C88, 0x067E8DF, 0x03652E8, 0x033F46F, 0x01FCB22,
0x037BB4F, 0x0535797, 0x0A6AF2E, 0x0DEED3C, 0x0B45ADD, 0x07FB392,
0x02D16B7, 0x0454850, 0x08A90A0, 0x04AE70D,
-};
-
-static const int32_t qmat31[MAT_SIZE] = {
+},
+[QMAT31] = {
0x0040000, 0x02C62A1, 0x0163151, 0x02C6C53, 0x020B4B9, 0x02C6C53,
0x03ACB35, 0x02D4E6E, 0x05A9CDD, 0x03ACB35, 0x0340000, 0x0518CA0,
0x058C501, 0x028C650, 0x0340000, 0x028DB2C, 0x0241023, 0x052F694,
@@ -734,9 +768,8 @@ static const int32_t qmat31[MAT_SIZE] = {
0x114D93C, 0x1FF4A8C, 0x19D794C, 0x0DA87B2, 0x0CEBCA6, 0x07FD2A3,
0x07003E1, 0x0A788E4, 0x14F11C8, 0x1C00F83, 0x16A71AD, 0x1009310,
0x05A9C6B, 0x08A90A0, 0x1152140, 0x095CE1A,
-};
-
-static const int32_t qmat32[MAT_SIZE] = {
+},
+[QMAT32] = {
0x0040000, 0x031EEF6, 0x018F77B, 0x031F9DD, 0x024CB50, 0x031F9DD,
0x02F9F7A, 0x024B2BB, 0x0496575, 0x02F9F7A, 0x0288000, 0x0420E11,
0x048FA94, 0x0210708, 0x0288000, 0x02196A5, 0x01DA5E2, 0x041ADE0,
@@ -748,9 +781,8 @@ static const int32_t qmat32[MAT_SIZE] = {
0x09BBA32, 0x08F1219, 0x074E5FB, 0x03D1D45, 0x03A72FD, 0x023C486,
0x03EB2B9, 0x05DC28A, 0x0BB8514, 0x0FACAE4, 0x0CAE638, 0x08FAA04,
0x032B98E, 0x04DF15A, 0x09BE2B4, 0x05443EE,
-};
-
-static const int32_t qmat33[MAT_SIZE] = {
+},
+[QMAT33] = {
0x0040000, 0x031EEF6, 0x018F77B, 0x031F9DD, 0x024CB50, 0x031F9DD,
0x042249C, 0x032F83C, 0x065F078, 0x042249C, 0x03A8000, 0x05BBE34,
0x063DDA2, 0x02DDF1A, 0x03A8000, 0x02DF691, 0x0289228, 0x05D5567,
@@ -762,9 +794,8 @@ static const int32_t qmat33[MAT_SIZE] = {
0x1377463, 0x23F33DD, 0x1D12876, 0x0F5D8A9, 0x0E8943B, 0x08FCCF7,
0x07E045D, 0x0BC7A00, 0x178F401, 0x1F81173, 0x197BFE2, 0x120A572,
0x065EFF9, 0x09BE2B4, 0x137C568, 0x0A887DD,
-};
-
-static const int32_t qmat34[MAT_SIZE] = {
+},
+[QMAT34] = {
0x0040000, 0x0377B4A, 0x01BBDA5, 0x0378768, 0x028E1E8, 0x0378768,
0x034EA16, 0x028C697, 0x0518D2D, 0x034EA16, 0x02D0000, 0x04964F6,
0x051166B, 0x024B27B, 0x02D0000, 0x025520D, 0x020F134, 0x048FA15,
@@ -776,9 +807,8 @@ static const int32_t qmat34[MAT_SIZE] = {
0x0AD07C5, 0x09EF7AA, 0x081E317, 0x043E7A2, 0x040F18B, 0x027BDEB,
0x045AA23, 0x0682D7D, 0x0D05AFA, 0x116A88B, 0x0E17194, 0x09FA076,
0x0385C65, 0x0569A64, 0x0AD34C8, 0x05DA0D0,
-};
-
-static const int32_t qmat35[MAT_SIZE] = {
+},
+[QMAT35] = {
0x0040000, 0x0377B4A, 0x01BBDA5, 0x0378768, 0x028E1E8, 0x0378768,
0x0497E02, 0x038A20A, 0x0714414, 0x0497E02, 0x0410000, 0x065EFC8,
0x06EF642, 0x032F7E4, 0x0410000, 0x03311F7, 0x02D142C, 0x067B439,
@@ -790,9 +820,8 @@ static const int32_t qmat35[MAT_SIZE] = {
0x15A0F8B, 0x27F1D2F, 0x204D79F, 0x111299F, 0x1026BD0, 0x09FC74C,
0x08C04D9, 0x0D16B1D, 0x1A2D63A, 0x2301364, 0x1C50E18, 0x140B7D4,
0x0714386, 0x0AD34C8, 0x15A6990, 0x0BB41A0,
-};
-
-static const int32_t qmat36[MAT_SIZE] = {
+},
+[QMAT36] = {
0x0040000, 0x03D079E, 0x01E83CF, 0x03D14F2, 0x02CF87F, 0x03D14F2,
0x03A34B2, 0x02CDA72, 0x059B4E5, 0x03A34B2, 0x0318000, 0x050BBDC,
0x0593243, 0x0285DEE, 0x0318000, 0x0290D75, 0x0243C86, 0x050464B,
@@ -804,9 +833,8 @@ static const int32_t qmat36[MAT_SIZE] = {
0x0BE5559, 0x0AEDD3B, 0x08EE032, 0x04AB1FF, 0x0477019, 0x02BB74F,
0x04CA18D, 0x0729870, 0x0E530E0, 0x1328633, 0x0F7FCEF, 0x0AF96E8,
0x03DFF3C, 0x05F436E, 0x0BE86DC, 0x066FDB2,
-};
-
-static const int32_t qmat37[MAT_SIZE] = {
+},
+[QMAT37] = {
0x0040000, 0x03D079E, 0x01E83CF, 0x03D14F2, 0x02CF87F, 0x03D14F2,
0x050D769, 0x03E4BD8, 0x07C97B0, 0x050D769, 0x0478000, 0x070215C,
0x07A0EE2, 0x03810AE, 0x0478000, 0x0382D5C, 0x0319630, 0x072130C,
@@ -818,9 +846,8 @@ static const int32_t qmat37[MAT_SIZE] = {
0x17CAAB2, 0x2BF0680, 0x23886C9, 0x12C7A95, 0x11C4364, 0x0AFC1A0,
0x09A0555, 0x0E65C39, 0x1CCB873, 0x2681554, 0x1F25C4D, 0x160CA36,
0x07C9713, 0x0BE86DC, 0x17D0DB8, 0x0CDFB63,
-};
-
-static const int32_t qmat38[MAT_SIZE] = {
+},
+[QMAT38] = {
0x0040000, 0x04293F2, 0x02149F9, 0x042A27C, 0x0310F16, 0x042A27C,
0x03F7F4E, 0x030EE4E, 0x061DC9D, 0x03F7F4E, 0x0360000, 0x05812C1,
0x0614E1A, 0x02C0961, 0x0360000, 0x02CC8DC, 0x02787D8, 0x0579280,
@@ -832,9 +859,8 @@ static const int32_t qmat38[MAT_SIZE] = {
0x0CFA2ED, 0x0BEC2CC, 0x09BDD4E, 0x0517C5D, 0x04DEEA7, 0x02FB0B3,
0x05398F7, 0x07D0363, 0x0FA06C5, 0x14E63DA, 0x10E884B, 0x0BF8D5B,
0x043A213, 0x067EC78, 0x0CFD8F0, 0x0705A93,
-};
-
-static const int32_t qmat39[MAT_SIZE] = {
+},
+[QMAT39] = {
0x0040000, 0x04293F2, 0x02149F9, 0x042A27C, 0x0310F16, 0x042A27C,
0x05830D0, 0x043F5A6, 0x087EB4B, 0x05830D0, 0x04E0000, 0x07A52F0,
0x0852782, 0x03D2978, 0x04E0000, 0x03D48C2, 0x0361835, 0x07C71DE,
@@ -846,9 +872,8 @@ static const int32_t qmat39[MAT_SIZE] = {
0x19F45DA, 0x2FEEFD2, 0x26C35F2, 0x147CB8C, 0x1361AF9, 0x0BFBBF4,
0x0A805D1, 0x0FB4D56, 0x1F69AAC, 0x2A01744, 0x21FAA83, 0x180DC98,
0x087EAA1, 0x0CFD8F0, 0x19FB1E0, 0x0E0B527,
-};
-
-static const int32_t qmat3A[MAT_SIZE] = {
+},
+[QMAT3A] = {
0x0040000, 0x0482046, 0x0241023, 0x0483007, 0x03525AD, 0x0483007,
0x044C9EA, 0x035022A, 0x06A0454, 0x044C9EA, 0x03A8000, 0x05F69A7,
0x06969F2, 0x02FB4D3, 0x03A8000, 0x0308444, 0x02AD32A, 0x05EDEB5,
@@ -860,9 +885,8 @@ static const int32_t qmat3A[MAT_SIZE] = {
0x0E0F081, 0x0CEA85D, 0x0A8DA6A, 0x05846BA, 0x0546D35, 0x033AA17,
0x05A9060, 0x0876E56, 0x10EDCAB, 0x16A4182, 0x12513A7, 0x0CF83CD,
0x04944EA, 0x0709582, 0x0E12B04, 0x079B775,
-};
-
-static const int32_t qmat3B[MAT_SIZE] = {
+},
+[QMAT3B] = {
0x0040000, 0x0482046, 0x0241023, 0x0483007, 0x03525AD, 0x0483007,
0x05F8A36, 0x0499F73, 0x0933EE7, 0x05F8A36, 0x0548000, 0x0848484,
0x0904022, 0x0424242, 0x0548000, 0x0426427, 0x03A9A39, 0x086D0B1,
@@ -874,9 +898,8 @@ static const int32_t qmat3B[MAT_SIZE] = {
0x1C1E101, 0x33ED923, 0x29FE51C, 0x1631C82, 0x14FF28E, 0x0CFB649,
0x0B6064D, 0x1103E72, 0x2207CE5, 0x2D81935, 0x24CF8B9, 0x1A0EEFA,
0x0933E2E, 0x0E12B04, 0x1C25608, 0x0F36EEA,
-};
-
-static const int32_t qmat3C[MAT_SIZE] = {
+},
+[QMAT3C] = {
0x0040000, 0x04DAC9A, 0x026D64D, 0x04DBD91, 0x0393C44, 0x04DBD91,
0x04A1486, 0x0391606, 0x0722C0C, 0x04A1486, 0x03F0000, 0x066C08C,
0x07185C9, 0x0336046, 0x03F0000, 0x0343FAC, 0x02E1E7C, 0x0662AEB,
@@ -888,9 +911,8 @@ static const int32_t qmat3C[MAT_SIZE] = {
0x0F23E14, 0x0DE8DEE, 0x0B5D786, 0x05F1117, 0x05AEBC3, 0x037A37C,
0x06187CA, 0x091D948, 0x123B291, 0x1861F29, 0x13B9F02, 0x0DF7A3F,
0x04EE7C1, 0x0793E8C, 0x0F27D18, 0x0831457,
-};
-
-static const int32_t qmat3D[MAT_SIZE] = {
+},
+[QMAT3D] = {
0x0040000, 0x04DAC9A, 0x026D64D, 0x04DBD91, 0x0393C44, 0x04DBD91,
0x066E39D, 0x04F4941, 0x09E9282, 0x066E39D, 0x05B0000, 0x08EB618,
0x09B58C2, 0x0475B0C, 0x05B0000, 0x0477F8D, 0x03F1C3D, 0x0912F83,
@@ -902,9 +924,8 @@ static const int32_t qmat3D[MAT_SIZE] = {
0x1E47C29, 0x37EC275, 0x2D39446, 0x17E6D78, 0x169CA23, 0x0DFB09D,
0x0C406C9, 0x1252F8F, 0x24A5F1E, 0x3101B25, 0x27A46EE, 0x1C1015C,
0x09E91BC, 0x0F27D18, 0x1E4FA30, 0x10628AD,
-};
-
-static const int32_t qmat3E[MAT_SIZE] = {
+},
+[QMAT3E] = {
0x0040000, 0x058C543, 0x02C62A1, 0x058D8A6, 0x0416973, 0x058D8A6,
0x054A9BD, 0x0413DBE, 0x0827B7B, 0x054A9BD, 0x0480000, 0x0756E57,
0x081BD78, 0x03AB72B, 0x0480000, 0x03BB67B, 0x034B520, 0x074C355,
@@ -916,9 +937,8 @@ static const int32_t qmat3E[MAT_SIZE] = {
0x114D93C, 0x0FE5910, 0x0CFD1BE, 0x06CA5D1, 0x067E8DF, 0x03F9644,
0x06F769E, 0x0A6AF2E, 0x14D5E5C, 0x1BDDA78, 0x168B5B9, 0x0FF6724,
0x05A2D6E, 0x08A90A0, 0x1152140, 0x095CE1A,
-};
-
-static const int32_t qmat3F[MAT_SIZE] = {
+},
+[QMAT3F] = {
0x0040000, 0x058C543, 0x02C62A1, 0x058D8A6, 0x0416973, 0x058D8A6,
0x075966A, 0x05A9CDD, 0x0B539BA, 0x075966A, 0x0680000, 0x0A31940,
0x0B18A03, 0x0518CA0, 0x0680000, 0x051B658, 0x0482046, 0x0A5ED28,
@@ -930,9 +950,8 @@ static const int32_t qmat3F[MAT_SIZE] = {
0x229B278, 0x3FE9518, 0x33AF299, 0x1B50F65, 0x19D794C, 0x0FFA546,
0x0E007C1, 0x14F11C8, 0x29E2390, 0x3801F06, 0x2D4E359, 0x2012620,
0x0B538D6, 0x1152140, 0x22A4280, 0x12B9C33,
-};
-
-static const int32_t qmat40[MAT_SIZE] = {
+},
+[QMAT40] = {
0x0040000, 0x063DDEB, 0x031EEF6, 0x063F3BB, 0x04996A1, 0x063F3BB,
0x05F3EF5, 0x0496575, 0x092CAEB, 0x05F3EF5, 0x0510000, 0x0841C22,
0x091F527, 0x0420E11, 0x0510000, 0x0432D4B, 0x03B4BC4, 0x0835BC0,
@@ -944,9 +963,8 @@ static const int32_t qmat40[MAT_SIZE] = {
0x1377463, 0x11E2432, 0x0E9CBF6, 0x07A3A8B, 0x074E5FB, 0x047890D,
0x07D6572, 0x0BB8514, 0x1770A28, 0x1F595C7, 0x195CC70, 0x11F5408,
0x065731C, 0x09BE2B4, 0x137C568, 0x0A887DD,
-};
-
-static const int32_t qmat41[MAT_SIZE] = {
+},
+[QMAT41] = {
0x0040000, 0x063DDEB, 0x031EEF6, 0x063F3BB, 0x04996A1, 0x063F3BB,
0x0844938, 0x065F078, 0x0CBE0F1, 0x0844938, 0x0750000, 0x0B77C68,
0x0C7BB43, 0x05BBE34, 0x0750000, 0x05BED23, 0x051244F, 0x0BAAACD,
@@ -958,9 +976,8 @@ static const int32_t qmat41[MAT_SIZE] = {
0x26EE8C7, 0x47E67BB, 0x3A250EC, 0x1EBB151, 0x1D12876, 0x11F99EF,
0x0FC08BA, 0x178F401, 0x2F1E802, 0x3F022E7, 0x32F7FC4, 0x2414AE4,
0x0CBDFF1, 0x137C568, 0x26F8AD0, 0x1510FBA,
-};
-
-static const int32_t qmat42[MAT_SIZE] = {
+},
+[QMAT42] = {
0x0040000, 0x06EF693, 0x0377B4A, 0x06F0ECF, 0x051C3CF, 0x06F0ECF,
0x069D42D, 0x0518D2D, 0x0A31A5A, 0x069D42D, 0x05A0000, 0x092C9ED,
0x0A22CD6, 0x04964F6, 0x05A0000, 0x04AA41A, 0x041E268, 0x091F42B,
@@ -972,9 +989,8 @@ static const int32_t qmat42[MAT_SIZE] = {
0x15A0F8B, 0x13DEF54, 0x103C62D, 0x087CF45, 0x081E317, 0x04F7BD5,
0x08B5446, 0x0D05AFA, 0x1A0B5F3, 0x22D5116, 0x1C2E328, 0x13F40EC,
0x070B8CA, 0x0AD34C8, 0x15A6990, 0x0BB41A0,
-};
-
-static const int32_t qmat43[MAT_SIZE] = {
+},
+[QMAT43] = {
0x0040000, 0x06EF693, 0x0377B4A, 0x06F0ECF, 0x051C3CF, 0x06F0ECF,
0x092FC05, 0x0714414, 0x0E28828, 0x092FC05, 0x0820000, 0x0CBDF90,
0x0DDEC84, 0x065EFC8, 0x0820000, 0x06623EE, 0x05A2858, 0x0CF6872,
@@ -986,9 +1002,8 @@ static const int32_t qmat43[MAT_SIZE] = {
0x2B41F16, 0x4FE3A5E, 0x409AF3F, 0x222533E, 0x204D79F, 0x13F8E97,
0x11809B2, 0x1A2D63A, 0x345AC74, 0x46026C7, 0x38A1C30, 0x2816FA7,
0x0E2870C, 0x15A6990, 0x2B4D320, 0x1768340,
-};
-
-static const int32_t qmat44[MAT_SIZE] = {
+},
+[QMAT44] = {
0x0040000, 0x07A0F3C, 0x03D079E, 0x07A29E4, 0x059F0FE, 0x07A29E4,
0x0746964, 0x059B4E5, 0x0B369CA, 0x0746964, 0x0630000, 0x0A177B8,
0x0B26485, 0x050BBDC, 0x0630000, 0x0521AE9, 0x048790C, 0x0A08C95,
@@ -1000,9 +1015,8 @@ static const int32_t qmat44[MAT_SIZE] = {
0x17CAAB2, 0x15DBA76, 0x11DC065, 0x09563FF, 0x08EE032, 0x0576E9E,
0x0994319, 0x0E530E0, 0x1CA61BF, 0x2650C65, 0x1EFF9DF, 0x15F2DD1,
0x07BFE78, 0x0BE86DC, 0x17D0DB8, 0x0CDFB63,
-};
-
-static const int32_t qmat45[MAT_SIZE] = {
+},
+[QMAT45] = {
0x0040000, 0x07A0F3C, 0x03D079E, 0x07A29E4, 0x059F0FE, 0x07A29E4,
0x0A1AED2, 0x07C97B0, 0x0F92F5F, 0x0A1AED2, 0x08F0000, 0x0E042B8,
0x0F41DC4, 0x070215C, 0x08F0000, 0x0705AB9, 0x0632C61, 0x0E42617,
@@ -1014,9 +1028,8 @@ static const int32_t qmat45[MAT_SIZE] = {
0x2F95565, 0x57E0D01, 0x4710D92, 0x258F52A, 0x23886C9, 0x15F8340,
0x1340AAA, 0x1CCB873, 0x39970E6, 0x4D02AA8, 0x3E4B89B, 0x2C1946B,
0x0F92E27, 0x17D0DB8, 0x2FA1B6F, 0x19BF6C7,
-};
-
-static const int32_t qmat46[MAT_SIZE] = {
+},
+[QMAT46] = {
0x0040000, 0x08527E4, 0x04293F2, 0x08544F9, 0x0621E2C, 0x08544F9,
0x07EFE9C, 0x061DC9D, 0x0C3B939, 0x07EFE9C, 0x06C0000, 0x0B02582,
0x0C29C34, 0x05812C1, 0x06C0000, 0x05991B9, 0x04F0FAF, 0x0AF2500,
@@ -1028,9 +1041,8 @@ static const int32_t qmat46[MAT_SIZE] = {
0x19F45DA, 0x17D8598, 0x137BA9D, 0x0A2F8B9, 0x09BDD4E, 0x05F6166,
0x0A731ED, 0x0FA06C5, 0x1F40D8B, 0x29CC7B4, 0x21D1096, 0x17F1AB5,
0x0874425, 0x0CFD8F0, 0x19FB1E0, 0x0E0B527,
-};
-
-static const int32_t qmat47[MAT_SIZE] = {
+},
+[QMAT47] = {
0x0040000, 0x08527E4, 0x04293F2, 0x08544F9, 0x0621E2C, 0x08544F9,
0x0B061A0, 0x087EB4B, 0x10FD696, 0x0B061A0, 0x09C0000, 0x0F4A5E0,
0x10A4F04, 0x07A52F0, 0x09C0000, 0x07A9184, 0x06C3069, 0x0F8E3BC,
@@ -1042,9 +1054,8 @@ static const int32_t qmat47[MAT_SIZE] = {
0x33E8BB4, 0x5FDDFA4, 0x4D86BE5, 0x28F9717, 0x26C35F2, 0x17F77E9,
0x1500BA2, 0x1F69AAC, 0x3ED3558, 0x5402E89, 0x43F5506, 0x301B92F,
0x10FD541, 0x19FB1E0, 0x33F63BF, 0x1C16A4D,
-};
-
-static const int32_t qmat48[MAT_SIZE] = {
+},
+[QMAT48] = {
0x0040000, 0x090408D, 0x0482046, 0x090600E, 0x06A4B5A, 0x090600E,
0x08993D3, 0x06A0454, 0x0D408A9, 0x08993D3, 0x0750000, 0x0BED34D,
0x0D2D3E3, 0x05F69A7, 0x0750000, 0x0610888, 0x055A653, 0x0BDBD6A,
@@ -1056,9 +1067,8 @@ static const int32_t qmat48[MAT_SIZE] = {
0x1C1E101, 0x19D50BB, 0x151B4D4, 0x0B08D73, 0x0A8DA6A, 0x067542F,
0x0B520C1, 0x10EDCAB, 0x21DB956, 0x2D48303, 0x24A274D, 0x19F079A,
0x09289D3, 0x0E12B04, 0x1C25608, 0x0F36EEA,
-};
-
-static const int32_t qmat49[MAT_SIZE] = {
+},
+[QMAT49] = {
0x0040000, 0x090408D, 0x0482046, 0x090600E, 0x06A4B5A, 0x090600E,
0x0BF146D, 0x0933EE7, 0x1267DCE, 0x0BF146D, 0x0A90000, 0x1090908,
0x1208045, 0x0848484, 0x0A90000, 0x084C84F, 0x0753472, 0x10DA161,
@@ -1070,9 +1080,8 @@ static const int32_t qmat49[MAT_SIZE] = {
0x383C203, 0x67DB247, 0x53FCA38, 0x2C63904, 0x29FE51C, 0x19F6C92,
0x16C0C9A, 0x2207CE5, 0x440F9CA, 0x5B0326A, 0x499F171, 0x341DDF3,
0x1267C5C, 0x1C25608, 0x384AC0F, 0x1E6DDD4,
-};
-
-static const int32_t qmat4A[MAT_SIZE] = {
+},
+[QMAT4A] = {
0x0040000, 0x09B5935, 0x04DAC9A, 0x09B7B22, 0x0727888, 0x09B7B22,
0x094290B, 0x0722C0C, 0x0E45818, 0x094290B, 0x07E0000, 0x0CD8118,
0x0E30B92, 0x066C08C, 0x07E0000, 0x0687F58, 0x05C3CF7, 0x0CC55D5,
@@ -1084,9 +1093,8 @@ static const int32_t qmat4A[MAT_SIZE] = {
0x1E47C29, 0x1BD1BDD, 0x16BAF0C, 0x0BE222D, 0x0B5D786, 0x06F46F7,
0x0C30F95, 0x123B291, 0x2476522, 0x30C3E52, 0x2773E04, 0x1BEF47E,
0x09DCF81, 0x0F27D18, 0x1E4FA30, 0x10628AD,
-};
-
-static const int32_t qmat4B[MAT_SIZE] = {
+},
+[QMAT4B] = {
0x0040000, 0x09B5935, 0x04DAC9A, 0x09B7B22, 0x0727888, 0x09B7B22,
0x0CDC73A, 0x09E9282, 0x13D2505, 0x0CDC73A, 0x0B60000, 0x11D6C30,
0x136B185, 0x08EB618, 0x0B60000, 0x08EFF19, 0x07E387B, 0x1225F06,
@@ -1098,9 +1106,8 @@ static const int32_t qmat4B[MAT_SIZE] = {
0x3C8F852, 0x6FD84EA, 0x5A7288B, 0x2FCDAF0, 0x2D39446, 0x1BF613A,
0x1880D93, 0x24A5F1E, 0x494BE3C, 0x620364A, 0x4F48DDC, 0x38202B7,
0x13D2377, 0x1E4FA30, 0x3C9F45F, 0x20C515A,
-};
-
-static const int32_t qmat4C[MAT_SIZE] = {
+},
+[QMAT4C] = {
0x0040000, 0x1208119, 0x090408D, 0x120C01B, 0x0D496B4, 0x120C01B,
0x11327A7, 0x0D408A9, 0x1A81151, 0x11327A7, 0x0EA0000, 0x17DA69B,
0x1A5A7C7, 0x0BED34D, 0x0EA0000, 0x0C21110, 0x0AB4CA7, 0x17B7AD5,
@@ -1112,9 +1119,8 @@ static const int32_t qmat4C[MAT_SIZE] = {
0x383C203, 0x33AA175, 0x2A369A9, 0x1611AE6, 0x151B4D4, 0x0CEA85D,
0x16A4182, 0x21DB956, 0x43B72AC, 0x5A90607, 0x4944E9A, 0x33E0F34,
0x12513A7, 0x1C25608, 0x384AC0F, 0x1E6DDD4,
-};
-
-static const int32_t qmat4D[MAT_SIZE] = {
+},
+[QMAT4D] = {
0x0040000, 0x1208119, 0x090408D, 0x120C01B, 0x0D496B4, 0x120C01B,
0x17E28DA, 0x1267DCE, 0x24CFB9B, 0x17E28DA, 0x1520000, 0x2121210,
0x2410089, 0x1090908, 0x1520000, 0x109909D, 0x0EA68E4, 0x21B42C3,
@@ -1126,25 +1132,27 @@ static const int32_t qmat4D[MAT_SIZE] = {
0x7078406, 0xCFB648E, 0xA7F9470, 0x58C7207, 0x53FCA38, 0x33ED923,
0x2D81935, 0x440F9CA, 0x881F394, 0xB6064D3, 0x933E2E2, 0x683BBE7,
0x24CF8B9, 0x384AC0F, 0x709581F, 0x3CDBBA7,
+},
};
-static const int32_t *const hq_quants[NUM_HQ_QUANTS][2][4] = {
- { { qmat00, qmat02, qmat06, qmat0E }, { qmat01, qmat03, qmat07, qmat0F } },
- { { qmat02, qmat06, qmat0E, qmat16 }, { qmat03, qmat07, qmat0F, qmat17 } },
- { { qmat04, qmat0A, qmat12, qmat1E }, { qmat05, qmat0B, qmat13, qmat1F } },
- { { qmat06, qmat0E, qmat16, qmat22 }, { qmat07, qmat0F, qmat17, qmat23 } },
- { { qmat08, qmat10, qmat1A, qmat26 }, { qmat09, qmat11, qmat1B, qmat27 } },
- { { qmat0A, qmat12, qmat1E, qmat2A }, { qmat0B, qmat13, qmat1F, qmat2B } },
- { { qmat0C, qmat14, qmat20, qmat2E }, { qmat0D, qmat15, qmat21, qmat2F } },
- { { qmat0E, qmat16, qmat22, qmat30 }, { qmat0F, qmat17, qmat23, qmat31 } },
- { { qmat16, qmat22, qmat30, qmat3E }, { qmat17, qmat23, qmat31, qmat3F } },
- { { qmat18, qmat24, qmat32, qmat40 }, { qmat19, qmat25, qmat33, qmat41 } },
- { { qmat1A, qmat26, qmat34, qmat42 }, { qmat1B, qmat27, qmat35, qmat43 } },
- { { qmat1C, qmat28, qmat36, qmat44 }, { qmat1D, qmat29, qmat37, qmat45 } },
- { { qmat1E, qmat2A, qmat38, qmat46 }, { qmat1F, qmat2B, qmat39, qmat47 } },
- { { qmat20, qmat2E, qmat3C, qmat4A }, { qmat21, qmat2F, qmat3D, qmat4B } },
- { { qmat2C, qmat3A, qmat48, qmat4C }, { qmat2D, qmat3B, qmat49, qmat4D } },
- { { qmat3A, qmat48, qmat4C, qmat4C }, { qmat3B, qmat49, qmat4D, qmat4D } },
+static const uint8_t hq_quant_map[NUM_HQ_QUANTS][2][4] =
+{
+ { { QMAT00, QMAT02, QMAT06, QMAT0E }, { QMAT01, QMAT03, QMAT07, QMAT0F } },
+ { { QMAT02, QMAT06, QMAT0E, QMAT16 }, { QMAT03, QMAT07, QMAT0F, QMAT17 } },
+ { { QMAT04, QMAT0A, QMAT12, QMAT1E }, { QMAT05, QMAT0B, QMAT13, QMAT1F } },
+ { { QMAT06, QMAT0E, QMAT16, QMAT22 }, { QMAT07, QMAT0F, QMAT17, QMAT23 } },
+ { { QMAT08, QMAT10, QMAT1A, QMAT26 }, { QMAT09, QMAT11, QMAT1B, QMAT27 } },
+ { { QMAT0A, QMAT12, QMAT1E, QMAT2A }, { QMAT0B, QMAT13, QMAT1F, QMAT2B } },
+ { { QMAT0C, QMAT14, QMAT20, QMAT2E }, { QMAT0D, QMAT15, QMAT21, QMAT2F } },
+ { { QMAT0E, QMAT16, QMAT22, QMAT30 }, { QMAT0F, QMAT17, QMAT23, QMAT31 } },
+ { { QMAT16, QMAT22, QMAT30, QMAT3E }, { QMAT17, QMAT23, QMAT31, QMAT3F } },
+ { { QMAT18, QMAT24, QMAT32, QMAT40 }, { QMAT19, QMAT25, QMAT33, QMAT41 } },
+ { { QMAT1A, QMAT26, QMAT34, QMAT42 }, { QMAT1B, QMAT27, QMAT35, QMAT43 } },
+ { { QMAT1C, QMAT28, QMAT36, QMAT44 }, { QMAT1D, QMAT29, QMAT37, QMAT45 } },
+ { { QMAT1E, QMAT2A, QMAT38, QMAT46 }, { QMAT1F, QMAT2B, QMAT39, QMAT47 } },
+ { { QMAT20, QMAT2E, QMAT3C, QMAT4A }, { QMAT21, QMAT2F, QMAT3D, QMAT4B } },
+ { { QMAT2C, QMAT3A, QMAT48, QMAT4C }, { QMAT2D, QMAT3B, QMAT49, QMAT4D } },
+ { { QMAT3A, QMAT48, QMAT4C, QMAT4C }, { QMAT3B, QMAT49, QMAT4D, QMAT4D } },
};
static const uint8_t hq_ac_bits[NUM_HQ_AC_ENTRIES] = {
--
2.45.2
[-- Attachment #6: 0005-avcodec-hq_hqa-Use-RL-VLC-table.patch --]
[-- Type: text/x-patch, Size: 3724 bytes --]
From 8155b53c3771dbd60dff8b5e1a2f3e8355c3294c Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Date: Wed, 9 Apr 2025 18:54:38 +0200
Subject: [PATCH 05/10] avcodec/hq_hqa: Use RL-VLC table
This moves indirections to init.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
libavcodec/hq_hqa.c | 39 +++++++++++++++++++++++++++++++--------
libavcodec/hq_hqadata.h | 2 ++
2 files changed, 33 insertions(+), 8 deletions(-)
diff --git a/libavcodec/hq_hqa.c b/libavcodec/hq_hqa.c
index b5bad01392..4f1e57279d 100644
--- a/libavcodec/hq_hqa.c
+++ b/libavcodec/hq_hqa.c
@@ -60,7 +60,7 @@ typedef struct HQContext {
static const int32_t *hq_quants[NUM_HQ_QUANTS][2][4];
-static VLCElem hq_ac_vlc[1184];
+static RL_VLC_ELEM hq_ac_rvlc[1184];
static inline void put_blocks(HQContext *c, AVFrame *pic,
int plane, int x, int y, int ilace,
@@ -78,7 +78,6 @@ static int hq_decode_block(HQContext *c, GetBitContext *gb, int16_t block[64],
int qsel, int is_chroma, int is_hqa)
{
const int32_t *q;
- int val, pos = 1;
if (!is_hqa) {
block[0] = get_sbits(gb, 9) * 64;
@@ -88,17 +87,23 @@ static int hq_decode_block(HQContext *c, GetBitContext *gb, int16_t block[64],
block[0] = get_sbits(gb, 9) * 64;
}
- for (;;) {
- val = get_vlc2(gb, hq_ac_vlc, 9, 2);
- if (val < 0)
+ OPEN_READER(re, gb);
+ for (int pos = 1;;) {
+ int level, run;
+ UPDATE_CACHE(re, gb);
+ GET_RL_VLC(level, run, re, gb, hq_ac_rvlc, 9, 2, 0);
+ if (run == HQ_AC_INVALID_RUN) {
+ CLOSE_READER(re, gb);
return AVERROR_INVALIDDATA;
+ }
- pos += hq_ac_skips[val];
+ pos += run;
if (pos >= 64)
break;
- block[ff_zigzag_direct[pos]] = (int)(hq_ac_syms[val] * (unsigned)q[pos]) >> 12;
+ block[ff_zigzag_direct[pos]] = (int)(level * (unsigned)q[pos]) >> 12;
pos++;
}
+ CLOSE_READER(re, gb);
return 0;
}
@@ -372,9 +377,27 @@ static int hq_hqa_decode_frame(AVCodecContext *avctx, AVFrame *pic,
static av_cold void hq_init_static(void)
{
- VLC_INIT_STATIC_TABLE(hq_ac_vlc, 9, NUM_HQ_AC_ENTRIES,
+ VLC_INIT_STATIC_TABLE(hq_ac_rvlc, 9, NUM_HQ_AC_ENTRIES,
hq_ac_bits, 1, 1, hq_ac_codes, 2, 2, 0);
+ for (size_t i = 0; i < FF_ARRAY_ELEMS(hq_ac_rvlc); ++i) {
+ int len = hq_ac_rvlc[i].len;
+ int sym = hq_ac_rvlc[i].sym, level = sym;
+ int run;
+
+ if (len > 0) {
+ level = hq_ac_syms[sym];
+ run = hq_ac_skips[sym];
+ } else if (len < 0) { // More bits needed
+ run = 0;
+ } else { // Invalid code
+ run = HQ_AC_INVALID_RUN;
+ }
+ hq_ac_rvlc[i].len8 = len;
+ hq_ac_rvlc[i].run = run;
+ hq_ac_rvlc[i].level = level;
+ }
+
for (size_t i = 0; i < FF_ARRAY_ELEMS(hq_quants); ++i) {
for (size_t j = 0; j < FF_ARRAY_ELEMS(hq_quants[0]); ++j) {
for (size_t k = 0; k < FF_ARRAY_ELEMS(hq_quants[0][0]); ++k)
diff --git a/libavcodec/hq_hqadata.h b/libavcodec/hq_hqadata.h
index 31f6dc88a4..8948c3a64a 100644
--- a/libavcodec/hq_hqadata.h
+++ b/libavcodec/hq_hqadata.h
@@ -1155,6 +1155,8 @@ static const uint8_t hq_quant_map[NUM_HQ_QUANTS][2][4] =
{ { QMAT3A, QMAT48, QMAT4C, QMAT4C }, { QMAT3B, QMAT49, QMAT4D, QMAT4D } },
};
+#define HQ_AC_INVALID_RUN 128
+
static const uint8_t hq_ac_bits[NUM_HQ_AC_ENTRIES] = {
3, 3, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6,
6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8,
--
2.45.2
[-- Attachment #7: 0006-avcodec-hq_hqa-Include-implicit-1-run-in-RL-VLC-tabl.patch --]
[-- Type: text/x-patch, Size: 1996 bytes --]
From beff76ed8d0fd4b2c5d42bc4bbd7367fc9f76c5e Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Date: Wed, 9 Apr 2025 19:01:18 +0200
Subject: [PATCH 06/10] avcodec/hq_hqa: Include implicit +1 run in RL VLC table
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
libavcodec/hq_hqa.c | 5 ++---
libavcodec/hq_hqadata.h | 2 +-
2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/libavcodec/hq_hqa.c b/libavcodec/hq_hqa.c
index 4f1e57279d..f67d6286b0 100644
--- a/libavcodec/hq_hqa.c
+++ b/libavcodec/hq_hqa.c
@@ -88,7 +88,7 @@ static int hq_decode_block(HQContext *c, GetBitContext *gb, int16_t block[64],
}
OPEN_READER(re, gb);
- for (int pos = 1;;) {
+ for (int pos = 0;;) {
int level, run;
UPDATE_CACHE(re, gb);
GET_RL_VLC(level, run, re, gb, hq_ac_rvlc, 9, 2, 0);
@@ -101,7 +101,6 @@ static int hq_decode_block(HQContext *c, GetBitContext *gb, int16_t block[64],
if (pos >= 64)
break;
block[ff_zigzag_direct[pos]] = (int)(level * (unsigned)q[pos]) >> 12;
- pos++;
}
CLOSE_READER(re, gb);
@@ -387,7 +386,7 @@ static av_cold void hq_init_static(void)
if (len > 0) {
level = hq_ac_syms[sym];
- run = hq_ac_skips[sym];
+ run = hq_ac_skips[sym] + 1;
} else if (len < 0) { // More bits needed
run = 0;
} else { // Invalid code
diff --git a/libavcodec/hq_hqadata.h b/libavcodec/hq_hqadata.h
index 8948c3a64a..e723cefaac 100644
--- a/libavcodec/hq_hqadata.h
+++ b/libavcodec/hq_hqadata.h
@@ -1155,7 +1155,7 @@ static const uint8_t hq_quant_map[NUM_HQ_QUANTS][2][4] =
{ { QMAT3A, QMAT48, QMAT4C, QMAT4C }, { QMAT3B, QMAT49, QMAT4D, QMAT4D } },
};
-#define HQ_AC_INVALID_RUN 128
+#define HQ_AC_INVALID_RUN 0
static const uint8_t hq_ac_bits[NUM_HQ_AC_ENTRIES] = {
3, 3, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6,
--
2.45.2
[-- Attachment #8: 0007-avcodec-hq_hqa-Use-ff_vlc_init_from_lengths.patch --]
[-- Type: text/x-patch, Size: 34290 bytes --]
From 918f6b32151f50440cb5ce57846e1ba1360e8dda Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Date: Wed, 9 Apr 2025 20:45:14 +0200
Subject: [PATCH 07/10] avcodec/hq_hqa: Use ff_vlc_init_from_lengths()
This allows to avoid the codes table; furthermore, given
that the runs fit into seven bits and level into nine,
one can put them into one int16_t and use as symbols table
in ff_vlc_init_from_lengths().
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
libavcodec/hq_hqa.c | 20 +-
libavcodec/hq_hqadata.h | 497 +++++++++++++++++-----------------------
2 files changed, 216 insertions(+), 301 deletions(-)
diff --git a/libavcodec/hq_hqa.c b/libavcodec/hq_hqa.c
index f67d6286b0..11388fb9fc 100644
--- a/libavcodec/hq_hqa.c
+++ b/libavcodec/hq_hqa.c
@@ -376,24 +376,22 @@ static int hq_hqa_decode_frame(AVCodecContext *avctx, AVFrame *pic,
static av_cold void hq_init_static(void)
{
- VLC_INIT_STATIC_TABLE(hq_ac_rvlc, 9, NUM_HQ_AC_ENTRIES,
- hq_ac_bits, 1, 1, hq_ac_codes, 2, 2, 0);
+ VLC_INIT_STATIC_TABLE_FROM_LENGTHS(hq_ac_rvlc, 9, NUM_HQ_AC_ENTRIES,
+ hq_ac_lens, 1, hq_ac_sym, 2, 2, 0, 0);
for (size_t i = 0; i < FF_ARRAY_ELEMS(hq_ac_rvlc); ++i) {
int len = hq_ac_rvlc[i].len;
- int sym = hq_ac_rvlc[i].sym, level = sym;
- int run;
+ int sym = (int16_t)hq_ac_rvlc[i].sym, level = sym;
+
+ // The invalid code has been remapped to HQ_AC_INVALID_RUN,
+ // so the VLC is complete.
+ av_assert1(len != 0);
if (len > 0) {
- level = hq_ac_syms[sym];
- run = hq_ac_skips[sym] + 1;
- } else if (len < 0) { // More bits needed
- run = 0;
- } else { // Invalid code
- run = HQ_AC_INVALID_RUN;
+ level = sym >> 7;
+ hq_ac_rvlc[i].run = sym & 0x7F;
}
hq_ac_rvlc[i].len8 = len;
- hq_ac_rvlc[i].run = run;
hq_ac_rvlc[i].level = level;
}
diff --git a/libavcodec/hq_hqadata.h b/libavcodec/hq_hqadata.h
index e723cefaac..10120ee94f 100644
--- a/libavcodec/hq_hqadata.h
+++ b/libavcodec/hq_hqadata.h
@@ -23,7 +23,7 @@
#include <stdint.h>
-#define NUM_HQ_AC_ENTRIES 746
+#define NUM_HQ_AC_ENTRIES 747 // includes one invalid entry
#define NUM_HQ_PROFILES 22
#define NUM_HQ_QUANTS 16
@@ -1157,298 +1157,215 @@ static const uint8_t hq_quant_map[NUM_HQ_QUANTS][2][4] =
#define HQ_AC_INVALID_RUN 0
-static const uint8_t hq_ac_bits[NUM_HQ_AC_ENTRIES] = {
- 3, 3, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6,
- 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
-};
-
-static const uint16_t hq_ac_codes[NUM_HQ_AC_ENTRIES] = {
- 0x0000, 0x0001, 0x0004, 0x0005, 0x0006, 0x000E, 0x000F, 0x0010,
- 0x0011, 0x0012, 0x0013, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C,
- 0x002D, 0x002E, 0x002F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064,
- 0x0065, 0x0066, 0x0067, 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4,
- 0x00D5, 0x00D6, 0x00D7, 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC,
- 0x00DD, 0x00DE, 0x00DF, 0x01C0, 0x01C1, 0x01C2, 0x01C3, 0x01C4,
- 0x01C5, 0x01C6, 0x01C7, 0x01C8, 0x01C9, 0x01CA, 0x01CB, 0x01CC,
- 0x01CD, 0x01CE, 0x01CF, 0x01D0, 0x01D1, 0x01D2, 0x01D3, 0x01D4,
- 0x01D5, 0x01D6, 0x01D7, 0x01D8, 0x01D9, 0x01DA, 0x01DB, 0x01DC,
- 0x01DD, 0x01DE, 0x01DF, 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4,
- 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC,
- 0x03CD, 0x03CE, 0x03CF, 0x03D0, 0x03D1, 0x03D2, 0x03D3, 0x03D4,
- 0x03D5, 0x03D6, 0x03D7, 0x03D8, 0x03D9, 0x03DA, 0x03DB, 0x03DC,
- 0x03DD, 0x03DE, 0x03DF, 0x07C0, 0x07C1, 0x07C2, 0x07C3, 0x07C4,
- 0x07C5, 0x07C6, 0x07C7, 0x07C8, 0x07C9, 0x07CA, 0x07CB, 0x07CC,
- 0x07CD, 0x07CE, 0x07CF, 0x0FA0, 0x0FA1, 0x0FA2, 0x0FA3, 0x0FA4,
- 0x0FA5, 0x0FA6, 0x0FA7, 0x0FA8, 0x0FA9, 0x0FAA, 0x0FAB, 0x0FAC,
- 0x0FAD, 0x0FAE, 0x0FAF, 0x1F60, 0x1F61, 0x1F62, 0x1F63, 0x1F64,
- 0x1F65, 0x1F66, 0x1F67, 0x1F68, 0x1F69, 0x1F6A, 0x1F6B, 0x1F6C,
- 0x1F6D, 0x1F6E, 0x1F6F, 0x1F70, 0x1F71, 0x1F72, 0x1F73, 0x1F74,
- 0x1F75, 0x1F76, 0x1F77, 0x1F78, 0x1F79, 0x1F7A, 0x1F7B, 0x1F7C,
- 0x1F7D, 0x1F7E, 0x1F7F, 0x1F80, 0x1F81, 0x1F82, 0x1F83, 0x1F84,
- 0x1F85, 0x1F86, 0x1F87, 0x1F88, 0x1F89, 0x1F8A, 0x1F8B, 0x1F8C,
- 0x1F8D, 0x1F8E, 0x1F8F, 0x1F90, 0x1F91, 0x1F92, 0x1F93, 0x1F94,
- 0x1F95, 0x1F96, 0x1F97, 0x1F98, 0x1F99, 0x1F9A, 0x1F9B, 0x1F9C,
- 0x1F9D, 0x1F9E, 0x1F9F, 0x1FA0, 0x1FA1, 0x1FA2, 0x1FA3, 0x1FA4,
- 0x1FA5, 0x1FA6, 0x1FA7, 0x1FA8, 0x1FA9, 0x1FAA, 0x1FAB, 0x1FAC,
- 0x1FAD, 0x1FAE, 0x1FAF, 0x1FB0, 0x1FB1, 0x1FB2, 0x1FB3, 0x1FB4,
- 0x1FB5, 0x1FB6, 0x1FB7, 0x1FB8, 0x1FB9, 0x1FBA, 0x1FBB, 0x1FBC,
- 0x1FBD, 0x1FBE, 0x1FBF, 0xFE00, 0xFE02, 0xFE03, 0xFE04, 0xFE05,
- 0xFE06, 0xFE07, 0xFE08, 0xFE09, 0xFE0A, 0xFE0B, 0xFE0C, 0xFE0D,
- 0xFE0E, 0xFE0F, 0xFE10, 0xFE11, 0xFE12, 0xFE13, 0xFE14, 0xFE15,
- 0xFE16, 0xFE17, 0xFE18, 0xFE19, 0xFE1A, 0xFE1B, 0xFE1C, 0xFE1D,
- 0xFE1E, 0xFE1F, 0xFE20, 0xFE21, 0xFE22, 0xFE23, 0xFE24, 0xFE25,
- 0xFE26, 0xFE27, 0xFE28, 0xFE29, 0xFE2A, 0xFE2B, 0xFE2C, 0xFE2D,
- 0xFE2E, 0xFE2F, 0xFE30, 0xFE31, 0xFE32, 0xFE33, 0xFE34, 0xFE35,
- 0xFE36, 0xFE37, 0xFE38, 0xFE39, 0xFE3A, 0xFE3B, 0xFE3C, 0xFE3D,
- 0xFE3E, 0xFE3F, 0xFE40, 0xFE41, 0xFE42, 0xFE43, 0xFE44, 0xFE45,
- 0xFE46, 0xFE47, 0xFE48, 0xFE49, 0xFE4A, 0xFE4B, 0xFE4C, 0xFE4D,
- 0xFE4E, 0xFE4F, 0xFE50, 0xFE51, 0xFE52, 0xFE53, 0xFE54, 0xFE55,
- 0xFE56, 0xFE57, 0xFE58, 0xFE59, 0xFE5A, 0xFE5B, 0xFE5C, 0xFE5D,
- 0xFE5E, 0xFE5F, 0xFE60, 0xFE61, 0xFE62, 0xFE63, 0xFE64, 0xFE65,
- 0xFE66, 0xFE67, 0xFE68, 0xFE69, 0xFE6A, 0xFE6B, 0xFE6C, 0xFE6D,
- 0xFE6E, 0xFE6F, 0xFE70, 0xFE71, 0xFE72, 0xFE73, 0xFE74, 0xFE75,
- 0xFE76, 0xFE77, 0xFE78, 0xFE79, 0xFE7A, 0xFE7B, 0xFE7C, 0xFE7D,
- 0xFE7E, 0xFE7F, 0xFE80, 0xFE81, 0xFE82, 0xFE83, 0xFE84, 0xFE85,
- 0xFE86, 0xFE87, 0xFE88, 0xFE89, 0xFE8A, 0xFE8B, 0xFE8C, 0xFE8D,
- 0xFE8E, 0xFE8F, 0xFE90, 0xFE91, 0xFE92, 0xFE93, 0xFE94, 0xFE95,
- 0xFE96, 0xFE97, 0xFE98, 0xFE99, 0xFE9A, 0xFE9B, 0xFE9C, 0xFE9D,
- 0xFE9E, 0xFE9F, 0xFEA0, 0xFEA1, 0xFEA2, 0xFEA3, 0xFEA4, 0xFEA5,
- 0xFEA6, 0xFEA7, 0xFEA8, 0xFEA9, 0xFEAA, 0xFEAB, 0xFEAC, 0xFEAD,
- 0xFEAE, 0xFEAF, 0xFEB0, 0xFEB1, 0xFEB2, 0xFEB3, 0xFEB4, 0xFEB5,
- 0xFEB6, 0xFEB7, 0xFEB8, 0xFEB9, 0xFEBA, 0xFEBB, 0xFEBC, 0xFEBD,
- 0xFEBE, 0xFEBF, 0xFEC0, 0xFEC1, 0xFEC2, 0xFEC3, 0xFEC4, 0xFEC5,
- 0xFEC6, 0xFEC7, 0xFEC8, 0xFEC9, 0xFECA, 0xFECB, 0xFECC, 0xFECD,
- 0xFECE, 0xFECF, 0xFED0, 0xFED1, 0xFED2, 0xFED3, 0xFED4, 0xFED5,
- 0xFED6, 0xFED7, 0xFED8, 0xFED9, 0xFEDA, 0xFEDB, 0xFEDC, 0xFEDD,
- 0xFEDE, 0xFEDF, 0xFEE0, 0xFEE1, 0xFEE2, 0xFEE3, 0xFEE4, 0xFEE5,
- 0xFEE6, 0xFEE7, 0xFEE8, 0xFEE9, 0xFEEA, 0xFEEB, 0xFEEC, 0xFEED,
- 0xFEEE, 0xFEEF, 0xFEF0, 0xFEF1, 0xFEF2, 0xFEF3, 0xFEF4, 0xFEF5,
- 0xFEF6, 0xFEF7, 0xFEF8, 0xFEF9, 0xFEFA, 0xFEFB, 0xFEFC, 0xFEFD,
- 0xFEFE, 0xFEFF, 0xFF00, 0xFF01, 0xFF02, 0xFF03, 0xFF04, 0xFF05,
- 0xFF06, 0xFF07, 0xFF08, 0xFF09, 0xFF0A, 0xFF0B, 0xFF0C, 0xFF0D,
- 0xFF0E, 0xFF0F, 0xFF10, 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15,
- 0xFF16, 0xFF17, 0xFF18, 0xFF19, 0xFF1A, 0xFF1B, 0xFF1C, 0xFF1D,
- 0xFF1E, 0xFF1F, 0xFF20, 0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25,
- 0xFF26, 0xFF27, 0xFF28, 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D,
- 0xFF2E, 0xFF2F, 0xFF30, 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35,
- 0xFF36, 0xFF37, 0xFF38, 0xFF39, 0xFF3A, 0xFF3B, 0xFF3C, 0xFF3D,
- 0xFF3E, 0xFF3F, 0xFF40, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45,
- 0xFF46, 0xFF47, 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D,
- 0xFF4E, 0xFF4F, 0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55,
- 0xFF56, 0xFF57, 0xFF58, 0xFF59, 0xFF5A, 0xFF5B, 0xFF5C, 0xFF5D,
- 0xFF5E, 0xFF5F, 0xFF60, 0xFF61, 0xFF62, 0xFF63, 0xFF64, 0xFF65,
- 0xFF66, 0xFF67, 0xFF68, 0xFF69, 0xFF6A, 0xFF6B, 0xFF6C, 0xFF6D,
- 0xFF6E, 0xFF6F, 0xFF70, 0xFF71, 0xFF72, 0xFF73, 0xFF74, 0xFF75,
- 0xFF76, 0xFF77, 0xFF78, 0xFF79, 0xFF7A, 0xFF7B, 0xFF7C, 0xFF7D,
- 0xFF7E, 0xFF7F, 0xFF80, 0xFF81, 0xFF82, 0xFF83, 0xFF84, 0xFF85,
- 0xFF86, 0xFF87, 0xFF88, 0xFF89, 0xFF8A, 0xFF8B, 0xFF8C, 0xFF8D,
- 0xFF8E, 0xFF8F, 0xFF90, 0xFF91, 0xFF92, 0xFF93, 0xFF94, 0xFF95,
- 0xFF96, 0xFF97, 0xFF98, 0xFF99, 0xFF9A, 0xFF9B, 0xFF9C, 0xFF9D,
- 0xFF9E, 0xFF9F, 0xFFA0, 0xFFA1, 0xFFA2, 0xFFA3, 0xFFA4, 0xFFA5,
- 0xFFA6, 0xFFA7, 0xFFA8, 0xFFA9, 0xFFAA, 0xFFAB, 0xFFAC, 0xFFAD,
- 0xFFAE, 0xFFAF, 0xFFB0, 0xFFB1, 0xFFB2, 0xFFB3, 0xFFB4, 0xFFB5,
- 0xFFB6, 0xFFB7, 0xFFB8, 0xFFB9, 0xFFBA, 0xFFBB, 0xFFBC, 0xFFBD,
- 0xFFBE, 0xFFBF, 0xFFC0, 0xFFC1, 0xFFC2, 0xFFC3, 0xFFC4, 0xFFC5,
- 0xFFC6, 0xFFC7, 0xFFC8, 0xFFC9, 0xFFCA, 0xFFCB, 0xFFCC, 0xFFCD,
- 0xFFCE, 0xFFCF, 0xFFD0, 0xFFD1, 0xFFD2, 0xFFD3, 0xFFD4, 0xFFD5,
- 0xFFD6, 0xFFD7, 0xFFD8, 0xFFD9, 0xFFDA, 0xFFDB, 0xFFDC, 0xFFDD,
- 0xFFDE, 0xFFDF, 0xFFE0, 0xFFE1, 0xFFE2, 0xFFE3, 0xFFE4, 0xFFE5,
- 0xFFE6, 0xFFE7, 0xFFE8, 0xFFE9, 0xFFEA, 0xFFEB, 0xFFEC, 0xFFED,
- 0xFFEE, 0xFFEF, 0xFFF0, 0xFFF1, 0xFFF2, 0xFFF3, 0xFFF4, 0xFFF5,
- 0xFFF6, 0xFFF7, 0xFFF8, 0xFFF9, 0xFFFA, 0xFFFB, 0xFFFC, 0xFFFD,
- 0xFFFE, 0xFFFF,
-};
+#define E(level, skip) ((level * (1 << 7)) | (skip + 1))
+// The invalid entry has length 16 and is mapped to an invalid run.
+#define INVALID_ENT HQ_AC_INVALID_RUN
+#define INV 16
-static const uint8_t hq_ac_skips[NUM_HQ_AC_ENTRIES] = {
- 0, 0, 0, 0, 64, 1, 1, 0, 0, 0, 0, 2, 2, 1, 1, 0,
- 0, 0, 0, 3, 3, 4, 4, 0, 0, 0, 0, 5, 5, 6, 6, 2,
- 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 7, 7, 8, 8, 9,
- 9, 10, 10, 3, 3, 4, 4, 2, 2, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 12, 12, 13,
- 13, 14, 14, 5, 5, 6, 6, 3, 3, 4, 4, 2, 2, 2, 2, 1,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 3, 3, 3,
- 3, 2, 2, 1, 1, 1, 1, 1, 1, 0, 1, 6, 6, 4, 4, 3,
- 3, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 7, 7, 8, 8, 9,
- 9, 10, 10, 7, 7, 8, 8, 4, 4, 3, 3, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 0, 1, 2, 3, 4,
- 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
- 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+static const int16_t hq_ac_sym[NUM_HQ_AC_ENTRIES] = {
+ E( 1, 0), E( -1, 0), E( 2, 0), E( -2, 0), E( 0, 64),
+ E( 1, 1), E( -1, 1), E( 3, 0), E( -3, 0), E( 4, 0),
+ E( -4, 0), E( 1, 2), E( -1, 2), E( 2, 1), E( -2, 1),
+ E( 5, 0), E( -5, 0), E( 6, 0), E( -6, 0), E( 1, 3),
+ E( -1, 3), E( 1, 4), E( -1, 4), E( 7, 0), E( -7, 0),
+ E( 8, 0), E( -8, 0), E( 1, 5), E( -1, 5), E( 1, 6),
+ E( -1, 6), E( 2, 2), E( -2, 2), E( 3, 1), E( -3, 1),
+ E( 4, 1), E( -4, 1), E( 9, 0), E( -9, 0), E( 10, 0),
+ E( -10, 0), E( 11, 0), E( -11, 0), E( 1, 7), E( -1, 7),
+ E( 1, 8), E( -1, 8), E( 1, 9), E( -1, 9), E( 1, 10),
+ E( -1, 10), E( 2, 3), E( -2, 3), E( 2, 4), E( -2, 4),
+ E( 3, 2), E( -3, 2), E( 5, 1), E( -5, 1), E( 6, 1),
+ E( -6, 1), E( 7, 1), E( -7, 1), E( 12, 0), E( -12, 0),
+ E( 13, 0), E( -13, 0), E( 14, 0), E( -14, 0), E( 15, 0),
+ E( -15, 0), E( 16, 0), E( -16, 0), E( 17, 0), E( -17, 0),
+ E( 1, 11), E( -1, 11), E( 1, 12), E( -1, 12), E( 1, 13),
+ E( -1, 13), E( 1, 14), E( -1, 14), E( 2, 5), E( -2, 5),
+ E( 2, 6), E( -2, 6), E( 3, 3), E( -3, 3), E( 3, 4),
+ E( -3, 4), E( 4, 2), E( -4, 2), E( 5, 2), E( -5, 2),
+ E( 8, 1), E( -8, 1), E( 18, 0), E( -18, 0), E( 19, 0),
+ E( -19, 0), E( 20, 0), E( -20, 0), E( 21, 0), E( -21, 0),
+ E( 22, 0), E( -22, 0), E( 3, 5), E( -3, 5), E( 4, 3),
+ E( -4, 3), E( 5, 3), E( -5, 3), E( 6, 2), E( -6, 2),
+ E( 9, 1), E( -9, 1), E( 10, 1), E( -10, 1), E( 11, 1),
+ E( -11, 1), E( 0, 0), E( 0, 1), E( 3, 6), E( -3, 6),
+ E( 4, 4), E( -4, 4), E( 6, 3), E( -6, 3), E( 12, 1),
+ E( -12, 1), E( 13, 1), E( -13, 1), E( 14, 1), E( -14, 1),
+ E( 0, 2), E( 0, 3), E( 0, 4), E( 0, 5), E( 2, 7),
+ E( -2, 7), E( 2, 8), E( -2, 8), E( 2, 9), E( -2, 9),
+ E( 2, 10), E( -2, 10), E( 3, 7), E( -3, 7), E( 3, 8),
+ E( -3, 8), E( 5, 4), E( -5, 4), E( 7, 3), E( -7, 3),
+ E( 7, 2), E( -7, 2), E( 8, 2), E( -8, 2), E( 9, 2),
+ E( -9, 2), E( 10, 2), E( -10, 2), E( 11, 2), E( -11, 2),
+ E( 15, 1), E( -15, 1), E( 16, 1), E( -16, 1), E( 17, 1),
+ E( -17, 1), E( 0, 0), E( 0, 1), E( 0, 2), E( 0, 3),
+ E( 0, 4), E( 0, 5), E( 0, 6), E( 0, 7), E( 0, 8),
+ E( 0, 9), E( 0, 10), E( 0, 11), E( 0, 12), E( 0, 13),
+ E( 0, 14), E( 0, 15), E( 0, 16), E( 0, 17), E( 0, 18),
+ E( 0, 19), E( 0, 20), E( 0, 21), E( 0, 22), E( 0, 23),
+ E( 0, 24), E( 0, 25), E( 0, 26), E( 0, 27), E( 0, 28),
+ E( 0, 29), E( 0, 30), E( 0, 31), E( 0, 32), E( 0, 33),
+ E( 0, 34), E( 0, 35), E( 0, 36), E( 0, 37), E( 0, 38),
+ E( 0, 39), E( 0, 40), E( 0, 41), E( 0, 42), E( 0, 43),
+ E( 0, 44), E( 0, 45), E( 0, 46), E( 0, 47), E( 0, 48),
+ E( 0, 49), E( 0, 50), E( 0, 51), E( 0, 52), E( 0, 53),
+ E( 0, 54), E( 0, 55), E( 0, 56), E( 0, 57), E( 0, 58),
+ E( 0, 59), E( 0, 60), E( 0, 61), E( 0, 62), E( 0, 63),
+ E( 0, 0), INVALID_ENT, E( 1, 0), E( -1, 0), E( 2, 0),
+ E( -2, 0), E( 3, 0), E( -3, 0), E( 4, 0), E( -4, 0),
+ E( 5, 0), E( -5, 0), E( 6, 0), E( -6, 0), E( 7, 0),
+ E( -7, 0), E( 8, 0), E( -8, 0), E( 9, 0), E( -9, 0),
+ E( 10, 0), E( -10, 0), E( 11, 0), E( -11, 0), E( 12, 0),
+ E( -12, 0), E( 13, 0), E( -13, 0), E( 14, 0), E( -14, 0),
+ E( 15, 0), E( -15, 0), E( 16, 0), E( -16, 0), E( 17, 0),
+ E( -17, 0), E( 18, 0), E( -18, 0), E( 19, 0), E( -19, 0),
+ E( 20, 0), E( -20, 0), E( 21, 0), E( -21, 0), E( 22, 0),
+ E( -22, 0), E( 23, 0), E( -23, 0), E( 24, 0), E( -24, 0),
+ E( 25, 0), E( -25, 0), E( 26, 0), E( -26, 0), E( 27, 0),
+ E( -27, 0), E( 28, 0), E( -28, 0), E( 29, 0), E( -29, 0),
+ E( 30, 0), E( -30, 0), E( 31, 0), E( -31, 0), E( 32, 0),
+ E( -32, 0), E( 33, 0), E( -33, 0), E( 34, 0), E( -34, 0),
+ E( 35, 0), E( -35, 0), E( 36, 0), E( -36, 0), E( 37, 0),
+ E( -37, 0), E( 38, 0), E( -38, 0), E( 39, 0), E( -39, 0),
+ E( 40, 0), E( -40, 0), E( 41, 0), E( -41, 0), E( 42, 0),
+ E( -42, 0), E( 43, 0), E( -43, 0), E( 44, 0), E( -44, 0),
+ E( 45, 0), E( -45, 0), E( 46, 0), E( -46, 0), E( 47, 0),
+ E( -47, 0), E( 48, 0), E( -48, 0), E( 49, 0), E( -49, 0),
+ E( 50, 0), E( -50, 0), E( 51, 0), E( -51, 0), E( 52, 0),
+ E( -52, 0), E( 53, 0), E( -53, 0), E( 54, 0), E( -54, 0),
+ E( 55, 0), E( -55, 0), E( 56, 0), E( -56, 0), E( 57, 0),
+ E( -57, 0), E( 58, 0), E( -58, 0), E( 59, 0), E( -59, 0),
+ E( 60, 0), E( -60, 0), E( 61, 0), E( -61, 0), E( 62, 0),
+ E( -62, 0), E( 63, 0), E( -63, 0), E( 64, 0), E( -64, 0),
+ E( 65, 0), E( -65, 0), E( 66, 0), E( -66, 0), E( 67, 0),
+ E( -67, 0), E( 68, 0), E( -68, 0), E( 69, 0), E( -69, 0),
+ E( 70, 0), E( -70, 0), E( 71, 0), E( -71, 0), E( 72, 0),
+ E( -72, 0), E( 73, 0), E( -73, 0), E( 74, 0), E( -74, 0),
+ E( 75, 0), E( -75, 0), E( 76, 0), E( -76, 0), E( 77, 0),
+ E( -77, 0), E( 78, 0), E( -78, 0), E( 79, 0), E( -79, 0),
+ E( 80, 0), E( -80, 0), E( 81, 0), E( -81, 0), E( 82, 0),
+ E( -82, 0), E( 83, 0), E( -83, 0), E( 84, 0), E( -84, 0),
+ E( 85, 0), E( -85, 0), E( 86, 0), E( -86, 0), E( 87, 0),
+ E( -87, 0), E( 88, 0), E( -88, 0), E( 89, 0), E( -89, 0),
+ E( 90, 0), E( -90, 0), E( 91, 0), E( -91, 0), E( 92, 0),
+ E( -92, 0), E( 93, 0), E( -93, 0), E( 94, 0), E( -94, 0),
+ E( 95, 0), E( -95, 0), E( 96, 0), E( -96, 0), E( 97, 0),
+ E( -97, 0), E( 98, 0), E( -98, 0), E( 99, 0), E( -99, 0),
+ E( 100, 0), E(-100, 0), E( 101, 0), E(-101, 0), E( 102, 0),
+ E(-102, 0), E( 103, 0), E(-103, 0), E( 104, 0), E(-104, 0),
+ E( 105, 0), E(-105, 0), E( 106, 0), E(-106, 0), E( 107, 0),
+ E(-107, 0), E( 108, 0), E(-108, 0), E( 109, 0), E(-109, 0),
+ E( 110, 0), E(-110, 0), E( 111, 0), E(-111, 0), E( 112, 0),
+ E(-112, 0), E( 113, 0), E(-113, 0), E( 114, 0), E(-114, 0),
+ E( 115, 0), E(-115, 0), E( 116, 0), E(-116, 0), E( 117, 0),
+ E(-117, 0), E( 118, 0), E(-118, 0), E( 119, 0), E(-119, 0),
+ E( 120, 0), E(-120, 0), E( 121, 0), E(-121, 0), E( 122, 0),
+ E(-122, 0), E( 123, 0), E(-123, 0), E( 124, 0), E(-124, 0),
+ E( 125, 0), E(-125, 0), E( 126, 0), E(-126, 0), E( 127, 0),
+ E(-127, 0), E( 128, 0), E(-128, 0), E( 129, 0), E(-129, 0),
+ E( 130, 0), E(-130, 0), E( 131, 0), E(-131, 0), E( 132, 0),
+ E(-132, 0), E( 133, 0), E(-133, 0), E( 134, 0), E(-134, 0),
+ E( 135, 0), E(-135, 0), E( 136, 0), E(-136, 0), E( 137, 0),
+ E(-137, 0), E( 138, 0), E(-138, 0), E( 139, 0), E(-139, 0),
+ E( 140, 0), E(-140, 0), E( 141, 0), E(-141, 0), E( 142, 0),
+ E(-142, 0), E( 143, 0), E(-143, 0), E( 144, 0), E(-144, 0),
+ E( 145, 0), E(-145, 0), E( 146, 0), E(-146, 0), E( 147, 0),
+ E(-147, 0), E( 148, 0), E(-148, 0), E( 149, 0), E(-149, 0),
+ E( 150, 0), E(-150, 0), E( 151, 0), E(-151, 0), E( 152, 0),
+ E(-152, 0), E( 153, 0), E(-153, 0), E( 154, 0), E(-154, 0),
+ E( 155, 0), E(-155, 0), E( 156, 0), E(-156, 0), E( 157, 0),
+ E(-157, 0), E( 158, 0), E(-158, 0), E( 159, 0), E(-159, 0),
+ E( 160, 0), E(-160, 0), E( 161, 0), E(-161, 0), E( 162, 0),
+ E(-162, 0), E( 163, 0), E(-163, 0), E( 164, 0), E(-164, 0),
+ E( 165, 0), E(-165, 0), E( 166, 0), E(-166, 0), E( 167, 0),
+ E(-167, 0), E( 168, 0), E(-168, 0), E( 169, 0), E(-169, 0),
+ E( 170, 0), E(-170, 0), E( 171, 0), E(-171, 0), E( 172, 0),
+ E(-172, 0), E( 173, 0), E(-173, 0), E( 174, 0), E(-174, 0),
+ E( 175, 0), E(-175, 0), E( 176, 0), E(-176, 0), E( 177, 0),
+ E(-177, 0), E( 178, 0), E(-178, 0), E( 179, 0), E(-179, 0),
+ E( 180, 0), E(-180, 0), E( 181, 0), E(-181, 0), E( 182, 0),
+ E(-182, 0), E( 183, 0), E(-183, 0), E( 184, 0), E(-184, 0),
+ E( 185, 0), E(-185, 0), E( 186, 0), E(-186, 0), E( 187, 0),
+ E(-187, 0), E( 188, 0), E(-188, 0), E( 189, 0), E(-189, 0),
+ E( 190, 0), E(-190, 0), E( 191, 0), E(-191, 0), E( 192, 0),
+ E(-192, 0), E( 193, 0), E(-193, 0), E( 194, 0), E(-194, 0),
+ E( 195, 0), E(-195, 0), E( 196, 0), E(-196, 0), E( 197, 0),
+ E(-197, 0), E( 198, 0), E(-198, 0), E( 199, 0), E(-199, 0),
+ E( 200, 0), E(-200, 0), E( 201, 0), E(-201, 0), E( 202, 0),
+ E(-202, 0), E( 203, 0), E(-203, 0), E( 204, 0), E(-204, 0),
+ E( 205, 0), E(-205, 0), E( 206, 0), E(-206, 0), E( 207, 0),
+ E(-207, 0), E( 208, 0), E(-208, 0), E( 209, 0), E(-209, 0),
+ E( 210, 0), E(-210, 0), E( 211, 0), E(-211, 0), E( 212, 0),
+ E(-212, 0), E( 213, 0), E(-213, 0), E( 214, 0), E(-214, 0),
+ E( 215, 0), E(-215, 0), E( 216, 0), E(-216, 0), E( 217, 0),
+ E(-217, 0), E( 218, 0), E(-218, 0), E( 219, 0), E(-219, 0),
+ E( 220, 0), E(-220, 0), E( 221, 0), E(-221, 0), E( 222, 0),
+ E(-222, 0), E( 223, 0), E(-223, 0), E( 224, 0), E(-224, 0),
+ E( 225, 0), E(-225, 0), E( 226, 0), E(-226, 0), E( 227, 0),
+ E(-227, 0), E( 228, 0), E(-228, 0), E( 229, 0), E(-229, 0),
+ E( 230, 0), E(-230, 0), E( 231, 0), E(-231, 0), E( 232, 0),
+ E(-232, 0), E( 233, 0), E(-233, 0), E( 234, 0), E(-234, 0),
+ E( 235, 0), E(-235, 0), E( 236, 0), E(-236, 0), E( 237, 0),
+ E(-237, 0), E( 238, 0), E(-238, 0), E( 239, 0), E(-239, 0),
+ E( 240, 0), E(-240, 0), E( 241, 0), E(-241, 0), E( 242, 0),
+ E(-242, 0), E( 243, 0), E(-243, 0), E( 244, 0), E(-244, 0),
+ E( 245, 0), E(-245, 0), E( 246, 0), E(-246, 0), E( 247, 0),
+ E(-247, 0), E( 248, 0), E(-248, 0), E( 249, 0), E(-249, 0),
+ E( 250, 0), E(-250, 0), E( 251, 0), E(-251, 0), E( 252, 0),
+ E(-252, 0), E( 253, 0), E(-253, 0), E( 254, 0), E(-254, 0),
+ E( 255, 0), E(-255, 0),
};
-static const int16_t hq_ac_syms[NUM_HQ_AC_ENTRIES] = {
- 1, -1, 2, -2, 0, 1, -1, 3,
- -3, 4, -4, 1, -1, 2, -2, 5,
- -5, 6, -6, 1, -1, 1, -1, 7,
- -7, 8, -8, 1, -1, 1, -1, 2,
- -2, 3, -3, 4, -4, 9, -9, 10,
- -10, 11, -11, 1, -1, 1, -1, 1,
- -1, 1, -1, 2, -2, 2, -2, 3,
- -3, 5, -5, 6, -6, 7, -7, 12,
- -12, 13, -13, 14, -14, 15, -15, 16,
- -16, 17, -17, 1, -1, 1, -1, 1,
- -1, 1, -1, 2, -2, 2, -2, 3,
- -3, 3, -3, 4, -4, 5, -5, 8,
- -8, 18, -18, 19, -19, 20, -20, 21,
- -21, 22, -22, 3, -3, 4, -4, 5,
- -5, 6, -6, 9, -9, 10, -10, 11,
- -11, 0, 0, 3, -3, 4, -4, 6,
- -6, 12, -12, 13, -13, 14, -14, 0,
- 0, 0, 0, 2, -2, 2, -2, 2,
- -2, 2, -2, 3, -3, 3, -3, 5,
- -5, 7, -7, 7, -7, 8, -8, 9,
- -9, 10, -10, 11, -11, 15, -15, 16,
- -16, 17, -17, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, -1, 2, -2,
- 3, -3, 4, -4, 5, -5, 6, -6,
- 7, -7, 8, -8, 9, -9, 10, -10,
- 11, -11, 12, -12, 13, -13, 14, -14,
- 15, -15, 16, -16, 17, -17, 18, -18,
- 19, -19, 20, -20, 21, -21, 22, -22,
- 23, -23, 24, -24, 25, -25, 26, -26,
- 27, -27, 28, -28, 29, -29, 30, -30,
- 31, -31, 32, -32, 33, -33, 34, -34,
- 35, -35, 36, -36, 37, -37, 38, -38,
- 39, -39, 40, -40, 41, -41, 42, -42,
- 43, -43, 44, -44, 45, -45, 46, -46,
- 47, -47, 48, -48, 49, -49, 50, -50,
- 51, -51, 52, -52, 53, -53, 54, -54,
- 55, -55, 56, -56, 57, -57, 58, -58,
- 59, -59, 60, -60, 61, -61, 62, -62,
- 63, -63, 64, -64, 65, -65, 66, -66,
- 67, -67, 68, -68, 69, -69, 70, -70,
- 71, -71, 72, -72, 73, -73, 74, -74,
- 75, -75, 76, -76, 77, -77, 78, -78,
- 79, -79, 80, -80, 81, -81, 82, -82,
- 83, -83, 84, -84, 85, -85, 86, -86,
- 87, -87, 88, -88, 89, -89, 90, -90,
- 91, -91, 92, -92, 93, -93, 94, -94,
- 95, -95, 96, -96, 97, -97, 98, -98,
- 99, -99, 100, -100, 101, -101, 102, -102,
- 103, -103, 104, -104, 105, -105, 106, -106,
- 107, -107, 108, -108, 109, -109, 110, -110,
- 111, -111, 112, -112, 113, -113, 114, -114,
- 115, -115, 116, -116, 117, -117, 118, -118,
- 119, -119, 120, -120, 121, -121, 122, -122,
- 123, -123, 124, -124, 125, -125, 126, -126,
- 127, -127, 128, -128, 129, -129, 130, -130,
- 131, -131, 132, -132, 133, -133, 134, -134,
- 135, -135, 136, -136, 137, -137, 138, -138,
- 139, -139, 140, -140, 141, -141, 142, -142,
- 143, -143, 144, -144, 145, -145, 146, -146,
- 147, -147, 148, -148, 149, -149, 150, -150,
- 151, -151, 152, -152, 153, -153, 154, -154,
- 155, -155, 156, -156, 157, -157, 158, -158,
- 159, -159, 160, -160, 161, -161, 162, -162,
- 163, -163, 164, -164, 165, -165, 166, -166,
- 167, -167, 168, -168, 169, -169, 170, -170,
- 171, -171, 172, -172, 173, -173, 174, -174,
- 175, -175, 176, -176, 177, -177, 178, -178,
- 179, -179, 180, -180, 181, -181, 182, -182,
- 183, -183, 184, -184, 185, -185, 186, -186,
- 187, -187, 188, -188, 189, -189, 190, -190,
- 191, -191, 192, -192, 193, -193, 194, -194,
- 195, -195, 196, -196, 197, -197, 198, -198,
- 199, -199, 200, -200, 201, -201, 202, -202,
- 203, -203, 204, -204, 205, -205, 206, -206,
- 207, -207, 208, -208, 209, -209, 210, -210,
- 211, -211, 212, -212, 213, -213, 214, -214,
- 215, -215, 216, -216, 217, -217, 218, -218,
- 219, -219, 220, -220, 221, -221, 222, -222,
- 223, -223, 224, -224, 225, -225, 226, -226,
- 227, -227, 228, -228, 229, -229, 230, -230,
- 231, -231, 232, -232, 233, -233, 234, -234,
- 235, -235, 236, -236, 237, -237, 238, -238,
- 239, -239, 240, -240, 241, -241, 242, -242,
- 243, -243, 244, -244, 245, -245, 246, -246,
- 247, -247, 248, -248, 249, -249, 250, -250,
- 251, -251, 252, -252, 253, -253, 254, -254,
- 255, -255,
+static const uint8_t hq_ac_lens[NUM_HQ_AC_ENTRIES] = {
+ 3, 3, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6,
+ 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 16, INV,16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
};
/* tables section - one per supported profile */
--
2.45.2
[-- Attachment #9: 0008-avcodec-hq_hqa-Check-available-date-before-allocatin.patch --]
[-- Type: text/x-patch, Size: 1028 bytes --]
From d7d4e45bc38f363af5cd2ab6ce25b7b0202ce628 Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Date: Wed, 9 Apr 2025 22:04:46 +0200
Subject: [PATCH 08/10] avcodec/hq_hqa: Check available date before allocating
frame
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
libavcodec/hq_hqa.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/libavcodec/hq_hqa.c b/libavcodec/hq_hqa.c
index 11388fb9fc..26493b1e1c 100644
--- a/libavcodec/hq_hqa.c
+++ b/libavcodec/hq_hqa.c
@@ -149,6 +149,9 @@ static int hq_decode_frame(HQContext *ctx, AVFrame *pic, GetByteContext *gbc,
av_log(ctx->avctx, AV_LOG_VERBOSE, "HQ Profile %d\n", prof_num);
}
+ if (bytestream2_get_bytes_left(gbc) < 3 * (profile->num_slices + 1))
+ return AVERROR_INVALIDDATA;
+
ctx->avctx->coded_width = FFALIGN(profile->width, 16);
ctx->avctx->coded_height = FFALIGN(profile->height, 16);
ctx->avctx->width = profile->width;
--
2.45.2
[-- Attachment #10: 0009-avcodec-hq_hqa-Remove-implicit-always-false-checks.patch --]
[-- Type: text/x-patch, Size: 3816 bytes --]
From 523a870a07d5c55cfca3ffa9e6a9e02b4891b531 Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Date: Wed, 9 Apr 2025 22:06:11 +0200
Subject: [PATCH 09/10] avcodec/hq_hqa: Remove implicit always-false checks
This decoder has explicit checks.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
libavcodec/hq_hqa.c | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/libavcodec/hq_hqa.c b/libavcodec/hq_hqa.c
index 26493b1e1c..cc3bdc5894 100644
--- a/libavcodec/hq_hqa.c
+++ b/libavcodec/hq_hqa.c
@@ -165,7 +165,7 @@ static int hq_decode_frame(HQContext *ctx, AVFrame *pic, GetByteContext *gbc,
/* Offsets are stored from CUV position, so adjust them accordingly. */
for (i = 0; i < profile->num_slices + 1; i++)
- slice_off[i] = bytestream2_get_be24(gbc) - 4;
+ slice_off[i] = bytestream2_get_be24u(gbc) - 4;
next_off = 0;
for (slice = 0; slice < profile->num_slices; slice++) {
@@ -270,8 +270,8 @@ static int hqa_decode_frame(HQContext *ctx, AVFrame *pic, GetByteContext *gbc, s
if (bytestream2_get_bytes_left(gbc) < 8 + 4*(num_slices + 1))
return AVERROR_INVALIDDATA;
- width = bytestream2_get_be16(gbc);
- height = bytestream2_get_be16(gbc);
+ width = bytestream2_get_be16u(gbc);
+ height = bytestream2_get_be16u(gbc);
ret = ff_set_dimensions(ctx->avctx, width, height);
if (ret < 0)
@@ -284,8 +284,8 @@ static int hqa_decode_frame(HQContext *ctx, AVFrame *pic, GetByteContext *gbc, s
av_log(ctx->avctx, AV_LOG_VERBOSE, "HQA Profile\n");
- quant = bytestream2_get_byte(gbc);
- bytestream2_skip(gbc, 3);
+ quant = bytestream2_get_byteu(gbc);
+ bytestream2_skipu(gbc, 3);
if (quant >= NUM_HQ_QUANTS) {
av_log(ctx->avctx, AV_LOG_ERROR,
"Invalid quantization matrix %d.\n", quant);
@@ -298,7 +298,7 @@ static int hqa_decode_frame(HQContext *ctx, AVFrame *pic, GetByteContext *gbc, s
/* Offsets are stored from HQA1 position, so adjust them accordingly. */
for (i = 0; i < num_slices + 1; i++)
- slice_off[i] = bytestream2_get_be32(gbc) - 4;
+ slice_off[i] = bytestream2_get_be32u(gbc) - 4;
for (slice = 0; slice < num_slices; slice++) {
if (slice_off[slice] < (num_slices + 1) * 3 ||
@@ -335,18 +335,18 @@ static int hq_hqa_decode_frame(AVCodecContext *avctx, AVFrame *pic,
return AVERROR_INVALIDDATA;
}
- info_tag = bytestream2_peek_le32(gbc);
+ info_tag = bytestream2_peek_le32u(gbc);
if (info_tag == MKTAG('I', 'N', 'F', 'O')) {
int info_size;
- bytestream2_skip(gbc, 4);
- info_size = bytestream2_get_le32(gbc);
+ bytestream2_skipu(gbc, 4);
+ info_size = bytestream2_get_le32u(gbc);
if (info_size < 0 || bytestream2_get_bytes_left(gbc) < info_size) {
av_log(avctx, AV_LOG_ERROR, "Invalid INFO size (%d).\n", info_size);
return AVERROR_INVALIDDATA;
}
ff_canopus_parse_info_tag(avctx, gbc->buffer, info_size);
- bytestream2_skip(gbc, info_size);
+ bytestream2_skipu(gbc, info_size);
}
data_size = bytestream2_get_bytes_left(gbc);
@@ -358,7 +358,7 @@ static int hq_hqa_decode_frame(AVCodecContext *avctx, AVFrame *pic,
/* HQ defines dimensions and number of slices, and thus slice traversal
* order. HQA has no size constraint and a fixed number of slices, so it
* needs a separate scheme for it. */
- tag = bytestream2_get_le32(gbc);
+ tag = bytestream2_get_le32u(gbc);
if ((tag & 0x00FFFFFF) == (MKTAG('U', 'V', 'C', ' ') & 0x00FFFFFF)) {
ret = hq_decode_frame(ctx, pic, gbc, tag >> 24, data_size);
} else if (tag == MKTAG('H', 'Q', 'A', '1')) {
--
2.45.2
[-- Attachment #11: 0010-avcodec-hq_hqa-Check-size-before-initializing-GetByt.patch --]
[-- Type: text/x-patch, Size: 1180 bytes --]
From 51b7f356fddead46572c4bf65c4c3e07478bff75 Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Date: Wed, 9 Apr 2025 22:10:16 +0200
Subject: [PATCH 10/10] avcodec/hq_hqa: Check size before initializing
GetByteContext
Enables the compiler to optimize the buf_size assert
in bytestream2_init() away.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
libavcodec/hq_hqa.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/libavcodec/hq_hqa.c b/libavcodec/hq_hqa.c
index cc3bdc5894..42804e2c2b 100644
--- a/libavcodec/hq_hqa.c
+++ b/libavcodec/hq_hqa.c
@@ -329,11 +329,11 @@ static int hq_hqa_decode_frame(AVCodecContext *avctx, AVFrame *pic,
int ret;
unsigned tag;
- bytestream2_init(gbc, avpkt->data, avpkt->size);
- if (bytestream2_get_bytes_left(gbc) < 4 + 4) {
+ if (avpkt->size < 4 + 4) {
av_log(avctx, AV_LOG_ERROR, "Frame is too small (%d).\n", avpkt->size);
return AVERROR_INVALIDDATA;
}
+ bytestream2_init(gbc, avpkt->data, avpkt->size);
info_tag = bytestream2_peek_le32u(gbc);
if (info_tag == MKTAG('I', 'N', 'F', 'O')) {
--
2.45.2
[-- Attachment #12: Type: text/plain, Size: 251 bytes --]
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [FFmpeg-devel] [PATCH 01/10] avcodec/hq{xvlc, _hqadata}: Deduplicate and hardcode cbp, table
2025-04-09 20:36 [FFmpeg-devel] [PATCH 01/10] avcodec/hq{xvlc, _hqadata}: Deduplicate and hardcode cbp, table Andreas Rheinhardt
@ 2025-04-11 12:24 ` Andreas Rheinhardt
0 siblings, 0 replies; 2+ messages in thread
From: Andreas Rheinhardt @ 2025-04-11 12:24 UTC (permalink / raw)
To: ffmpeg-devel
Andreas Rheinhardt:
> Patches attached.
>
> - Andreas
>
Will apply this patchset tomorrow unless there are objections.
- Andreas
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2025-04-11 12:24 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-04-09 20:36 [FFmpeg-devel] [PATCH 01/10] avcodec/hq{xvlc, _hqadata}: Deduplicate and hardcode cbp, table Andreas Rheinhardt
2025-04-11 12:24 ` Andreas Rheinhardt
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
This inbox may be cloned and mirrored by anyone:
git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
ffmpegdev@gitmailbox.com
public-inbox-index ffmpegdev
Example config snippet for mirrors.
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git