33 #define UNCHECKED_BITSTREAM_READER 1
35 #include "config_components.h"
85 #define classic_shift_luma_table_size 42
87 34, 36, 35, 69, 135, 232, 9, 16, 10, 24, 11, 23, 12, 16, 13, 10,
88 14, 8, 15, 8, 16, 8, 17, 20, 16, 10, 207, 206, 205, 236, 11, 8,
89 10, 21, 9, 23, 8, 8, 199, 70, 69, 68, 0,
93 #define classic_shift_chroma_table_size 59
95 66, 36, 37, 38, 39, 40, 41, 75, 76, 77, 110, 239, 144, 81, 82, 83,
96 84, 85, 118, 183, 56, 57, 88, 89, 56, 89, 154, 57, 58, 57, 26, 141,
97 57, 56, 58, 57, 58, 57, 184, 119, 214, 245, 116, 83, 82, 49, 80, 79,
98 78, 77, 44, 75, 41, 40, 39, 38, 37, 36, 34, 0,
103 3, 9, 5, 12, 10, 35, 32, 29, 27, 50, 48, 45, 44, 41, 39, 37,
104 73, 70, 68, 65, 64, 61, 58, 56, 53, 50, 49, 46, 44, 41, 38, 36,
105 68, 65, 63, 61, 58, 55, 53, 51, 48, 46, 45, 43, 41, 39, 38, 36,
106 35, 33, 32, 30, 29, 27, 26, 25, 48, 47, 46, 44, 43, 41, 40, 39,
107 37, 36, 35, 34, 32, 31, 30, 28, 27, 26, 24, 23, 22, 20, 19, 37,
108 35, 34, 33, 31, 30, 29, 27, 26, 24, 23, 21, 20, 18, 17, 15, 29,
109 27, 26, 24, 22, 21, 19, 17, 16, 14, 26, 25, 23, 21, 19, 18, 16,
110 15, 27, 25, 23, 21, 19, 17, 16, 14, 26, 25, 23, 21, 18, 17, 14,
111 12, 17, 19, 13, 4, 9, 2, 11, 1, 7, 8, 0, 16, 3, 14, 6,
112 12, 10, 5, 15, 18, 11, 10, 13, 15, 16, 19, 20, 22, 24, 27, 15,
113 18, 20, 22, 24, 26, 14, 17, 20, 22, 24, 27, 15, 18, 20, 23, 25,
114 28, 16, 19, 22, 25, 28, 32, 36, 21, 25, 29, 33, 38, 42, 45, 49,
115 28, 31, 34, 37, 40, 42, 44, 47, 49, 50, 52, 54, 56, 57, 59, 60,
116 62, 64, 66, 67, 69, 35, 37, 39, 40, 42, 43, 45, 47, 48, 51, 52,
117 54, 55, 57, 59, 60, 62, 63, 66, 67, 69, 71, 72, 38, 40, 42, 43,
118 46, 47, 49, 51, 26, 28, 30, 31, 33, 34, 18, 19, 11, 13, 7, 8,
122 3, 1, 2, 2, 2, 2, 3, 3, 7, 5, 7, 5, 8, 6, 11, 9,
123 7, 13, 11, 10, 9, 8, 7, 5, 9, 7, 6, 4, 7, 5, 8, 7,
124 11, 8, 13, 11, 19, 15, 22, 23, 20, 33, 32, 28, 27, 29, 51, 77,
125 43, 45, 76, 81, 46, 82, 75, 55, 56, 144, 58, 80, 60, 74, 147, 63,
126 143, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
127 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 27, 30, 21, 22,
128 17, 14, 5, 6, 100, 54, 47, 50, 51, 53, 106, 107, 108, 109, 110, 111,
129 112, 113, 114, 115, 4, 117, 118, 92, 94, 121, 122, 3, 124, 103, 2, 1,
130 0, 129, 130, 131, 120, 119, 126, 125, 136, 137, 138, 139, 140, 141, 142, 134,
131 135, 132, 133, 104, 64, 101, 62, 57, 102, 95, 93, 59, 61, 28, 97, 96,
132 52, 49, 48, 29, 32, 25, 24, 46, 23, 98, 45, 44, 43, 20, 42, 41,
133 19, 18, 99, 40, 15, 39, 38, 16, 13, 12, 11, 37, 10, 9, 8, 36,
134 7, 128, 127, 105, 123, 116, 35, 34, 33, 145, 31, 79, 42, 146, 78, 26,
135 83, 48, 49, 50, 44, 47, 26, 31, 30, 18, 17, 19, 21, 24, 25, 13,
136 14, 16, 17, 18, 20, 21, 12, 14, 15, 9, 10, 6, 9, 6, 5, 8,
137 6, 12, 8, 10, 7, 9, 6, 4, 6, 2, 2, 3, 3, 3, 3, 2,
144 for (
i = 0;
i < n;) {
170 if (
s->bitstream_bpp < 24 ||
s->version > 2) {
172 for (p = 0; p < 4; p++) {
173 int p0 =
s->version > 2 ? p : 0;
174 for (
i = y = 0; y <
s->vlc_n; y++) {
175 int len0 =
s->len[p0][y];
177 if (
limit <= 0 || !len0)
181 for (
u = 0;
u <
s->vlc_n;
u++) {
182 int len1 =
s->len[p][
u];
183 if (len1 >
limit || !len1)
188 len[
i] = len0 + len1;
189 bits[
i] = (
s->bits[p0][y] << len1) +
s->bits[p][
u];
190 symbols[
i] = (y << 8) + (
u & 0xFF);
196 bits, 2, 2, symbols, 2, 2, 0)) < 0)
200 uint8_t (*
map)[4] = (uint8_t(*)[4])
s->pix_bgr_map;
202 int p0 =
s->decorrelate;
203 int p1 = !
s->decorrelate;
207 for (
i = 0,
g = -16;
g < 16;
g++) {
208 int len0 =
s->len[p0][
g & 255];
210 if (limit0 < 2 || !len0)
212 for (
b = -16;
b < 16;
b++) {
213 int len1 =
s->len[p1][
b & 255];
214 int limit1 = limit0 - len1;
215 if (limit1 < 1 || !len1)
217 code = (
s->bits[p0][
g & 255] << len1) +
s->bits[p1][
b & 255];
218 for (
r = -16;
r < 16;
r++) {
219 int len2 =
s->len[2][
r & 255];
220 if (len2 > limit1 || !len2)
223 len[
i] = len0 + len1 + len2;
225 if (
s->decorrelate) {
259 count = 1 +
s->alpha + 2*
s->chroma;
261 for (
i = 0;
i < count;
i++) {
268 s->bits[
i], 4, 4, 0)) < 0)
293 for (
i = 0;
i < 256;
i++)
298 if (
s->bitstream_bpp >= 24) {
299 memcpy(
s->bits[1],
s->bits[0], 256 *
sizeof(uint32_t));
300 memcpy(
s->len[1],
s->len[0], 256 *
sizeof(uint8_t));
302 memcpy(
s->bits[2],
s->bits[1], 256 *
sizeof(uint32_t));
303 memcpy(
s->len[2],
s->len[1], 256 *
sizeof(uint8_t));
305 for (
i = 0;
i < 4;
i++) {
308 s->bits[
i], 4, 4, 0)) < 0)
326 for (
i = 0;
i < 8;
i++)
346 memset(
s->vlc, 0, 4 *
sizeof(
VLC));
348 s->interlaced = avctx->
height > 288;
366 if (
s->version >= 2) {
367 int method, interlace;
373 s->decorrelate = method & 64 ? 1 : 0;
374 s->predictor = method & 63;
375 if (
s->version == 2) {
377 if (
s->bitstream_bpp == 0)
384 s->chroma_v_shift = (avctx->
extradata[1] >> 2) & 3;
389 interlace = (avctx->
extradata[2] & 0x30) >> 4;
390 s->interlaced = (interlace == 1) ? 1 : (interlace == 2) ? 0 :
s->interlaced;
391 s->context = avctx->
extradata[2] & 0x40 ? 1 : 0;
426 if (
s->version <= 2) {
427 switch (
s->bitstream_bpp) {
457 switch ( (
s->chroma<<10) | (
s->yuv<<9) | (
s->alpha<<8) | ((
s->bps-1)<<4) |
s->chroma_h_shift | (
s->chroma_v_shift<<2)) {
596 "for this combination of colorspace and predictor type.\n");
607 #define VLC_INTERN(dst, table, gb, name, bits, max_depth) \
608 code = table[index].sym; \
609 n = table[index].len; \
610 if (max_depth > 1 && n < 0) { \
611 LAST_SKIP_BITS(name, gb, bits); \
612 UPDATE_CACHE(name, gb); \
615 index = SHOW_UBITS(name, gb, nb_bits) + code; \
616 code = table[index].sym; \
617 n = table[index].len; \
618 if (max_depth > 2 && n < 0) { \
619 LAST_SKIP_BITS(name, gb, nb_bits); \
620 UPDATE_CACHE(name, gb); \
623 index = SHOW_UBITS(name, gb, nb_bits) + code; \
624 code = table[index].sym; \
625 n = table[index].len; \
629 LAST_SKIP_BITS(name, gb, n)
632 #define GET_VLC_DUAL(dst0, dst1, name, gb, dtable, table1, table2, \
633 bits, max_depth, OP) \
635 unsigned int index = SHOW_UBITS(name, gb, bits); \
636 int code, n = dtable[index].len; \
640 VLC_INTERN(dst0, table1, gb, name, bits, max_depth); \
642 UPDATE_CACHE(re, gb); \
643 index = SHOW_UBITS(name, gb, bits); \
644 VLC_INTERN(dst1, table2, gb, name, bits, max_depth); \
646 code = dtable[index].sym; \
647 OP(dst0, dst1, code); \
648 LAST_SKIP_BITS(name, gb, n); \
652 #define OP8bits(dst0, dst1, code) dst0 = code>>8; dst1 = code
654 #define READ_2PIX(dst0, dst1, plane1) \
655 UPDATE_CACHE(re, &s->gb); \
656 GET_VLC_DUAL(dst0, dst1, re, &s->gb, s->vlc[4+plane1].table, \
657 s->vlc[0].table, s->vlc[plane1].table, VLC_BITS, 3, OP8bits)
666 if (count >= icount) {
667 for (
i = 0;
i < icount;
i++) {
676 for (;
i < count;
i++)
677 s->temp[0][2 *
i ] =
s->temp[1][
i] =
678 s->temp[0][2 *
i + 1] =
s->temp[2][
i] = 0;
680 for (
i = 0;
i < count;
i++) {
688 #define READ_2PIX_PLANE(dst0, dst1, plane, OP) \
689 UPDATE_CACHE(re, &s->gb); \
690 GET_VLC_DUAL(dst0, dst1, re, &s->gb, s->vlc[4+plane].table, \
691 s->vlc[plane].table, s->vlc[plane].table, VLC_BITS, 3, OP)
693 #define OP14bits(dst0, dst1, code) dst0 = code>>8; dst1 = sign_extend(code, 8)
697 #define READ_2PIX_PLANE16(dst0, dst1, plane){\
698 dst0 = get_vlc2(&s->gb, s->vlc[plane].table, VLC_BITS, 3)<<2;\
699 dst0 += get_bits(&s->gb, 2);\
700 dst1 = get_vlc2(&s->gb, s->vlc[plane].table, VLC_BITS, 3)<<2;\
701 dst1 += get_bits(&s->gb, 2);\
714 for(
i=0;
i<count;
i++){
720 int nb_bits,
code, n;
727 }
else if (
s->bps <= 14) {
734 for(
i=0;
i<count;
i++){
740 int nb_bits,
code, n;
753 for(
i=0;
i<count;
i++){
775 for (
i = 0;
i < count;
i++) {
790 int code, n, nb_bits;
794 n =
s->vlc[4].table[
index].len;
798 *(uint32_t *) &
s->temp[0][4 *
i] =
s->pix_bgr_map[
code];
808 s->temp[0][4 *
i +
B] =
code +
s->temp[0][4 *
i +
G];
813 s->temp[0][4 *
i +
R] =
code +
s->temp[0][4 *
i +
G];
835 s->temp[0][4 *
i +
A] = 0;
842 if (
s->decorrelate) {
843 if (
s->bitstream_bpp == 24)
848 if (
s->bitstream_bpp == 24)
863 h = y -
s->last_slice_end;
866 if (
s->bitstream_bpp == 12)
880 s->last_slice_end = y +
h;
886 return s->llviddsp.add_left_pred(dst,
src,
w,
acc);
888 return s->llviddsp.add_left_pred_int16(( uint16_t *)dst, (
const uint16_t *)
src,
s->n-1,
w,
acc);
895 s->llviddsp.add_bytes(dst,
src,
w);
897 s->hdsp.add_int16((uint16_t*)dst, (
const uint16_t*)
src,
s->n - 1,
w);
904 s->llviddsp.add_median_pred(dst,
src,
diff,
w,
left, left_top);
906 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);
911 int buf_size,
int y_offset,
int table_size)
914 int fake_ystride, fake_ustride, fake_vstride;
916 const int width2 = avctx->
width >> 1;
919 if ((
ret =
init_get_bits8(&
s->gb,
s->bitstream_buffer + table_size, buf_size - table_size)) < 0)
926 if (
s->version > 2) {
928 for(plane = 0; plane < 1 + 2*
s->chroma +
s->alpha; plane++) {
929 int left, lefttop, y;
932 int fake_stride = fake_ystride;
934 if (
s->chroma && (plane == 1 || plane == 2)) {
935 w >>=
s->chroma_h_shift;
936 h >>=
s->chroma_v_shift;
937 fake_stride = plane == 1 ? fake_ustride : fake_vstride;
940 switch (
s->predictor) {
946 for (y = 1; y <
h; y++) {
951 if (
s->predictor ==
PLANE) {
952 if (y >
s->interlaced) {
976 lefttop = p->
data[plane][0];
995 }
else if (
s->bitstream_bpp < 24) {
997 int lefty, leftu, leftv;
998 int lefttopy, lefttopu, lefttopv;
1007 "YUY2 output is not implemented yet\n");
1018 switch (
s->predictor) {
1022 lefty =
s->llviddsp.add_left_pred(p->
data[0] + p->
linesize[0] * y_offset + 2,
s->temp[0],
1025 leftu =
s->llviddsp.add_left_pred(p->
data[1] + p->
linesize[1] * y_offset + 1,
s->temp[1], width2 - 1, leftu);
1026 leftv =
s->llviddsp.add_left_pred(p->
data[2] + p->
linesize[2] * y_offset + 1,
s->temp[2], width2 - 1, leftv);
1029 for (cy = y = 1; y <
height; y++, cy++) {
1030 uint8_t *ydst, *udst, *vdst;
1032 if (
s->bitstream_bpp == 12) {
1037 lefty =
s->llviddsp.add_left_pred(ydst,
s->temp[0],
1039 if (
s->predictor ==
PLANE) {
1040 if (y >
s->interlaced)
1041 s->llviddsp.add_bytes(ydst, ydst - fake_ystride,
width);
1055 lefty =
s->llviddsp.add_left_pred(ydst,
s->temp[0],
1058 leftu =
s->llviddsp.add_left_pred(udst,
s->temp[1], width2, leftu);
1059 leftv =
s->llviddsp.add_left_pred(vdst,
s->temp[2], width2, leftv);
1061 if (
s->predictor ==
PLANE) {
1062 if (cy >
s->interlaced) {
1063 s->llviddsp.add_bytes(ydst, ydst - fake_ystride,
width);
1065 s->llviddsp.add_bytes(udst, udst - fake_ustride, width2);
1066 s->llviddsp.add_bytes(vdst, vdst - fake_vstride, width2);
1077 lefty =
s->llviddsp.add_left_pred(p->
data[0] + 2,
s->temp[0],
1080 leftu =
s->llviddsp.add_left_pred(p->
data[1] + 1,
s->temp[1], width2 - 1, leftu);
1081 leftv =
s->llviddsp.add_left_pred(p->
data[2] + 1,
s->temp[2], width2 - 1, leftv);
1089 if (
s->interlaced) {
1091 lefty =
s->llviddsp.add_left_pred(p->
data[0] + p->
linesize[0],
1092 s->temp[0],
width, lefty);
1094 leftu =
s->llviddsp.add_left_pred(p->
data[1] + p->
linesize[2],
s->temp[1], width2, leftu);
1095 leftv =
s->llviddsp.add_left_pred(p->
data[2] + p->
linesize[1],
s->temp[2], width2, leftv);
1105 lefty =
s->llviddsp.add_left_pred(p->
data[0] + fake_ystride,
1106 s->temp[0], 4, lefty);
1108 leftu =
s->llviddsp.add_left_pred(p->
data[1] + fake_ustride,
s->temp[1], 2, leftu);
1109 leftv =
s->llviddsp.add_left_pred(p->
data[2] + fake_vstride,
s->temp[2], 2, leftv);
1113 lefttopy = p->
data[0][3];
1115 s->llviddsp.add_median_pred(p->
data[0] + fake_ystride + 4,
1116 p->
data[0] + 4,
s->temp[0],
1117 width - 4, &lefty, &lefttopy);
1119 lefttopu = p->
data[1][1];
1120 lefttopv = p->
data[2][1];
1121 s->llviddsp.add_median_pred(p->
data[1] + fake_ustride + 2, p->
data[1] + 2,
s->temp[1], width2 - 2, &leftu, &lefttopu);
1122 s->llviddsp.add_median_pred(p->
data[2] + fake_vstride + 2, p->
data[2] + 2,
s->temp[2], width2 - 2, &leftv, &lefttopv);
1127 for (; y <
height; y++, cy++) {
1128 uint8_t *ydst, *udst, *vdst;
1130 if (
s->bitstream_bpp == 12) {
1131 while (2 * cy > y) {
1134 s->llviddsp.add_median_pred(ydst, ydst - fake_ystride,
1150 s->llviddsp.add_median_pred(ydst, ydst - fake_ystride,
1154 s->llviddsp.add_median_pred(udst, udst - fake_ustride,
s->temp[1], width2, &leftu, &lefttopu);
1155 s->llviddsp.add_median_pred(vdst, vdst - fake_vstride,
s->temp[2], width2, &leftv, &lefttopv);
1168 if (
s->bitstream_bpp == 32) {
1182 switch (
s->predictor) {
1186 s->hdsp.add_hfyu_left_pred_bgr32(p->
data[0] + last_line + 4,
1189 for (y =
height - 2; y >= 0; y--) {
1192 s->hdsp.add_hfyu_left_pred_bgr32(p->
data[0] + p->
linesize[0] * (y + y_offset),
1194 if (
s->predictor ==
PLANE) {
1195 if (
s->bitstream_bpp != 32)
1198 s->llviddsp.add_bytes(p->
data[0] + p->
linesize[0] * (y + y_offset),
1200 fake_ystride, 4 *
width);
1209 "prediction type not supported!\n");
1213 "BGR24 output is not implemented yet\n");
1224 const uint8_t *buf = avpkt->
data;
1225 int buf_size = avpkt->
size;
1229 int slice, table_size = 0,
ret, nb_slices;
1230 unsigned slices_info_offset;
1237 &
s->bitstream_buffer_size,
1239 if (!
s->bitstream_buffer)
1242 s->bdsp.bswap_buf((uint32_t *)
s->bitstream_buffer,
1243 (
const uint32_t *) buf, buf_size / 4);
1254 if ((
unsigned) (buf_size - table_size) >= INT_MAX / 8)
1257 s->last_slice_end = 0;
1260 (buf_size > 32 &&
AV_RL32(avpkt->
data + buf_size - 16) == 0)) {
1261 slices_info_offset =
AV_RL32(avpkt->
data + buf_size - 4);
1262 slice_height =
AV_RL32(avpkt->
data + buf_size - 8);
1264 if (nb_slices * 8LL + slices_info_offset > buf_size - 16 ||
1265 s->chroma_v_shift ||
1266 slice_height <= 0 || nb_slices * (uint64_t)slice_height >
height)
1273 for (slice = 0; slice < nb_slices; slice++) {
1274 int y_offset, slice_offset, slice_size;
1276 if (nb_slices > 1) {
1277 slice_offset =
AV_RL32(avpkt->
data + slices_info_offset + slice * 8);
1278 slice_size =
AV_RL32(avpkt->
data + slices_info_offset + slice * 8 + 4);
1280 if (slice_offset < 0 || slice_size <= 0 || (slice_offset&3) ||
1281 slice_offset + (int64_t)slice_size > buf_size)
1284 y_offset =
height - (slice + 1) * slice_height;
1285 s->bdsp.bswap_buf((uint32_t *)
s->bitstream_buffer,
1286 (
const uint32_t *)(buf + slice_offset), slice_size / 4);
1290 slice_size = buf_size;
1293 ret =
decode_slice(avctx, p, slice_height, slice_size, y_offset, table_size);
1305 .
p.
name =
"huffyuv",
1318 #if CONFIG_FFVHUFF_DECODER
1320 .
p.
name =
"ffvhuff",
1334 #if CONFIG_HYMT_DECODER