33 #define UNCHECKED_BITSTREAM_READER 1
45 #define classic_shift_luma_table_size 42
47 34, 36, 35, 69, 135, 232, 9, 16, 10, 24, 11, 23, 12, 16, 13, 10,
48 14, 8, 15, 8, 16, 8, 17, 20, 16, 10, 207, 206, 205, 236, 11, 8,
49 10, 21, 9, 23, 8, 8, 199, 70, 69, 68, 0,
53 #define classic_shift_chroma_table_size 59
55 66, 36, 37, 38, 39, 40, 41, 75, 76, 77, 110, 239, 144, 81, 82, 83,
56 84, 85, 118, 183, 56, 57, 88, 89, 56, 89, 154, 57, 58, 57, 26, 141,
57 57, 56, 58, 57, 58, 57, 184, 119, 214, 245, 116, 83, 82, 49, 80, 79,
58 78, 77, 44, 75, 41, 40, 39, 38, 37, 36, 34, 0,
63 3, 9, 5, 12, 10, 35, 32, 29, 27, 50, 48, 45, 44, 41, 39, 37,
64 73, 70, 68, 65, 64, 61, 58, 56, 53, 50, 49, 46, 44, 41, 38, 36,
65 68, 65, 63, 61, 58, 55, 53, 51, 48, 46, 45, 43, 41, 39, 38, 36,
66 35, 33, 32, 30, 29, 27, 26, 25, 48, 47, 46, 44, 43, 41, 40, 39,
67 37, 36, 35, 34, 32, 31, 30, 28, 27, 26, 24, 23, 22, 20, 19, 37,
68 35, 34, 33, 31, 30, 29, 27, 26, 24, 23, 21, 20, 18, 17, 15, 29,
69 27, 26, 24, 22, 21, 19, 17, 16, 14, 26, 25, 23, 21, 19, 18, 16,
70 15, 27, 25, 23, 21, 19, 17, 16, 14, 26, 25, 23, 21, 18, 17, 14,
71 12, 17, 19, 13, 4, 9, 2, 11, 1, 7, 8, 0, 16, 3, 14, 6,
72 12, 10, 5, 15, 18, 11, 10, 13, 15, 16, 19, 20, 22, 24, 27, 15,
73 18, 20, 22, 24, 26, 14, 17, 20, 22, 24, 27, 15, 18, 20, 23, 25,
74 28, 16, 19, 22, 25, 28, 32, 36, 21, 25, 29, 33, 38, 42, 45, 49,
75 28, 31, 34, 37, 40, 42, 44, 47, 49, 50, 52, 54, 56, 57, 59, 60,
76 62, 64, 66, 67, 69, 35, 37, 39, 40, 42, 43, 45, 47, 48, 51, 52,
77 54, 55, 57, 59, 60, 62, 63, 66, 67, 69, 71, 72, 38, 40, 42, 43,
78 46, 47, 49, 51, 26, 28, 30, 31, 33, 34, 18, 19, 11, 13, 7, 8,
82 3, 1, 2, 2, 2, 2, 3, 3, 7, 5, 7, 5, 8, 6, 11, 9,
83 7, 13, 11, 10, 9, 8, 7, 5, 9, 7, 6, 4, 7, 5, 8, 7,
84 11, 8, 13, 11, 19, 15, 22, 23, 20, 33, 32, 28, 27, 29, 51, 77,
85 43, 45, 76, 81, 46, 82, 75, 55, 56, 144, 58, 80, 60, 74, 147, 63,
86 143, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
87 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 27, 30, 21, 22,
88 17, 14, 5, 6, 100, 54, 47, 50, 51, 53, 106, 107, 108, 109, 110, 111,
89 112, 113, 114, 115, 4, 117, 118, 92, 94, 121, 122, 3, 124, 103, 2, 1,
90 0, 129, 130, 131, 120, 119, 126, 125, 136, 137, 138, 139, 140, 141, 142, 134,
91 135, 132, 133, 104, 64, 101, 62, 57, 102, 95, 93, 59, 61, 28, 97, 96,
92 52, 49, 48, 29, 32, 25, 24, 46, 23, 98, 45, 44, 43, 20, 42, 41,
93 19, 18, 99, 40, 15, 39, 38, 16, 13, 12, 11, 37, 10, 9, 8, 36,
94 7, 128, 127, 105, 123, 116, 35, 34, 33, 145, 31, 79, 42, 146, 78, 26,
95 83, 48, 49, 50, 44, 47, 26, 31, 30, 18, 17, 19, 21, 24, 25, 13,
96 14, 16, 17, 18, 20, 21, 12, 14, 15, 9, 10, 6, 9, 6, 5, 8,
97 6, 12, 8, 10, 7, 9, 6, 4, 6, 2, 2, 3, 3, 3, 3, 2,
104 for (
i = 0;
i < n;) {
130 if (
s->bitstream_bpp < 24 ||
s->version > 2) {
132 for (p = 0; p < 4; p++) {
133 int p0 =
s->version > 2 ? p : 0;
134 for (
i = y = 0; y <
s->vlc_n; y++) {
135 int len0 =
s->len[p0][y];
137 if (
limit <= 0 || !len0)
141 for (
u = 0;
u <
s->vlc_n;
u++) {
142 int len1 =
s->len[p][
u];
143 if (len1 >
limit || !len1)
148 len[
i] = len0 + len1;
149 bits[
i] = (
s->bits[p0][y] << len1) +
s->bits[p][
u];
150 symbols[
i] = (y << 8) + (
u & 0xFF);
156 bits, 2, 2, symbols, 2, 2, 0)) < 0)
160 uint8_t (*
map)[4] = (uint8_t(*)[4])
s->pix_bgr_map;
162 int p0 =
s->decorrelate;
163 int p1 = !
s->decorrelate;
167 for (
i = 0,
g = -16;
g < 16;
g++) {
168 int len0 =
s->len[p0][
g & 255];
170 if (limit0 < 2 || !len0)
172 for (
b = -16;
b < 16;
b++) {
173 int len1 =
s->len[p1][
b & 255];
174 int limit1 = limit0 - len1;
175 if (limit1 < 1 || !len1)
177 code = (
s->bits[p0][
g & 255] << len1) +
s->bits[p1][
b & 255];
178 for (
r = -16;
r < 16;
r++) {
179 int len2 =
s->len[2][
r & 255];
180 if (len2 > limit1 || !len2)
183 len[
i] = len0 + len1 + len2;
185 if (
s->decorrelate) {
219 count = 1 +
s->alpha + 2*
s->chroma;
221 for (
i = 0;
i < count;
i++) {
228 s->bits[
i], 4, 4, 0)) < 0)
253 for (
i = 0;
i < 256;
i++)
258 if (
s->bitstream_bpp >= 24) {
259 memcpy(
s->bits[1],
s->bits[0], 256 *
sizeof(uint32_t));
260 memcpy(
s->len[1],
s->len[0], 256 *
sizeof(uint8_t));
262 memcpy(
s->bits[2],
s->bits[1], 256 *
sizeof(uint32_t));
263 memcpy(
s->len[2],
s->len[1], 256 *
sizeof(uint8_t));
265 for (
i = 0;
i < 4;
i++) {
268 s->bits[
i], 4, 4, 0)) < 0)
286 for (
i = 0;
i < 8;
i++)
303 memset(
s->vlc, 0, 4 *
sizeof(
VLC));
305 s->interlaced = avctx->
height > 288;
323 if (
s->version >= 2) {
324 int method, interlace;
330 s->decorrelate = method & 64 ? 1 : 0;
331 s->predictor = method & 63;
332 if (
s->version == 2) {
334 if (
s->bitstream_bpp == 0)
341 s->chroma_v_shift = (avctx->
extradata[1] >> 2) & 3;
346 interlace = (avctx->
extradata[2] & 0x30) >> 4;
347 s->interlaced = (interlace == 1) ? 1 : (interlace == 2) ? 0 :
s->interlaced;
348 s->context = avctx->
extradata[2] & 0x40 ? 1 : 0;
383 if (
s->version <= 2) {
384 switch (
s->bitstream_bpp) {
414 switch ( (
s->chroma<<10) | (
s->yuv<<9) | (
s->alpha<<8) | ((
s->bps-1)<<4) |
s->chroma_h_shift | (
s->chroma_v_shift<<2)) {
555 "for this combination of colorspace and predictor type.\n");
566 #define VLC_INTERN(dst, table, gb, name, bits, max_depth) \
567 code = table[index][0]; \
568 n = table[index][1]; \
569 if (max_depth > 1 && n < 0) { \
570 LAST_SKIP_BITS(name, gb, bits); \
571 UPDATE_CACHE(name, gb); \
574 index = SHOW_UBITS(name, gb, nb_bits) + code; \
575 code = table[index][0]; \
576 n = table[index][1]; \
577 if (max_depth > 2 && n < 0) { \
578 LAST_SKIP_BITS(name, gb, nb_bits); \
579 UPDATE_CACHE(name, gb); \
582 index = SHOW_UBITS(name, gb, nb_bits) + code; \
583 code = table[index][0]; \
584 n = table[index][1]; \
588 LAST_SKIP_BITS(name, gb, n)
591 #define GET_VLC_DUAL(dst0, dst1, name, gb, dtable, table1, table2, \
592 bits, max_depth, OP) \
594 unsigned int index = SHOW_UBITS(name, gb, bits); \
595 int code, n = dtable[index][1]; \
599 VLC_INTERN(dst0, table1, gb, name, bits, max_depth); \
601 UPDATE_CACHE(re, gb); \
602 index = SHOW_UBITS(name, gb, bits); \
603 VLC_INTERN(dst1, table2, gb, name, bits, max_depth); \
605 code = dtable[index][0]; \
606 OP(dst0, dst1, code); \
607 LAST_SKIP_BITS(name, gb, n); \
611 #define OP8bits(dst0, dst1, code) dst0 = code>>8; dst1 = code
613 #define READ_2PIX(dst0, dst1, plane1) \
614 UPDATE_CACHE(re, &s->gb); \
615 GET_VLC_DUAL(dst0, dst1, re, &s->gb, s->vlc[4+plane1].table, \
616 s->vlc[0].table, s->vlc[plane1].table, VLC_BITS, 3, OP8bits)
625 if (count >= icount) {
626 for (
i = 0;
i < icount;
i++) {
635 for (;
i < count;
i++)
636 s->temp[0][2 *
i ] =
s->temp[1][
i] =
637 s->temp[0][2 *
i + 1] =
s->temp[2][
i] = 0;
639 for (
i = 0;
i < count;
i++) {
647 #define READ_2PIX_PLANE(dst0, dst1, plane, OP) \
648 UPDATE_CACHE(re, &s->gb); \
649 GET_VLC_DUAL(dst0, dst1, re, &s->gb, s->vlc[4+plane].table, \
650 s->vlc[plane].table, s->vlc[plane].table, VLC_BITS, 3, OP)
652 #define OP14bits(dst0, dst1, code) dst0 = code>>8; dst1 = sign_extend(code, 8)
656 #define READ_2PIX_PLANE16(dst0, dst1, plane){\
657 dst0 = get_vlc2(&s->gb, s->vlc[plane].table, VLC_BITS, 3)<<2;\
658 dst0 += get_bits(&s->gb, 2);\
659 dst1 = get_vlc2(&s->gb, s->vlc[plane].table, VLC_BITS, 3)<<2;\
660 dst1 += get_bits(&s->gb, 2);\
673 for(
i=0;
i<count;
i++){
679 int nb_bits,
code, n;
686 }
else if (
s->bps <= 14) {
693 for(
i=0;
i<count;
i++){
699 int nb_bits,
code, n;
712 for(
i=0;
i<count;
i++){
734 for (
i = 0;
i < count;
i++) {
749 int code, n, nb_bits;
753 n =
s->vlc[4].table[
index][1];
757 *(uint32_t *) &
s->temp[0][4 *
i] =
s->pix_bgr_map[
code];
767 s->temp[0][4 *
i +
B] =
code +
s->temp[0][4 *
i +
G];
772 s->temp[0][4 *
i +
R] =
code +
s->temp[0][4 *
i +
G];
794 s->temp[0][4 *
i +
A] = 0;
801 if (
s->decorrelate) {
802 if (
s->bitstream_bpp == 24)
807 if (
s->bitstream_bpp == 24)
819 if (!
s->avctx->draw_horiz_band)
822 h = y -
s->last_slice_end;
825 if (
s->bitstream_bpp == 12)
839 s->last_slice_end = y +
h;
845 return s->llviddsp.add_left_pred(dst,
src,
w,
acc);
847 return s->llviddsp.add_left_pred_int16(( uint16_t *)dst, (
const uint16_t *)
src,
s->n-1,
w,
acc);
854 s->llviddsp.add_bytes(dst,
src,
w);
856 s->hdsp.add_int16((uint16_t*)dst, (
const uint16_t*)
src,
s->n - 1,
w);
863 s->llviddsp.add_median_pred(dst,
src,
diff,
w,
left, left_top);
865 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);
870 int buf_size,
int y_offset,
int table_size)
873 int fake_ystride, fake_ustride, fake_vstride;
874 const int width =
s->width;
875 const int width2 =
s->width >> 1;
878 if ((
ret =
init_get_bits8(&
s->gb,
s->bitstream_buffer + table_size, buf_size - table_size)) < 0)
885 if (
s->version > 2) {
887 for(plane = 0; plane < 1 + 2*
s->chroma +
s->alpha; plane++) {
888 int left, lefttop, y;
891 int fake_stride = fake_ystride;
893 if (
s->chroma && (plane == 1 || plane == 2)) {
894 w >>=
s->chroma_h_shift;
895 h >>=
s->chroma_v_shift;
896 fake_stride = plane == 1 ? fake_ustride : fake_vstride;
899 switch (
s->predictor) {
905 for (y = 1; y <
h; y++) {
910 if (
s->predictor ==
PLANE) {
911 if (y >
s->interlaced) {
935 lefttop = p->
data[plane][0];
954 }
else if (
s->bitstream_bpp < 24) {
956 int lefty, leftu, leftv;
957 int lefttopy, lefttopu, lefttopv;
966 "YUY2 output is not implemented yet\n");
977 switch (
s->predictor) {
981 lefty =
s->llviddsp.add_left_pred(p->
data[0] + p->
linesize[0] * y_offset + 2,
s->temp[0],
984 leftu =
s->llviddsp.add_left_pred(p->
data[1] + p->
linesize[1] * y_offset + 1,
s->temp[1], width2 - 1, leftu);
985 leftv =
s->llviddsp.add_left_pred(p->
data[2] + p->
linesize[2] * y_offset + 1,
s->temp[2], width2 - 1, leftv);
988 for (cy = y = 1; y <
height; y++, cy++) {
989 uint8_t *ydst, *udst, *vdst;
991 if (
s->bitstream_bpp == 12) {
996 lefty =
s->llviddsp.add_left_pred(ydst,
s->temp[0],
998 if (
s->predictor ==
PLANE) {
999 if (y >
s->interlaced)
1000 s->llviddsp.add_bytes(ydst, ydst - fake_ystride,
width);
1014 lefty =
s->llviddsp.add_left_pred(ydst,
s->temp[0],
1017 leftu =
s->llviddsp.add_left_pred(udst,
s->temp[1], width2, leftu);
1018 leftv =
s->llviddsp.add_left_pred(vdst,
s->temp[2], width2, leftv);
1020 if (
s->predictor ==
PLANE) {
1021 if (cy >
s->interlaced) {
1022 s->llviddsp.add_bytes(ydst, ydst - fake_ystride,
width);
1024 s->llviddsp.add_bytes(udst, udst - fake_ustride, width2);
1025 s->llviddsp.add_bytes(vdst, vdst - fake_vstride, width2);
1036 lefty =
s->llviddsp.add_left_pred(p->
data[0] + 2,
s->temp[0],
1039 leftu =
s->llviddsp.add_left_pred(p->
data[1] + 1,
s->temp[1], width2 - 1, leftu);
1040 leftv =
s->llviddsp.add_left_pred(p->
data[2] + 1,
s->temp[2], width2 - 1, leftv);
1048 if (
s->interlaced) {
1050 lefty =
s->llviddsp.add_left_pred(p->
data[0] + p->
linesize[0],
1051 s->temp[0],
width, lefty);
1053 leftu =
s->llviddsp.add_left_pred(p->
data[1] + p->
linesize[2],
s->temp[1], width2, leftu);
1054 leftv =
s->llviddsp.add_left_pred(p->
data[2] + p->
linesize[1],
s->temp[2], width2, leftv);
1064 lefty =
s->llviddsp.add_left_pred(p->
data[0] + fake_ystride,
1065 s->temp[0], 4, lefty);
1067 leftu =
s->llviddsp.add_left_pred(p->
data[1] + fake_ustride,
s->temp[1], 2, leftu);
1068 leftv =
s->llviddsp.add_left_pred(p->
data[2] + fake_vstride,
s->temp[2], 2, leftv);
1072 lefttopy = p->
data[0][3];
1074 s->llviddsp.add_median_pred(p->
data[0] + fake_ystride + 4,
1075 p->
data[0] + 4,
s->temp[0],
1076 width - 4, &lefty, &lefttopy);
1078 lefttopu = p->
data[1][1];
1079 lefttopv = p->
data[2][1];
1080 s->llviddsp.add_median_pred(p->
data[1] + fake_ustride + 2, p->
data[1] + 2,
s->temp[1], width2 - 2, &leftu, &lefttopu);
1081 s->llviddsp.add_median_pred(p->
data[2] + fake_vstride + 2, p->
data[2] + 2,
s->temp[2], width2 - 2, &leftv, &lefttopv);
1086 for (; y <
height; y++, cy++) {
1087 uint8_t *ydst, *udst, *vdst;
1089 if (
s->bitstream_bpp == 12) {
1090 while (2 * cy > y) {
1093 s->llviddsp.add_median_pred(ydst, ydst - fake_ystride,
1109 s->llviddsp.add_median_pred(ydst, ydst - fake_ystride,
1113 s->llviddsp.add_median_pred(udst, udst - fake_ustride,
s->temp[1], width2, &leftu, &lefttopu);
1114 s->llviddsp.add_median_pred(vdst, vdst - fake_vstride,
s->temp[2], width2, &leftv, &lefttopv);
1127 if (
s->bitstream_bpp == 32) {
1141 switch (
s->predictor) {
1145 s->hdsp.add_hfyu_left_pred_bgr32(p->
data[0] + last_line + 4,
1148 for (y =
height - 2; y >= 0; y--) {
1151 s->hdsp.add_hfyu_left_pred_bgr32(p->
data[0] + p->
linesize[0] * (y + y_offset),
1153 if (
s->predictor ==
PLANE) {
1154 if (
s->bitstream_bpp != 32)
1157 s->llviddsp.add_bytes(p->
data[0] + p->
linesize[0] * (y + y_offset),
1159 fake_ystride, 4 *
width);
1168 "prediction type not supported!\n");
1172 "BGR24 output is not implemented yet\n");
1183 const uint8_t *buf = avpkt->
data;
1184 int buf_size = avpkt->
size;
1186 const int width =
s->width;
1190 int slice, table_size = 0,
ret, nb_slices;
1191 unsigned slices_info_offset;
1198 &
s->bitstream_buffer_size,
1200 if (!
s->bitstream_buffer)
1203 s->bdsp.bswap_buf((uint32_t *)
s->bitstream_buffer,
1204 (
const uint32_t *) buf, buf_size / 4);
1215 if ((
unsigned) (buf_size - table_size) >= INT_MAX / 8)
1218 s->last_slice_end = 0;
1221 (buf_size > 32 &&
AV_RL32(avpkt->
data + buf_size - 16) == 0)) {
1222 slices_info_offset =
AV_RL32(avpkt->
data + buf_size - 4);
1223 slice_height =
AV_RL32(avpkt->
data + buf_size - 8);
1225 if (nb_slices * 8LL + slices_info_offset > buf_size - 16 ||
1226 s->chroma_v_shift ||
1227 slice_height <= 0 || nb_slices * (uint64_t)slice_height >
height)
1234 for (slice = 0; slice < nb_slices; slice++) {
1235 int y_offset, slice_offset, slice_size;
1237 if (nb_slices > 1) {
1238 slice_offset =
AV_RL32(avpkt->
data + slices_info_offset + slice * 8);
1239 slice_size =
AV_RL32(avpkt->
data + slices_info_offset + slice * 8 + 4);
1241 if (slice_offset < 0 || slice_size <= 0 || (slice_offset&3) ||
1242 slice_offset + (int64_t)slice_size > buf_size)
1245 y_offset =
height - (slice + 1) * slice_height;
1246 s->bdsp.bswap_buf((uint32_t *)
s->bitstream_buffer,
1247 (
const uint32_t *)(buf + slice_offset), slice_size / 4);
1251 slice_size = buf_size;
1254 ret =
decode_slice(avctx, p, slice_height, slice_size, y_offset, table_size);
1279 #if CONFIG_FFVHUFF_DECODER
1295 #if CONFIG_HYMT_DECODER