33 #define UNCHECKED_BITSTREAM_READER 1
44 #define classic_shift_luma_table_size 42
46 34, 36, 35, 69, 135, 232, 9, 16, 10, 24, 11, 23, 12, 16, 13, 10,
47 14, 8, 15, 8, 16, 8, 17, 20, 16, 10, 207, 206, 205, 236, 11, 8,
48 10, 21, 9, 23, 8, 8, 199, 70, 69, 68, 0,
52 #define classic_shift_chroma_table_size 59
54 66, 36, 37, 38, 39, 40, 41, 75, 76, 77, 110, 239, 144, 81, 82, 83,
55 84, 85, 118, 183, 56, 57, 88, 89, 56, 89, 154, 57, 58, 57, 26, 141,
56 57, 56, 58, 57, 58, 57, 184, 119, 214, 245, 116, 83, 82, 49, 80, 79,
57 78, 77, 44, 75, 41, 40, 39, 38, 37, 36, 34, 0,
62 3, 9, 5, 12, 10, 35, 32, 29, 27, 50, 48, 45, 44, 41, 39, 37,
63 73, 70, 68, 65, 64, 61, 58, 56, 53, 50, 49, 46, 44, 41, 38, 36,
64 68, 65, 63, 61, 58, 55, 53, 51, 48, 46, 45, 43, 41, 39, 38, 36,
65 35, 33, 32, 30, 29, 27, 26, 25, 48, 47, 46, 44, 43, 41, 40, 39,
66 37, 36, 35, 34, 32, 31, 30, 28, 27, 26, 24, 23, 22, 20, 19, 37,
67 35, 34, 33, 31, 30, 29, 27, 26, 24, 23, 21, 20, 18, 17, 15, 29,
68 27, 26, 24, 22, 21, 19, 17, 16, 14, 26, 25, 23, 21, 19, 18, 16,
69 15, 27, 25, 23, 21, 19, 17, 16, 14, 26, 25, 23, 21, 18, 17, 14,
70 12, 17, 19, 13, 4, 9, 2, 11, 1, 7, 8, 0, 16, 3, 14, 6,
71 12, 10, 5, 15, 18, 11, 10, 13, 15, 16, 19, 20, 22, 24, 27, 15,
72 18, 20, 22, 24, 26, 14, 17, 20, 22, 24, 27, 15, 18, 20, 23, 25,
73 28, 16, 19, 22, 25, 28, 32, 36, 21, 25, 29, 33, 38, 42, 45, 49,
74 28, 31, 34, 37, 40, 42, 44, 47, 49, 50, 52, 54, 56, 57, 59, 60,
75 62, 64, 66, 67, 69, 35, 37, 39, 40, 42, 43, 45, 47, 48, 51, 52,
76 54, 55, 57, 59, 60, 62, 63, 66, 67, 69, 71, 72, 38, 40, 42, 43,
77 46, 47, 49, 51, 26, 28, 30, 31, 33, 34, 18, 19, 11, 13, 7, 8,
81 3, 1, 2, 2, 2, 2, 3, 3, 7, 5, 7, 5, 8, 6, 11, 9,
82 7, 13, 11, 10, 9, 8, 7, 5, 9, 7, 6, 4, 7, 5, 8, 7,
83 11, 8, 13, 11, 19, 15, 22, 23, 20, 33, 32, 28, 27, 29, 51, 77,
84 43, 45, 76, 81, 46, 82, 75, 55, 56, 144, 58, 80, 60, 74, 147, 63,
85 143, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
86 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 27, 30, 21, 22,
87 17, 14, 5, 6, 100, 54, 47, 50, 51, 53, 106, 107, 108, 109, 110, 111,
88 112, 113, 114, 115, 4, 117, 118, 92, 94, 121, 122, 3, 124, 103, 2, 1,
89 0, 129, 130, 131, 120, 119, 126, 125, 136, 137, 138, 139, 140, 141, 142, 134,
90 135, 132, 133, 104, 64, 101, 62, 57, 102, 95, 93, 59, 61, 28, 97, 96,
91 52, 49, 48, 29, 32, 25, 24, 46, 23, 98, 45, 44, 43, 20, 42, 41,
92 19, 18, 99, 40, 15, 39, 38, 16, 13, 12, 11, 37, 10, 9, 8, 36,
93 7, 128, 127, 105, 123, 116, 35, 34, 33, 145, 31, 79, 42, 146, 78, 26,
94 83, 48, 49, 50, 44, 47, 26, 31, 30, 18, 17, 19, 21, 24, 25, 13,
95 14, 16, 17, 18, 20, 21, 12, 14, 15, 9, 10, 6, 9, 6, 5, 8,
96 6, 12, 8, 10, 7, 9, 6, 4, 6, 2, 2, 3, 3, 3, 3, 2,
103 for (
i = 0;
i < n;) {
129 if (
s->bitstream_bpp < 24 ||
s->version > 2) {
131 for (p = 0; p < 4; p++) {
132 int p0 =
s->version > 2 ? p : 0;
133 for (
i = y = 0; y <
s->vlc_n; y++) {
134 int len0 =
s->len[p0][y];
136 if (limit <= 0 || !len0)
140 for (
u = 0;
u <
s->vlc_n;
u++) {
141 int len1 =
s->len[p][
u];
142 if (len1 > limit || !len1)
147 len[
i] = len0 + len1;
148 bits[
i] = (
s->bits[p0][y] << len1) +
s->bits[p][
u];
149 symbols[
i] = (y << 8) + (
u & 0xFF);
155 bits, 2, 2, symbols, 2, 2, 0)) < 0)
161 int p0 =
s->decorrelate;
162 int p1 = !
s->decorrelate;
166 for (
i = 0,
g = -16;
g < 16;
g++) {
167 int len0 =
s->len[p0][
g & 255];
169 if (limit0 < 2 || !len0)
171 for (
b = -16;
b < 16;
b++) {
172 int len1 =
s->len[p1][
b & 255];
173 int limit1 = limit0 - len1;
174 if (limit1 < 1 || !len1)
176 code = (
s->bits[p0][
g & 255] << len1) +
s->bits[p1][
b & 255];
177 for (
r = -16;
r < 16;
r++) {
178 int len2 =
s->len[2][
r & 255];
179 if (len2 > limit1 || !len2)
182 len[
i] = len0 + len1 + len2;
184 if (
s->decorrelate) {
218 count = 1 +
s->alpha + 2*
s->chroma;
220 for (
i = 0;
i < count;
i++) {
227 s->bits[
i], 4, 4, 0)) < 0)
252 for (
i = 0;
i < 256;
i++)
257 if (
s->bitstream_bpp >= 24) {
258 memcpy(
s->bits[1],
s->bits[0], 256 *
sizeof(uint32_t));
259 memcpy(
s->len[1],
s->len[0], 256 *
sizeof(
uint8_t));
261 memcpy(
s->bits[2],
s->bits[1], 256 *
sizeof(uint32_t));
262 memcpy(
s->len[2],
s->len[1], 256 *
sizeof(
uint8_t));
264 for (
i = 0;
i < 4;
i++) {
267 s->bits[
i], 4, 4, 0)) < 0)
285 for (
i = 0;
i < 8;
i++)
302 memset(
s->vlc, 0, 4 *
sizeof(
VLC));
304 s->interlaced = avctx->
height > 288;
322 if (
s->version >= 2) {
323 int method, interlace;
329 s->decorrelate = method & 64 ? 1 : 0;
330 s->predictor = method & 63;
331 if (
s->version == 2) {
333 if (
s->bitstream_bpp == 0)
340 s->chroma_v_shift = (avctx->
extradata[1] >> 2) & 3;
345 interlace = (avctx->
extradata[2] & 0x30) >> 4;
346 s->interlaced = (interlace == 1) ? 1 : (interlace == 2) ? 0 :
s->interlaced;
347 s->context = avctx->
extradata[2] & 0x40 ? 1 : 0;
382 if (
s->version <= 2) {
383 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)) {
557 "for this combination of colorspace and predictor type.\n");
574 #define VLC_INTERN(dst, table, gb, name, bits, max_depth) \
575 code = table[index][0]; \
576 n = table[index][1]; \
577 if (max_depth > 1 && n < 0) { \
578 LAST_SKIP_BITS(name, gb, 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]; \
585 if (max_depth > 2 && n < 0) { \
586 LAST_SKIP_BITS(name, gb, nb_bits); \
587 UPDATE_CACHE(name, gb); \
590 index = SHOW_UBITS(name, gb, nb_bits) + code; \
591 code = table[index][0]; \
592 n = table[index][1]; \
596 LAST_SKIP_BITS(name, gb, n)
599 #define GET_VLC_DUAL(dst0, dst1, name, gb, dtable, table1, table2, \
600 bits, max_depth, OP) \
602 unsigned int index = SHOW_UBITS(name, gb, bits); \
603 int code, n = dtable[index][1]; \
607 VLC_INTERN(dst0, table1, gb, name, bits, max_depth); \
609 UPDATE_CACHE(re, gb); \
610 index = SHOW_UBITS(name, gb, bits); \
611 VLC_INTERN(dst1, table2, gb, name, bits, max_depth); \
613 code = dtable[index][0]; \
614 OP(dst0, dst1, code); \
615 LAST_SKIP_BITS(name, gb, n); \
619 #define OP8bits(dst0, dst1, code) dst0 = code>>8; dst1 = code
621 #define READ_2PIX(dst0, dst1, plane1) \
622 UPDATE_CACHE(re, &s->gb); \
623 GET_VLC_DUAL(dst0, dst1, re, &s->gb, s->vlc[4+plane1].table, \
624 s->vlc[0].table, s->vlc[plane1].table, VLC_BITS, 3, OP8bits)
633 if (count >= icount) {
634 for (
i = 0;
i < icount;
i++) {
643 for (;
i < count;
i++)
644 s->temp[0][2 *
i ] =
s->temp[1][
i] =
645 s->temp[0][2 *
i + 1] =
s->temp[2][
i] = 0;
647 for (
i = 0;
i < count;
i++) {
655 #define READ_2PIX_PLANE(dst0, dst1, plane, OP) \
656 UPDATE_CACHE(re, &s->gb); \
657 GET_VLC_DUAL(dst0, dst1, re, &s->gb, s->vlc[4+plane].table, \
658 s->vlc[plane].table, s->vlc[plane].table, VLC_BITS, 3, OP)
660 #define OP14bits(dst0, dst1, code) dst0 = code>>8; dst1 = sign_extend(code, 8)
664 #define READ_2PIX_PLANE16(dst0, dst1, plane){\
665 dst0 = get_vlc2(&s->gb, s->vlc[plane].table, VLC_BITS, 3)<<2;\
666 dst0 += get_bits(&s->gb, 2);\
667 dst1 = get_vlc2(&s->gb, s->vlc[plane].table, VLC_BITS, 3)<<2;\
668 dst1 += get_bits(&s->gb, 2);\
681 for(
i=0;
i<count;
i++){
687 int nb_bits,
code, n;
694 }
else if (
s->bps <= 14) {
701 for(
i=0;
i<count;
i++){
707 int nb_bits,
code, n;
720 for(
i=0;
i<count;
i++){
742 for (
i = 0;
i < count;
i++) {
757 int code, n, nb_bits;
761 n =
s->vlc[4].table[
index][1];
765 *(uint32_t *) &
s->temp[0][4 *
i] =
s->pix_bgr_map[
code];
775 s->temp[0][4 *
i +
B] =
code +
s->temp[0][4 *
i +
G];
780 s->temp[0][4 *
i +
R] =
code +
s->temp[0][4 *
i +
G];
802 s->temp[0][4 *
i +
A] = 0;
809 if (
s->decorrelate) {
810 if (
s->bitstream_bpp == 24)
815 if (
s->bitstream_bpp == 24)
827 if (!
s->avctx->draw_horiz_band)
830 h = y -
s->last_slice_end;
833 if (
s->bitstream_bpp == 12)
847 s->last_slice_end = y +
h;
853 return s->llviddsp.add_left_pred(dst,
src,
w,
acc);
855 return s->llviddsp.add_left_pred_int16(( uint16_t *)dst, (
const uint16_t *)
src,
s->n-1,
w,
acc);
862 s->llviddsp.add_bytes(dst,
src,
w);
864 s->hdsp.add_int16((uint16_t*)dst, (
const uint16_t*)
src,
s->n - 1,
w);
871 s->llviddsp.add_median_pred(dst,
src,
diff,
w,
left, left_top);
873 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);
878 int buf_size,
int y_offset,
int table_size)
881 int fake_ystride, fake_ustride, fake_vstride;
882 const int width =
s->width;
883 const int width2 =
s->width >> 1;
886 if ((
ret =
init_get_bits8(&
s->gb,
s->bitstream_buffer + table_size, buf_size - table_size)) < 0)
893 if (
s->version > 2) {
895 for(plane = 0; plane < 1 + 2*
s->chroma +
s->alpha; plane++) {
896 int left, lefttop, y;
899 int fake_stride = fake_ystride;
901 if (
s->chroma && (plane == 1 || plane == 2)) {
902 w >>=
s->chroma_h_shift;
903 h >>=
s->chroma_v_shift;
904 fake_stride = plane == 1 ? fake_ustride : fake_vstride;
907 switch (
s->predictor) {
913 for (y = 1; y <
h; y++) {
918 if (
s->predictor ==
PLANE) {
919 if (y >
s->interlaced) {
943 lefttop = p->
data[plane][0];
962 }
else if (
s->bitstream_bpp < 24) {
964 int lefty, leftu, leftv;
965 int lefttopy, lefttopu, lefttopv;
974 "YUY2 output is not implemented yet\n");
985 switch (
s->predictor) {
989 lefty =
s->llviddsp.add_left_pred(p->
data[0] + p->
linesize[0] * y_offset + 2,
s->temp[0],
992 leftu =
s->llviddsp.add_left_pred(p->
data[1] + p->
linesize[1] * y_offset + 1,
s->temp[1], width2 - 1, leftu);
993 leftv =
s->llviddsp.add_left_pred(p->
data[2] + p->
linesize[2] * y_offset + 1,
s->temp[2], width2 - 1, leftv);
996 for (cy = y = 1; y <
height; y++, cy++) {
999 if (
s->bitstream_bpp == 12) {
1004 lefty =
s->llviddsp.add_left_pred(ydst,
s->temp[0],
1006 if (
s->predictor ==
PLANE) {
1007 if (y >
s->interlaced)
1008 s->llviddsp.add_bytes(ydst, ydst - fake_ystride,
width);
1022 lefty =
s->llviddsp.add_left_pred(ydst,
s->temp[0],
1025 leftu =
s->llviddsp.add_left_pred(udst,
s->temp[1], width2, leftu);
1026 leftv =
s->llviddsp.add_left_pred(vdst,
s->temp[2], width2, leftv);
1028 if (
s->predictor ==
PLANE) {
1029 if (cy >
s->interlaced) {
1030 s->llviddsp.add_bytes(ydst, ydst - fake_ystride,
width);
1032 s->llviddsp.add_bytes(udst, udst - fake_ustride, width2);
1033 s->llviddsp.add_bytes(vdst, vdst - fake_vstride, width2);
1044 lefty =
s->llviddsp.add_left_pred(p->
data[0] + 2,
s->temp[0],
1047 leftu =
s->llviddsp.add_left_pred(p->
data[1] + 1,
s->temp[1], width2 - 1, leftu);
1048 leftv =
s->llviddsp.add_left_pred(p->
data[2] + 1,
s->temp[2], width2 - 1, leftv);
1056 if (
s->interlaced) {
1058 lefty =
s->llviddsp.add_left_pred(p->
data[0] + p->
linesize[0],
1059 s->temp[0],
width, lefty);
1061 leftu =
s->llviddsp.add_left_pred(p->
data[1] + p->
linesize[2],
s->temp[1], width2, leftu);
1062 leftv =
s->llviddsp.add_left_pred(p->
data[2] + p->
linesize[1],
s->temp[2], width2, leftv);
1072 lefty =
s->llviddsp.add_left_pred(p->
data[0] + fake_ystride,
1073 s->temp[0], 4, lefty);
1075 leftu =
s->llviddsp.add_left_pred(p->
data[1] + fake_ustride,
s->temp[1], 2, leftu);
1076 leftv =
s->llviddsp.add_left_pred(p->
data[2] + fake_vstride,
s->temp[2], 2, leftv);
1080 lefttopy = p->
data[0][3];
1082 s->llviddsp.add_median_pred(p->
data[0] + fake_ystride + 4,
1083 p->
data[0] + 4,
s->temp[0],
1084 width - 4, &lefty, &lefttopy);
1086 lefttopu = p->
data[1][1];
1087 lefttopv = p->
data[2][1];
1088 s->llviddsp.add_median_pred(p->
data[1] + fake_ustride + 2, p->
data[1] + 2,
s->temp[1], width2 - 2, &leftu, &lefttopu);
1089 s->llviddsp.add_median_pred(p->
data[2] + fake_vstride + 2, p->
data[2] + 2,
s->temp[2], width2 - 2, &leftv, &lefttopv);
1094 for (; y <
height; y++, cy++) {
1097 if (
s->bitstream_bpp == 12) {
1098 while (2 * cy > y) {
1101 s->llviddsp.add_median_pred(ydst, ydst - fake_ystride,
1117 s->llviddsp.add_median_pred(ydst, ydst - fake_ystride,
1121 s->llviddsp.add_median_pred(udst, udst - fake_ustride,
s->temp[1], width2, &leftu, &lefttopu);
1122 s->llviddsp.add_median_pred(vdst, vdst - fake_vstride,
s->temp[2], width2, &leftv, &lefttopv);
1135 if (
s->bitstream_bpp == 32) {
1149 switch (
s->predictor) {
1153 s->hdsp.add_hfyu_left_pred_bgr32(p->
data[0] + last_line + 4,
1156 for (y =
height - 2; y >= 0; y--) {
1159 s->hdsp.add_hfyu_left_pred_bgr32(p->
data[0] + p->
linesize[0] * (y + y_offset),
1161 if (
s->predictor ==
PLANE) {
1162 if (
s->bitstream_bpp != 32)
1165 s->llviddsp.add_bytes(p->
data[0] + p->
linesize[0] * (y + y_offset),
1167 fake_ystride, 4 *
width);
1176 "prediction type not supported!\n");
1180 "BGR24 output is not implemented yet\n");
1192 int buf_size = avpkt->
size;
1194 const int width =
s->width;
1198 int slice, table_size = 0,
ret, nb_slices;
1199 unsigned slices_info_offset;
1206 &
s->bitstream_buffer_size,
1208 if (!
s->bitstream_buffer)
1211 s->bdsp.bswap_buf((uint32_t *)
s->bitstream_buffer,
1212 (
const uint32_t *) buf, buf_size / 4);
1223 if ((
unsigned) (buf_size - table_size) >= INT_MAX / 8)
1226 s->last_slice_end = 0;
1229 (buf_size > 32 &&
AV_RL32(avpkt->
data + buf_size - 16) == 0)) {
1230 slices_info_offset =
AV_RL32(avpkt->
data + buf_size - 4);
1231 slice_height =
AV_RL32(avpkt->
data + buf_size - 8);
1233 if (nb_slices * 8LL + slices_info_offset > buf_size - 16 ||
1234 s->chroma_v_shift ||
1235 slice_height <= 0 || nb_slices * (uint64_t)slice_height >
height)
1242 for (slice = 0; slice < nb_slices; slice++) {
1243 int y_offset, slice_offset, slice_size;
1245 if (nb_slices > 1) {
1246 slice_offset =
AV_RL32(avpkt->
data + slices_info_offset + slice * 8);
1247 slice_size =
AV_RL32(avpkt->
data + slices_info_offset + slice * 8 + 4);
1249 if (slice_offset < 0 || slice_size <= 0 || (slice_offset&3) ||
1250 slice_offset + (int64_t)slice_size > buf_size)
1253 y_offset =
height - (slice + 1) * slice_height;
1254 s->bdsp.bswap_buf((uint32_t *)
s->bitstream_buffer,
1255 (
const uint32_t *)(buf + slice_offset), slice_size / 4);
1259 slice_size = buf_size;
1262 ret =
decode_slice(avctx, p, slice_height, slice_size, y_offset, table_size);
1286 #if CONFIG_FFVHUFF_DECODER
1301 #if CONFIG_HYMT_DECODER