52 #define MAX_DWT_LEVELS 5
57 #define MAX_REFERENCE_FRAMES 8
59 #define MAX_FRAMES (MAX_REFERENCE_FRAMES + MAX_DELAY + 1)
61 #define MAX_BLOCKSIZE 32
66 #define DIRAC_REF_MASK_REF1 1
67 #define DIRAC_REF_MASK_REF2 2
68 #define DIRAC_REF_MASK_GLOBAL 4
74 #define DELAYED_PIC_REF 4
76 #define ff_emulated_edge_mc ff_emulated_edge_mc_8
78 #define CALC_PADDING(size, depth) \
79 (((size + (1 << depth) - 1) >> depth) << depth)
81 #define DIVRNDUP(a, b) (((a) + (b) - 1) / (b))
242 { { 5, 3, 3, 0}, { 0, 4, 4, 1}, { 0, 5, 5, 2}, { 0, 6, 6, 3} },
243 { { 4, 2, 2, 0}, { 0, 4, 4, 2}, { 0, 5, 5, 3}, { 0, 7, 7, 5} },
244 { { 5, 3, 3, 0}, { 0, 4, 4, 1}, { 0, 5, 5, 2}, { 0, 6, 6, 3} },
245 { { 8, 4, 4, 0}, { 0, 4, 4, 0}, { 0, 4, 4, 0}, { 0, 4, 4, 0} },
246 { { 8, 4, 4, 0}, { 0, 4, 4, 0}, { 0, 4, 4, 0}, { 0, 4, 4, 0} },
247 { { 0, 4, 4, 8}, { 0, 8, 8, 12}, { 0, 13, 13, 17}, { 0, 17, 17, 21} },
248 { { 3, 1, 1, 0}, { 0, 4, 4, 2}, { 0, 6, 6, 5}, { 0, 9, 9, 7} },
252 4, 5, 6, 7, 8, 10, 11, 13,
253 16, 19, 23, 27, 32, 38, 45, 54,
254 64, 76, 91, 108, 128, 152, 181, 215,
255 256, 304, 362, 431, 512, 609, 724, 861,
256 1024, 1218, 1448, 1722, 2048, 2435, 2896, 3444,
257 4096, 4871, 5793, 6889, 8192, 9742, 11585, 13777,
258 16384, 19484, 23170, 27554, 32768, 38968, 46341, 55109,
263 1, 2, 3, 4, 4, 5, 6, 7,
264 8, 10, 12, 14, 16, 19, 23, 27,
265 32, 38, 46, 54, 64, 76, 91, 108,
266 128, 152, 181, 216, 256, 305, 362, 431,
267 512, 609, 724, 861, 1024, 1218, 1448, 1722,
268 2048, 2436, 2897, 3445, 4096, 4871, 5793, 6889,
269 8192, 9742, 11585, 13777, 16384, 19484, 23171, 27555,
274 1, 2, 2, 3, 3, 4, 4, 5,
275 6, 7, 9, 10, 12, 14, 17, 20,
276 24, 29, 34, 41, 48, 57, 68, 81,
277 96, 114, 136, 162, 192, 228, 272, 323,
278 384, 457, 543, 646, 768, 913, 1086, 1292,
279 1536, 1827, 2172, 2583, 3072, 3653, 4344, 5166,
280 6144, 7307, 8689, 10333, 12288, 14613, 17378, 20666,
287 return ((x+1)*21845 + 10922) >> 16;
293 int i, remove_idx = -1;
295 for (i = 0; framelist[i]; i++)
296 if (framelist[i]->avframe->display_picture_number == picnum) {
297 remove_pic = framelist[i];
302 for (i = remove_idx; framelist[i]; i++)
303 framelist[i] = framelist[i+1];
311 for (i = 0; i < maxframes; i++)
313 framelist[i] =
frame;
323 int i, w, h, top_padding;
326 for (i = 0; i < 3; i++) {
396 for (j = 0; j < 3; j++)
397 for (k = 1; k < 4; k++)
404 for (i = 0; i < 3; i++) {
461 #define SIGN_CTX(x) (CTX_SIGN_ZERO + ((x) > 0) - ((x) < 0))
475 sign_pred = buf[-b->
stride];
479 pred_ctx += !(buf[-1] | buf[-b->
stride] | buf[-1-b->
stride]);
483 pred_ctx += !buf[-b->
stride];
488 coeff = (coeff * qfactor + qoffset + 2) >> 2;
490 coeff = (coeff ^ -sign) + sign;
501 coeff = (coeff * qfactor + qoffset + 2) >> 2;
503 coeff = (coeff ^ -sign) + sign;
514 int left,
int right,
int top,
int bottom,
515 int blockcnt_one,
int is_arith)
517 int x,
y, zero_block;
518 int qoffset, qfactor;
555 for (y = top; y < bottom; y++) {
556 for (x = left; x < right; x++) {
576 for (x = 1; x < b->
width; x++)
580 for (y = 1; y < b->
height; y++) {
581 buf[0] += buf[-b->
stride];
583 for (x = 1; x < b->
width; x++) {
597 int cb_x, cb_y, left, right, top, bottom;
602 int blockcnt_one = (cb_width + cb_height) == 2;
613 for (cb_y = 0; cb_y < cb_height; cb_y++) {
614 bottom = (b->
height * (cb_y+1)) / cb_height;
616 for (cb_x = 0; cb_x < cb_width; cb_x++) {
617 right = (b->
width * (cb_x+1)) / cb_width;
618 codeblock(s, b, &gb, &c, left, right, top, bottom, blockcnt_one, is_arith);
652 int level, num_bands = 0;
656 for (orientation = !!level; orientation < 4; orientation++) {
658 bands[num_bands++] =
b;
674 NULL, 4-!!level,
sizeof(
SubBand));
684 int slice_x,
int slice_y,
int bits_end,
703 for (y = top; y < bottom; y++) {
704 for (x = left; x < right; x++) {
747 for (orientation = !!level; orientation < 4; orientation++) {
750 &s->
plane[0].
band[level][orientation], NULL);
756 chroma_bits = 8*slice->
bytes - 7 - length_bits - luma_bits;
760 for (orientation = !!level; orientation < 4; orientation++) {
789 for (slice_y = 0; bufsize > 0 && slice_y < s->
lowdelay.
num_y; slice_y++)
790 for (slice_x = 0; bufsize > 0 && slice_x < s->
lowdelay.
num_x; slice_x++) {
794 slices[slice_num].
bytes = bytes;
795 slices[slice_num].
slice_x = slice_x;
796 slices[slice_num].
slice_y = slice_y;
814 int i, w, h,
level, orientation;
816 for (i = 0; i < 3; i++) {
828 for (orientation = !!level; orientation < 4; orientation++) {
867 static const uint8_t default_blen[] = { 4, 12, 16, 24 };
868 static const uint8_t default_bsep[] = { 4, 8, 12, 16 };
925 for (ref = 0; ref < s->
num_refs; ref++) {
983 #define CHECKEDREAD(dst, cond, errmsg) \
984 tmp = svq3_get_ue_golomb(gb); \
986 av_log(s->avctx, AV_LOG_ERROR, errmsg); \
1044 for (i = 0; i < 4; i++) {
1057 static const uint8_t avgsplit[7] = { 0, 0, 1, 1, 1, 2, 2 };
1064 return sbsplit[-stride];
1066 return avgsplit[sbsplit[-1] + sbsplit[-stride] + sbsplit[-stride-1]];
1076 return block[-1].
ref & refmask;
1078 return block[-stride].
ref & refmask;
1081 pred = (block[-1].
ref & refmask) + (block[-stride].ref & refmask) + (block[-stride-1].
ref & refmask);
1082 return (pred >> 1) & refmask;
1089 memset(block->
u.
dc, 0,
sizeof(block->
u.
dc));
1091 if (x && !(block[-1].ref & 3)) {
1092 for (i = 0; i < 3; i++)
1093 block->
u.
dc[i] += block[-1].
u.
dc[i];
1097 if (y && !(block[-stride].ref & 3)) {
1098 for (i = 0; i < 3; i++)
1099 block->
u.
dc[i] += block[-stride].
u.
dc[i];
1103 if (x && y && !(block[-1-stride].ref & 3)) {
1104 for (i = 0; i < 3; i++)
1105 block->
u.
dc[i] += block[-1-stride].
u.
dc[i];
1110 for (i = 0; i < 3; i++)
1111 block->
u.
dc[i] = (block->
u.
dc[i]+1)>>1;
1112 }
else if (n == 3) {
1113 for (i = 0; i < 3; i++)
1121 int refmask = ref+1;
1125 if (x && (block[-1].ref & mask) == refmask)
1126 pred[n++] = block[-1].
u.
mv[ref];
1128 if (y && (block[-stride].ref & mask) == refmask)
1129 pred[n++] = block[-stride].
u.
mv[ref];
1131 if (x && y && (block[-stride-1].ref & mask) == refmask)
1132 pred[n++] = block[-stride-1].
u.
mv[ref];
1136 block->
u.
mv[ref][0] = 0;
1137 block->
u.
mv[ref][1] = 0;
1140 block->
u.
mv[ref][0] = pred[0][0];
1141 block->
u.
mv[ref][1] = pred[0][1];
1144 block->
u.
mv[ref][0] = (pred[0][0] + pred[1][0] + 1) >> 1;
1145 block->
u.
mv[ref][1] = (pred[0][1] + pred[1][1] + 1) >> 1;
1148 block->
u.
mv[ref][0] =
mid_pred(pred[0][0], pred[1][0], pred[2][0]);
1149 block->
u.
mv[ref][1] =
mid_pred(pred[0][1], pred[1][1], pred[2][1]);
1162 int m = (1<<ep) - (c[0]*x + c[1]*y);
1163 int mx = m * ((
A[0][0] * x +
A[0][1]*
y) + (1<<ez) * b[0]);
1164 int my = m * ((
A[1][0] * x +
A[1][1]*
y) + (1<<ez) * b[1]);
1166 block->
u.
mv[ref][0] = (mx + (1<<(ez+ep))) >> (ez+ep);
1167 block->
u.
mv[ref][1] = (my + (1<<(ez+ep))) >> (ez+ep);
1185 for (i = 0; i < 3; i++)
1196 if (block->
ref & (i+1)) {
1200 pred_mv(block, stride, x, y, i);
1215 for (x = 1; x <
size; x++)
1218 for (y = 1; y <
size; y++) {
1220 for (x = 0; x <
size; x++)
1247 for (y = 0; y < s->
sbheight; y++) {
1248 for (x = 0; x < s->
sbwidth; x++) {
1259 for (i = 0; i < s->
num_refs; i++) {
1263 for (i = 0; i < 3; i++)
1267 for (x = 0; x < s->
sbwidth; x++) {
1271 for (q = 0; q < blkcnt; q++)
1272 for (p = 0; p < blkcnt; p++) {
1273 int bx = 4 * x + p*step;
1274 int by = 4 * y + q*step;
1286 #define ROLLOFF(i) offset == 1 ? ((i) ? 5 : 3) : \
1287 (1 + (6*(i) + offset - 1) / (2*offset - 1))
1291 else if (i > blen-1 - 2*offset)
1297 int left,
int right,
int wy)
1300 for (x = 0; left && x < p->
xblen >> 1; x++)
1301 obmc_weight[x] = wy*8;
1302 for (; x < p->
xblen >> right; x++)
1304 for (; x < p->
xblen; x++)
1305 obmc_weight[x] = wy*8;
1306 for (; x < stride; x++)
1311 int left,
int right,
int top,
int bottom)
1314 for (y = 0; top && y < p->
yblen >> 1; y++) {
1316 obmc_weight += stride;
1318 for (; y < p->
yblen >> bottom; y++) {
1321 obmc_weight += stride;
1323 for (; y < p->
yblen; y++) {
1325 obmc_weight += stride;
1335 if (top || bottom || by == 1) {
1370 int x,
int y,
int ref,
int plane)
1374 int motion_x = block->
u.
mv[ref][0];
1375 int motion_y = block->
u.
mv[ref][1];
1376 int mx, my, i, epel, nplanes = 0;
1399 src[0] = ref_hpel[(my>>1)+(mx>>2)] + y*p->
stride + x;
1403 for (i = 0; i < 4; i++)
1404 src[i] = ref_hpel[i] + y*p->
stride + x;
1428 src[!mx] = src[2 + !!mx];
1430 }
else if (!(my&3)) {
1431 src[0] = src[(my>>1) ];
1432 src[1] = src[(my>>1)+1];
1453 for (i = 0; i < nplanes; i++) {
1461 return (nplanes>>1) + epel;
1465 uint8_t *obmc_weight,
int xblen,
int yblen)
1470 for (y = 0; y < yblen; y++) {
1471 for (x = 0; x < xblen; x += 2) {
1472 dst[x ] += dc * obmc_weight[x ];
1473 dst[x+1] += dc * obmc_weight[x+1];
1481 uint16_t *mctmp,
uint8_t *obmc_weight,
1482 int plane,
int dstx,
int dsty)
1488 switch (block->
ref&3) {
1494 idx =
mc_subpel(s, block, src, dstx, dsty, (block->
ref&3)-1, plane);
1501 idx =
mc_subpel(s, block, src, dstx, dsty, 0, plane);
1503 idx =
mc_subpel(s, block, src, dstx, dsty, 1, plane);
1524 for (x = 1; x < s->
blwidth-1; x++) {
1566 for (i = 1; i < 4; i++) {
1575 ref->
hpel[plane][3], ref->
hpel[plane][0],
1591 int y, i,
comp, dsty;
1595 for (comp = 0; comp < 3; comp++) {
1603 for (comp = 0; comp < 3; comp++) {
1608 for (i = 0; i < 4; i++)
1621 for (y = 0; y < p->
height; y += 16) {
1637 for (y = 0; y < s->
blheight; y++) {
1640 uint16_t *mctmp = s->
mctmp + y*rowheight;
1653 mc_row(s, blocks, mctmp, comp, dsty);
1672 int chroma_x_shift, chroma_y_shift;
1681 for (i = 0; f->
data[i]; i++) {
1699 int i, j, refnum, refdist;
1714 for (i = 0; i < s->
num_refs; i++) {
1743 if (retire != picnum) {
1803 #define DATA_UNIT_HEADER_SIZE 13
1811 int ret, i, parse_code = buf[4];
1833 }
else if (parse_code ==
pc_eos) {
1841 if (sscanf(buf+14,
"Schroedinger %d.%d.%d", ver, ver+1, ver+2) == 3)
1842 if (ver[0] == 1 && ver[1] == 0 && ver[2] <= 7)
1845 }
else if (parse_code & 0x8) {
1863 tmp = parse_code & 0x03;
1869 s->
is_arith = (parse_code & 0x48) == 0x08;
1870 s->
low_delay = (parse_code & 0x88) == 0x88;
1901 int buf_size = pkt->
size;
1902 int i, data_unit_size, buf_idx = 0;
1924 if (buf[buf_idx ] ==
'B' && buf[buf_idx+1] ==
'B' &&
1925 buf[buf_idx+2] ==
'C' && buf[buf_idx+3] ==
'D')
1932 data_unit_size =
AV_RB32(buf+buf_idx+5);
1933 if (buf_idx + data_unit_size > buf_size || !data_unit_size) {
1934 if(buf_idx + data_unit_size > buf_size)
1936 "Data unit with size %d is larger than input buffer, discarding\n",
1947 buf_idx += data_unit_size;
1972 if (delayed_frame) {