33 #define UNCHECKED_BITSTREAM_READER 1
43 #define classic_shift_luma_table_size 42
45 34, 36, 35, 69, 135, 232, 9, 16, 10, 24, 11, 23, 12, 16, 13, 10,
46 14, 8, 15, 8, 16, 8, 17, 20, 16, 10, 207, 206, 205, 236, 11, 8,
47 10, 21, 9, 23, 8, 8, 199, 70, 69, 68, 0,
51 #define classic_shift_chroma_table_size 59
53 66, 36, 37, 38, 39, 40, 41, 75, 76, 77, 110, 239, 144, 81, 82, 83,
54 84, 85, 118, 183, 56, 57, 88, 89, 56, 89, 154, 57, 58, 57, 26, 141,
55 57, 56, 58, 57, 58, 57, 184, 119, 214, 245, 116, 83, 82, 49, 80, 79,
56 78, 77, 44, 75, 41, 40, 39, 38, 37, 36, 34, 0,
61 3, 9, 5, 12, 10, 35, 32, 29, 27, 50, 48, 45, 44, 41, 39, 37,
62 73, 70, 68, 65, 64, 61, 58, 56, 53, 50, 49, 46, 44, 41, 38, 36,
63 68, 65, 63, 61, 58, 55, 53, 51, 48, 46, 45, 43, 41, 39, 38, 36,
64 35, 33, 32, 30, 29, 27, 26, 25, 48, 47, 46, 44, 43, 41, 40, 39,
65 37, 36, 35, 34, 32, 31, 30, 28, 27, 26, 24, 23, 22, 20, 19, 37,
66 35, 34, 33, 31, 30, 29, 27, 26, 24, 23, 21, 20, 18, 17, 15, 29,
67 27, 26, 24, 22, 21, 19, 17, 16, 14, 26, 25, 23, 21, 19, 18, 16,
68 15, 27, 25, 23, 21, 19, 17, 16, 14, 26, 25, 23, 21, 18, 17, 14,
69 12, 17, 19, 13, 4, 9, 2, 11, 1, 7, 8, 0, 16, 3, 14, 6,
70 12, 10, 5, 15, 18, 11, 10, 13, 15, 16, 19, 20, 22, 24, 27, 15,
71 18, 20, 22, 24, 26, 14, 17, 20, 22, 24, 27, 15, 18, 20, 23, 25,
72 28, 16, 19, 22, 25, 28, 32, 36, 21, 25, 29, 33, 38, 42, 45, 49,
73 28, 31, 34, 37, 40, 42, 44, 47, 49, 50, 52, 54, 56, 57, 59, 60,
74 62, 64, 66, 67, 69, 35, 37, 39, 40, 42, 43, 45, 47, 48, 51, 52,
75 54, 55, 57, 59, 60, 62, 63, 66, 67, 69, 71, 72, 38, 40, 42, 43,
76 46, 47, 49, 51, 26, 28, 30, 31, 33, 34, 18, 19, 11, 13, 7, 8,
80 3, 1, 2, 2, 2, 2, 3, 3, 7, 5, 7, 5, 8, 6, 11, 9,
81 7, 13, 11, 10, 9, 8, 7, 5, 9, 7, 6, 4, 7, 5, 8, 7,
82 11, 8, 13, 11, 19, 15, 22, 23, 20, 33, 32, 28, 27, 29, 51, 77,
83 43, 45, 76, 81, 46, 82, 75, 55, 56, 144, 58, 80, 60, 74, 147, 63,
84 143, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
85 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 27, 30, 21, 22,
86 17, 14, 5, 6, 100, 54, 47, 50, 51, 53, 106, 107, 108, 109, 110, 111,
87 112, 113, 114, 115, 4, 117, 118, 92, 94, 121, 122, 3, 124, 103, 2, 1,
88 0, 129, 130, 131, 120, 119, 126, 125, 136, 137, 138, 139, 140, 141, 142, 134,
89 135, 132, 133, 104, 64, 101, 62, 57, 102, 95, 93, 59, 61, 28, 97, 96,
90 52, 49, 48, 29, 32, 25, 24, 46, 23, 98, 45, 44, 43, 20, 42, 41,
91 19, 18, 99, 40, 15, 39, 38, 16, 13, 12, 11, 37, 10, 9, 8, 36,
92 7, 128, 127, 105, 123, 116, 35, 34, 33, 145, 31, 79, 42, 146, 78, 26,
93 83, 48, 49, 50, 44, 47, 26, 31, 30, 18, 17, 19, 21, 24, 25, 13,
94 14, 16, 17, 18, 20, 21, 12, 14, 15, 9, 10, 6, 9, 6, 5, 8,
95 6, 12, 8, 10, 7, 9, 6, 4, 6, 2, 2, 3, 3, 3, 3, 2,
102 for (i = 0; i <
n;) {
130 for (p = 0; p < 4; p++) {
131 int p0 = s->
version > 2 ? p : 0;
132 for (i = y = 0; y < s->
vlc_n; y++) {
133 int len0 = s->
len[p0][
y];
135 if (limit <= 0 || !len0)
139 for (u = 0; u < s->
vlc_n; u++) {
140 int len1 = s->
len[p][
u];
141 if (len1 > limit || !len1)
146 len[i] = len0 + len1;
147 bits[i] = (s->
bits[p0][
y] << len1) + s->
bits[p][u];
148 symbols[i] = (y << 8) + (u & 0xFF);
154 bits, 2, 2, symbols, 2, 2, 0)) < 0)
159 int i,
b,
g,
r, code;
165 for (i = 0,
g = -16;
g < 16;
g++) {
166 int len0 = s->
len[p0][
g & 255];
168 if (limit0 < 2 || !len0)
170 for (
b = -16;
b < 16;
b++) {
171 int len1 = s->
len[p1][
b & 255];
172 int limit1 = limit0 - len1;
173 if (limit1 < 1 || !len1)
175 code = (s->
bits[p0][
g & 255] << len1) + s->
bits[p1][
b & 255];
176 for (
r = -16;
r < 16;
r++) {
177 int len2 = s->
len[2][
r & 255];
178 if (len2 > limit1 || !len2)
181 len[i] = len0 + len1 + len2;
182 bits[i] = (code << len2) + s->
bits[2][
r & 255];
219 for (i = 0; i <
count; i++) {
226 s->
bits[i], 4, 4, 0)) < 0)
251 for (i = 0; i < 256; i++)
253 for (i = 0; i < 256; i++)
257 memcpy(s->
bits[1], s->
bits[0], 256 *
sizeof(uint32_t));
260 memcpy(s->
bits[2], s->
bits[1], 256 *
sizeof(uint32_t));
263 for (i = 0; i < 4; i++) {
266 s->
bits[i], 4, 4, 0)) < 0)
284 for (i = 0; i < 8; i++)
300 memset(s->
vlc, 0, 4 *
sizeof(
VLC));
321 int method, interlace;
343 interlace = (avctx->
extradata[2] & 0x30) >> 4;
558 "for this combination of colorspace and predictor type.\n");
584 for (i = 0; i < 8; i++)
600 #define VLC_INTERN(dst, table, gb, name, bits, max_depth) \
601 code = table[index][0]; \
602 n = table[index][1]; \
603 if (max_depth > 1 && n < 0) { \
604 LAST_SKIP_BITS(name, gb, bits); \
605 UPDATE_CACHE(name, gb); \
608 index = SHOW_UBITS(name, gb, nb_bits) + code; \
609 code = table[index][0]; \
610 n = table[index][1]; \
611 if (max_depth > 2 && n < 0) { \
612 LAST_SKIP_BITS(name, gb, nb_bits); \
613 UPDATE_CACHE(name, gb); \
616 index = SHOW_UBITS(name, gb, nb_bits) + code; \
617 code = table[index][0]; \
618 n = table[index][1]; \
622 LAST_SKIP_BITS(name, gb, n)
625 #define GET_VLC_DUAL(dst0, dst1, name, gb, dtable, table1, table2, \
626 bits, max_depth, OP) \
628 unsigned int index = SHOW_UBITS(name, gb, bits); \
629 int code, n = dtable[index][1]; \
633 VLC_INTERN(dst0, table1, gb, name, bits, max_depth); \
635 UPDATE_CACHE(re, gb); \
636 index = SHOW_UBITS(name, gb, bits); \
637 VLC_INTERN(dst1, table2, gb, name, bits, max_depth); \
639 code = dtable[index][0]; \
640 OP(dst0, dst1, code); \
641 LAST_SKIP_BITS(name, gb, n); \
645 #define OP8bits(dst0, dst1, code) dst0 = code>>8; dst1 = code
647 #define READ_2PIX(dst0, dst1, plane1) \
648 UPDATE_CACHE(re, &s->gb); \
649 GET_VLC_DUAL(dst0, dst1, re, &s->gb, s->vlc[4+plane1].table, \
650 s->vlc[0].table, s->vlc[plane1].table, VLC_BITS, 3, OP8bits)
659 if (count >= icount) {
660 for (i = 0; i < icount; i++) {
669 for (; i <
count; i++)
670 s->
temp[0][2 * i ] = s->
temp[1][i] =
671 s->
temp[0][2 * i + 1] = s->
temp[2][i] = 0;
673 for (i = 0; i <
count; i++) {
681 #define READ_2PIX_PLANE(dst0, dst1, plane, OP) \
682 UPDATE_CACHE(re, &s->gb); \
683 GET_VLC_DUAL(dst0, dst1, re, &s->gb, s->vlc[4+plane].table, \
684 s->vlc[plane].table, s->vlc[plane].table, VLC_BITS, 3, OP)
686 #define OP14bits(dst0, dst1, code) dst0 = code>>8; dst1 = sign_extend(code, 8)
690 #define READ_2PIX_PLANE16(dst0, dst1, plane){\
691 dst0 = get_vlc2(&s->gb, s->vlc[plane].table, VLC_BITS, 3)<<2;\
692 dst0 += get_bits(&s->gb, 2);\
693 dst1 = get_vlc2(&s->gb, s->vlc[plane].table, VLC_BITS, 3)<<2;\
694 dst1 += get_bits(&s->gb, 2);\
698 int i,
count = width/2;
707 for(i=0; i<
count; i++){
713 int nb_bits, code,
n;
720 }
else if (s->
bps <= 14) {
727 for(i=0; i<
count; i++){
733 int nb_bits, code,
n;
746 for(i=0; i<
count; i++){
768 for (i = 0; i <
count; i++) {
783 int code,
n, nb_bits;
801 s->
temp[0][4 * i +
B] = code + s->
temp[0][4 * i +
G];
806 s->
temp[0][4 * i +
R] = code + s->
temp[0][4 * i +
G];
828 s->
temp[0][4 * i +
A] = 0;
865 offset[1] = frame->
linesize[1] * cy;
866 offset[2] = frame->
linesize[2] * cy;
906 int buf_size = avpkt->
size;
909 const int width2 = s->
width >> 1;
911 int fake_ystride, fake_ustride, fake_vstride;
914 int table_size = 0,
ret;
923 (
const uint32_t *) buf, buf_size / 4);
934 if ((
unsigned) (buf_size - table_size) >= INT_MAX / 8)
938 (buf_size - table_size) * 8)) < 0)
949 for(plane = 0; plane < 1 + 2*s->
chroma + s->
alpha; plane++) {
950 int left, lefttop,
y;
953 int fake_stride = fake_ystride;
955 if (s->
chroma && (plane == 1 || plane == 2)) {
958 fake_stride = plane == 1 ? fake_ustride : fake_vstride;
967 for (y = 1; y < h; y++) {
993 lefttop = p->
data[plane][0];
1014 int lefty, leftu, leftv;
1015 int lefttopy, lefttopu, lefttopv;
1024 "YUY2 output is not implemented yet\n");
1046 for (cy = y = 1; y < s->
height; y++, cy++) {
1107 s->
temp[0], width, lefty);
1119 s->
temp[0], 4, lefty);
1126 lefttopy = p->
data[0][3];
1130 width - 4, &lefty, &lefttopy);
1132 lefttopu = p->
data[1][1];
1133 lefttopv = p->
data[2][1];
1140 for (; y <
height; y++, cy++) {
1144 while (2 * cy > y) {
1179 const int last_line = (height - 1) * p->
linesize[0];
1190 left[
A] = p->
data[0][last_line +
A] = 255;
1200 s->
temp[0], width - 1, left);
1202 for (y = s->
height - 2; y >= 0; y--) {
1206 s->
temp[0], width, left);
1213 fake_ystride, 4 * width);
1222 "prediction type not supported!\n");
1226 "BGR24 output is not implemented yet\n");
1251 #if CONFIG_FFVHUFF_DECODER
1252 AVCodec ff_ffvhuff_decoder = {