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;
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");
586 for (
i = 0;
i < 8;
i++)
589 if (
s->version >= 2) {
603 #define VLC_INTERN(dst, table, gb, name, bits, max_depth) \
604 code = table[index][0]; \
605 n = table[index][1]; \
606 if (max_depth > 1 && n < 0) { \
607 LAST_SKIP_BITS(name, gb, bits); \
608 UPDATE_CACHE(name, gb); \
611 index = SHOW_UBITS(name, gb, nb_bits) + code; \
612 code = table[index][0]; \
613 n = table[index][1]; \
614 if (max_depth > 2 && n < 0) { \
615 LAST_SKIP_BITS(name, gb, nb_bits); \
616 UPDATE_CACHE(name, gb); \
619 index = SHOW_UBITS(name, gb, nb_bits) + code; \
620 code = table[index][0]; \
621 n = table[index][1]; \
625 LAST_SKIP_BITS(name, gb, n)
628 #define GET_VLC_DUAL(dst0, dst1, name, gb, dtable, table1, table2, \
629 bits, max_depth, OP) \
631 unsigned int index = SHOW_UBITS(name, gb, bits); \
632 int code, n = dtable[index][1]; \
636 VLC_INTERN(dst0, table1, gb, name, bits, max_depth); \
638 UPDATE_CACHE(re, gb); \
639 index = SHOW_UBITS(name, gb, bits); \
640 VLC_INTERN(dst1, table2, gb, name, bits, max_depth); \
642 code = dtable[index][0]; \
643 OP(dst0, dst1, code); \
644 LAST_SKIP_BITS(name, gb, n); \
648 #define OP8bits(dst0, dst1, code) dst0 = code>>8; dst1 = code
650 #define READ_2PIX(dst0, dst1, plane1) \
651 UPDATE_CACHE(re, &s->gb); \
652 GET_VLC_DUAL(dst0, dst1, re, &s->gb, s->vlc[4+plane1].table, \
653 s->vlc[0].table, s->vlc[plane1].table, VLC_BITS, 3, OP8bits)
662 if (
count >= icount) {
663 for (
i = 0;
i < icount;
i++) {
673 s->temp[0][2 *
i ] =
s->temp[1][
i] =
674 s->temp[0][2 *
i + 1] =
s->temp[2][
i] = 0;
684 #define READ_2PIX_PLANE(dst0, dst1, plane, OP) \
685 UPDATE_CACHE(re, &s->gb); \
686 GET_VLC_DUAL(dst0, dst1, re, &s->gb, s->vlc[4+plane].table, \
687 s->vlc[plane].table, s->vlc[plane].table, VLC_BITS, 3, OP)
689 #define OP14bits(dst0, dst1, code) dst0 = code>>8; dst1 = sign_extend(code, 8)
693 #define READ_2PIX_PLANE16(dst0, dst1, plane){\
694 dst0 = get_vlc2(&s->gb, s->vlc[plane].table, VLC_BITS, 3)<<2;\
695 dst0 += get_bits(&s->gb, 2);\
696 dst1 = get_vlc2(&s->gb, s->vlc[plane].table, VLC_BITS, 3)<<2;\
697 dst1 += get_bits(&s->gb, 2);\
716 int nb_bits,
code,
n;
723 }
else if (
s->bps <= 14) {
736 int nb_bits,
code,
n;
786 int code,
n, nb_bits;
794 *(uint32_t *) &
s->temp[0][4 *
i] =
s->pix_bgr_map[
code];
804 s->temp[0][4 *
i +
B] =
code +
s->temp[0][4 *
i +
G];
809 s->temp[0][4 *
i +
R] =
code +
s->temp[0][4 *
i +
G];
831 s->temp[0][4 *
i +
A] = 0;
838 if (
s->decorrelate) {
839 if (
s->bitstream_bpp == 24)
844 if (
s->bitstream_bpp == 24)
856 if (!
s->avctx->draw_horiz_band)
859 h = y -
s->last_slice_end;
862 if (
s->bitstream_bpp == 12)
876 s->last_slice_end = y +
h;
882 return s->llviddsp.add_left_pred(dst,
src,
w,
acc);
884 return s->llviddsp.add_left_pred_int16(( uint16_t *)dst, (
const uint16_t *)
src,
s->n-1,
w,
acc);
891 s->llviddsp.add_bytes(dst,
src,
w);
893 s->hdsp.add_int16((uint16_t*)dst, (
const uint16_t*)
src,
s->n - 1,
w);
900 s->llviddsp.add_median_pred(dst,
src,
diff,
w,
left, left_top);
902 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);
907 int buf_size,
int y_offset,
int table_size)
910 int fake_ystride, fake_ustride, fake_vstride;
911 const int width =
s->width;
912 const int width2 =
s->width >> 1;
915 if ((
ret =
init_get_bits8(&
s->gb,
s->bitstream_buffer + table_size, buf_size - table_size)) < 0)
922 if (
s->version > 2) {
925 int left, lefttop, y;
928 int fake_stride = fake_ystride;
931 w >>=
s->chroma_h_shift;
932 h >>=
s->chroma_v_shift;
933 fake_stride =
plane == 1 ? fake_ustride : fake_vstride;
936 switch (
s->predictor) {
942 for (y = 1; y <
h; y++) {
947 if (
s->predictor ==
PLANE) {
948 if (y >
s->interlaced) {
991 }
else if (
s->bitstream_bpp < 24) {
993 int lefty, leftu, leftv;
994 int lefttopy, lefttopu, lefttopv;
1003 "YUY2 output is not implemented yet\n");
1014 switch (
s->predictor) {
1018 lefty =
s->llviddsp.add_left_pred(p->
data[0] + p->
linesize[0] * y_offset + 2,
s->temp[0],
1021 leftu =
s->llviddsp.add_left_pred(p->
data[1] + p->
linesize[1] * y_offset + 1,
s->temp[1], width2 - 1, leftu);
1022 leftv =
s->llviddsp.add_left_pred(p->
data[2] + p->
linesize[2] * y_offset + 1,
s->temp[2], width2 - 1, leftv);
1025 for (cy = y = 1; y <
height; y++, cy++) {
1028 if (
s->bitstream_bpp == 12) {
1033 lefty =
s->llviddsp.add_left_pred(ydst,
s->temp[0],
1035 if (
s->predictor ==
PLANE) {
1036 if (y >
s->interlaced)
1037 s->llviddsp.add_bytes(ydst, ydst - fake_ystride,
width);
1051 lefty =
s->llviddsp.add_left_pred(ydst,
s->temp[0],
1054 leftu =
s->llviddsp.add_left_pred(udst,
s->temp[1], width2, leftu);
1055 leftv =
s->llviddsp.add_left_pred(vdst,
s->temp[2], width2, leftv);
1057 if (
s->predictor ==
PLANE) {
1058 if (cy >
s->interlaced) {
1059 s->llviddsp.add_bytes(ydst, ydst - fake_ystride,
width);
1061 s->llviddsp.add_bytes(udst, udst - fake_ustride, width2);
1062 s->llviddsp.add_bytes(vdst, vdst - fake_vstride, width2);
1073 lefty =
s->llviddsp.add_left_pred(p->
data[0] + 2,
s->temp[0],
1076 leftu =
s->llviddsp.add_left_pred(p->
data[1] + 1,
s->temp[1], width2 - 1, leftu);
1077 leftv =
s->llviddsp.add_left_pred(p->
data[2] + 1,
s->temp[2], width2 - 1, leftv);
1085 if (
s->interlaced) {
1087 lefty =
s->llviddsp.add_left_pred(p->
data[0] + p->
linesize[0],
1088 s->temp[0],
width, lefty);
1090 leftu =
s->llviddsp.add_left_pred(p->
data[1] + p->
linesize[2],
s->temp[1], width2, leftu);
1091 leftv =
s->llviddsp.add_left_pred(p->
data[2] + p->
linesize[1],
s->temp[2], width2, leftv);
1101 lefty =
s->llviddsp.add_left_pred(p->
data[0] + fake_ystride,
1102 s->temp[0], 4, lefty);
1104 leftu =
s->llviddsp.add_left_pred(p->
data[1] + fake_ustride,
s->temp[1], 2, leftu);
1105 leftv =
s->llviddsp.add_left_pred(p->
data[2] + fake_vstride,
s->temp[2], 2, leftv);
1109 lefttopy = p->
data[0][3];
1111 s->llviddsp.add_median_pred(p->
data[0] + fake_ystride + 4,
1112 p->
data[0] + 4,
s->temp[0],
1113 width - 4, &lefty, &lefttopy);
1115 lefttopu = p->
data[1][1];
1116 lefttopv = p->
data[2][1];
1117 s->llviddsp.add_median_pred(p->
data[1] + fake_ustride + 2, p->
data[1] + 2,
s->temp[1], width2 - 2, &leftu, &lefttopu);
1118 s->llviddsp.add_median_pred(p->
data[2] + fake_vstride + 2, p->
data[2] + 2,
s->temp[2], width2 - 2, &leftv, &lefttopv);
1123 for (; y <
height; y++, cy++) {
1126 if (
s->bitstream_bpp == 12) {
1127 while (2 * cy > y) {
1130 s->llviddsp.add_median_pred(ydst, ydst - fake_ystride,
1146 s->llviddsp.add_median_pred(ydst, ydst - fake_ystride,
1150 s->llviddsp.add_median_pred(udst, udst - fake_ustride,
s->temp[1], width2, &leftu, &lefttopu);
1151 s->llviddsp.add_median_pred(vdst, vdst - fake_vstride,
s->temp[2], width2, &leftv, &lefttopv);
1164 if (
s->bitstream_bpp == 32) {
1178 switch (
s->predictor) {
1182 s->hdsp.add_hfyu_left_pred_bgr32(p->
data[0] + last_line + 4,
1185 for (y =
height - 2; y >= 0; y--) {
1188 s->hdsp.add_hfyu_left_pred_bgr32(p->
data[0] + p->
linesize[0] * (y + y_offset),
1190 if (
s->predictor ==
PLANE) {
1191 if (
s->bitstream_bpp != 32)
1194 s->llviddsp.add_bytes(p->
data[0] + p->
linesize[0] * (y + y_offset),
1196 fake_ystride, 4 *
width);
1205 "prediction type not supported!\n");
1209 "BGR24 output is not implemented yet\n");
1221 int buf_size = avpkt->
size;
1223 const int width =
s->width;
1227 int slice, table_size = 0,
ret, nb_slices;
1228 unsigned slices_info_offset;
1235 &
s->bitstream_buffer_size,
1237 if (!
s->bitstream_buffer)
1240 s->bdsp.bswap_buf((uint32_t *)
s->bitstream_buffer,
1241 (
const uint32_t *)
buf, buf_size / 4);
1252 if ((
unsigned) (buf_size - table_size) >= INT_MAX / 8)
1255 s->last_slice_end = 0;
1258 (buf_size > 32 &&
AV_RL32(avpkt->
data + buf_size - 16) == 0)) {
1259 slices_info_offset =
AV_RL32(avpkt->
data + buf_size - 4);
1260 slice_height =
AV_RL32(avpkt->
data + buf_size - 8);
1262 if (nb_slices * 8LL + slices_info_offset > buf_size - 16 ||
1263 s->chroma_v_shift ||
1264 slice_height <= 0 || nb_slices * (uint64_t)slice_height >
height)
1271 for (slice = 0; slice < nb_slices; slice++) {
1272 int y_offset, slice_offset, slice_size;
1274 if (nb_slices > 1) {
1275 slice_offset =
AV_RL32(avpkt->
data + slices_info_offset + slice * 8);
1276 slice_size =
AV_RL32(avpkt->
data + slices_info_offset + slice * 8 + 4);
1278 if (slice_offset < 0 || slice_size <= 0 || (slice_offset&3) ||
1279 slice_offset + (int64_t)slice_size > buf_size)
1282 y_offset =
height - (slice + 1) * slice_height;
1283 s->bdsp.bswap_buf((uint32_t *)
s->bitstream_buffer,
1284 (
const uint32_t *)(
buf + slice_offset), slice_size / 4);
1288 slice_size = buf_size;
1291 ret =
decode_slice(avctx, p, slice_height, slice_size, y_offset, table_size);
1316 #if CONFIG_FFVHUFF_DECODER
1332 #if CONFIG_HYMT_DECODER