diff options
author | James Almer <jamrial@gmail.com> | 2017-10-17 20:26:00 -0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2017-10-17 20:28:59 -0300 |
commit | 6007f7d4665e970714c2962c0ddb7de910d9da0c (patch) | |
tree | 199d6b22ab0f54964528cd45dc892f8da5ab8ac2 | |
parent | 8f2cc2f1e9ef7611cbba43fe96f331271b4844fd (diff) | |
parent | 5f794aa1653aa04c1da7397e9ccacad947fadf5f (diff) | |
download | ffmpeg-6007f7d4665e970714c2962c0ddb7de910d9da0c.tar.gz |
Merge commit '5f794aa1653aa04c1da7397e9ccacad947fadf5f'
* commit '5f794aa1653aa04c1da7397e9ccacad947fadf5f':
Add Cineform HD Decoder
See 3485332bf99602910fe8830b0230d02fc653135d.
Some cosmetics are merged. The refactoring is not merged at the
request of Kieran Kunhya.
Merged-by: James Almer <jamrial@gmail.com>
-rw-r--r-- | libavcodec/cfhd.c | 138 | ||||
-rw-r--r-- | libavcodec/cfhd.h | 18 | ||||
-rw-r--r-- | libavcodec/cfhddata.c | 208 |
3 files changed, 217 insertions, 147 deletions
diff --git a/libavcodec/cfhd.c b/libavcodec/cfhd.c index 5ea8f24821..5646ee8271 100644 --- a/libavcodec/cfhd.c +++ b/libavcodec/cfhd.c @@ -20,24 +20,39 @@ /** * @file - * CFHD Video Decoder + * Cineform HD video decoder */ +#include "libavutil/attributes.h" #include "libavutil/buffer.h" #include "libavutil/common.h" -#include "libavutil/intreadwrite.h" #include "libavutil/imgutils.h" +#include "libavutil/intreadwrite.h" #include "libavutil/opt.h" #include "avcodec.h" -#include "internal.h" #include "bytestream.h" +#include "get_bits.h" +#include "internal.h" #include "thread.h" #include "cfhd.h" -#define SUBBAND_COUNT 10 +enum CFHDParam { + ChannelCount = 12, + SubbandCount = 14, + ImageWidth = 20, + ImageHeight = 21, + LowpassPrecision = 35, + SubbandNumber = 48, + Quantization = 53, + ChannelNumber = 62, + BitsPerComponent = 101, + ChannelWidth = 104, + ChannelHeight = 105, + PrescaleShift = 109, +}; -static av_cold int cfhd_decode_init(AVCodecContext *avctx) +static av_cold int cfhd_init(AVCodecContext *avctx) { CFHDContext *s = avctx->priv_data; @@ -60,7 +75,7 @@ static void init_frame_defaults(CFHDContext *s) s->coded_height = 0; s->bpc = 10; s->channel_cnt = 4; - s->subband_cnt = 10; + s->subband_cnt = SUBBAND_COUNT; s->channel_num = 0; s->lowpass_precision = 16; s->quantisation = 1; @@ -74,15 +89,18 @@ static void init_frame_defaults(CFHDContext *s) static inline int dequant_and_decompand(int level, int quantisation) { int64_t abslevel = abs(level); - return (abslevel + ((768 * abslevel * abslevel * abslevel) / (255 * 255 * 255))) * FFSIGN(level) * quantisation; + return (abslevel + ((768 * abslevel * abslevel * abslevel) / (255 * 255 * 255))) * + FFSIGN(level) * quantisation; } -static inline void filter(int16_t *output, ptrdiff_t out_stride, int16_t *low, ptrdiff_t low_stride, - int16_t *high, ptrdiff_t high_stride, int len, uint8_t clip) +static inline void filter(int16_t *output, ptrdiff_t out_stride, + int16_t *low, ptrdiff_t low_stride, + int16_t *high, ptrdiff_t high_stride, + int len, int clip) { int16_t tmp; - int i; + for (i = 0; i < len; i++) { if (i == 0) { tmp = (11*low[0*low_stride] - 4*low[1*low_stride] + low[2*low_stride] + 4) >> 3; @@ -118,28 +136,30 @@ static inline void filter(int16_t *output, ptrdiff_t out_stride, int16_t *low, p } } -static void horiz_filter(int16_t *output, int16_t *low, int16_t *high, int width) +static void horiz_filter(int16_t *output, int16_t *low, int16_t *high, + int width) { filter(output, 1, low, 1, high, 1, width, 0); } -static void horiz_filter_clip(int16_t *output, int16_t *low, int16_t *high, int width, uint8_t clip) +static void horiz_filter_clip(int16_t *output, int16_t *low, int16_t *high, + int width, int clip) { filter(output, 1, low, 1, high, 1, width, clip); } -static void vert_filter(int16_t *output, int out_stride, int16_t *low, int low_stride, - int16_t *high, int high_stride, int len) +static void vert_filter(int16_t *output, ptrdiff_t out_stride, + int16_t *low, ptrdiff_t low_stride, + int16_t *high, ptrdiff_t high_stride, int len) { filter(output, out_stride, low, low_stride, high, high_stride, len, 0); } -static void free_buffers(AVCodecContext *avctx) +static void free_buffers(CFHDContext *s) { - CFHDContext *s = avctx->priv_data; int i, j; - for (i = 0; i < 4; i++) { + for (i = 0; i < FF_ARRAY_ELEMS(s->plane); i++) { av_freep(&s->plane[i].idwt_buf); av_freep(&s->plane[i].idwt_tmp); @@ -156,37 +176,43 @@ static void free_buffers(AVCodecContext *avctx) static int alloc_buffers(AVCodecContext *avctx) { CFHDContext *s = avctx->priv_data; - int i, j, k, ret, planes; + int i, j, ret, planes; + int chroma_x_shift, chroma_y_shift; + unsigned k; if ((ret = ff_set_dimensions(avctx, s->coded_width, s->coded_height)) < 0) return ret; avctx->pix_fmt = s->coded_format; - avcodec_get_chroma_sub_sample(avctx->pix_fmt, &s->chroma_x_shift, &s->chroma_y_shift); - planes = av_pix_fmt_count_planes(avctx->pix_fmt); + if ((ret = av_pix_fmt_get_chroma_sub_sample(s->coded_format, + &chroma_x_shift, + &chroma_y_shift)) < 0) + return ret; + planes = av_pix_fmt_count_planes(s->coded_format); for (i = 0; i < planes; i++) { - int width = i ? avctx->width >> s->chroma_x_shift : avctx->width; - int height = i ? avctx->height >> s->chroma_y_shift : avctx->height; - int stride = FFALIGN(width / 8, 8) * 8; int w8, h8, w4, h4, w2, h2; - height = FFALIGN(height / 8, 2) * 8; - s->plane[i].width = width; + int width = i ? avctx->width >> chroma_x_shift : avctx->width; + int height = i ? avctx->height >> chroma_y_shift : avctx->height; + ptrdiff_t stride = FFALIGN(width / 8, 8) * 8; + height = FFALIGN(height / 8, 2) * 8; + s->plane[i].width = width; s->plane[i].height = height; s->plane[i].stride = stride; - w8 = FFALIGN(s->plane[i].width / 8, 8); + w8 = FFALIGN(s->plane[i].width / 8, 8); h8 = FFALIGN(s->plane[i].height / 8, 2); w4 = w8 * 2; h4 = h8 * 2; w2 = w4 * 2; h2 = h4 * 2; - s->plane[i].idwt_buf = av_mallocz_array(height * stride, sizeof(*s->plane[i].idwt_buf)); - s->plane[i].idwt_tmp = av_malloc_array(height * stride, sizeof(*s->plane[i].idwt_tmp)); - if (!s->plane[i].idwt_buf || !s->plane[i].idwt_tmp) { + s->plane[i].idwt_buf = + av_mallocz_array(height * stride, sizeof(*s->plane[i].idwt_buf)); + s->plane[i].idwt_tmp = + av_malloc_array(height * stride, sizeof(*s->plane[i].idwt_tmp)); + if (!s->plane[i].idwt_buf || !s->plane[i].idwt_tmp) return AVERROR(ENOMEM); - } s->plane[i].subband[0] = s->plane[i].idwt_buf; s->plane[i].subband[1] = s->plane[i].idwt_buf + 2 * w8 * h8; @@ -200,7 +226,7 @@ static int alloc_buffers(AVCodecContext *avctx) s->plane[i].subband[9] = s->plane[i].idwt_buf + 3 * w2 * h2; for (j = 0; j < DWT_LEVELS; j++) { - for(k = 0; k < 4; k++) { + for (k = 0; k < FF_ARRAY_ELEMS(s->plane[i].band[j]); k++) { s->plane[i].band[j][k].a_width = w8 << j; s->plane[i].band[j][k].a_height = h8 << j; } @@ -209,10 +235,10 @@ static int alloc_buffers(AVCodecContext *avctx) /* ll2 and ll1 commented out because they are done in-place */ s->plane[i].l_h[0] = s->plane[i].idwt_tmp; s->plane[i].l_h[1] = s->plane[i].idwt_tmp + 2 * w8 * h8; - //s->plane[i].l_h[2] = ll2; + // s->plane[i].l_h[2] = ll2; s->plane[i].l_h[3] = s->plane[i].idwt_tmp; s->plane[i].l_h[4] = s->plane[i].idwt_tmp + 2 * w4 * h4; - //s->plane[i].l_h[5] = ll1; + // s->plane[i].l_h[5] = ll1; s->plane[i].l_h[6] = s->plane[i].idwt_tmp; s->plane[i].l_h[7] = s->plane[i].idwt_tmp + 2 * w2 * h2; } @@ -250,10 +276,10 @@ static int cfhd_decode(AVCodecContext *avctx, void *data, int *got_frame, uint16_t data = bytestream2_get_be16(&gb); if (abs_tag8 >= 0x60 && abs_tag8 <= 0x6f) { av_log(avctx, AV_LOG_DEBUG, "large len %x\n", ((tagu & 0xff) << 16) | data); - } else if (tag == 20) { + } else if (tag == ImageWidth) { av_log(avctx, AV_LOG_DEBUG, "Width %"PRIu16"\n", data); s->coded_width = data; - } else if (tag == 21) { + } else if (tag == ImageHeight) { av_log(avctx, AV_LOG_DEBUG, "Height %"PRIu16"\n", data); s->coded_height = data; } else if (tag == 101) { @@ -264,7 +290,7 @@ static int cfhd_decode(AVCodecContext *avctx, void *data, int *got_frame, break; } s->bpc = data; - } else if (tag == 12) { + } else if (tag == ChannelCount) { av_log(avctx, AV_LOG_DEBUG, "Channel Count: %"PRIu16"\n", data); s->channel_cnt = data; if (data > 4) { @@ -272,14 +298,14 @@ static int cfhd_decode(AVCodecContext *avctx, void *data, int *got_frame, ret = AVERROR_PATCHWELCOME; break; } - } else if (tag == 14) { + } else if (tag == SubbandCount) { av_log(avctx, AV_LOG_DEBUG, "Subband Count: %"PRIu16"\n", data); if (data != SUBBAND_COUNT) { av_log(avctx, AV_LOG_ERROR, "Subband Count of %"PRIu16" is unsupported\n", data); ret = AVERROR_PATCHWELCOME; break; } - } else if (tag == 62) { + } else if (tag == ChannelNumber) { s->channel_num = data; av_log(avctx, AV_LOG_DEBUG, "Channel number %"PRIu16"\n", data); if (s->channel_num >= planes) { @@ -288,7 +314,7 @@ static int cfhd_decode(AVCodecContext *avctx, void *data, int *got_frame, break; } init_plane_defaults(s); - } else if (tag == 48) { + } else if (tag == SubbandNumber) { if (s->subband_num != 0 && data == 1) // hack s->level++; av_log(avctx, AV_LOG_DEBUG, "Subband number %"PRIu16"\n", data); @@ -311,12 +337,12 @@ static int cfhd_decode(AVCodecContext *avctx, void *data, int *got_frame, ret = AVERROR(EINVAL); break; } - } else if (tag == 35) + } else if (tag == LowpassPrecision) av_log(avctx, AV_LOG_DEBUG, "Lowpass precision bits: %"PRIu16"\n", data); - else if (tag == 53) { + else if (tag == Quantization) { s->quantisation = data; av_log(avctx, AV_LOG_DEBUG, "Quantisation: %"PRIu16"\n", data); - } else if (tag == 109) { + } else if (tag == PrescaleShift) { s->prescale_shift[0] = (data >> 0) & 0x7; s->prescale_shift[1] = (data >> 3) & 0x7; s->prescale_shift[2] = (data >> 6) & 0x7; @@ -437,9 +463,9 @@ static int cfhd_decode(AVCodecContext *avctx, void *data, int *got_frame, s->coded_format != AV_PIX_FMT_NONE) { if (s->a_width != s->coded_width || s->a_height != s->coded_height || s->a_format != s->coded_format) { - free_buffers(avctx); + free_buffers(s); if ((ret = alloc_buffers(avctx)) < 0) { - free_buffers(avctx); + free_buffers(s); return ret; } } @@ -775,11 +801,11 @@ end: return avpkt->size; } -static av_cold int cfhd_close_decoder(AVCodecContext *avctx) +static av_cold int cfhd_close(AVCodecContext *avctx) { CFHDContext *s = avctx->priv_data; - free_buffers(avctx); + free_buffers(s); if (!avctx->internal->is_copy) { ff_free_vlc(&s->vlc_9); @@ -790,14 +816,14 @@ static av_cold int cfhd_close_decoder(AVCodecContext *avctx) } AVCodec ff_cfhd_decoder = { - .name = "cfhd", - .long_name = NULL_IF_CONFIG_SMALL("Cineform HD"), - .type = AVMEDIA_TYPE_VIDEO, - .id = AV_CODEC_ID_CFHD, - .priv_data_size = sizeof(CFHDContext), - .init = cfhd_decode_init, - .close = cfhd_close_decoder, - .decode = cfhd_decode, - .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, - .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, + .name = "cfhd", + .long_name = NULL_IF_CONFIG_SMALL("Cineform HD"), + .type = AVMEDIA_TYPE_VIDEO, + .id = AV_CODEC_ID_CFHD, + .priv_data_size = sizeof(CFHDContext), + .init = cfhd_init, + .close = cfhd_close, + .decode = cfhd_decode, + .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, }; diff --git a/libavcodec/cfhd.h b/libavcodec/cfhd.h index 67a0e4c32c..b0a52088aa 100644 --- a/libavcodec/cfhd.h +++ b/libavcodec/cfhd.h @@ -27,10 +27,10 @@ #include "avcodec.h" #include "get_bits.h" +#include "vlc.h" -#define VLC_BITS 9 -#define NB_VLC_TABLE_9 (71+3) -#define NB_VLC_TABLE_18 (263+1) +#define VLC_BITS 9 +#define SUBBAND_COUNT 10 typedef struct CFHD_RL_VLC_ELEM { int16_t level; @@ -43,7 +43,7 @@ typedef struct CFHD_RL_VLC_ELEM { typedef struct SubBand { int level; int orientation; - int stride; + ptrdiff_t stride; int a_width; int width; int a_height; @@ -62,7 +62,7 @@ typedef struct Plane { int16_t *idwt_tmp; /* TODO: merge this into SubBand structure */ - int16_t *subband[10]; + int16_t *subband[SUBBAND_COUNT]; int16_t *l_h[8]; SubBand band[DWT_LEVELS][4]; @@ -79,18 +79,15 @@ typedef struct CFHDContext { GetBitContext gb; - int chroma_x_shift; - int chroma_y_shift; - int coded_width; int coded_height; - int coded_format; + enum AVPixelFormat coded_format; int a_width; int a_height; int a_format; - int bpc; + int bpc; // bits per channel/component int channel_cnt; int subband_cnt; int channel_num; @@ -106,7 +103,6 @@ typedef struct CFHDContext { uint8_t prescale_shift[3]; Plane plane[4]; - } CFHDContext; int ff_cfhd_init_vlcs(CFHDContext *s); diff --git a/libavcodec/cfhddata.c b/libavcodec/cfhddata.c index 9330d34645..5df68d4b3c 100644 --- a/libavcodec/cfhddata.c +++ b/libavcodec/cfhddata.c @@ -18,7 +18,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "stdint.h" +#include <stdint.h> + +#include "libavutil/attributes.h" + #include "cfhd.h" /* some special codewords, not sure what they all mean */ @@ -29,6 +32,31 @@ #define TABLE_9_BAND_END3 0x38F0B3Eh #define TABLE_9_BAND_END_LEN3 26 +#define NB_VLC_TABLE_9 (71 + 3) +#define NB_VLC_TABLE_18 (263 + 1) + +static const uint32_t table_9_vlc_bits[NB_VLC_TABLE_9] = { + 0, 0x2, 0xc, 0x1a, + 0x1d, 0x1e, 0x39, 0x3e, + 0x37, 0x7e, 0x6c, 0xe2, + 0xfe, 0xdb, 0xe0, 0x1c3, + 0x1c6, 0x1ff, 0x1fe, 0x1b5, + 0x369, 0x385, 0x71d, 0x6d0, + 0x708, 0x71f, 0xe3d, 0xe39, + 0xe13, 0xe12, 0x1c71, 0x1b45, + 0x1b47, 0x3689, 0x38f2, 0x38e1, + 0x38e0, 0x38f1, 0x3688, 0x6d1b, + 0x71e0, 0x6d19, 0x71e7, 0xe3cd, + 0xda35, 0xda30, 0xe3c3, 0x1b469, + 0x1b462, 0x1c798, 0x1b463, 0x1c799, + 0x38f08, 0x38f09, 0x38f0a, 0x6d1a0, + 0x6d1a3, 0x6d1a1, 0xda345, 0xda344, + 0xe3c2d, 0xe3c2f, 0xe3c2e, 0x38f0b2, + 0x71e160, 0x71e162, 0x71e166, 0x71e161, + 0xe3c2ce, 0xe3c2c6, 0xe3c2c7, 0x1C7859E, + 0x38F0B3F, 0x38F0B3E, +}; + static const uint8_t table_9_vlc_len[NB_VLC_TABLE_9] = { 1, 2, 4, 5, 5, 5, 6, 6, 6, 7, 7, 8, 8, 8, 8, 9, @@ -42,19 +70,6 @@ static const uint8_t table_9_vlc_len[NB_VLC_TABLE_9] = { 26, 26, }; -static const uint32_t table_9_vlc_bits[NB_VLC_TABLE_9] = { - 0, 0x2, 0xc, 0x1a, 0x1d, 0x1e, 0x39, 0x3e, - 0x37, 0x7e, 0x6c, 0xe2, 0xfe, 0xdb, 0xe0, 0x1c3, - 0x1c6, 0x1ff, 0x1fe, 0x1b5, 0x369, 0x385, 0x71d, 0x6d0, - 0x708, 0x71f, 0xe3d, 0xe39, 0xe13, 0xe12, 0x1c71, 0x1b45, - 0x1b47, 0x3689, 0x38f2, 0x38e1, 0x38e0, 0x38f1, 0x3688, 0x6d1b, - 0x71e0, 0x6d19, 0x71e7, 0xe3cd, 0xda35, 0xda30, 0xe3c3, 0x1b469, - 0x1b462, 0x1c798, 0x1b463, 0x1c799, 0x38f08, 0x38f09, 0x38f0a, 0x6d1a0, - 0x6d1a3, 0x6d1a1, 0xda345, 0xda344, 0xe3c2d, 0xe3c2f, 0xe3c2e, 0x38f0b2, - 0x71e160, 0x71e162, 0x71e166, 0x71e161, 0xe3c2ce, 0xe3c2c6, 0xe3c2c7, 0x1C7859E, - 0x38F0B3F, 0x38F0B3E, -}; - static const uint16_t table_9_vlc_run[NB_VLC_TABLE_9] = { 1, 1, 1, 1, 12, 1, 32, 160, 1, 1, 1, 320, 1, 1, 80, 120, @@ -82,39 +97,72 @@ static const uint8_t table_9_vlc_level[NB_VLC_TABLE_9] = { }; static const uint32_t table_18_vlc_bits[NB_VLC_TABLE_18] = { - 0, 0x2, 0x7, 0x19, 0x30, 0x36, 0x6f, 0x63, - 0x69, 0x6b, 0xd1, 0xd4, 0xdc, 0x189, 0x18a, 0x1a0, - 0x1ab, 0x377, 0x310, 0x316, 0x343, 0x354, 0x375, 0x623, - 0x684, 0x685, 0x6ab, 0x6ec, 0xddb, 0xc5c, 0xc5e, 0xc44, - 0xd55, 0xdd1, 0xdd3, 0x1bb5, 0x188b, 0x18bb, 0x18bf, 0x1aa8, - 0x1ba0, 0x1ba5, 0x1ba4, 0x3115, 0x3175, 0x317d, 0x3553, 0x3768, - 0x6e87, 0x6ed3, 0x62e8, 0x62f8, 0x6228, 0x6aa4, 0x6e85, 0xc453, - 0xc5d3, 0xc5f3, 0xdda4, 0xdd08, 0xdd0c, 0x1bb4b, 0x1bb4a, 0x18ba5, - 0x18be5, 0x1aa95, 0x1aa97, 0x188a4, 0x1ba13, 0x31748, 0x317c8, 0x35528, - 0x3552c, 0x37424, 0x37434, 0x37436, 0x62294, 0x62e92, 0x62f92, 0x6aa52, - 0x6aa5a, 0x6e86a, 0x6e86e, 0x6e84a, 0xc452a, 0xc5d27, 0xc5f26, 0xd54a6, - 0xd54b6, 0xdd096, 0xdd0d6, 0xdd0de, 0x188a56, 0x18ba4d, 0x18be4e, 0x18be4f, - 0x1aa96e, 0x1ba12e, 0x1ba12f, 0x1ba1af, 0x1ba1bf, 0x37435d, 0x37437d, 0x317498, - 0x35529c, 0x35529d, 0x3552de, 0x3552df, 0x62e933, 0x62295d, 0x6aa53d, 0x6aa53f, - 0x6aa53e, 0x6e86b9, 0x6e86f8, 0xd54a79, 0xc5d265, 0xc452b8, 0xdd0d71, 0xd54a78, - 0xdd0d70, 0xdd0df2, 0xdd0df3, 0x188a5f6, 0x188a5f5, 0x188a5f4, 0x188a5f3, 0x188a5f2, - 0x188a5f1, 0x188a5f0, 0x188a5ef, 0x188a5ee, 0x188a5ed, 0x188a5aa, 0x188a5e3, 0x188a5df, - 0x188a589, 0x188a5dd, 0x188a578, 0x188a5e0, 0x188a588, 0x188a5d6, 0x188a5db, 0x188a5e1, - 0x188a587, 0x188a59a, 0x188a5c4, 0x188a5ec, 0x188a586, 0x188a573, 0x188a59c, 0x188a5c8, - 0x188a5fb, 0x188a5a1, 0x188a5eb, 0x188a5a8, 0x188a584, 0x188a5d2, 0x188a599, 0x188a598, - 0x188a583, 0x18ba4c9, 0x188a5d0, 0x188a594, 0x188a582, 0x188a5cb, 0x188a5d8, 0x188a5e7, - 0x188a581, 0x188a5ea, 0x188a5a9, 0x188a5a6, 0x188a580, 0x188a5a0, 0x188a59d, 0x188a5c3, - 0x188a57f, 0x188a5c0, 0x188a5de, 0x188a5d4, 0x188a57e, 0x188a5c2, 0x188a592, 0x188a5cd, - 0x188a57d, 0x188a5a3, 0x188a5e8, 0x188a5a2, 0x188a57c, 0x188a58e, 0x188a5b3, 0x188a5b2, - 0x188a5b1, 0x188a5b0, 0x188a5af, 0x188a5ae, 0x188a5ad, 0x188a5ac, 0x188a5ab, 0x188a5da, - 0x188a5e4, 0x188a5e5, 0x188a5d9, 0x188a5b5, 0x188a5bc, 0x188a5bd, 0x188a5e9, 0x188a5cc, - 0x188a585, 0x188a5d3, 0x188a5e2, 0x188a595, 0x188a596, 0x188a5b8, 0x188a590, 0x188a5c9, - 0x188a5a4, 0x188a5e6, 0x188a5a5, 0x188a5ce, 0x188a5bf, 0x188a572, 0x188a59b, 0x188a5be, - 0x188a5c7, 0x188a5ca, 0x188a5d5, 0x188a57b, 0x188a58d, 0x188a58c, 0x188a58b, 0x188a58a, - 0x18ba4c8, 0x188a5c5, 0x188a5fa, 0x188a5bb, 0x188a5c1, 0x188a5cf, 0x188a5b9, 0x188a5b6, - 0x188a597, 0x188a5fe, 0x188a5d7, 0x188a5ba, 0x188a591, 0x188a5c6, 0x188a5dc, 0x188a57a, - 0x188a59f, 0x188a5f9, 0x188a5b4, 0x188a5a7, 0x188a58f, 0x188a5fd, 0x188a5b7, 0x188a593, - 0x188a59e, 0x188a5f8, 0x188a5ff, 0x188a5fc, 0x188a579, 0x188a5f7, 0x3114ba2, 0x3114ba3, + 0, 0x2, 0x7, 0x19, + 0x30, 0x36, 0x6f, 0x63, + 0x69, 0x6b, 0xd1, 0xd4, + 0xdc, 0x189, 0x18a, 0x1a0, + 0x1ab, 0x377, 0x310, 0x316, + 0x343, 0x354, 0x375, 0x623, + 0x684, 0x685, 0x6ab, 0x6ec, + 0xddb, 0xc5c, 0xc5e, 0xc44, + 0xd55, 0xdd1, 0xdd3, 0x1bb5, + 0x188b, 0x18bb, 0x18bf, 0x1aa8, + 0x1ba0, 0x1ba5, 0x1ba4, 0x3115, + 0x3175, 0x317d, 0x3553, 0x3768, + 0x6e87, 0x6ed3, 0x62e8, 0x62f8, + 0x6228, 0x6aa4, 0x6e85, 0xc453, + 0xc5d3, 0xc5f3, 0xdda4, 0xdd08, + 0xdd0c, 0x1bb4b, 0x1bb4a, 0x18ba5, + 0x18be5, 0x1aa95, 0x1aa97, 0x188a4, + 0x1ba13, 0x31748, 0x317c8, 0x35528, + 0x3552c, 0x37424, 0x37434, 0x37436, + 0x62294, 0x62e92, 0x62f92, 0x6aa52, + 0x6aa5a, 0x6e86a, 0x6e86e, 0x6e84a, + 0xc452a, 0xc5d27, 0xc5f26, 0xd54a6, + 0xd54b6, 0xdd096, 0xdd0d6, 0xdd0de, + 0x188a56, 0x18ba4d, 0x18be4e, 0x18be4f, + 0x1aa96e, 0x1ba12e, 0x1ba12f, 0x1ba1af, + 0x1ba1bf, 0x37435d, 0x37437d, 0x317498, + 0x35529c, 0x35529d, 0x3552de, 0x3552df, + 0x62e933, 0x62295d, 0x6aa53d, 0x6aa53f, + 0x6aa53e, 0x6e86b9, 0x6e86f8, 0xd54a79, + 0xc5d265, 0xc452b8, 0xdd0d71, 0xd54a78, + 0xdd0d70, 0xdd0df2, 0xdd0df3, 0x188a5f6, + 0x188a5f5, 0x188a5f4, 0x188a5f3, 0x188a5f2, + 0x188a5f1, 0x188a5f0, 0x188a5ef, 0x188a5ee, + 0x188a5ed, 0x188a5aa, 0x188a5e3, 0x188a5df, + 0x188a589, 0x188a5dd, 0x188a578, 0x188a5e0, + 0x188a588, 0x188a5d6, 0x188a5db, 0x188a5e1, + 0x188a587, 0x188a59a, 0x188a5c4, 0x188a5ec, + 0x188a586, 0x188a573, 0x188a59c, 0x188a5c8, + 0x188a5fb, 0x188a5a1, 0x188a5eb, 0x188a5a8, + 0x188a584, 0x188a5d2, 0x188a599, 0x188a598, + 0x188a583, 0x18ba4c9, 0x188a5d0, 0x188a594, + 0x188a582, 0x188a5cb, 0x188a5d8, 0x188a5e7, + 0x188a581, 0x188a5ea, 0x188a5a9, 0x188a5a6, + 0x188a580, 0x188a5a0, 0x188a59d, 0x188a5c3, + 0x188a57f, 0x188a5c0, 0x188a5de, 0x188a5d4, + 0x188a57e, 0x188a5c2, 0x188a592, 0x188a5cd, + 0x188a57d, 0x188a5a3, 0x188a5e8, 0x188a5a2, + 0x188a57c, 0x188a58e, 0x188a5b3, 0x188a5b2, + 0x188a5b1, 0x188a5b0, 0x188a5af, 0x188a5ae, + 0x188a5ad, 0x188a5ac, 0x188a5ab, 0x188a5da, + 0x188a5e4, 0x188a5e5, 0x188a5d9, 0x188a5b5, + 0x188a5bc, 0x188a5bd, 0x188a5e9, 0x188a5cc, + 0x188a585, 0x188a5d3, 0x188a5e2, 0x188a595, + 0x188a596, 0x188a5b8, 0x188a590, 0x188a5c9, + 0x188a5a4, 0x188a5e6, 0x188a5a5, 0x188a5ce, + 0x188a5bf, 0x188a572, 0x188a59b, 0x188a5be, + 0x188a5c7, 0x188a5ca, 0x188a5d5, 0x188a57b, + 0x188a58d, 0x188a58c, 0x188a58b, 0x188a58a, + 0x18ba4c8, 0x188a5c5, 0x188a5fa, 0x188a5bb, + 0x188a5c1, 0x188a5cf, 0x188a5b9, 0x188a5b6, + 0x188a597, 0x188a5fe, 0x188a5d7, 0x188a5ba, + 0x188a591, 0x188a5c6, 0x188a5dc, 0x188a57a, + 0x188a59f, 0x188a5f9, 0x188a5b4, 0x188a5a7, + 0x188a58f, 0x188a5fd, 0x188a5b7, 0x188a593, + 0x188a59e, 0x188a5f8, 0x188a5ff, 0x188a5fc, + 0x188a579, 0x188a5f7, 0x3114ba2, 0x3114ba3, }; static const uint8_t table_18_vlc_len[NB_VLC_TABLE_18] = { @@ -154,39 +202,39 @@ static const uint8_t table_18_vlc_len[NB_VLC_TABLE_18] = { }; static const uint16_t table_18_vlc_run[NB_VLC_TABLE_18] = { - 1, 1, 1, 1, 1, 1, 1, 1, - 12, 1, 20, 1, 1, 1, 32, 1, - 1, 1, 1, 1, 60, 1, 1, 1, - 1, 100, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 180, 1, - 1, 320, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, + 1, 1, 1, 1, 1, 1, 1, 1, + 12, 1, 20, 1, 1, 1, 32, 1, + 1, 1, 1, 1, 60, 1, 1, 1, + 1, 100, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 180, 1, + 1, 320, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, }; static const uint8_t table_18_vlc_level[NB_VLC_TABLE_18] = { |