33#define UNCHECKED_BITSTREAM_READER 1
35#include "config_components.h"
90 34, 36, 35, 69, 135, 232, 9, 16, 10, 24, 11, 23, 12, 16, 13, 10,
91 14, 8, 15, 8, 16, 8, 17, 20, 16, 10, 207, 206, 205, 236, 11, 8,
92 10, 21, 9, 23, 8, 8, 199, 70, 69, 68,
96 66, 36, 37, 38, 39, 40, 41, 75, 76, 77, 110, 239, 144, 81, 82, 83,
97 84, 85, 118, 183, 56, 57, 88, 89, 56, 89, 154, 57, 58, 57, 26, 141,
98 57, 56, 58, 57, 58, 57, 184, 119, 214, 245, 116, 83, 82, 49, 80, 79,
99 78, 77, 44, 75, 41, 40, 39, 38, 37, 36, 34,
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;) {
147 repeat = bytestream2_peek_byteu(gb) >> 5;
148 val = bytestream2_get_byteu(gb) & 0x1F;
152 repeat = bytestream2_get_byteu(gb);
177 if (
s->bitstream_bpp < 24 ||
s->version > 2) {
178 int count = 1 +
s->alpha + 2 *
s->chroma;
180 for (p = 0; p < count; p++) {
181 int p0 =
s->version > 2 ? p : 0;
182 for (
i = y = 0; y <
s->vlc_n; y++) {
183 int len0 =
s->len[p0][y];
185 if (
limit <= 0 || !len0)
189 for (
u = 0;
u <
s->vlc_n;
u++) {
190 int len1 =
s->len[p][
u];
191 if (len1 >
limit || !len1)
196 len[
i] = len0 + len1;
197 bits[
i] = (
s->bits[p0][y] << len1) +
s->bits[p][
u];
198 symbols[
i] = (y << 8) + (
u & 0xFF);
204 bits, 2, 2, symbols, 2, 2, 0)) < 0)
208 uint8_t (*
map)[4] = (uint8_t(*)[4])
s->pix_bgr_map;
210 int p0 =
s->decorrelate;
211 int p1 = !
s->decorrelate;
215 for (
i = 0,
g = -16;
g < 16;
g++) {
216 int len0 =
s->len[p0][
g & 255];
218 if (limit0 < 2 || !len0)
220 for (
b = -16;
b < 16;
b++) {
221 int len1 =
s->len[p1][
b & 255];
222 int limit1 = limit0 - len1;
223 if (limit1 < 1 || !len1)
225 code = (
s->bits[p0][
g & 255] << len1) +
s->bits[p1][
b & 255];
226 for (
r = -16;
r < 16;
r++) {
227 int len2 =
s->len[2][
r & 255];
228 if (len2 > limit1 || !len2)
231 len[
i] = len0 + len1 + len2;
233 if (
s->decorrelate) {
266 count = 1 +
s->alpha + 2*
s->chroma;
268 for (
i = 0;
i < count;
i++) {
275 s->bits[
i], 4, 4, 0)) < 0)
300 for (
i = 0;
i < 256;
i++)
302 for (
i = 0;
i < 256;
i++)
305 if (
s->bitstream_bpp >= 24) {
306 memcpy(
s->bits[1],
s->bits[0], 256 *
sizeof(uint32_t));
307 memcpy(
s->len[1],
s->len[0], 256 *
sizeof(uint8_t));
309 memcpy(
s->bits[2],
s->bits[1], 256 *
sizeof(uint32_t));
310 memcpy(
s->len[2],
s->len[1], 256 *
sizeof(uint8_t));
312 for (
i = 0;
i < 4;
i++) {
315 s->bits[
i], 4, 4, 0)) < 0)
330 for (
int i = 0;
i < 3;
i++)
335 for (
i = 0;
i < 8;
i++)
356 s->interlaced = avctx->
height > 288;
374 if (
s->version >= 2) {
375 int method, interlace;
381 s->decorrelate = method & 64 ? 1 : 0;
382 s->predictor = method & 63;
383 if (
s->version == 2) {
385 if (
s->bitstream_bpp == 0)
392 s->chroma_v_shift = (avctx->
extradata[1] >> 2) & 3;
397 interlace = (avctx->
extradata[2] & 0x30) >> 4;
398 s->interlaced = (interlace == 1) ? 1 : (interlace == 2) ? 0 :
s->interlaced;
399 s->context = avctx->
extradata[2] & 0x40 ? 1 : 0;
434 if (
s->version <= 2) {
435 switch (
s->bitstream_bpp) {
465 switch ( (
s->chroma<<10) | (
s->yuv<<9) | (
s->alpha<<8) | ((
s->bps-1)<<4) |
s->chroma_h_shift | (
s->chroma_v_shift<<2)) {
604 "for this combination of colorspace and predictor type.\n");
608 for (
int i = 0;
i < 3;
i++) {
618#define VLC_INTERN(dst, table, gb, name, bits, max_depth) \
619 code = table[index].sym; \
620 n = table[index].len; \
621 if (max_depth > 1 && n < 0) { \
622 LAST_SKIP_BITS(name, gb, bits); \
623 UPDATE_CACHE(name, gb); \
626 index = SHOW_UBITS(name, gb, nb_bits) + code; \
627 code = table[index].sym; \
628 n = table[index].len; \
629 if (max_depth > 2 && n < 0) { \
630 LAST_SKIP_BITS(name, gb, nb_bits); \
631 UPDATE_CACHE(name, gb); \
634 index = SHOW_UBITS(name, gb, nb_bits) + code; \
635 code = table[index].sym; \
636 n = table[index].len; \
640 LAST_SKIP_BITS(name, gb, n)
643#define GET_VLC_DUAL(dst0, dst1, name, gb, dtable, table1, table2, \
644 bits, max_depth, OP) \
646 unsigned int index = SHOW_UBITS(name, gb, bits); \
647 int code, n = dtable[index].len; \
651 VLC_INTERN(dst0, table1, gb, name, bits, max_depth); \
653 UPDATE_CACHE(re, gb); \
654 index = SHOW_UBITS(name, gb, bits); \
655 VLC_INTERN(dst1, table2, gb, name, bits, max_depth); \
657 code = dtable[index].sym; \
658 OP(dst0, dst1, code); \
659 LAST_SKIP_BITS(name, gb, n); \
663#define OP8bits(dst0, dst1, code) dst0 = code>>8; dst1 = code
665#define READ_2PIX(dst0, dst1, plane1) \
666 UPDATE_CACHE(re, &s->gb); \
667 GET_VLC_DUAL(dst0, dst1, re, &s->gb, s->vlc[4+plane1].table, \
668 s->vlc[0].table, s->vlc[plane1].table, VLC_BITS, 3, OP8bits)
677 if (count >= icount) {
678 for (
i = 0;
i < icount;
i++) {
687 for (;
i < count;
i++)
688 s->temp[0][2 *
i ] =
s->temp[1][
i] =
689 s->temp[0][2 *
i + 1] =
s->temp[2][
i] = 0;
691 for (
i = 0;
i < count;
i++) {
699#define READ_2PIX_PLANE(dst0, dst1, plane, OP) \
700 UPDATE_CACHE(re, &s->gb); \
701 GET_VLC_DUAL(dst0, dst1, re, &s->gb, s->vlc[4+plane].table, \
702 s->vlc[plane].table, s->vlc[plane].table, VLC_BITS, 3, OP)
704#define OP14bits(dst0, dst1, code) dst0 = code>>8; dst1 = sign_extend(code, 8)
708#define READ_2PIX_PLANE16(dst0, dst1, plane){\
709 dst0 = get_vlc2(&s->gb, s->vlc[plane].table, VLC_BITS, 3)*4;\
710 dst0 += get_bits(&s->gb, 2);\
711 dst1 = get_vlc2(&s->gb, s->vlc[plane].table, VLC_BITS, 3)*4;\
712 dst1 += get_bits(&s->gb, 2);\
725 for(
i=0;
i<count;
i++){
731 int nb_bits,
code, n;
738 }
else if (
s->bps <= 14) {
745 for(
i=0;
i<count;
i++){
751 int nb_bits,
code, n;
764 for(
i=0;
i<count;
i++){
785 for (;
i < count;
i++)
786 s->temp[0][2 *
i] =
s->temp[0][2 *
i + 1] = 0;
788 for (
i = 0;
i < count;
i++) {
803 int code, n, nb_bits;
807 n =
s->vlc[4].table[
index].len;
811 *(uint32_t *) &
s->temp[0][4 *
i] =
s->pix_bgr_map[
code];
821 s->temp[0][4 *
i +
B] =
code +
s->temp[0][4 *
i +
G];
826 s->temp[0][4 *
i +
R] =
code +
s->temp[0][4 *
i +
G];
848 s->temp[0][4 *
i +
A] = 0;
855 if (
s->decorrelate) {
856 if (
s->bitstream_bpp == 24)
861 if (
s->bitstream_bpp == 24)
876 h = y -
s->last_slice_end;
879 if (
s->bitstream_bpp == 12)
892 s->last_slice_end = y +
h;
898 return s->llviddsp.add_left_pred(
dst,
src,
w, acc);
900 return s->llviddsp.add_left_pred_int16(( uint16_t *)
dst, (
const uint16_t *)
src,
s->n-1,
w, acc);
909 s->hdsp.add_int16((uint16_t*)
dst, (
const uint16_t*)
src,
s->n - 1,
w);
918 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);
923 int buf_size,
int y_offset,
int table_size)
926 int fake_ystride, fake_ustride, fake_vstride;
928 const int width2 = avctx->
width >> 1;
931 if ((ret =
init_get_bits8(&
s->gb,
s->bitstream_buffer + table_size, buf_size - table_size)) < 0)
934 fake_ystride =
s->interlaced ? p->linesize[0] * 2 : p->linesize[0];
935 fake_ustride =
s->interlaced ? p->linesize[1] * 2 : p->linesize[1];
936 fake_vstride =
s->interlaced ? p->linesize[2] * 2 : p->linesize[2];
938 if (
s->version > 2) {
940 for(plane = 0; plane < 1 + 2*
s->chroma +
s->alpha; plane++) {
941 int left, lefttop, y;
944 int fake_stride = fake_ystride;
946 if (
s->chroma && (plane == 1 || plane == 2)) {
947 w >>=
s->chroma_h_shift;
948 h >>=
s->chroma_v_shift;
949 fake_stride = plane == 1 ? fake_ustride : fake_vstride;
952 switch (
s->predictor) {
958 for (y = 1; y <
h; y++) {
959 uint8_t *
dst = p->data[plane] + p->linesize[plane]*y;
963 if (
s->predictor ==
PLANE) {
964 if (y >
s->interlaced) {
998 dst = p->data[plane] + p->linesize[plane] * y;
1007 }
else if (
s->bitstream_bpp < 24) {
1009 int lefty, leftu, leftv;
1010 int lefttopy, lefttopu, lefttopv;
1019 "YUY2 output is not implemented yet\n");
1023 p->data[2][0 + y_offset * p->linesize[2]] =
get_bits(&
s->gb, 8);
1025 p->data[0][1 + y_offset * p->linesize[0]] =
get_bits(&
s->gb, 8);
1027 p->data[1][0 + y_offset * p->linesize[1]] =
get_bits(&
s->gb, 8);
1028 p->data[0][0 + y_offset * p->linesize[0]] =
get_bits(&
s->gb, 8);
1030 switch (
s->predictor) {
1034 lefty =
s->llviddsp.add_left_pred(p->data[0] + p->linesize[0] * y_offset + 2,
s->temp[0],
1037 leftu =
s->llviddsp.add_left_pred(p->data[1] + p->linesize[1] * y_offset + 1,
s->temp[1], width2 - 1, leftu);
1038 leftv =
s->llviddsp.add_left_pred(p->data[2] + p->linesize[2] * y_offset + 1,
s->temp[2], width2 - 1, leftv);
1041 for (cy = y = 1; y <
height; y++, cy++) {
1042 uint8_t *ydst, *udst, *vdst;
1044 if (
s->bitstream_bpp == 12) {
1047 ydst = p->data[0] + p->linesize[0] * (y + y_offset);
1049 lefty =
s->llviddsp.add_left_pred(ydst,
s->temp[0],
1051 if (
s->predictor ==
PLANE) {
1052 if (y >
s->interlaced)
1053 s->llviddsp.add_bytes(ydst, ydst - fake_ystride,
width);
1062 ydst = p->data[0] + p->linesize[0] * (y + y_offset);
1063 udst = p->data[1] + p->linesize[1] * (cy + y_offset);
1064 vdst = p->data[2] + p->linesize[2] * (cy + y_offset);
1067 lefty =
s->llviddsp.add_left_pred(ydst,
s->temp[0],
1070 leftu =
s->llviddsp.add_left_pred(udst,
s->temp[1], width2, leftu);
1071 leftv =
s->llviddsp.add_left_pred(vdst,
s->temp[2], width2, leftv);
1073 if (
s->predictor ==
PLANE) {
1074 if (cy >
s->interlaced) {
1075 s->llviddsp.add_bytes(ydst, ydst - fake_ystride,
width);
1077 s->llviddsp.add_bytes(udst, udst - fake_ustride, width2);
1078 s->llviddsp.add_bytes(vdst, vdst - fake_vstride, width2);
1089 lefty =
s->llviddsp.add_left_pred(p->data[0] + 2,
s->temp[0],
1092 leftu =
s->llviddsp.add_left_pred(p->data[1] + 1,
s->temp[1], width2 - 1, leftu);
1093 leftv =
s->llviddsp.add_left_pred(p->data[2] + 1,
s->temp[2], width2 - 1, leftv);
1101 if (
s->interlaced) {
1103 lefty =
s->llviddsp.add_left_pred(p->data[0] + p->linesize[0],
1104 s->temp[0],
width, lefty);
1106 leftu =
s->llviddsp.add_left_pred(p->data[1] + p->linesize[2],
s->temp[1], width2, leftu);
1107 leftv =
s->llviddsp.add_left_pred(p->data[2] + p->linesize[1],
s->temp[2], width2, leftv);
1117 lefty =
s->llviddsp.add_left_pred(p->data[0] + fake_ystride,
1118 s->temp[0], 4, lefty);
1120 leftu =
s->llviddsp.add_left_pred(p->data[1] + fake_ustride,
s->temp[1], 2, leftu);
1121 leftv =
s->llviddsp.add_left_pred(p->data[2] + fake_vstride,
s->temp[2], 2, leftv);
1125 lefttopy = p->data[0][3];
1127 s->llviddsp.add_median_pred(p->data[0] + fake_ystride + 4,
1128 p->data[0] + 4,
s->temp[0],
1129 width - 4, &lefty, &lefttopy);
1131 lefttopu = p->data[1][1];
1132 lefttopv = p->data[2][1];
1133 s->llviddsp.add_median_pred(p->data[1] + fake_ustride + 2, p->data[1] + 2,
s->temp[1], width2 - 2, &leftu, &lefttopu);
1134 s->llviddsp.add_median_pred(p->data[2] + fake_vstride + 2, p->data[2] + 2,
s->temp[2], width2 - 2, &leftv, &lefttopv);
1139 for (; y <
height; y++, cy++) {
1140 uint8_t *ydst, *udst, *vdst;
1142 if (
s->bitstream_bpp == 12) {
1143 while (2 * cy > y) {
1145 ydst = p->data[0] + p->linesize[0] * y;
1146 s->llviddsp.add_median_pred(ydst, ydst - fake_ystride,
1158 ydst = p->data[0] + p->linesize[0] * y;
1159 udst = p->data[1] + p->linesize[1] * cy;
1160 vdst = p->data[2] + p->linesize[2] * cy;
1162 s->llviddsp.add_median_pred(ydst, ydst - fake_ystride,
1166 s->llviddsp.add_median_pred(udst, udst - fake_ustride,
s->temp[1], width2, &leftu, &lefttopu);
1167 s->llviddsp.add_median_pred(vdst, vdst - fake_vstride,
s->temp[2], width2, &leftv, &lefttopv);
1178 const int last_line = (y_offset +
height - 1) * p->linesize[0];
1180 if (
s->bitstream_bpp == 32) {
1189 left[
A] = p->data[0][last_line +
A] = 255;
1194 switch (
s->predictor) {
1198 s->hdsp.add_hfyu_left_pred_bgr32(p->data[0] + last_line + 4,
1201 for (y =
height - 2; y >= 0; y--) {
1204 s->hdsp.add_hfyu_left_pred_bgr32(p->data[0] + p->linesize[0] * (y + y_offset),
1206 if (
s->predictor ==
PLANE) {
1207 if (
s->bitstream_bpp != 32)
1210 s->llviddsp.add_bytes(p->data[0] + p->linesize[0] * (y + y_offset),
1211 p->data[0] + p->linesize[0] * (y + y_offset) +
1212 fake_ystride, 4 *
width);
1221 "prediction type not supported!\n");
1225 "BGR24 output is not implemented yet\n");
1236 const uint8_t *buf = avpkt->
data;
1237 int buf_size = avpkt->
size;
1241 int slice, table_size = 0, ret, nb_slices;
1242 unsigned slices_info_offset;
1249 &
s->bitstream_buffer_size,
1251 if (!
s->bitstream_buffer)
1254 s->bdsp.bswap_buf((uint32_t *)
s->bitstream_buffer,
1255 (
const uint32_t *) buf, buf_size / 4);
1266 if ((
unsigned) (buf_size - table_size) >= INT_MAX / 8)
1269 s->last_slice_end = 0;
1272 (buf_size > 32 &&
AV_RL32(avpkt->
data + buf_size - 16) == 0)) {
1273 slices_info_offset =
AV_RL32(avpkt->
data + buf_size - 4);
1274 slice_height =
AV_RL32(avpkt->
data + buf_size - 8);
1276 if (nb_slices * 8LL + slices_info_offset > buf_size - 16 ||
1277 s->chroma_v_shift ||
1278 slice_height <= 0 || nb_slices * (uint64_t)slice_height >
height)
1285 for (slice = 0; slice < nb_slices; slice++) {
1286 int y_offset, slice_offset, slice_size;
1288 if (nb_slices > 1) {
1289 slice_offset =
AV_RL32(avpkt->
data + slices_info_offset + slice * 8);
1290 slice_size =
AV_RL32(avpkt->
data + slices_info_offset + slice * 8 + 4);
1292 if (slice_offset < 0 || slice_size <= 0 || (slice_offset&3) ||
1293 slice_offset + (
int64_t)slice_size > buf_size)
1296 y_offset =
height - (slice + 1) * slice_height;
1297 s->bdsp.bswap_buf((uint32_t *)
s->bitstream_buffer,
1298 (
const uint32_t *)(buf + slice_offset), slice_size / 4);
1302 slice_size = buf_size;
1305 ret =
decode_slice(avctx, p, slice_height, slice_size, y_offset, table_size);
1316 .p.name =
"huffyuv",
1329#if CONFIG_FFVHUFF_DECODER
1331 .p.name =
"ffvhuff",
1345#if CONFIG_HYMT_DECODER
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
static double val(void *priv, double ch)
const FFCodec ff_hymt_decoder
const FFCodec ff_huffyuv_decoder
const FFCodec ff_ffvhuff_decoder
static av_cold void close(AVCodecParserContext *s)
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Libavcodec external API header.
static int BS_FUNC left(const BSCTX *bc)
Return the number of the bits left in a buffer.
static av_always_inline int bytestream2_get_bytes_left(const GetByteContext *g)
static av_always_inline void bytestream2_init(GetByteContext *g, const uint8_t *buf, int buf_size)
static av_always_inline int bytestream2_tell(const GetByteContext *g)
#define i(width, name, range_min, range_max)
#define FF_CODEC_DECODE_CB(func)
#define CODEC_LONG_NAME(str)
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
int(* init)(AVBSFContext *ctx)
static const uint8_t bits[8]
#define AV_NUM_DATA_POINTERS
bitstream reader API header.
static av_always_inline int get_vlc2(GetBitContext *s, const VLCElem *table, int bits, int max_depth)
Parse a vlc code.
#define CLOSE_READER(name, gb)
static int get_bits_left(GetBitContext *gb)
#define SHOW_UBITS(name, gb, num)
#define OPEN_READER(name, gb)
static void skip_bits(GetBitContext *s, int n)
#define UPDATE_CACHE(name, gb)
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
#define LAST_SKIP_BITS(name, gb, num)
static int get_bits_count(const GetBitContext *s)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
#define BITS_LEFT(name, gb)
#define AV_CODEC_CAP_DRAW_HORIZ_BAND
Decoder can use draw_horiz_band callback.
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
#define AV_CODEC_FLAG_GRAY
Only decode/encode grayscale.
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size)
Same behaviour av_fast_malloc but the buffer has additional AV_INPUT_BUFFER_PADDING_SIZE at the end w...
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx)
Check if the given dimension of an image is valid, meaning that all bytes of the image can be address...
int ff_huffyuv_generate_bits_table(uint32_t *dst, const uint8_t *len_table, int n)
huffyuv codec for libavcodec.
#define READ_LOWBYTE(plane, bps)
static void decode_bgr_bitstream(HYuvDecContext *s, int count)
static const unsigned char classic_add_luma[256]
static void add_bytes(HYuvDecContext *s, uint8_t *dst, uint8_t *src, int w)
static int read_len_table(uint8_t *dst, GetByteContext *gb, int n)
#define VLC_INTERN(dst, table, gb, name, bits, max_depth)
Subset of GET_VLC for use in hand-roller VLC code.
#define OP8bits(dst0, dst1, code)
static const unsigned char classic_add_chroma[256]
static const uint8_t classic_shift_luma[]
static av_cold int decode_init(AVCodecContext *avctx)
#define READ_2PIX(dst0, dst1, plane1)
static void decode_plane_bitstream(HYuvDecContext *s, int width, int plane)
static av_cold int decode_end(AVCodecContext *avctx)
static av_always_inline void decode_bgr_1(HYuvDecContext *s, int count, int decorrelate, int alpha)
static int decode_slice(AVCodecContext *avctx, AVFrame *p, int height, int buf_size, int y_offset, int table_size)
static void add_median_prediction(HYuvDecContext *s, uint8_t *dst, const uint8_t *src, const uint8_t *diff, int w, int *left, int *left_top)
static int left_prediction(HYuvDecContext *s, uint8_t *dst, const uint8_t *src, int w, int acc)
static int decode_frame(AVCodecContext *avctx, AVFrame *p, int *got_frame, AVPacket *avpkt)
static const uint8_t classic_shift_chroma[]
#define READ_2PIX_PLANE16(dst0, dst1, plane)
#define READ_2PIX_PLANE(dst0, dst1, plane, OP)
static int generate_joint_tables(HYuvDecContext *s)
static void decode_422_bitstream(HYuvDecContext *s, int count)
static int read_huffman_tables(HYuvDecContext *s, const uint8_t *src, int length)
static void decode_gray_bitstream(HYuvDecContext *s, int count)
static int read_old_huffman_tables(HYuvDecContext *s)
#define OP14bits(dst0, dst1, code)
static void draw_slice(HYuvDecContext *s, AVCodecContext *avctx, AVFrame *frame, int y)
const VDPAUPixFmtMap * map
static const int16_t alpha[]
static av_cold int decode_init(AVCodecContext *avctx)
static av_cold int decode_end(AVCodecContext *avctx)
static int decode_frame(AVCodecContext *avctx, AVFrame *picture, int *got_frame, AVPacket *avpkt)
av_cold void ff_bswapdsp_init(BswapDSPContext *c)
#define u(width, name, range_min, range_max)
av_cold void ff_huffyuvdsp_init(HuffYUVDSPContext *c)
Multithreading API for decoders.
av_cold void ff_llviddsp_init(LLVidDSPContext *c)
static av_const int sign_extend(int val, unsigned bits)
Memory handling functions.
int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift)
Utility function to access log2_chroma_w log2_chroma_h from the pixel format AVPixFmtDescriptor.
#define AV_PIX_FMT_0RGB32
#define AV_PIX_FMT_YUV420P16
#define AV_PIX_FMT_YUV444P12
#define AV_PIX_FMT_YUV444P9
#define AV_PIX_FMT_YUV420P10
#define AV_PIX_FMT_YUV422P9
#define AV_PIX_FMT_YUVA444P10
#define AV_PIX_FMT_YUVA420P16
#define AV_PIX_FMT_YUV420P12
#define AV_PIX_FMT_YUVA420P10
#define AV_PIX_FMT_YUVA422P9
#define AV_PIX_FMT_YUV422P12
#define AV_PIX_FMT_GBRP10
#define AV_PIX_FMT_YUV422P10
#define AV_PIX_FMT_GBRP12
#define AV_PIX_FMT_YUV420P9
#define AV_PIX_FMT_YUVA420P9
#define AV_PIX_FMT_YUVA422P10
#define AV_PIX_FMT_YUV420P14
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
@ AV_PIX_FMT_YUV440P
planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples)
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
@ AV_PIX_FMT_GRAY8
Y , 8bpp.
@ AV_PIX_FMT_YUVA420P
planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
@ AV_PIX_FMT_YUV410P
planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples)
@ AV_PIX_FMT_YUV411P
planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples)
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
@ AV_PIX_FMT_YUVA444P
planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples)
@ AV_PIX_FMT_GBRAP
planar GBRA 4:4:4:4 32bpp
@ AV_PIX_FMT_YUVA422P
planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples)
@ AV_PIX_FMT_YUYV422
packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr
@ AV_PIX_FMT_BGR24
packed RGB 8:8:8, 24bpp, BGRBGR...
@ AV_PIX_FMT_GBRP
planar GBR 4:4:4 24bpp
#define AV_PIX_FMT_YUV422P14
#define AV_PIX_FMT_YUV422P16
#define AV_PIX_FMT_GRAY16
#define AV_PIX_FMT_YUVA444P16
#define AV_PIX_FMT_YUVA422P16
#define AV_PIX_FMT_GBRP16
#define AV_PIX_FMT_YUV444P14
#define AV_PIX_FMT_YUVA444P9
#define AV_PIX_FMT_GBRP14
#define AV_PIX_FMT_YUV444P16
#define AV_PIX_FMT_YUV444P10
int ff_thread_get_buffer(AVCodecContext *avctx, AVFrame *f, int flags)
Wrapper around get_buffer() for frame-multithreaded codecs.
static void decorrelate(SnowContext *s, SubBand *b, IDWTELEM *src, int stride, int inverse, int use_median)
main external API structure.
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
int width
picture width / height.
int bits_per_coded_sample
bits per sample/pixel from the demuxer (needed for huffyuv).
void(* draw_horiz_band)(struct AVCodecContext *s, const AVFrame *src, int offset[AV_NUM_DATA_POINTERS], int y, int type, int height)
If non NULL, 'draw_horiz_band' is called by the libavcodec decoder to draw a horizontal band.
int flags
AV_CODEC_FLAG_*.
uint8_t * extradata
Out-of-band global headers that may be used by some codecs.
This structure describes decoded (raw) audio or video data.
This structure stores compressed data.
unsigned int bitstream_buffer_size
uint32_t bits[4][MAX_VLC_N]
uint8_t len[4][MAX_VLC_N]
uint32_t pix_bgr_map[1<< VLC_BITS]
uint8_t * bitstream_buffer
static void error(const char *err)
static av_always_inline int diff(const struct color_info *a, const struct color_info *b, const int trans_thresh)
static double limit(double x)
int ff_vlc_init_sparse(VLC *vlc, int nb_bits, int nb_codes, const void *bits, int bits_wrap, int bits_size, const void *codes, int codes_wrap, int codes_size, const void *symbols, int symbols_wrap, int symbols_size, int flags)
Build VLC decoding tables suitable for use with get_vlc2().
void ff_vlc_free(VLC *vlc)
#define vlc_init(vlc, nb_bits, nb_codes, bits, bits_wrap, bits_size, codes, codes_wrap, codes_size, flags)