29 #define BITSTREAM_READER_LE
44 uint32_t pitch,
int mc_type);
47 int offs,
int mv_x,
int mv_y,
int mc_type)
49 int ref_offs = offs + mv_y * band->
pitch + mv_x;
52 int ref_size = (mc_type > 1) * band->
pitch + (mc_type & 1);
54 if (offs < 0 || ref_offs < 0 || !band->ref_buf)
56 if (buf_size - min_size < offs)
58 if (buf_size - min_size - ref_size < ref_offs)
70 static uint16_t
inv_bits(uint16_t val,
int nbits)
85 int pos, i, j, codes_per_row, prefix, not_last_row;
86 uint16_t codewords[256];
92 codes_per_row = 1 << cb->
xbits[i];
93 not_last_row = (i != cb->
num_rows - 1);
94 prefix = ((1 << i) - 1) << (cb->
xbits[i] + not_last_row);
96 for (j = 0; j < codes_per_row; j++) {
100 bits[pos] = i + cb->
xbits[i] + not_last_row;
104 codewords[pos] =
inv_bits((prefix | j), bits[pos]);
121 static int initialized_vlcs = 0;
123 if (initialized_vlcs)
125 for (i = 0; i < 8; i++) {
126 ff_ivi_mb_vlc_tabs[i].
table = table_data + i * 2 * 8192;
129 &ff_ivi_mb_vlc_tabs[i], 1);
130 ff_ivi_blk_vlc_tabs[i].
table = table_data + (i * 2 + 1) * 8192;
133 &ff_ivi_blk_vlc_tabs[i], 1);
135 initialized_vlcs = 1;
146 huff_tab->
tab = (which_tab) ? &ff_ivi_blk_vlc_tabs[7]
147 : &ff_ivi_mb_vlc_tabs [7];
160 for (i = 0; i < new_huff.
num_rows; i++)
174 "Error while initializing custom vlc table!\n");
181 huff_tab->
tab = (which_tab) ? &ff_ivi_blk_vlc_tabs[huff_tab->
tab_sel]
182 : &ff_ivi_mb_vlc_tabs [huff_tab->
tab_sel];
203 uint32_t b_width, b_height, align_fac, width_aligned,
204 height_aligned, buf_size;
223 for (p = 0; p < 3; p++) {
225 if (!planes[p].bands)
232 : (planes[p].
width + 1) >> 1;
234 : (planes[p].
height + 1) >> 1;
238 align_fac = p ? 8 : 16;
239 width_aligned =
FFALIGN(b_width , align_fac);
240 height_aligned =
FFALIGN(b_height, align_fac);
241 buf_size = width_aligned * height_aligned *
sizeof(int16_t);
243 for (b = 0; b < planes[p].
num_bands; b++) {
244 band = &planes[p].
bands[
b];
247 band->
width = b_width;
249 band->
pitch = width_aligned;
250 band->
aheight = height_aligned;
253 if (!band->
bufs[0] || !band->
bufs[1])
274 for (p = 0; p < 3; p++) {
275 for (b = 0; b < planes[p].
num_bands; b++) {
276 av_freep(&planes[p].bands[b].bufs[0]);
277 av_freep(&planes[p].bands[b].bufs[1]);
278 av_freep(&planes[p].bands[b].bufs[2]);
280 if (planes[p].bands[b].blk_vlc.cust_tab.table)
283 av_freep(&planes[p].bands[b].tiles[t].mbs);
284 av_freep(&planes[p].bands[b].tiles);
292 int p,
int b,
int t_height,
int t_width)
297 for (y = 0; y < band->
height; y += t_height) {
298 for (x = 0; x < band->
width; x += t_width) {
330 int p,
b, x_tiles, y_tiles, t_width, t_height, ret;
333 for (p = 0; p < 3; p++) {
334 t_width = !p ? tile_width : (tile_width + 3) >> 2;
335 t_height = !p ? tile_height : (tile_height + 3) >> 2;
337 if (!p && planes[0].num_bands == 4) {
342 for (b = 0; b < planes[p].
num_bands; b++) {
343 band = &planes[p].
bands[
b];
356 p, b, t_height, t_width);
386 int min_size = (blk_size - 1) * band->
pitch + blk_size;
392 if (min_size > buf_size)
396 band->
pitch, blk_size);
403 int *prev_dc,
int is_intra,
int mc_type,
404 uint32_t
quant,
int offs)
408 uint8_t col_flags[8];
410 uint32_t sym = 0, lo, hi, q;
413 int num_coeffs = blk_size * blk_size;
414 int col_mask = blk_size - 1;
420 if (min_size > buf_size)
427 memset(trvec, 0, num_coeffs *
sizeof(trvec[0]));
429 memset(col_flags, 0,
sizeof(col_flags));
430 while (scan_pos <= num_coeffs) {
453 if (scan_pos >= num_coeffs || scan_pos < 0)
455 pos = band->
scan[scan_pos];
457 q = (base_tab[pos] *
quant) >> 9;
459 val = val * q +
FFSIGN(val) * (((q ^ 1) - 1) >> 1);
462 col_flags[pos & col_mask] |= !!val;
465 if (scan_pos < 0 || scan_pos >= num_coeffs && sym != rvmap->
eob_sym)
470 *prev_dc += trvec[0];
472 col_flags[0] |= !!*prev_dc;
477 band->
pitch, col_flags);
481 return ivi_mc(band, mc, offs, mv_x, mv_y, mc_type);
488 int mbn,
blk, num_blocks, blk_size, ret, is_intra, mc_type = 0;
489 int mv_x = 0, mv_y = 0;
491 uint32_t cbp,
quant, buf_offs;
494 const uint8_t *scale_tab;
500 num_blocks = (band->
mb_size != blk_size) ? 4 : 1;
509 for (mbn = 0, mb = tile->
mbs; mbn < tile->num_MBs; mb++, mbn++) {
510 is_intra = !mb->
type;
518 quant = scale_tab[
quant];
526 mc_type = ((mv_y & 1) << 1) | (mv_x & 1);
531 int dmv_x, dmv_y, cx, cy;
538 if (mb->
xpos + dmv_x < 0 ||
540 mb->
ypos + dmv_y < 0 ||
547 for (blk = 0; blk < num_blocks; blk++) {
550 buf_offs += blk_size;
551 }
else if (blk == 2) {
552 buf_offs -= blk_size;
553 buf_offs += blk_size * band->
pitch;
558 mv_x, mv_y, &prev_dc, is_intra,
559 mc_type, quant, buf_offs);
571 ret =
ivi_mc(band, mc_no_delta_func, buf_offs,
572 mv_x, mv_y, mc_type);
597 IVITile *tile, int32_t mv_scale)
599 int x, y, need_mc, mbn,
blk, num_blocks, mv_x, mv_y, mc_type;
600 int offs, mb_offset, row_offset, ret;
608 "parameters %d in ivi_process_empty_tile()\n",
664 for (mbn = 0, mb = tile->
mbs; mbn < tile->num_MBs; mb++, mbn++) {
670 mc_type = ((mv_y & 1) << 1) | (mv_x & 1);
675 for (blk = 0; blk < num_blocks; blk++) {
678 ret =
ivi_mc(band, mc_no_delta_func, offs,
679 mv_x, mv_y, mc_type);
688 for (y = 0; y < tile->
height; y++) {
689 memcpy(dst, src, tile->
width*
sizeof(band->
buf[0]));
703 int16_t *src, checksum;
708 for (y = 0; y < band->
height; src += band->
pitch, y++)
709 for (x = 0; x < band->
width; x++)
724 for (y = 0; y < band->
height; src += band->
pitch, y++) {
725 for (x = 0; x < band->
width; x++) {
726 t1 = av_clip(src[x] + 128, 0, 255);
744 const int16_t *src = plane->
bands[0].
buf;
750 for (y = 0; y < plane->
height; y++) {
751 for (x = 0; x < plane->
width; x++)
752 dst[x] = av_clip_uint8(src[x] + 128);
769 int result, i,
t, idx1, idx2, pos;
791 for (i = 0; i < band->
num_corr; i++) {
792 idx1 = band->
corr[i * 2];
793 idx2 = band->
corr[i * 2 + 1];
814 av_dlog(avctx,
"Empty tile encountered!\n");
829 "Corrupted tile data encountered!\n");
835 "Tile data_size mismatch!\n");
846 for (i = band->
num_corr-1; i >= 0; i--) {
847 idx1 = band->
corr[i*2];
848 idx2 = band->
corr[i*2+1];
858 "Band checksum mismatch! Plane %d, band %d, "
859 "received: %x, calculated: %x\n",
874 const uint8_t *buf = avpkt->
data;
875 int buf_size = avpkt->
size;
885 "Error while decoding picture header: %d\n", result);
906 for (p = 0; p < 3; p++) {
911 "Error while decoding band: %d, plane: %d\n", b, p);
920 for (p = 0; p < 3; p++) {
982 #if IVI4_STREAM_ANALYSER
986 if (ctx->uses_tiling)
988 if (ctx->has_b_frames)
994 if (ctx->uses_fullpel)
1010 {8, {0, 4, 5, 4, 4, 4, 6, 6}},
1011 {12, {0, 2, 2, 3, 3, 3, 3, 5, 3, 2, 2, 2}},
1012 {12, {0, 2, 3, 4, 3, 3, 3, 3, 4, 3, 2, 2}},
1013 {12, {0, 3, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2}},
1014 {13, {0, 4, 4, 3, 3, 3, 3, 2, 3, 3, 2, 1, 1}},
1015 {9, {0, 4, 4, 4, 4, 3, 3, 3, 2}},
1016 {10, {0, 4, 4, 4, 4, 3, 3, 2, 2, 2}},
1017 {12, {0, 4, 4, 4, 3, 3, 2, 3, 2, 2, 2, 2}}
1021 {10, {1, 2, 3, 4, 4, 7, 5, 5, 4, 1}},
1022 {11, {2, 3, 4, 4, 4, 7, 5, 4, 3, 3, 2}},
1023 {12, {2, 4, 5, 5, 5, 5, 6, 4, 4, 3, 1, 1}},
1024 {13, {3, 3, 4, 4, 5, 6, 6, 4, 4, 3, 2, 1, 1}},
1025 {11, {3, 4, 4, 5, 5, 5, 6, 5, 4, 2, 2}},
1026 {13, {3, 4, 5, 5, 5, 5, 6, 4, 3, 3, 2, 1, 1}},
1027 {13, {3, 4, 5, 5, 5, 6, 5, 4, 3, 3, 2, 1, 1}},
1028 {9, {3, 4, 4, 5, 5, 5, 6, 5, 5}}
1036 0, 8, 16, 24, 32, 40, 48, 56,
1037 1, 9, 17, 25, 33, 41, 49, 57,
1038 2, 10, 18, 26, 34, 42, 50, 58,
1039 3, 11, 19, 27, 35, 43, 51, 59,
1040 4, 12, 20, 28, 36, 44, 52, 60,
1041 5, 13, 21, 29, 37, 45, 53, 61,
1042 6, 14, 22, 30, 38, 46, 54, 62,
1043 7, 15, 23, 31, 39, 47, 55, 63
1047 0, 1, 2, 3, 4, 5, 6, 7,
1048 8, 9, 10, 11, 12, 13, 14, 15,
1049 16, 17, 18, 19, 20, 21, 22, 23,
1050 24, 25, 26, 27, 28, 29, 30, 31,
1051 32, 33, 34, 35, 36, 37, 38, 39,
1052 40, 41, 42, 43, 44, 45, 46, 47,
1053 48, 49, 50, 51, 52, 53, 54, 55,
1054 56, 57, 58, 59, 60, 61, 62, 63
1058 0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15
1070 {1, 1, 0, 1, 1, 0, 1, 1, 2, 2, 1, 1, 1, 1, 3, 3,
1071 1, 1, 2, 2, 1, 1, 4, 4, 1, 1, 1, 1, 2, 2, 5, 5,
1072 1, 1, 3, 3, 1, 1, 6, 6, 1, 2, 1, 2, 7, 7, 1, 1,
1073 8, 8, 1, 1, 4, 2, 1, 4, 2, 1, 3, 3, 1, 1, 1, 9,
1074 9, 1, 2, 1, 2, 1, 5, 5, 1, 1, 10, 10, 1, 1, 3, 3,
1075 2, 2, 1, 1, 11, 11, 6, 4, 4, 1, 6, 1, 2, 1, 2, 12,
1076 8, 1, 12, 7, 8, 7, 1, 16, 1, 16, 1, 3, 3, 13, 1, 13,
1077 2, 2, 1, 15, 1, 5, 14, 15, 1, 5, 14, 1, 17, 8, 17, 8,
1078 1, 4, 4, 2, 2, 1, 25, 25, 24, 24, 1, 3, 1, 3, 1, 8,
1079 6, 7, 6, 1, 18, 8, 18, 1, 7, 23, 2, 2, 23, 1, 1, 21,
1080 22, 9, 9, 22, 19, 1, 21, 5, 19, 5, 1, 33, 20, 33, 20, 8,
1081 4, 4, 1, 32, 2, 2, 8, 3, 32, 26, 3, 1, 7, 7, 26, 6,
1082 1, 6, 1, 1, 16, 1, 10, 1, 10, 2, 16, 29, 28, 2, 29, 28,
1083 1, 27, 5, 8, 5, 27, 1, 8, 3, 7, 3, 31, 41, 31, 1, 41,
1084 6, 1, 6, 7, 4, 4, 1, 1, 2, 1, 2, 11, 34, 30, 11, 1,
1085 30, 15, 15, 34, 36, 40, 36, 40, 35, 35, 37, 37, 39, 39, 38, 38},
1088 { 1, -1, 0, 2, -2, 0, 3, -3, 1, -1, 4, -4, 5, -5, 1, -1,
1089 6, -6, 2, -2, 7, -7, 1, -1, 8, -8, 9, -9, 3, -3, 1, -1,
1090 10, -10, 2, -2, 11, -11, 1, -1, 12, 4, -12, -4, 1, -1, 13, -13,
1091 1, -1, 14, -14, 2, 5, 15, -2, -5, -15, -3, 3, 16, -16, 17, 1,
1092 -1, -17, 6, 18, -6, -18, 2, -2, 19, -19, 1, -1, 20, -20, 4, -4,
1093 7, -7, 21, -21, 1, -1, 2, 3, -3, 22, -2, -22, 8, 23, -8, 1,
1094 2, -23, -1, 2, -2, -2, 24, 1, -24, -1, 25, 5, -5, 1, -25, -1,
1095 9, -9, 26, 1, -26, 3, 1, -1, 27, -3, -1, -27, 1, 3, -1, -3,
1096 28, -4, 4, 10, -10, -28, 1, -1, 1, -1, 29, 6, -29, -6, 30, -4,
1097 3, 3, -3, -30, 1, 4, -1, 31, -3, 1, 11, -11, -1, -31, 32, -1,
1098 -1, 2, -2, 1, 1, -32, 1, 4, -1, -4, 33, -1, 1, 1, -1, 5,
1099 5, -5, -33, -1, -12, 12, -5, -7, 1, 1, 7, 34, 4, -4, -1, 4,
1100 -34, -4, 35, 36, -2, -35, -2, -36, 2, 13, 2, -1, 1, -13, 1, -1,
1101 37, 1, -5, 6, 5, -1, 38, -6, -8, 5, 8, -1, 1, 1, -37, -1,
1102 5, 39, -5, -5, 6, -6, -38, -39, -14, 40, 14, 2, 1, 1, -2, -40,
1103 -1, -2, 2, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, -1, 1, -1}
1109 {0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 8, 6, 8, 7,
1110 7, 9, 9, 10, 10, 11, 11, 1, 12, 1, 12, 13, 13, 16, 14, 16,
1111 14, 15, 15, 17, 17, 18, 0, 18, 19, 20, 21, 19, 22, 21, 20, 22,
1112 25, 24, 2, 25, 24, 23, 23, 2, 26, 28, 26, 28, 29, 27, 29, 27,
1113 33, 33, 1, 32, 1, 3, 32, 30, 36, 3, 36, 30, 31, 31, 35, 34,
1114 37, 41, 34, 35, 37, 4, 41, 4, 49, 8, 8, 49, 40, 38, 5, 38,
1115 40, 39, 5, 39, 42, 43, 42, 7, 57, 6, 43, 44, 6, 50, 7, 44,
1116 57, 48, 50, 48, 45, 45, 46, 47, 51, 46, 47, 58, 1, 51, 58, 1,
1117 52, 59, 53, 9, 52, 55, 55, 59, 53, 56, 54, 56, 54, 9, 64, 64,
1118 60, 63, 60, 63, 61, 62, 61, 62, 2, 10, 2, 10, 11, 1, 11, 13,
1119 12, 1, 12, 13, 16, 16, 8, 8, 14, 3, 3, 15, 14, 15, 4, 4,
1120 1, 17, 17, 5, 1, 7, 7, 5, 6, 1, 2, 2, 6, 22, 1, 25,
1121 21, 22, 8, 24, 1, 21, 25, 24, 8, 18, 18, 23, 9, 20, 23, 33,
1122 29, 33, 20, 1, 19, 1, 29, 36, 9, 36, 19, 41, 28, 57, 32, 3,
1123 28, 3, 1, 27, 49, 49, 1, 32, 26, 26, 2, 4, 4, 7, 57, 41,
1124 2, 7, 10, 5, 37, 16, 10, 27, 8, 8, 13, 16, 37, 13, 1, 5},
1127 {0, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, 1, -1, -1, 1,
1128 -1, 1, -1, 1, -1, 1, -1, 2, 1, -2, -1, 1, -1, 1, 1, -1,
1129 -1, 1, -1, 1, -1, 1, 0, -1, 1, 1, 1, -1, 1, -1, -1, -1,
1130 1, 1, 2, -1, -1, 1, -1, -2, 1, 1, -1, -1, 1, 1, -1, -1,
1131 1, -1, 3, 1, -3, 2, -1, 1, 1, -2, -1, -1, -1, 1, 1, 1,
1132 1, 1, -1, -1, -1, 2, -1, -2, 1, 2, -2, -1, 1, 1, 2, -1,
1133 -1, 1, -2, -1, 1, 1, -1, 2, 1, 2, -1, 1, -2, -1, -2, -1,
1134 -1, 1, 1, -1, 1, -1, 1, 1, 1, -1, -1, 1, 4, -1, -1, -4,
1135 1, 1, 1, 2, -1, -1, 1, -1, -1, 1, -1, -1, 1, -2, 1, -1,
1136 1, 1, -1, -1, 1, 1, -1, -1, 3, 2, -3, -2, 2, 5, -2, 2,
1137 2, -5, -2, -2, -2, 2, -3, 3, 2, 3, -3, 2, -2, -2, 3, -3,
1138 6, 2, -2, 3, -6, 3, -3, -3, 3, 7, -4, 4, -3, 2, -7, 2,
1139 2, -2, -4, 2, 8, -2, -2, -2, 4, 2, -2, 2, 3, 2, -2, -2,
1140 2, 2, -2, -8, -2, 9, -2, 2, -3, -2, 2, -2, 2, 2, 2, 4,
1141 -2, -4, 10, 2, 2, -2, -9, -2, 2, -2, 5, 4, -4, 4, -2, 2,
1142 -5, -4, -3, 4, 2, -3, 3, -2, -5, 5, 3, 3, -2, -3, -10, -4}
1148 {1, 1, 0, 2, 2, 1, 1, 3, 3, 4, 4, 0, 1, 1, 5, 5,
1149 2, 2, 6, 6, 7, 7, 1, 8, 1, 8, 3, 3, 9, 9, 1, 2,
1150 2, 1, 4, 10, 4, 10, 11, 11, 1, 5, 12, 12, 1, 5, 13, 13,
1151 3, 3, 6, 6, 2, 2, 14, 14, 16, 16, 15, 7, 15, 8, 8, 7,
1152 1, 1, 17, 17, 4, 4, 1, 1, 18, 18, 2, 2, 5, 5, 25, 3,
1153 9, 3, 25, 9, 19, 24, 19, 24, 1, 21, 20, 1, 21, 22, 20, 22,
1154 23, 23, 8, 6, 33, 6, 8, 33, 7, 7, 26, 26, 1, 32, 1, 32,
1155 28, 4, 28, 10, 29, 27, 27, 10, 41, 4, 29, 2, 2, 41, 36, 31,
1156 49, 31, 34, 30, 34, 36, 30, 35, 1, 49, 11, 5, 35, 11, 1, 3,
1157 3, 5, 37, 37, 8, 40, 8, 40, 12, 12, 42, 42, 1, 38, 16, 57,
1158 1, 6, 16, 39, 38, 6, 7, 7, 13, 13, 39, 43, 2, 43, 57, 2,
1159 50, 9, 44, 9, 50, 4, 15, 48, 44, 4, 1, 15, 48, 14, 14, 1,
1160 45, 45, 8, 3, 5, 8, 51, 47, 3, 46, 46, 47, 5, 51, 1, 17,
1161 17, 58, 1, 58, 2, 52, 52, 2, 53, 7, 59, 6, 6, 56, 53, 55,
1162 7, 55, 1, 54, 59, 56, 54, 10, 1, 10, 4, 60, 1, 60, 8, 4,
1163 8, 64, 64, 61, 1, 63, 3, 63, 62, 61, 5, 11, 5, 3, 11, 62},
1166 { 1, -1, 0, 1, -1, 2, -2, 1, -1, 1, -1, 0, 3, -3, 1, -1,
1167 2, -2, 1, -1, 1, -1, 4, 1, -4, -1, 2, -2, 1, -1, 5, 3,
1168 -3, -5, 2, 1, -2, -1, 1, -1, 6, 2, 1, -1, -6, -2, 1, -1,
1169 3, -3, 2, -2, 4, -4, 1, -1, 1, -1, 1, 2, -1, 2, -2, -2,
1170 7, -7, 1, -1, 3, -3, 8, -8, 1, -1, 5, -5, 3, -3, 1, 4,
1171 2, -4, -1, -2, 1, 1, -1, -1, 9, 1, 1, -9, -1, 1, -1, -1,
1172 1, -1, 3, -3, 1, 3, -3, -1, 3, -3, 1, -1, 10, 1, -10, -1,
1173 1, 4, -1, 2, 1, -1, 1, -2, 1, -4, -1, 6, -6, -1, 1, 1,
1174 1, -1, 1, 1, -1, -1, -1, 1, 11, -1, -2, 4, -1, 2, -11, 5,
1175 -5, -4, -1, 1, 4, 1, -4, -1, -2, 2, 1, -1, 12, 1, -2, 1,
1176 -12, 4, 2, 1, -1, -4, 4, -4, 2, -2, -1, 1, 7, -1, -1, -7,
1177 -1, -3, 1, 3, 1, 5, 2, 1, -1, -5, 13, -2, -1, 2, -2, -13,
1178 1, -1, 5, 6, 5, -5, 1, 1, -6, 1, -1, -1, -5, -1, 14, 2,
1179 -2, 1, -14, -1, 8, 1, -1, -8, 1, 5, 1, 5, -5, 1, -1, 1,
1180 -5, -1, 15, 1, -1, -1, -1, 3, -15, -3, 6, 1, 16, -1, 6, -6,
1181 -6, 1, -1, 1, -16, 1, 7, -1, 1, -1, -6, -3, 6, -7, 3, -1}
1187 {0, 1, 1, 2, 2, 3, 3, 4, 4, 1, 1, 5, 5, 6, 6, 7,
1188 7, 8, 8, 9, 9, 2, 2, 10, 10, 1, 1, 11, 11, 12, 12, 3,
1189 3, 13, 13, 0, 14, 14, 16, 15, 16, 15, 4, 4, 17, 1, 17, 1,
1190 5, 5, 18, 18, 2, 2, 6, 6, 8, 19, 7, 8, 7, 19, 20, 20,
1191 21, 21, 22, 24, 22, 24, 23, 23, 1, 1, 25, 25, 3, 3, 26, 26,
1192 9, 9, 27, 27, 28, 28, 33, 29, 4, 33, 29, 1, 4, 1, 32, 32,
1193 2, 2, 31, 10, 30, 10, 30, 31, 34, 34, 5, 5, 36, 36, 35, 41,
1194 35, 11, 41, 11, 37, 1, 8, 8, 37, 6, 1, 6, 40, 7, 7, 40,
1195 12, 38, 12, 39, 39, 38, 49, 13, 49, 13, 3, 42, 3, 42, 16, 16,
1196 43, 43, 14, 14, 1, 1, 44, 15, 44, 15, 2, 2, 57, 48, 50, 48,
1197 57, 50, 4, 45, 45, 4, 46, 47, 47, 46, 1, 51, 1, 17, 17, 51,
1198 8, 9, 9, 5, 58, 8, 58, 5, 52, 52, 55, 56, 53, 56, 55, 59,
1199 59, 53, 54, 1, 6, 54, 7, 7, 6, 1, 2, 3, 2, 3, 64, 60,
1200 60, 10, 10, 64, 61, 62, 61, 63, 1, 63, 62, 1, 18, 24, 18, 4,
1201 25, 4, 8, 21, 21, 1, 24, 22, 25, 22, 8, 11, 19, 11, 23, 1,
1202 20, 23, 19, 20, 5, 12, 5, 1, 16, 2, 12, 13, 2, 13, 1, 16},
1205 { 0, 1, -1, 1, -1, 1, -1, 1, -1, 2, -2, 1, -1, 1, -1, 1,
1206 -1, 1, -1, 1, -1, 2, -2, 1, -1, 3, -3, 1, -1, 1, -1, 2,
1207 -2, 1, -1, 0, 1, -1, 1, 1, -1, -1, 2, -2, 1, 4, -1, -4,
1208 2, -2, 1, -1, -3, 3, 2, -2, 2, 1, 2, -2, -2, -1, 1, -1,
1209 1, -1, 1, 1, -1, -1, 1, -1, 5, -5, 1, -1, 3, -3, 1, -1,
1210 2, -2, 1, -1, 1, -1, 1, 1, 3, -1, -1, 6, -3, -6, -1, 1,
1211 4, -4, 1, 2, 1, -2, -1, -1, 1, -1, 3, -3, 1, -1, 1, 1,
1212 -1, 2, -1, -2, 1, 7, -3, 3, -1, 3, -7, -3, 1, -3, 3, -1,
1213 2, 1, -2, 1, -1, -1, 1, 2, -1, -2, -4, -1, 4, 1, 2, -2,
1214 1, -1, -2, 2, 8, -8, -1, 2, 1, -2, -5, 5, 1, -1, -1, 1,
1215 -1, 1, 4, -1, 1, -4, -1, -1, 1, 1, 9, 1, -9, 2, -2, -1,
1216 -4, 3, -3, -4, -1, 4, 1, 4, 1, -1, 1, -1, 1, 1, -1, 1,
1217 -1, -1, -1, 10, 4, 1, 4, -4, -4, -10, 6, 5, -6, -5, 1, -1,
1218 1, 3, -3, -1, 1, -1, -1, -1, 11, 1, 1, -11, -2, -2, 2, 5,
1219 -2, -5, -5, 2, -2, 12, 2, -2, 2, 2, 5, -3, -2, 3, -2, -12,
1220 -2, 2, 2, 2, -5, 3, 5, 13, -3, 7, -3, -3, -7, 3, -13, 3}
1226 {0, 1, 1, 1, 2, 2, 1, 3, 3, 1, 1, 1, 4, 4, 1, 5,
1227 2, 1, 5, 2, 1, 1, 6, 6, 1, 1, 1, 1, 1, 7, 3, 1,
1228 2, 3, 0, 1, 2, 7, 1, 1, 1, 8, 1, 1, 8, 1, 1, 1,
1229 9, 1, 9, 1, 2, 1, 1, 2, 1, 1, 10, 4, 1, 10, 1, 4,
1230 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 2, 1, 5, 1, 1, 1,
1231 2, 5, 1, 11, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1232 2, 1, 6, 1, 6, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 12,
1233 3, 1, 12, 1, 1, 1, 2, 1, 1, 3, 1, 1, 1, 1, 1, 1,
1234 4, 1, 1, 1, 2, 1, 1, 4, 1, 1, 1, 1, 1, 1, 2, 1,
1235 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 2, 1, 1, 5,
1236 1, 1, 1, 1, 1, 7, 1, 7, 1, 1, 2, 3, 1, 1, 1, 1,
1237 5, 1, 1, 1, 1, 1, 1, 2, 13, 1, 1, 1, 1, 1, 1, 1,
1238 1, 1, 1, 1, 1, 1, 1, 1, 13, 2, 1, 1, 4, 1, 1, 1,
1239 3, 1, 6, 1, 1, 1, 14, 1, 1, 1, 1, 1, 14, 6, 1, 1,
1240 1, 1, 15, 2, 4, 1, 2, 3, 15, 1, 1, 1, 8, 1, 1, 8,
1241 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1},
1244 { 0, 1, -1, 2, 1, -1, -2, 1, -1, 3, -3, 4, 1, -1, -4, 1,
1245 2, 5, -1, -2, -5, 6, 1, -1, -6, 7, -7, 8, -8, 1, 2, 9,
1246 3, -2, 0, -9, -3, -1, 10, -10, 11, 1, -11, 12, -1, -12, 13, -13,
1247 1, 14, -1, -14, 4, 15, -15, -4, 16, -16, 1, 2, 17, -1, -17, -2,
1248 18, -18, 19, -19, 20, 3, -20, 21, -21, -3, 5, 22, 2, -22, -23, 23,
1249 -5, -2, 24, 1, -24, -1, 25, -25, 26, -26, -27, 27, 28, 29, -28, -29,
1250 6, 30, 2, -31, -2, -30, 31, -6, -32, 32, 33, -33, 34, -35, -34, 1,
1251 4, -36, -1, 35, 37, 36, 7, -37, 38, -4, -38, 39, 41, 40, -40, -39,
1252 3, 42, -43, -41, -7, -42, 43, -3, 44, -44, 45, -45, 46, 47, 8, -47,
1253 -48, -46, 50, -50, 48, 49, 51, -49, 52, -52, 5, -51, -8, -53, 53, 3,
1254 -56, 56, 55, 54, -54, 2, 60, -2, -55, 58, 9, -5, 59, 57, -57, -63,
1255 -3, -58, -60, -61, 61, -59, -62, -9, 1, 64, 62, 69, -64, 63, 65, -67,
1256 -68, 66, -65, 68, -66, -69, 67, -70, -1, 10, 71, -71, 4, 73, 72, 70,
1257 6, -76, -3, 74, -78, -74, 1, 78, 80, -72, -75, 76, -1, 3, -73, 79,
1258 75, 77, 1, 11, -4, -79, -10, -6, -1, -77, -83, -80, 2, 81, -84, -2,
1259 83, -81, 82, -82, 84, -87, -86, 85, -11, -85, 86, -89, 87, -88, 88, 89}
1265 {1, 1, 0, 2, 1, 2, 1, 3, 3, 1, 1, 4, 4, 2, 2, 1,
1266 1, 5, 5, 6, 1, 6, 1, 7, 7, 3, 3, 2, 8, 2, 8, 1,
1267 1, 0, 9, 9, 1, 1, 10, 4, 10, 4, 11, 11, 2, 1, 2, 1,
1268 12, 12, 3, 3, 1, 1, 13, 5, 5, 13, 14, 1, 1, 14, 2, 2,
1269 6, 6, 15, 1, 1, 15, 16, 4, 7, 16, 4, 7, 1, 1, 3, 3,
1270 8, 8, 2, 2, 1, 1, 17, 17, 1, 1, 18, 18, 5, 5, 2, 2,
1271 1, 1, 9, 19, 9, 19, 20, 3, 3, 20, 1, 10, 21, 1, 10, 4,
1272 4, 21, 22, 6, 6, 22, 1, 1, 23, 24, 2, 2, 23, 24, 11, 1,
1273 1, 11, 7, 25, 7, 1, 1, 25, 8, 8, 3, 26, 3, 1, 12, 2,
1274 2, 26, 1, 12, 5, 5, 27, 4, 1, 4, 1, 27, 28, 1, 28, 13,
1275 1, 13, 2, 29, 2, 1, 32, 6, 1, 30, 14, 29, 14, 6, 3, 31,
1276 3, 1, 30, 1, 32, 31, 33, 9, 33, 1, 1, 7, 9, 7, 2, 2,
1277 1, 1, 4, 36, 34, 4, 5, 10, 10, 5, 34, 1, 1, 35, 8, 8,
1278 36, 3, 35, 1, 15, 3, 2, 1, 16, 15, 16, 2, 37, 1, 37, 1,
1279 1, 1, 6, 6, 38, 1, 38, 11, 1, 39, 39, 40, 11, 2, 41, 4,
1280 40, 1, 2, 4, 1, 1, 1, 41, 3, 1, 3, 1, 5, 7, 5, 7},
1283 { 1, -1, 0, 1, 2, -1, -2, 1, -1, 3, -3, 1, -1, 2, -2, 4,
1284 -4, 1, -1, 1, 5, -1, -5, 1, -1, 2, -2, 3, 1, -3, -1, 6,
1285 -6, 0, 1, -1, 7, -7, 1, 2, -1, -2, 1, -1, 4, 8, -4, -8,
1286 1, -1, 3, -3, 9, -9, 1, 2, -2, -1, 1, 10, -10, -1, 5, -5,
1287 2, -2, 1, 11, -11, -1, 1, 3, 2, -1, -3, -2, 12, -12, 4, -4,
1288 2, -2, -6, 6, 13, -13, 1, -1, 14, -14, 1, -1, 3, -3, 7, -7,
1289 15, -15, 2, 1, -2, -1, 1, 5, -5, -1, -16, 2, 1, 16, -2, 4,
1290 -4, -1, 1, 3, -3, -1, 17, -17, 1, 1, -8, 8, -1, -1, 2, 18,
1291 -18, -2, 3, 1, -3, 19, -19, -1, 3, -3, 6, 1, -6, 20, 2, 9,
1292 -9, -1, -20, -2, 4, -4, 1, -5, 21, 5, -21, -1, 1, -22, -1, 2,
1293 22, -2, 10, 1, -10, 23, 1, 4, -23, 1, 2, -1, -2, -4, -7, 1,
1294 7, -24, -1, 24, -1, -1, 1, 3, -1, -25, 25, 4, -3, -4, 11, -11,
1295 26, -26, 6, 1, 1, -6, -5, -3, 3, 5, -1, -27, 27, 1, 4, -4,
1296 -1, -8, -1, 28, 2, 8, -12, -28, -2, -2, 2, 12, -1, 29, 1, -29,
1297 30, -30, 5, -5, 1, -31, -1, 3, 31, -1, 1, 1, -3, -13, 1, -7,
1298 -1, -32, 13, 7, 32, 33, -33, -1, -9, -34, 9, 34, -6, 5, 6, -5}
1304 {1, 1, 0, 1, 1, 2, 2, 1, 1, 3, 3, 1, 1, 0, 2, 2,
1305 4, 1, 4, 1, 1, 1, 5, 5, 1, 1, 6, 6, 2, 2, 1, 1,
1306 3, 3, 7, 7, 1, 1, 8, 8, 1, 1, 2, 2, 1, 9, 1, 9,
1307 4, 4, 10, 1, 1, 10, 1, 1, 11, 11, 3, 3, 1, 2, 1, 2,
1308 1, 1, 12, 12, 5, 5, 1, 1, 13, 1, 1, 13, 2, 2, 1, 1,
1309 6, 6, 1, 1, 4, 14, 4, 14, 3, 1, 3, 1, 1, 1, 15, 7,
1310 15, 2, 2, 7, 1, 1, 1, 8, 1, 8, 16, 16, 1, 1, 1, 1,
1311 2, 1, 1, 2, 1, 1, 3, 5, 5, 3, 4, 1, 1, 4, 1, 1,
1312 17, 17, 9, 1, 1, 9, 2, 2, 1, 1, 10, 10, 1, 6, 1, 1,
1313 6, 18, 1, 1, 18, 1, 1, 1, 2, 2, 3, 1, 3, 1, 1, 1,
1314 4, 1, 19, 1, 19, 7, 1, 1, 20, 1, 4, 20, 1, 7, 11, 2,
1315 1, 11, 21, 2, 8, 5, 1, 8, 1, 5, 21, 1, 1, 1, 22, 1,
1316 1, 22, 1, 1, 3, 3, 1, 23, 2, 12, 24, 1, 1, 2, 1, 1,
1317 12, 23, 1, 1, 24, 1, 1, 1, 4, 1, 1, 1, 2, 1, 6, 6,
1318 4, 2, 1, 1, 1, 1, 1, 1, 1, 14, 13, 3, 1, 25, 9, 25,
1319 14, 1, 9, 3, 13, 1, 1, 1, 1, 1, 10, 1, 1, 2, 10, 2},
1322 {-20, -1, 0, 2, -2, 1, -1, 3, -3, 1, -1, 4, -4, 0, 2, -2,
1323 1, 5, -1, -5, 6, -6, 1, -1, 7, -7, 1, -1, 3, -3, 8, -8,
1324 2, -2, 1, -1, 9, -9, 1, -1, 10, -10, 4, -4, 11, 1, -11, -1,
1325 2, -2, 1, 12, -12, -1, 13, -13, 1, -1, 3, -3, 14, 5, -14, -5,
1326 -15, 15, -1, 1, 2, -2, 16, -16, 1, 17, -17, -1, 6, -6, 18, -18,
1327 2, -2, -19, 19, -3, 1, 3, -1, 4, 20, -4, 1, -21, 21, 1, 2,
1328 -1, -7, 7, -2, 22, -22, 23, 2, -23, -2, 1, -1, -24, 24, -25, 25,
1329 -8, -26, 26, 8, -27, 27, 5, 3, -3, -5, -4, 28, -28, 4, 29, -29,
1330 1, -1, -2, -30, 30, 2, 9, -9, -31, 31, 2, -2, -32, 3, 32, -33,
1331 -3, 1, 33, -34, -1, 34, -35, 35, -10, 10, -6, 36, 6, -36, 37, -37,
1332 -5, 38, 1, -38, -1, 3, 39, -39, -1, 40, 5, 1, -40, -3, 2, -11,
1333 -41, -2, 1, 11, -3, -4, 41, 3, 42, 4, -1, -43, -42, 43, 1, -44,
1334 45, -1, 44, -45, -7, 7, -46, 1, -12, 2, 1, -47, 46, 12, 47, 48,
1335 -2, -1, -48, 49, -1, -50, -49, 50, -6, -51, 51, 52, -13, 53, -4, 4,
1336 6, 13, -53, -52, -54, 55, 54, -55, -56, -2, 2, -8, 56, 1, -3, -1,
1337 2, 58, 3, 8, -2, 57, -58, -60, -59, -57, -3, 60, 59, -14, 3, 14}
1343 {1, 1, 0, 2, 2, 1, 1, 3, 3, 4, 4, 5, 5, 1, 1, 6,
1344 6, 2, 2, 7, 7, 8, 8, 1, 1, 3, 3, 9, 9, 10, 10, 1,
1345 1, 2, 2, 4, 4, 11, 0, 11, 12, 12, 13, 13, 1, 1, 5, 5,
1346 14, 14, 15, 16, 15, 16, 3, 3, 1, 6, 1, 6, 2, 2, 7, 7,
1347 8, 8, 17, 17, 1, 1, 4, 4, 18, 18, 2, 2, 1, 19, 1, 20,
1348 19, 20, 21, 21, 3, 3, 22, 22, 5, 5, 24, 1, 1, 23, 9, 23,
1349 24, 9, 2, 2, 10, 1, 1, 10, 6, 6, 25, 4, 4, 25, 7, 7,
1350 26, 8, 1, 8, 3, 1, 26, 3, 11, 11, 27, 27, 2, 28, 1, 2,
1351 28, 1, 12, 12, 5, 5, 29, 13, 13, 29, 32, 1, 1, 33, 31, 30,
1352 32, 4, 30, 33, 4, 31, 3, 14, 1, 1, 3, 34, 34, 2, 2, 14,
1353 6, 6, 35, 36, 35, 36, 1, 15, 1, 16, 16, 15, 7, 9, 7, 9,
1354 37, 8, 8, 37, 1, 1, 39, 2, 38, 39, 2, 40, 5, 38, 40, 5,
1355 3, 3, 4, 4, 10, 10, 1, 1, 1, 1, 41, 2, 41, 2, 6, 6,
1356 1, 1, 11, 42, 11, 43, 3, 42, 3, 17, 4, 43, 1, 17, 7, 1,
1357 8, 44, 4, 7, 44, 5, 8, 2, 5, 1, 2, 48, 45, 1, 12, 45,
1358 12, 48, 13, 13, 1, 9, 9, 46, 1, 46, 47, 47, 49, 18, 18, 49},
1361 { 1, -1, 0, 1, -1, 2, -2, 1, -1, 1, -1, 1, -1, 3, -3, 1,
1362 -1, -2, 2, 1, -1, 1, -1, 4, -4, -2, 2, 1, -1, 1, -1, 5,
1363 -5, -3, 3, 2, -2, 1, 0, -1, 1, -1, 1, -1, 6, -6, 2, -2,
1364 1, -1, 1, 1, -1, -1, -3, 3, 7, 2, -7, -2, -4, 4, 2, -2,
1365 2, -2, 1, -1, 8, -8, 3, -3, 1, -1, -5, 5, 9, 1, -9, 1,
1366 -1, -1, 1, -1, -4, 4, 1, -1, 3, -3, 1, -10, 10, 1, 2, -1,
1367 -1, -2, 6, -6, 2, 11, -11, -2, 3, -3, 1, -4, 4, -1, 3, -3,
1368 1, 3, 12, -3, -5, -12, -1, 5, 2, -2, 1, -1, -7, 1, 13, 7,
1369 -1, -13, 2, -2, 4, -4, 1, 2, -2, -1, 1, 14, -14, 1, 1, 1,
1370 -1, -5, -1, -1, 5, -1, -6, 2, -15, 15, 6, 1, -1, -8, 8, -2,
1371 -4, 4, 1, 1, -1, -1, 16, 2, -16, -2, 2, -2, 4, 3, -4, -3,
1372 -1, -4, 4, 1, -17, 17, -1, -9, 1, 1, 9, 1, -5, -1, -1, 5,
1373 -7, 7, 6, -6, 3, -3, 18, -18, 19, -19, 1, -10, -1, 10, -5, 5,
1374 20, -20, -3, 1, 3, 1, 8, -1, -8, 2, 7, -1, -21, -2, 5, 21,
1375 5, -1, -7, -5, 1, -6, -5, -11, 6, 22, 11, 1, 1, -22, -3, -1,
1376 3, -1, 3, -3, -23, 4, -4, 1, 23, -1, 1, -1, 1, -2, 2, -1}
1382 {1, 1, 1, 1, 0, 2, 2, 1, 1, 3, 3, 0, 1, 1, 2, 2,
1383 4, 4, 1, 1, 5, 5, 1, 1, 2, 2, 3, 3, 6, 6, 1, 1,
1384 7, 7, 8, 1, 8, 2, 2, 1, 4, 4, 1, 3, 1, 3, 9, 9,
1385 2, 2, 1, 5, 1, 5, 10, 10, 1, 1, 11, 11, 3, 6, 3, 4,
1386 4, 6, 2, 2, 1, 12, 1, 12, 7, 13, 7, 13, 1, 1, 8, 8,
1387 2, 2, 14, 14, 16, 15, 16, 5, 5, 1, 3, 15, 1, 3, 4, 4,
1388 1, 1, 17, 17, 2, 2, 6, 6, 1, 18, 1, 18, 22, 21, 22, 21,
1389 25, 24, 25, 19, 9, 20, 9, 23, 19, 24, 20, 3, 23, 7, 3, 1,
1390 1, 7, 28, 26, 29, 5, 28, 26, 5, 8, 29, 4, 8, 27, 2, 2,
1391 4, 27, 1, 1, 10, 36, 10, 33, 33, 36, 30, 1, 32, 32, 1, 30,
1392 6, 31, 31, 35, 3, 6, 11, 11, 3, 2, 35, 2, 34, 1, 34, 1,
1393 37, 37, 12, 7, 12, 5, 41, 5, 4, 7, 1, 8, 13, 4, 1, 41,
1394 13, 38, 8, 38, 9, 1, 40, 40, 9, 1, 39, 2, 2, 49, 39, 42,
1395 3, 3, 14, 16, 49, 14, 16, 42, 43, 43, 6, 6, 15, 1, 1, 15,
1396 44, 44, 1, 1, 50, 48, 4, 5, 4, 7, 5, 2, 10, 10, 48, 7,
1397 50, 45, 2, 1, 45, 8, 8, 1, 46, 46, 3, 47, 47, 3, 1, 1},
1400 { 1, -1, 2, -2, 0, 1, -1, 3, -3, 1, -1, 0, 4, -4, 2, -2,
1401 1, -1, 5, -5, 1, -1, 6, -6, 3, -3, 2, -2, 1, -1, 7, -7,
1402 1, -1, 1, 8, -1, 4, -4, -8, 2, -2, 9, 3, -9, -3, 1, -1,
1403 5, -5, 10, 2, -10, -2, 1, -1, 11, -11, 1, -1, -4, 2, 4, 3,
1404 -3, -2, 6, -6, 12, 1, -12, -1, 2, 1, -2, -1, 13, -13, 2, -2,
1405 7, -7, 1, -1, 1, 1, -1, 3, -3, 14, 5, -1, -14, -5, 4, -4,
1406 15, -15, 1, -1, 8, -8, -3, 3, 16, 1, -16, -1, 1, 1, -1, -1,
1407 1, 1, -1, 1, 2, 1, -2, 1, -1, -1, -1, 6, -1, 3, -6, 17,
1408 -17, -3, 1, 1, 1, 4, -1, -1, -4, 3, -1, 5, -3, -1, -9, 9,
1409 -5, 1, 18, -18, 2, 1, -2, 1, -1, -1, 1, 19, -1, 1, -19, -1,
1410 4, 1, -1, 1, 7, -4, -2, 2, -7, 10, -1, -10, 1, 20, -1, -20,
1411 1, -1, 2, 4, -2, 5, 1, -5, 6, -4, 21, 4, 2, -6, -21, -1,
1412 -2, 1, -4, -1, -3, 22, -1, 1, 3, -22, -1, 11, -11, 1, 1, 1,
1413 8, -8, 2, 2, -1, -2, -2, -1, 1, -1, -5, 5, 2, 23, -23, -2,
1414 1, -1, 24, -24, -1, -1, 7, 6, -7, 5, -6, 12, -3, 3, 1, -5,
1415 1, 1, -12, 25, -1, -5, 5, -25, -1, 1, 9, 1, -1, -9, 26, -26}
int is_empty
= 1 if this band doesn't contain any data
uint8_t type
macroblock type: 0 - INTRA, 1 - INTER
int num_MBs
number of macroblocks in this tile
void * av_mallocz(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
const uint8_t av_reverse[256]
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
av_cold int ff_ivi_decode_close(AVCodecContext *avctx)
Close Indeo5 decoder and clean up its context.
macroblock/block huffman table descriptor
InvTransformPtr * inv_transform
int ff_ivi_dec_huff_desc(GetBitContext *gb, int desc_coded, int which_tab, IVIHuffTab *huff_tab, AVCodecContext *avctx)
Decode a huffman codebook descriptor from the bitstream and select specified huffman table...
void(* release_buffer)(struct AVCodecContext *c, AVFrame *pic)
Called to release buffers which were allocated with get_buffer.
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
int(* decode_pic_hdr)(struct IVI45DecContext *ctx, AVCodecContext *avctx)
static void skip_bits_long(GetBitContext *s, int n)
static void align_get_bits(GetBitContext *s)
const uint8_t ff_ivi_direct_scan_4x4[16]
int(* decode_mb_info)(struct IVI45DecContext *ctx, IVIBandDesc *band, IVITile *tile, AVCodecContext *avctx)
int num_tiles
number of tiles in this band
int dst_buf
buffer index for the currently decoded frame
int16_t * ref_buf
pointer to the reference frame buffer (for motion compensation)
uint8_t eob_sym
end of block symbol
void(* ivi_mc_func)(int16_t *buf, const int16_t *ref_buf, uint32_t pitch, int mc_type)
int16_t * buf
pointer to the output buffer for this band
DSP functions (inverse transforms, motion compensations, wavelet recompostion) for Indeo Video Intera...
IVITile * tiles
array of tile descriptors
int is_halfpel
precision of the motion compensation: 0 - fullpel, 1 - halfpel
void ff_ivi_mc_4x4_delta(int16_t *buf, const int16_t *ref_buf, uint32_t pitch, int mc_type)
4x4 block motion compensation with adding delta
int plane
plane number this band belongs to
uint16_t ivi_calc_band_checksum(IVIBandDesc *band)
Calculate band checksum from band data.
int ff_ivi_dec_tile_data_size(GetBitContext *gb)
Decode size of the tile data.
static uint16_t inv_bits(uint16_t val, int nbits)
Reverse "nbits" bits of the value "val" and return the result in the least significant bits...
void av_freep(void *arg)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
void ff_ivi_recompose53(const IVIPlaneDesc *plane, uint8_t *dst, const int dst_pitch, const int num_bands)
5/3 wavelet recomposition filter for Indeo5
RVMapDesc * rv_map
ptr to the RLE table for this band
int ff_ivi_huff_desc_cmp(const IVIHuffDesc *desc1, const IVIHuffDesc *desc2)
Compare two huffman codebook descriptors.
int av_cold ff_ivi_init_planes(IVIPlaneDesc *planes, const IVIPicConfig *cfg)
Initialize planes (prepares descriptors, allocates buffers etc).
VLC * tab
index of one of the predefined tables or "7" for custom one
const uint8_t * frame_data
input frame data pointer
const uint16_t * inter_base
quantization matrix for inter blocks
const uint8_t * data_ptr
ptr to the first byte of the band data
static int ivi_mc(IVIBandDesc *band, ivi_mc_func mc, int offs, int mv_x, int mv_y, int mc_type)
static int ivi_init_tiles(IVIBandDesc *band, IVITile *ref_tile, int p, int b, int t_height, int t_width)
int inherit_mv
tells if motion vector is inherited from reference macroblock
int ff_ivi_decode_blocks(GetBitContext *gb, IVIBandDesc *band, IVITile *tile)
Decode block data: extract huffman-coded transform coefficients from the bitstream, dequantize them, apply inverse transform and motion compensation in order to reconstruct the picture.
void ff_ivi_mc_8x8_no_delta(int16_t *buf, const int16_t *ref_buf, uint32_t pitch, int mc_type)
motion compensation without adding delta
int16_t * bufs[3]
array of pointers to the band buffers
int pitch
pitch associated with the buffers above
static int get_bits_count(const GetBitContext *s)
uint8_t cbp
coded block pattern
int qdelta_present
tells if Qdelta signal is present in the bitstream (Indeo5 only)
bitstream reader API header.
static VLC_TYPE table_data[117592][2]
IVIPlaneDesc planes[3]
color planes
void avcodec_set_dimensions(AVCodecContext *s, int width, int height)
const uint16_t * intra_base
quantization matrix for intra blocks
const IVIHuffDesc ff_ivi_mb_huff_desc[8]
static macroblock huffman tables
IVIHuffDesc cust_desc
pointer to the table associated with tab_sel
VLC ff_ivi_mb_vlc_tabs[8]
static macroblock Huffman tables
static int get_bits_left(GetBitContext *gb)
const RVMapDesc ff_ivi_rvmap_tabs[9]
Run-value (RLE) tables.
uint8_t corr[61 *2]
rvmap correction pairs
RVMapDesc rvmap_tabs[9]
local corrected copy of the static rvmap tables
int reference
is this picture used as reference The values for this are the same as the MpegEncContext.picture_structure variable, that is 1->top field, 2->bottom field, 3->frame/both fields.
#define IVI_VLC_BITS
max number of bits of the ivi's huffman codes
This file contains structures and macros shared by both Indeo4 and Indeo5 decoders.
int ref_buf
inter frame reference buffer index
DCTransformPtr * dc_transform
void av_log(void *avcl, int level, const char *fmt,...)
int ivi_check_band(IVIBandDesc *band, const uint8_t *ref, int pitch)
Verify that band data lies in range.
#define IVI_NUM_TILES(stride, tile_size)
calculate number of tiles in a stride
void ff_ivi_mc_8x8_delta(int16_t *buf, const int16_t *ref_buf, uint32_t pitch, int mc_type)
8x8 block motion compensation with adding delta
uint8_t esc_sym
escape symbol
#define IVI_MBs_PER_TILE(tile_width, tile_height, mb_size)
calculate number of macroblocks in a tile
run-value (RLE) table descriptor
int inherit_qdelta
tells if quantiser delta is inherited from reference macroblock
uint8_t num_bands
number of bands this plane subdivided into
int(* decode_band_hdr)(struct IVI45DecContext *ctx, IVIBandDesc *band, AVCodecContext *avctx)
int ff_ivi_create_huff_from_desc(const IVIHuffDesc *cb, VLC *vlc, int flag)
Generate a huffman codebook from the given descriptor and convert it into the Libav VLC table...
struct AVFrame AVFrame
Audio Video Frame.
static int ivi_process_empty_tile(AVCodecContext *avctx, IVIBandDesc *band, IVITile *tile, int32_t mv_scale)
Handle empty tiles by performing data copying and motion compensation respectively.
static int ivi_dc_transform(IVIBandDesc *band, int *prev_dc, int buf_offs, int blk_size)
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame)
IVIMbInfo * mbs
array of macroblock descriptors
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
const uint8_t * inter_scale
quantization coefficient for inter blocks
void ff_ivi_output_plane(IVIPlaneDesc *plane, uint8_t *dst, int dst_pitch)
Convert and output the current plane.
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
void av_cold ff_ivi_free_buffers(IVIPlaneDesc *planes)
Free planes, bands and macroblocks buffers.
void ff_ivi_init_static_vlc(void)
Initialize static codes used for macroblock and block decoding.
#define INIT_VLC_USE_NEW_STATIC
#define av_dlog(pctx,...)
av_dlog macros Useful to print debug messages that shouldn't get compiled in normally.
int8_t q_delta
quant delta
uint32_t frame_size
frame size in bytes
#define AVERROR_PATCHWELCOME
Not yet implemented in Libav, patches welcome.
VLC ff_ivi_blk_vlc_tabs[8]
static block Huffman tables
IVIHuffTab mb_vlc
current macroblock table descriptor
int is_2d_trans
1 indicates that the two-dimensional inverse transform is used
int glob_quant
quant base for this band
int linesize[AV_NUM_DATA_POINTERS]
Size, in bytes, of the data for each picture/channel plane.
main external API structure.
static void(WINAPI *cond_broadcast)(pthread_cond_t *cond)
int aheight
aligned band height
int is_empty
= 1 if this tile doesn't contain any data
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
int num_corr
number of correction entries
#define init_vlc(vlc, nb_bits, nb_codes,bits, bits_wrap, bits_size,codes, codes_wrap, codes_size,flags)
information for Indeo tile
int(* is_nonnull_frame)(struct IVI45DecContext *ctx)
const uint8_t ff_ivi_vertical_scan_8x8[64]
Scan patterns shared between indeo4 and indeo5.
static unsigned int get_bits1(GetBitContext *s)
void ff_ivi_recompose_haar(const IVIPlaneDesc *plane, uint8_t *dst, const int dst_pitch, const int num_bands)
Haar wavelet recomposition filter for Indeo 4.
void * av_malloc(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
void(* switch_buffers)(struct IVI45DecContext *ctx)
IVIBandDesc * bands
array of band descriptors
int32_t checksum
for debug purposes
int rvmap_sel
rvmap table selector
int8_t mv_x
motion vector (x component)
int8_t mv_y
motion vector (y component)
int mb_size
macroblock size
huffman codebook descriptor
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
IVIMbInfo * ref_mbs
ptr to the macroblock descriptors of the reference tile
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
int av_cold ff_ivi_init_tiles(IVIPlaneDesc *planes, int tile_width, int tile_height)
Initialize tile and macroblock descriptors.
static int ivi_decode_coded_blocks(GetBitContext *gb, IVIBandDesc *band, ivi_mc_func mc, int mv_x, int mv_y, int *prev_dc, int is_intra, int mc_type, uint32_t quant, int offs)
void ff_ivi_mc_4x4_no_delta(int16_t *buf, const int16_t *ref_buf, uint32_t pitch, int mc_type)
4x4 block motion compensation without adding delta
common internal api header.
common internal and external API header
void ff_ivi_huff_desc_copy(IVIHuffDesc *dst, const IVIHuffDesc *src)
Copy huffman codebook descriptors.
VLC cust_tab
custom Huffman codebook descriptor
const uint8_t * scan
ptr to the scan pattern
int ff_ivi_decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPacket *avpkt)
VLC_TYPE(* table)[2]
code, bits
static int ivi_scale_mv(int mv, int mv_scale)
scale motion vector
const IVIHuffDesc ff_ivi_blk_huff_desc[8]
static block huffman tables
information for Indeo macroblock (16x16, 8x8 or 4x4)
IVIHuffTab blk_vlc
vlc table for decoding block data
const uint8_t ff_ivi_horizontal_scan_8x8[64]
const uint8_t * intra_scale
quantization coefficient for intra blocks
color plane (luma or chroma) information
#define FFSWAP(type, a, b)
uint32_t buf_offs
address in the output buffer for this mb
#define IVI_TOSIGNED(val)
convert unsigned values into signed ones (the sign is in the LSB)
information for Indeo wavelet band
static int decode_band(IVI45DecContext *ctx, int plane_num, IVIBandDesc *band, AVCodecContext *avctx)
Decode an Indeo 4 or 5 band.
void ff_free_vlc(VLC *vlc)
#define IVI5_IS_PROTECTED
int data_size
size of the data in bytes