33 #define UNCHECKED_BITSTREAM_READER 1
35 #include "config_components.h"
91 34, 36, 35, 69, 135, 232, 9, 16, 10, 24, 11, 23, 12, 16, 13, 10,
92 14, 8, 15, 8, 16, 8, 17, 20, 16, 10, 207, 206, 205, 236, 11, 8,
93 10, 21, 9, 23, 8, 8, 199, 70, 69, 68,
97 66, 36, 37, 38, 39, 40, 41, 75, 76, 77, 110, 239, 144, 81, 82, 83,
98 84, 85, 118, 183, 56, 57, 88, 89, 56, 89, 154, 57, 58, 57, 26, 141,
99 57, 56, 58, 57, 58, 57, 184, 119, 214, 245, 116, 83, 82, 49, 80, 79,
100 78, 77, 44, 75, 41, 40, 39, 38, 37, 36, 34,
104 3, 9, 5, 12, 10, 35, 32, 29, 27, 50, 48, 45, 44, 41, 39, 37,
105 73, 70, 68, 65, 64, 61, 58, 56, 53, 50, 49, 46, 44, 41, 38, 36,
106 68, 65, 63, 61, 58, 55, 53, 51, 48, 46, 45, 43, 41, 39, 38, 36,
107 35, 33, 32, 30, 29, 27, 26, 25, 48, 47, 46, 44, 43, 41, 40, 39,
108 37, 36, 35, 34, 32, 31, 30, 28, 27, 26, 24, 23, 22, 20, 19, 37,
109 35, 34, 33, 31, 30, 29, 27, 26, 24, 23, 21, 20, 18, 17, 15, 29,
110 27, 26, 24, 22, 21, 19, 17, 16, 14, 26, 25, 23, 21, 19, 18, 16,
111 15, 27, 25, 23, 21, 19, 17, 16, 14, 26, 25, 23, 21, 18, 17, 14,
112 12, 17, 19, 13, 4, 9, 2, 11, 1, 7, 8, 0, 16, 3, 14, 6,
113 12, 10, 5, 15, 18, 11, 10, 13, 15, 16, 19, 20, 22, 24, 27, 15,
114 18, 20, 22, 24, 26, 14, 17, 20, 22, 24, 27, 15, 18, 20, 23, 25,
115 28, 16, 19, 22, 25, 28, 32, 36, 21, 25, 29, 33, 38, 42, 45, 49,
116 28, 31, 34, 37, 40, 42, 44, 47, 49, 50, 52, 54, 56, 57, 59, 60,
117 62, 64, 66, 67, 69, 35, 37, 39, 40, 42, 43, 45, 47, 48, 51, 52,
118 54, 55, 57, 59, 60, 62, 63, 66, 67, 69, 71, 72, 38, 40, 42, 43,
119 46, 47, 49, 51, 26, 28, 30, 31, 33, 34, 18, 19, 11, 13, 7, 8,
123 3, 1, 2, 2, 2, 2, 3, 3, 7, 5, 7, 5, 8, 6, 11, 9,
124 7, 13, 11, 10, 9, 8, 7, 5, 9, 7, 6, 4, 7, 5, 8, 7,
125 11, 8, 13, 11, 19, 15, 22, 23, 20, 33, 32, 28, 27, 29, 51, 77,
126 43, 45, 76, 81, 46, 82, 75, 55, 56, 144, 58, 80, 60, 74, 147, 63,
127 143, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
128 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 27, 30, 21, 22,
129 17, 14, 5, 6, 100, 54, 47, 50, 51, 53, 106, 107, 108, 109, 110, 111,
130 112, 113, 114, 115, 4, 117, 118, 92, 94, 121, 122, 3, 124, 103, 2, 1,
131 0, 129, 130, 131, 120, 119, 126, 125, 136, 137, 138, 139, 140, 141, 142, 134,
132 135, 132, 133, 104, 64, 101, 62, 57, 102, 95, 93, 59, 61, 28, 97, 96,
133 52, 49, 48, 29, 32, 25, 24, 46, 23, 98, 45, 44, 43, 20, 42, 41,
134 19, 18, 99, 40, 15, 39, 38, 16, 13, 12, 11, 37, 10, 9, 8, 36,
135 7, 128, 127, 105, 123, 116, 35, 34, 33, 145, 31, 79, 42, 146, 78, 26,
136 83, 48, 49, 50, 44, 47, 26, 31, 30, 18, 17, 19, 21, 24, 25, 13,
137 14, 16, 17, 18, 20, 21, 12, 14, 15, 9, 10, 6, 9, 6, 5, 8,
138 6, 12, 8, 10, 7, 9, 6, 4, 6, 2, 2, 3, 3, 3, 3, 2,
145 for (
i = 0;
i < n;) {
148 repeat = bytestream2_peek_byteu(gb) >> 5;
149 val = bytestream2_get_byteu(gb) & 0x1F;
153 repeat = bytestream2_get_byteu(gb);
178 if (
s->bitstream_bpp < 24 ||
s->version > 2) {
179 int count = 1 +
s->alpha + 2 *
s->chroma;
181 for (p = 0; p < count; p++) {
182 int p0 =
s->version > 2 ? p : 0;
183 for (
i = y = 0; y <
s->vlc_n; y++) {
184 int len0 =
s->len[p0][y];
186 if (
limit <= 0 || !len0)
190 for (
u = 0;
u <
s->vlc_n;
u++) {
191 int len1 =
s->len[p][
u];
192 if (len1 >
limit || !len1)
197 len[
i] = len0 + len1;
198 bits[
i] = (
s->bits[p0][y] << len1) +
s->bits[p][
u];
199 symbols[
i] = (y << 8) + (
u & 0xFF);
205 bits, 2, 2, symbols, 2, 2, 0)) < 0)
209 uint8_t (*
map)[4] = (uint8_t(*)[4])
s->pix_bgr_map;
211 int p0 =
s->decorrelate;
212 int p1 = !
s->decorrelate;
216 for (
i = 0,
g = -16;
g < 16;
g++) {
217 int len0 =
s->len[p0][
g & 255];
219 if (limit0 < 2 || !len0)
221 for (
b = -16;
b < 16;
b++) {
222 int len1 =
s->len[p1][
b & 255];
223 int limit1 = limit0 - len1;
224 if (limit1 < 1 || !len1)
226 code = (
s->bits[p0][
g & 255] << len1) +
s->bits[p1][
b & 255];
227 for (
r = -16;
r < 16;
r++) {
228 int len2 =
s->len[2][
r & 255];
229 if (len2 > limit1 || !len2)
232 len[
i] = len0 + len1 + len2;
234 if (
s->decorrelate) {
267 count = 1 +
s->alpha + 2*
s->chroma;
269 for (
i = 0;
i < count;
i++) {
276 s->bits[
i], 4, 4, 0)) < 0)
301 for (
i = 0;
i < 256;
i++)
306 if (
s->bitstream_bpp >= 24) {
307 memcpy(
s->bits[1],
s->bits[0], 256 *
sizeof(uint32_t));
308 memcpy(
s->len[1],
s->len[0], 256 *
sizeof(uint8_t));
310 memcpy(
s->bits[2],
s->bits[1], 256 *
sizeof(uint32_t));
311 memcpy(
s->len[2],
s->len[1], 256 *
sizeof(uint8_t));
313 for (
i = 0;
i < 4;
i++) {
316 s->bits[
i], 4, 4, 0)) < 0)
331 for (
int i = 0;
i < 3;
i++)
336 for (
i = 0;
i < 8;
i++)
357 s->interlaced = avctx->
height > 288;
375 if (
s->version >= 2) {
376 int method, interlace;
382 s->decorrelate = method & 64 ? 1 : 0;
383 s->predictor = method & 63;
384 if (
s->version == 2) {
386 if (
s->bitstream_bpp == 0)
393 s->chroma_v_shift = (avctx->
extradata[1] >> 2) & 3;
398 interlace = (avctx->
extradata[2] & 0x30) >> 4;
399 s->interlaced = (interlace == 1) ? 1 : (interlace == 2) ? 0 :
s->interlaced;
400 s->context = avctx->
extradata[2] & 0x40 ? 1 : 0;
435 if (
s->version <= 2) {
436 switch (
s->bitstream_bpp) {
466 switch ( (
s->chroma<<10) | (
s->yuv<<9) | (
s->alpha<<8) | ((
s->bps-1)<<4) |
s->chroma_h_shift | (
s->chroma_v_shift<<2)) {
605 "for this combination of colorspace and predictor type.\n");
609 for (
int i = 0;
i < 3;
i++) {
619 #define VLC_INTERN(dst, table, gb, name, bits, max_depth) \
620 code = table[index].sym; \
621 n = table[index].len; \
622 if (max_depth > 1 && n < 0) { \
623 LAST_SKIP_BITS(name, gb, bits); \
624 UPDATE_CACHE(name, gb); \
627 index = SHOW_UBITS(name, gb, nb_bits) + code; \
628 code = table[index].sym; \
629 n = table[index].len; \
630 if (max_depth > 2 && n < 0) { \
631 LAST_SKIP_BITS(name, gb, nb_bits); \
632 UPDATE_CACHE(name, gb); \
635 index = SHOW_UBITS(name, gb, nb_bits) + code; \
636 code = table[index].sym; \
637 n = table[index].len; \
641 LAST_SKIP_BITS(name, gb, n)
644 #define GET_VLC_DUAL(dst0, dst1, name, gb, dtable, table1, table2, \
645 bits, max_depth, OP) \
647 unsigned int index = SHOW_UBITS(name, gb, bits); \
648 int code, n = dtable[index].len; \
652 VLC_INTERN(dst0, table1, gb, name, bits, max_depth); \
654 UPDATE_CACHE(re, gb); \
655 index = SHOW_UBITS(name, gb, bits); \
656 VLC_INTERN(dst1, table2, gb, name, bits, max_depth); \
658 code = dtable[index].sym; \
659 OP(dst0, dst1, code); \
660 LAST_SKIP_BITS(name, gb, n); \
664 #define OP8bits(dst0, dst1, code) dst0 = code>>8; dst1 = code
666 #define READ_2PIX(dst0, dst1, plane1) \
667 UPDATE_CACHE(re, &s->gb); \
668 GET_VLC_DUAL(dst0, dst1, re, &s->gb, s->vlc[4+plane1].table, \
669 s->vlc[0].table, s->vlc[plane1].table, VLC_BITS, 3, OP8bits)
678 if (count >= icount) {
679 for (
i = 0;
i < icount;
i++) {
688 for (;
i < count;
i++)
689 s->temp[0][2 *
i ] =
s->temp[1][
i] =
690 s->temp[0][2 *
i + 1] =
s->temp[2][
i] = 0;
692 for (
i = 0;
i < count;
i++) {
700 #define READ_2PIX_PLANE(dst0, dst1, plane, OP) \
701 UPDATE_CACHE(re, &s->gb); \
702 GET_VLC_DUAL(dst0, dst1, re, &s->gb, s->vlc[4+plane].table, \
703 s->vlc[plane].table, s->vlc[plane].table, VLC_BITS, 3, OP)
705 #define OP14bits(dst0, dst1, code) dst0 = code>>8; dst1 = sign_extend(code, 8)
709 #define READ_2PIX_PLANE16(dst0, dst1, plane){\
710 dst0 = get_vlc2(&s->gb, s->vlc[plane].table, VLC_BITS, 3)*4;\
711 dst0 += get_bits(&s->gb, 2);\
712 dst1 = get_vlc2(&s->gb, s->vlc[plane].table, VLC_BITS, 3)*4;\
713 dst1 += get_bits(&s->gb, 2);\
726 for(
i=0;
i<count;
i++){
732 int nb_bits,
code, n;
739 }
else if (
s->bps <= 14) {
746 for(
i=0;
i<count;
i++){
752 int nb_bits,
code, n;
765 for(
i=0;
i<count;
i++){
787 for (
i = 0;
i < count;
i++) {
802 int code, n, nb_bits;
806 n =
s->vlc[4].table[
index].len;
810 *(uint32_t *) &
s->temp[0][4 *
i] =
s->pix_bgr_map[
code];
820 s->temp[0][4 *
i +
B] =
code +
s->temp[0][4 *
i +
G];
825 s->temp[0][4 *
i +
R] =
code +
s->temp[0][4 *
i +
G];
847 s->temp[0][4 *
i +
A] = 0;
854 if (
s->decorrelate) {
855 if (
s->bitstream_bpp == 24)
860 if (
s->bitstream_bpp == 24)
875 h = y -
s->last_slice_end;
878 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)
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++) {
963 if (
s->predictor ==
PLANE) {
964 if (y >
s->interlaced) {
988 lefttop = p->
data[plane][0];
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");
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) {
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);
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) {
1146 s->llviddsp.add_median_pred(ydst, ydst - fake_ystride,
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);
1180 if (
s->bitstream_bpp == 32) {
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),
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);
1317 .
p.
name =
"huffyuv",
1330 #if CONFIG_FFVHUFF_DECODER
1332 .
p.
name =
"ffvhuff",
1346 #if CONFIG_HYMT_DECODER