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)
281 memset(s->
vlc, 0, 4 *
sizeof(
VLC));
302 int method, interlace;
324 interlace = (avctx->
extradata[2] & 0x30) >> 4;
536 "for this combination of colorspace and predictor type.\n");
558 for (i = 0; i < 8; i++)
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);\
672 int i,
count = width/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;
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;
839 offset[1] = frame->
linesize[1] * cy;
840 offset[2] = frame->
linesize[2] * cy;
880 int buf_size = avpkt->
size;
883 const int width2 = s->
width >> 1;
885 int fake_ystride, fake_ustride, fake_vstride;
888 int table_size = 0,
ret;
897 (
const uint32_t *) buf, buf_size / 4);
908 if ((
unsigned) (buf_size - table_size) >= INT_MAX / 8)
912 (buf_size - table_size) * 8)) < 0)
923 for(plane = 0; plane < 1 + 2*s->
chroma + s->
alpha; plane++) {
924 int left, lefttop,
y;
927 int fake_stride = fake_ystride;
929 if (s->
chroma && (plane == 1 || plane == 2)) {
932 fake_stride = plane == 1 ? fake_ustride : fake_vstride;
941 for (y = 1; y < h; y++) {
967 lefttop = p->
data[plane][0];
988 int lefty, leftu, leftv;
989 int lefttopy, lefttopu, lefttopv;
998 "YUY2 output is not implemented yet\n");
1020 for (cy = y = 1; y < s->
height; y++, cy++) {
1081 s->
temp[0], width, lefty);
1093 s->
temp[0], 4, lefty);
1100 lefttopy = p->
data[0][3];
1104 width - 4, &lefty, &lefttopy);
1106 lefttopu = p->
data[1][1];
1107 lefttopv = p->
data[2][1];
1114 for (; y <
height; y++, cy++) {
1118 while (2 * cy > y) {
1153 const int last_line = (height - 1) * p->
linesize[0];
1164 left[
A] = p->
data[0][last_line +
A] = 255;
1174 s->
temp[0], width - 1, left);
1176 for (y = s->
height - 2; y >= 0; y--) {
1180 s->
temp[0], width, left);
1188 fake_ystride, fake_ystride);
1197 "prediction type not supported!\n");
1201 "BGR24 output is not implemented yet\n");
1220 for (i = 0; i < 8; i++)
1240 #if CONFIG_FFVHUFF_DECODER
1241 AVCodec ff_ffvhuff_decoder = {