33 #define UNCHECKED_BITSTREAM_READER 1
35 #include "config_components.h"
90 34, 36, 35, 69, 135, 232, 9, 16, 10, 24, 11, 23, 12, 16, 13, 10,
91 14, 8, 15, 8, 16, 8, 17, 20, 16, 10, 207, 206, 205, 236, 11, 8,
92 10, 21, 9, 23, 8, 8, 199, 70, 69, 68,
96 66, 36, 37, 38, 39, 40, 41, 75, 76, 77, 110, 239, 144, 81, 82, 83,
97 84, 85, 118, 183, 56, 57, 88, 89, 56, 89, 154, 57, 58, 57, 26, 141,
98 57, 56, 58, 57, 58, 57, 184, 119, 214, 245, 116, 83, 82, 49, 80, 79,
99 78, 77, 44, 75, 41, 40, 39, 38, 37, 36, 34,
103 3, 9, 5, 12, 10, 35, 32, 29, 27, 50, 48, 45, 44, 41, 39, 37,
104 73, 70, 68, 65, 64, 61, 58, 56, 53, 50, 49, 46, 44, 41, 38, 36,
105 68, 65, 63, 61, 58, 55, 53, 51, 48, 46, 45, 43, 41, 39, 38, 36,
106 35, 33, 32, 30, 29, 27, 26, 25, 48, 47, 46, 44, 43, 41, 40, 39,
107 37, 36, 35, 34, 32, 31, 30, 28, 27, 26, 24, 23, 22, 20, 19, 37,
108 35, 34, 33, 31, 30, 29, 27, 26, 24, 23, 21, 20, 18, 17, 15, 29,
109 27, 26, 24, 22, 21, 19, 17, 16, 14, 26, 25, 23, 21, 19, 18, 16,
110 15, 27, 25, 23, 21, 19, 17, 16, 14, 26, 25, 23, 21, 18, 17, 14,
111 12, 17, 19, 13, 4, 9, 2, 11, 1, 7, 8, 0, 16, 3, 14, 6,
112 12, 10, 5, 15, 18, 11, 10, 13, 15, 16, 19, 20, 22, 24, 27, 15,
113 18, 20, 22, 24, 26, 14, 17, 20, 22, 24, 27, 15, 18, 20, 23, 25,
114 28, 16, 19, 22, 25, 28, 32, 36, 21, 25, 29, 33, 38, 42, 45, 49,
115 28, 31, 34, 37, 40, 42, 44, 47, 49, 50, 52, 54, 56, 57, 59, 60,
116 62, 64, 66, 67, 69, 35, 37, 39, 40, 42, 43, 45, 47, 48, 51, 52,
117 54, 55, 57, 59, 60, 62, 63, 66, 67, 69, 71, 72, 38, 40, 42, 43,
118 46, 47, 49, 51, 26, 28, 30, 31, 33, 34, 18, 19, 11, 13, 7, 8,
122 3, 1, 2, 2, 2, 2, 3, 3, 7, 5, 7, 5, 8, 6, 11, 9,
123 7, 13, 11, 10, 9, 8, 7, 5, 9, 7, 6, 4, 7, 5, 8, 7,
124 11, 8, 13, 11, 19, 15, 22, 23, 20, 33, 32, 28, 27, 29, 51, 77,
125 43, 45, 76, 81, 46, 82, 75, 55, 56, 144, 58, 80, 60, 74, 147, 63,
126 143, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
127 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 27, 30, 21, 22,
128 17, 14, 5, 6, 100, 54, 47, 50, 51, 53, 106, 107, 108, 109, 110, 111,
129 112, 113, 114, 115, 4, 117, 118, 92, 94, 121, 122, 3, 124, 103, 2, 1,
130 0, 129, 130, 131, 120, 119, 126, 125, 136, 137, 138, 139, 140, 141, 142, 134,
131 135, 132, 133, 104, 64, 101, 62, 57, 102, 95, 93, 59, 61, 28, 97, 96,
132 52, 49, 48, 29, 32, 25, 24, 46, 23, 98, 45, 44, 43, 20, 42, 41,
133 19, 18, 99, 40, 15, 39, 38, 16, 13, 12, 11, 37, 10, 9, 8, 36,
134 7, 128, 127, 105, 123, 116, 35, 34, 33, 145, 31, 79, 42, 146, 78, 26,
135 83, 48, 49, 50, 44, 47, 26, 31, 30, 18, 17, 19, 21, 24, 25, 13,
136 14, 16, 17, 18, 20, 21, 12, 14, 15, 9, 10, 6, 9, 6, 5, 8,
137 6, 12, 8, 10, 7, 9, 6, 4, 6, 2, 2, 3, 3, 3, 3, 2,
144 for (
i = 0;
i < n;) {
147 repeat = bytestream2_peek_byteu(gb) >> 5;
148 val = bytestream2_get_byteu(gb) & 0x1F;
152 repeat = bytestream2_get_byteu(gb);
177 if (
s->bitstream_bpp < 24 ||
s->version > 2) {
178 int count = 1 +
s->alpha + 2 *
s->chroma;
180 for (
p = 0;
p < count;
p++) {
181 int p0 =
s->version > 2 ?
p : 0;
182 for (
i = y = 0; y <
s->vlc_n; y++) {
183 int len0 =
s->len[p0][y];
185 if (
limit <= 0 || !len0)
189 for (
u = 0;
u <
s->vlc_n;
u++) {
190 int len1 =
s->len[
p][
u];
191 if (len1 >
limit || !len1)
196 len[
i] = len0 + len1;
197 bits[
i] = (
s->bits[p0][y] << len1) +
s->bits[
p][
u];
198 symbols[
i] = (y << 8) + (
u & 0xFF);
204 bits, 2, 2, symbols, 2, 2, 0)) < 0)
208 uint8_t (*
map)[4] = (uint8_t(*)[4])
s->pix_bgr_map;
210 int p0 =
s->decorrelate;
211 int p1 = !
s->decorrelate;
215 for (
i = 0,
g = -16;
g < 16;
g++) {
216 int len0 =
s->len[p0][
g & 255];
218 if (limit0 < 2 || !len0)
220 for (
b = -16;
b < 16;
b++) {
221 int len1 =
s->len[p1][
b & 255];
222 int limit1 = limit0 - len1;
223 if (limit1 < 1 || !len1)
225 code = (
s->bits[p0][
g & 255] << len1) +
s->bits[p1][
b & 255];
226 for (
r = -16;
r < 16;
r++) {
227 int len2 =
s->len[2][
r & 255];
228 if (len2 > limit1 || !len2)
231 len[
i] = len0 + len1 + len2;
233 if (
s->decorrelate) {
266 count = 1 +
s->alpha + 2*
s->chroma;
268 for (
i = 0;
i < count;
i++) {
275 s->bits[
i], 4, 4, 0)) < 0)
300 for (
i = 0;
i < 256;
i++)
305 if (
s->bitstream_bpp >= 24) {
306 memcpy(
s->bits[1],
s->bits[0], 256 *
sizeof(uint32_t));
307 memcpy(
s->len[1],
s->len[0], 256 *
sizeof(uint8_t));
309 memcpy(
s->bits[2],
s->bits[1], 256 *
sizeof(uint32_t));
310 memcpy(
s->len[2],
s->len[1], 256 *
sizeof(uint8_t));
312 for (
i = 0;
i < 4;
i++) {
315 s->bits[
i], 4, 4, 0)) < 0)
330 for (
int i = 0;
i < 3;
i++)
335 for (
i = 0;
i < 8;
i++)
356 s->interlaced = avctx->
height > 288;
374 if (
s->version >= 2) {
375 int method, interlace;
381 s->decorrelate = method & 64 ? 1 : 0;
382 s->predictor = method & 63;
383 if (
s->version == 2) {
385 if (
s->bitstream_bpp == 0)
392 s->chroma_v_shift = (avctx->
extradata[1] >> 2) & 3;
397 interlace = (avctx->
extradata[2] & 0x30) >> 4;
398 s->interlaced = (interlace == 1) ? 1 : (interlace == 2) ? 0 :
s->interlaced;
399 s->context = avctx->
extradata[2] & 0x40 ? 1 : 0;
434 if (
s->version <= 2) {
435 switch (
s->bitstream_bpp) {
465 switch ( (
s->chroma<<10) | (
s->yuv<<9) | (
s->alpha<<8) | ((
s->bps-1)<<4) |
s->chroma_h_shift | (
s->chroma_v_shift<<2)) {
604 "for this combination of colorspace and predictor type.\n");
608 for (
int i = 0;
i < 3;
i++) {
618 #define VLC_INTERN(dst, table, gb, name, bits, max_depth) \
619 code = table[index].sym; \
620 n = table[index].len; \
621 if (max_depth > 1 && n < 0) { \
622 LAST_SKIP_BITS(name, gb, bits); \
623 UPDATE_CACHE(name, gb); \
626 index = SHOW_UBITS(name, gb, nb_bits) + code; \
627 code = table[index].sym; \
628 n = table[index].len; \
629 if (max_depth > 2 && n < 0) { \
630 LAST_SKIP_BITS(name, gb, nb_bits); \
631 UPDATE_CACHE(name, gb); \
634 index = SHOW_UBITS(name, gb, nb_bits) + code; \
635 code = table[index].sym; \
636 n = table[index].len; \
640 LAST_SKIP_BITS(name, gb, n)
643 #define GET_VLC_DUAL(dst0, dst1, name, gb, dtable, table1, table2, \
644 bits, max_depth, OP) \
646 unsigned int index = SHOW_UBITS(name, gb, bits); \
647 int code, n = dtable[index].len; \
651 VLC_INTERN(dst0, table1, gb, name, bits, max_depth); \
653 UPDATE_CACHE(re, gb); \
654 index = SHOW_UBITS(name, gb, bits); \
655 VLC_INTERN(dst1, table2, gb, name, bits, max_depth); \
657 code = dtable[index].sym; \
658 OP(dst0, dst1, code); \
659 LAST_SKIP_BITS(name, gb, n); \
663 #define OP8bits(dst0, dst1, code) dst0 = code>>8; dst1 = code
665 #define READ_2PIX(dst0, dst1, plane1) \
666 UPDATE_CACHE(re, &s->gb); \
667 GET_VLC_DUAL(dst0, dst1, re, &s->gb, s->vlc[4+plane1].table, \
668 s->vlc[0].table, s->vlc[plane1].table, VLC_BITS, 3, OP8bits)
677 if (count >= icount) {
678 for (
i = 0;
i < icount;
i++) {
687 for (;
i < count;
i++)
688 s->temp[0][2 *
i ] =
s->temp[1][
i] =
689 s->temp[0][2 *
i + 1] =
s->temp[2][
i] = 0;
691 for (
i = 0;
i < count;
i++) {
699 #define READ_2PIX_PLANE(dst0, dst1, plane, OP) \
700 UPDATE_CACHE(re, &s->gb); \
701 GET_VLC_DUAL(dst0, dst1, re, &s->gb, s->vlc[4+plane].table, \
702 s->vlc[plane].table, s->vlc[plane].table, VLC_BITS, 3, OP)
704 #define OP14bits(dst0, dst1, code) dst0 = code>>8; dst1 = sign_extend(code, 8)
708 #define READ_2PIX_PLANE16(dst0, dst1, plane){\
709 dst0 = get_vlc2(&s->gb, s->vlc[plane].table, VLC_BITS, 3)*4;\
710 dst0 += get_bits(&s->gb, 2);\
711 dst1 = get_vlc2(&s->gb, s->vlc[plane].table, VLC_BITS, 3)*4;\
712 dst1 += get_bits(&s->gb, 2);\
725 for(
i=0;
i<count;
i++){
731 int nb_bits,
code, n;
738 }
else if (
s->bps <= 14) {
745 for(
i=0;
i<count;
i++){
751 int nb_bits,
code, n;
764 for(
i=0;
i<count;
i++){
785 for (;
i < count;
i++)
786 s->temp[0][2 *
i] =
s->temp[0][2 *
i + 1] = 0;
788 for (
i = 0;
i < count;
i++) {
803 int code, n, nb_bits;
807 n =
s->vlc[4].table[
index].len;
811 *(uint32_t *) &
s->temp[0][4 *
i] =
s->pix_bgr_map[
code];
821 s->temp[0][4 *
i +
B] =
code +
s->temp[0][4 *
i +
G];
826 s->temp[0][4 *
i +
R] =
code +
s->temp[0][4 *
i +
G];
848 s->temp[0][4 *
i +
A] = 0;
855 if (
s->decorrelate) {
856 if (
s->bitstream_bpp == 24)
861 if (
s->bitstream_bpp == 24)
876 h = y -
s->last_slice_end;
879 if (
s->bitstream_bpp == 12)
892 s->last_slice_end = y +
h;
898 return s->llviddsp.add_left_pred(
dst,
src,
w, acc);
900 return s->llviddsp.add_left_pred_int16(( uint16_t *)
dst, (
const uint16_t *)
src,
s->n-1,
w, acc);
909 s->hdsp.add_int16((uint16_t*)
dst, (
const uint16_t*)
src,
s->n - 1,
w);
918 s->hdsp.add_hfyu_median_pred_int16((uint16_t *)
dst, (
const uint16_t *)
src, (
const uint16_t *)
diff,
s->n-1,
w,
left, left_top);
923 int buf_size,
int y_offset,
int table_size)
926 int fake_ystride, fake_ustride, fake_vstride;
928 const int width2 = avctx->
width >> 1;
931 if ((
ret =
init_get_bits8(&
s->gb,
s->bitstream_buffer + table_size, buf_size - table_size)) < 0)
934 fake_ystride =
s->interlaced ?
p->linesize[0] * 2 :
p->linesize[0];
935 fake_ustride =
s->interlaced ?
p->linesize[1] * 2 :
p->linesize[1];
936 fake_vstride =
s->interlaced ?
p->linesize[2] * 2 :
p->linesize[2];
938 if (
s->version > 2) {
940 for(plane = 0; plane < 1 + 2*
s->chroma +
s->alpha; plane++) {
941 int left, lefttop, y;
944 int fake_stride = fake_ystride;
946 if (
s->chroma && (plane == 1 || plane == 2)) {
947 w >>=
s->chroma_h_shift;
948 h >>=
s->chroma_v_shift;
949 fake_stride = plane == 1 ? fake_ustride : fake_vstride;
952 switch (
s->predictor) {
958 for (y = 1; y <
h; y++) {
959 uint8_t *
dst =
p->data[plane] +
p->linesize[plane]*y;
963 if (
s->predictor ==
PLANE) {
964 if (y >
s->interlaced) {
988 lefttop =
p->data[plane][0];
998 dst =
p->data[plane] +
p->linesize[plane] * y;
1007 }
else if (
s->bitstream_bpp < 24) {
1009 int lefty, leftu, leftv;
1010 int lefttopy, lefttopu, lefttopv;
1019 "YUY2 output is not implemented yet\n");
1023 p->data[2][0 + y_offset *
p->linesize[2]] =
get_bits(&
s->gb, 8);
1025 p->data[0][1 + y_offset *
p->linesize[0]] =
get_bits(&
s->gb, 8);
1027 p->data[1][0 + y_offset *
p->linesize[1]] =
get_bits(&
s->gb, 8);
1028 p->data[0][0 + y_offset *
p->linesize[0]] =
get_bits(&
s->gb, 8);
1030 switch (
s->predictor) {
1034 lefty =
s->llviddsp.add_left_pred(
p->data[0] +
p->linesize[0] * y_offset + 2,
s->temp[0],
1037 leftu =
s->llviddsp.add_left_pred(
p->data[1] +
p->linesize[1] * y_offset + 1,
s->temp[1], width2 - 1, leftu);
1038 leftv =
s->llviddsp.add_left_pred(
p->data[2] +
p->linesize[2] * y_offset + 1,
s->temp[2], width2 - 1, leftv);
1041 for (cy = y = 1; y <
height; y++, cy++) {
1042 uint8_t *ydst, *udst, *vdst;
1044 if (
s->bitstream_bpp == 12) {
1047 ydst =
p->data[0] +
p->linesize[0] * (y + y_offset);
1049 lefty =
s->llviddsp.add_left_pred(ydst,
s->temp[0],
1051 if (
s->predictor ==
PLANE) {
1052 if (y >
s->interlaced)
1053 s->llviddsp.add_bytes(ydst, ydst - fake_ystride,
width);
1062 ydst =
p->data[0] +
p->linesize[0] * (y + y_offset);
1063 udst =
p->data[1] +
p->linesize[1] * (cy + y_offset);
1064 vdst =
p->data[2] +
p->linesize[2] * (cy + y_offset);
1067 lefty =
s->llviddsp.add_left_pred(ydst,
s->temp[0],
1070 leftu =
s->llviddsp.add_left_pred(udst,
s->temp[1], width2, leftu);
1071 leftv =
s->llviddsp.add_left_pred(vdst,
s->temp[2], width2, leftv);
1073 if (
s->predictor ==
PLANE) {
1074 if (cy >
s->interlaced) {
1075 s->llviddsp.add_bytes(ydst, ydst - fake_ystride,
width);
1077 s->llviddsp.add_bytes(udst, udst - fake_ustride, width2);
1078 s->llviddsp.add_bytes(vdst, vdst - fake_vstride, width2);
1089 lefty =
s->llviddsp.add_left_pred(
p->data[0] + 2,
s->temp[0],
1092 leftu =
s->llviddsp.add_left_pred(
p->data[1] + 1,
s->temp[1], width2 - 1, leftu);
1093 leftv =
s->llviddsp.add_left_pred(
p->data[2] + 1,
s->temp[2], width2 - 1, leftv);
1101 if (
s->interlaced) {
1103 lefty =
s->llviddsp.add_left_pred(
p->data[0] +
p->linesize[0],
1104 s->temp[0],
width, lefty);
1106 leftu =
s->llviddsp.add_left_pred(
p->data[1] +
p->linesize[2],
s->temp[1], width2, leftu);
1107 leftv =
s->llviddsp.add_left_pred(
p->data[2] +
p->linesize[1],
s->temp[2], width2, leftv);
1117 lefty =
s->llviddsp.add_left_pred(
p->data[0] + fake_ystride,
1118 s->temp[0], 4, lefty);
1120 leftu =
s->llviddsp.add_left_pred(
p->data[1] + fake_ustride,
s->temp[1], 2, leftu);
1121 leftv =
s->llviddsp.add_left_pred(
p->data[2] + fake_vstride,
s->temp[2], 2, leftv);
1125 lefttopy =
p->data[0][3];
1127 s->llviddsp.add_median_pred(
p->data[0] + fake_ystride + 4,
1128 p->data[0] + 4,
s->temp[0],
1129 width - 4, &lefty, &lefttopy);
1131 lefttopu =
p->data[1][1];
1132 lefttopv =
p->data[2][1];
1133 s->llviddsp.add_median_pred(
p->data[1] + fake_ustride + 2,
p->data[1] + 2,
s->temp[1], width2 - 2, &leftu, &lefttopu);
1134 s->llviddsp.add_median_pred(
p->data[2] + fake_vstride + 2,
p->data[2] + 2,
s->temp[2], width2 - 2, &leftv, &lefttopv);
1139 for (; y <
height; y++, cy++) {
1140 uint8_t *ydst, *udst, *vdst;
1142 if (
s->bitstream_bpp == 12) {
1143 while (2 * cy > y) {
1145 ydst =
p->data[0] +
p->linesize[0] * y;
1146 s->llviddsp.add_median_pred(ydst, ydst - fake_ystride,
1158 ydst =
p->data[0] +
p->linesize[0] * y;
1159 udst =
p->data[1] +
p->linesize[1] * cy;
1160 vdst =
p->data[2] +
p->linesize[2] * cy;
1162 s->llviddsp.add_median_pred(ydst, ydst - fake_ystride,
1166 s->llviddsp.add_median_pred(udst, udst - fake_ustride,
s->temp[1], width2, &leftu, &lefttopu);
1167 s->llviddsp.add_median_pred(vdst, vdst - fake_vstride,
s->temp[2], width2, &leftv, &lefttopv);
1178 const int last_line = (y_offset +
height - 1) *
p->linesize[0];
1180 if (
s->bitstream_bpp == 32) {
1189 left[
A] =
p->data[0][last_line +
A] = 255;
1194 switch (
s->predictor) {
1198 s->hdsp.add_hfyu_left_pred_bgr32(
p->data[0] + last_line + 4,
1201 for (y =
height - 2; y >= 0; y--) {
1204 s->hdsp.add_hfyu_left_pred_bgr32(
p->data[0] +
p->linesize[0] * (y + y_offset),
1206 if (
s->predictor ==
PLANE) {
1207 if (
s->bitstream_bpp != 32)
1210 s->llviddsp.add_bytes(
p->data[0] +
p->linesize[0] * (y + y_offset),
1211 p->data[0] +
p->linesize[0] * (y + y_offset) +
1212 fake_ystride, 4 *
width);
1221 "prediction type not supported!\n");
1225 "BGR24 output is not implemented yet\n");
1236 const uint8_t *buf = avpkt->
data;
1237 int buf_size = avpkt->
size;
1241 int slice, table_size = 0,
ret, nb_slices;
1242 unsigned slices_info_offset;
1249 &
s->bitstream_buffer_size,
1251 if (!
s->bitstream_buffer)
1254 s->bdsp.bswap_buf((uint32_t *)
s->bitstream_buffer,
1255 (
const uint32_t *) buf, buf_size / 4);
1266 if ((
unsigned) (buf_size - table_size) >= INT_MAX / 8)
1269 s->last_slice_end = 0;
1272 (buf_size > 32 &&
AV_RL32(avpkt->
data + buf_size - 16) == 0)) {
1273 slices_info_offset =
AV_RL32(avpkt->
data + buf_size - 4);
1274 slice_height =
AV_RL32(avpkt->
data + buf_size - 8);
1276 if (nb_slices * 8LL + slices_info_offset > buf_size - 16 ||
1277 s->chroma_v_shift ||
1278 slice_height <= 0 || nb_slices * (uint64_t)slice_height >
height)
1285 for (slice = 0; slice < nb_slices; slice++) {
1286 int y_offset, slice_offset, slice_size;
1288 if (nb_slices > 1) {
1289 slice_offset =
AV_RL32(avpkt->
data + slices_info_offset + slice * 8);
1290 slice_size =
AV_RL32(avpkt->
data + slices_info_offset + slice * 8 + 4);
1292 if (slice_offset < 0 || slice_size <= 0 || (slice_offset&3) ||
1293 slice_offset + (
int64_t)slice_size > buf_size)
1296 y_offset =
height - (slice + 1) * slice_height;
1297 s->bdsp.bswap_buf((uint32_t *)
s->bitstream_buffer,
1298 (
const uint32_t *)(buf + slice_offset), slice_size / 4);
1302 slice_size = buf_size;
1305 ret =
decode_slice(avctx,
p, slice_height, slice_size, y_offset, table_size);
1316 .
p.
name =
"huffyuv",
1329 #if CONFIG_FFVHUFF_DECODER
1331 .
p.
name =
"ffvhuff",
1345 #if CONFIG_HYMT_DECODER