aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/vlc.h
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-10-12 05:24:42 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-10-12 22:20:37 +0200
commit9eb7d8b45d0497d75e5655b79d9eea63bedc833c (patch)
tree69f95eb73cc15a457a840c3f915c85edd3ba25ad /libavcodec/vlc.h
parente78bbbc2b1e413d11e9edf818e1dc07f16aecf91 (diff)
downloadffmpeg-9eb7d8b45d0497d75e5655b79d9eea63bedc833c.tar.gz
avcodec/vlc, bitstream: Allow to use BE codes to initialize LE VLC
This is easily possible because ff_init_vlc_sparse() already transforms both LE as well as BE codes to a normal form internally before processing them further. This will be used in subsequent commits. Reviewed-by: Michael Niedermayer <michael@niedermayer.cc> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
Diffstat (limited to 'libavcodec/vlc.h')
-rw-r--r--libavcodec/vlc.h29
1 files changed, 19 insertions, 10 deletions
diff --git a/libavcodec/vlc.h b/libavcodec/vlc.h
index 42ccddf3fc..22d3e33485 100644
--- a/libavcodec/vlc.h
+++ b/libavcodec/vlc.h
@@ -51,26 +51,35 @@ int ff_init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes,
int flags);
void ff_free_vlc(VLC *vlc);
-#define INIT_VLC_LE 2
+/* If INIT_VLC_INPUT_LE is set, the LSB bit of the codes used to
+ * initialize the VLC table is the first bit to be read. */
+#define INIT_VLC_INPUT_LE 2
+/* If set the VLC is intended for a little endian bitstream reader. */
+#define INIT_VLC_OUTPUT_LE 8
+#define INIT_VLC_LE (INIT_VLC_INPUT_LE | INIT_VLC_OUTPUT_LE)
#define INIT_VLC_USE_NEW_STATIC 4
-#define INIT_VLC_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, h, i, j, static_size) \
+#define INIT_CUSTOM_VLC_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, \
+ h, i, j, flags, static_size) \
do { \
static VLC_TYPE table[static_size][2]; \
(vlc)->table = table; \
(vlc)->table_allocated = static_size; \
ff_init_vlc_sparse(vlc, bits, a, b, c, d, e, f, g, h, i, j, \
- INIT_VLC_USE_NEW_STATIC); \
+ flags | INIT_VLC_USE_NEW_STATIC); \
} while (0)
+#define INIT_VLC_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, h, i, j, static_size) \
+ INIT_CUSTOM_VLC_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, \
+ h, i, j, 0, static_size)
+
#define INIT_LE_VLC_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, h, i, j, static_size) \
- do { \
- static VLC_TYPE table[static_size][2]; \
- (vlc)->table = table; \
- (vlc)->table_allocated = static_size; \
- ff_init_vlc_sparse(vlc, bits, a, b, c, d, e, f, g, h, i, j, \
- INIT_VLC_USE_NEW_STATIC | INIT_VLC_LE); \
- } while (0)
+ INIT_CUSTOM_VLC_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, \
+ h, i, j, INIT_VLC_LE, static_size)
+
+#define INIT_CUSTOM_VLC_STATIC(vlc, bits, a, b, c, d, e, f, g, flags, static_size) \
+ INIT_CUSTOM_VLC_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, \
+ NULL, 0, 0, flags, static_size)
#define INIT_VLC_STATIC(vlc, bits, a, b, c, d, e, f, g, static_size) \
INIT_VLC_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, NULL, 0, 0, static_size)