33 #define UNCHECKED_BITSTREAM_READER 1
42 #define classic_shift_luma_table_size 42
44 34, 36, 35, 69, 135, 232, 9, 16, 10, 24, 11, 23, 12, 16, 13, 10,
45 14, 8, 15, 8, 16, 8, 17, 20, 16, 10, 207, 206, 205, 236, 11, 8,
46 10, 21, 9, 23, 8, 8, 199, 70, 69, 68, 0,
50 #define classic_shift_chroma_table_size 59
52 66, 36, 37, 38, 39, 40, 41, 75, 76, 77, 110, 239, 144, 81, 82, 83,
53 84, 85, 118, 183, 56, 57, 88, 89, 56, 89, 154, 57, 58, 57, 26, 141,
54 57, 56, 58, 57, 58, 57, 184, 119, 214, 245, 116, 83, 82, 49, 80, 79,
55 78, 77, 44, 75, 41, 40, 39, 38, 37, 36, 34, 0,
60 3, 9, 5, 12, 10, 35, 32, 29, 27, 50, 48, 45, 44, 41, 39, 37,
61 73, 70, 68, 65, 64, 61, 58, 56, 53, 50, 49, 46, 44, 41, 38, 36,
62 68, 65, 63, 61, 58, 55, 53, 51, 48, 46, 45, 43, 41, 39, 38, 36,
63 35, 33, 32, 30, 29, 27, 26, 25, 48, 47, 46, 44, 43, 41, 40, 39,
64 37, 36, 35, 34, 32, 31, 30, 28, 27, 26, 24, 23, 22, 20, 19, 37,
65 35, 34, 33, 31, 30, 29, 27, 26, 24, 23, 21, 20, 18, 17, 15, 29,
66 27, 26, 24, 22, 21, 19, 17, 16, 14, 26, 25, 23, 21, 19, 18, 16,
67 15, 27, 25, 23, 21, 19, 17, 16, 14, 26, 25, 23, 21, 18, 17, 14,
68 12, 17, 19, 13, 4, 9, 2, 11, 1, 7, 8, 0, 16, 3, 14, 6,
69 12, 10, 5, 15, 18, 11, 10, 13, 15, 16, 19, 20, 22, 24, 27, 15,
70 18, 20, 22, 24, 26, 14, 17, 20, 22, 24, 27, 15, 18, 20, 23, 25,
71 28, 16, 19, 22, 25, 28, 32, 36, 21, 25, 29, 33, 38, 42, 45, 49,
72 28, 31, 34, 37, 40, 42, 44, 47, 49, 50, 52, 54, 56, 57, 59, 60,
73 62, 64, 66, 67, 69, 35, 37, 39, 40, 42, 43, 45, 47, 48, 51, 52,
74 54, 55, 57, 59, 60, 62, 63, 66, 67, 69, 71, 72, 38, 40, 42, 43,
75 46, 47, 49, 51, 26, 28, 30, 31, 33, 34, 18, 19, 11, 13, 7, 8,
79 3, 1, 2, 2, 2, 2, 3, 3, 7, 5, 7, 5, 8, 6, 11, 9,
80 7, 13, 11, 10, 9, 8, 7, 5, 9, 7, 6, 4, 7, 5, 8, 7,
81 11, 8, 13, 11, 19, 15, 22, 23, 20, 33, 32, 28, 27, 29, 51, 77,
82 43, 45, 76, 81, 46, 82, 75, 55, 56, 144, 58, 80, 60, 74, 147, 63,
83 143, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
84 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 27, 30, 21, 22,
85 17, 14, 5, 6, 100, 54, 47, 50, 51, 53, 106, 107, 108, 109, 110, 111,
86 112, 113, 114, 115, 4, 117, 118, 92, 94, 121, 122, 3, 124, 103, 2, 1,
87 0, 129, 130, 131, 120, 119, 126, 125, 136, 137, 138, 139, 140, 141, 142, 134,
88 135, 132, 133, 104, 64, 101, 62, 57, 102, 95, 93, 59, 61, 28, 97, 96,
89 52, 49, 48, 29, 32, 25, 24, 46, 23, 98, 45, 44, 43, 20, 42, 41,
90 19, 18, 99, 40, 15, 39, 38, 16, 13, 12, 11, 37, 10, 9, 8, 36,
91 7, 128, 127, 105, 123, 116, 35, 34, 33, 145, 31, 79, 42, 146, 78, 26,
92 83, 48, 49, 50, 44, 47, 26, 31, 30, 18, 17, 19, 21, 24, 25, 13,
93 14, 16, 17, 18, 20, 21, 12, 14, 15, 9, 10, 6, 9, 6, 5, 8,
94 6, 12, 8, 10, 7, 9, 6, 4, 6, 2, 2, 3, 3, 3, 3, 2,
101 for (i = 0; i <
n;) {
129 for (p = 0; p < 4; p++) {
130 int p0 = s->
version > 2 ? p : 0;
131 for (i = y = 0; y < s->
vlc_n; y++) {
132 int len0 = s->
len[p0][
y];
134 if (limit <= 0 || !len0)
138 for (u = 0; u < s->
vlc_n; u++) {
139 int len1 = s->
len[p][
u];
140 if (len1 > limit || !len1)
145 len[i] = len0 + len1;
146 bits[i] = (s->
bits[p0][
y] << len1) + s->
bits[p][u];
147 symbols[i] = (y << 8) + (u & 0xFF);
153 bits, 2, 2, symbols, 2, 2, 0)) < 0)
158 int i,
b,
g,
r, code;
164 for (i = 0,
g = -16;
g < 16;
g++) {
165 int len0 = s->
len[p0][
g & 255];
167 if (limit0 < 2 || !len0)
169 for (
b = -16;
b < 16;
b++) {
170 int len1 = s->
len[p1][
b & 255];
171 int limit1 = limit0 - len1;
172 if (limit1 < 1 || !len1)
174 code = (s->
bits[p0][
g & 255] << len1) + s->
bits[p1][
b & 255];
175 for (
r = -16;
r < 16;
r++) {
176 int len2 = s->
len[2][
r & 255];
177 if (len2 > limit1 || !len2)
180 len[i] = len0 + len1 + len2;
181 bits[i] = (code << len2) + s->
bits[2][
r & 255];
218 for (i = 0; i <
count; i++) {
225 s->
bits[i], 4, 4, 0)) < 0)
250 for (i = 0; i < 256; i++)
252 for (i = 0; i < 256; i++)
256 memcpy(s->
bits[1], s->
bits[0], 256 *
sizeof(uint32_t));
259 memcpy(s->
bits[2], s->
bits[1], 256 *
sizeof(uint32_t));
262 for (i = 0; i < 4; i++) {
265 s->
bits[i], 4, 4, 0)) < 0)
283 for (i = 0; i < 8; i++)
295 memset(s->
vlc, 0, 4 *
sizeof(
VLC));
316 int method, interlace;
338 interlace = (avctx->
extradata[2] & 0x30) >> 4;
553 "for this combination of colorspace and predictor type.\n");
579 for (i = 0; i < 8; i++)
595 #define VLC_INTERN(dst, table, gb, name, bits, max_depth) \
596 code = table[index][0]; \
597 n = table[index][1]; \
598 if (max_depth > 1 && n < 0) { \
599 LAST_SKIP_BITS(name, gb, bits); \
600 UPDATE_CACHE(name, gb); \
603 index = SHOW_UBITS(name, gb, nb_bits) + code; \
604 code = table[index][0]; \
605 n = table[index][1]; \
606 if (max_depth > 2 && n < 0) { \
607 LAST_SKIP_BITS(name, gb, nb_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]; \
617 LAST_SKIP_BITS(name, gb, n)
620 #define GET_VLC_DUAL(dst0, dst1, name, gb, dtable, table1, table2, \
621 bits, max_depth, OP) \
623 unsigned int index = SHOW_UBITS(name, gb, bits); \
624 int code, n = dtable[index][1]; \
628 VLC_INTERN(dst0, table1, gb, name, bits, max_depth); \
630 UPDATE_CACHE(re, gb); \
631 index = SHOW_UBITS(name, gb, bits); \
632 VLC_INTERN(dst1, table2, gb, name, bits, max_depth); \
634 code = dtable[index][0]; \
635 OP(dst0, dst1, code); \
636 LAST_SKIP_BITS(name, gb, n); \
640 #define OP8bits(dst0, dst1, code) dst0 = code>>8; dst1 = code
642 #define READ_2PIX(dst0, dst1, plane1) \
643 UPDATE_CACHE(re, &s->gb); \
644 GET_VLC_DUAL(dst0, dst1, re, &s->gb, s->vlc[4+plane1].table, \
645 s->vlc[0].table, s->vlc[plane1].table, VLC_BITS, 3, OP8bits)
654 if (count >= icount) {
655 for (i = 0; i < icount; i++) {
664 for (; i <
count; i++)
665 s->
temp[0][2 * i ] = s->
temp[1][i] =
666 s->
temp[0][2 * i + 1] = s->
temp[2][i] = 0;
668 for (i = 0; i <
count; i++) {
676 #define READ_2PIX_PLANE(dst0, dst1, plane, OP) \
677 UPDATE_CACHE(re, &s->gb); \
678 GET_VLC_DUAL(dst0, dst1, re, &s->gb, s->vlc[4+plane].table, \
679 s->vlc[plane].table, s->vlc[plane].table, VLC_BITS, 3, OP)
681 #define OP14bits(dst0, dst1, code) dst0 = code>>8; dst1 = sign_extend(code, 8)
685 #define READ_2PIX_PLANE16(dst0, dst1, plane){\
686 dst0 = get_vlc2(&s->gb, s->vlc[plane].table, VLC_BITS, 3)<<2;\
687 dst0 += get_bits(&s->gb, 2);\
688 dst1 = get_vlc2(&s->gb, s->vlc[plane].table, VLC_BITS, 3)<<2;\
689 dst1 += get_bits(&s->gb, 2);\
693 int i,
count = width/2;
702 for(i=0; i<
count; i++){
708 int nb_bits, code,
n;
715 }
else if (s->
bps <= 14) {
722 for(i=0; i<
count; i++){
728 int nb_bits, code,
n;
741 for(i=0; i<
count; i++){
763 for (i = 0; i <
count; i++) {
778 int code,
n, nb_bits;
796 s->
temp[0][4 * i +
B] = code + s->
temp[0][4 * i +
G];
801 s->
temp[0][4 * i +
R] = code + s->
temp[0][4 * i +
G];
823 s->
temp[0][4 * i +
A] = 0;
860 offset[1] = frame->
linesize[1] * cy;
861 offset[2] = frame->
linesize[2] * cy;
901 int buf_size = avpkt->
size;
904 const int width2 = s->
width >> 1;
906 int fake_ystride, fake_ustride, fake_vstride;
909 int table_size = 0,
ret;
918 (
const uint32_t *) buf, buf_size / 4);
929 if ((
unsigned) (buf_size - table_size) >= INT_MAX / 8)
933 (buf_size - table_size) * 8)) < 0)
944 for(plane = 0; plane < 1 + 2*s->
chroma + s->
alpha; plane++) {
945 int left, lefttop,
y;
948 int fake_stride = fake_ystride;
950 if (s->
chroma && (plane == 1 || plane == 2)) {
953 fake_stride = plane == 1 ? fake_ustride : fake_vstride;
962 for (y = 1; y < h; y++) {
988 lefttop = p->
data[plane][0];
1009 int lefty, leftu, leftv;
1010 int lefttopy, lefttopu, lefttopv;
1019 "YUY2 output is not implemented yet\n");
1041 for (cy = y = 1; y < s->
height; y++, cy++) {
1102 s->
temp[0], width, lefty);
1114 s->
temp[0], 4, lefty);
1121 lefttopy = p->
data[0][3];
1125 width - 4, &lefty, &lefttopy);
1127 lefttopu = p->
data[1][1];
1128 lefttopv = p->
data[2][1];
1135 for (; y <
height; y++, cy++) {
1139 while (2 * cy > y) {
1174 const int last_line = (height - 1) * p->
linesize[0];
1185 left[
A] = p->
data[0][last_line +
A] = 255;
1195 s->
temp[0], width - 1, left);
1197 for (y = s->
height - 2; y >= 0; y--) {
1201 s->
temp[0], width, left);
1208 fake_ystride, 4 * width);
1217 "prediction type not supported!\n");
1221 "BGR24 output is not implemented yet\n");
1246 #if CONFIG_FFVHUFF_DECODER
1247 AVCodec ff_ffvhuff_decoder = {