51 #define MAX_DWT_LEVELS 5
56 #define MAX_REFERENCE_FRAMES 8
58 #define MAX_FRAMES (MAX_REFERENCE_FRAMES + MAX_DELAY + 1)
60 #define MAX_BLOCKSIZE 32
65 #define DIRAC_REF_MASK_REF1 1
66 #define DIRAC_REF_MASK_REF2 2
67 #define DIRAC_REF_MASK_GLOBAL 4
73 #define DELAYED_PIC_REF 4
75 #define ff_emulated_edge_mc ff_emulated_edge_mc_8
77 #define CALC_PADDING(size, depth) \
78 (((size + (1 << depth) - 1) >> depth) << depth)
80 #define DIVRNDUP(a, b) (((a) + (b) - 1) / (b))
240 { { 5, 3, 3, 0}, { 0, 4, 4, 1}, { 0, 5, 5, 2}, { 0, 6, 6, 3} },
241 { { 4, 2, 2, 0}, { 0, 4, 4, 2}, { 0, 5, 5, 3}, { 0, 7, 7, 5} },
242 { { 5, 3, 3, 0}, { 0, 4, 4, 1}, { 0, 5, 5, 2}, { 0, 6, 6, 3} },
243 { { 8, 4, 4, 0}, { 0, 4, 4, 0}, { 0, 4, 4, 0}, { 0, 4, 4, 0} },
244 { { 8, 4, 4, 0}, { 0, 4, 4, 0}, { 0, 4, 4, 0}, { 0, 4, 4, 0} },
245 { { 0, 4, 4, 8}, { 0, 8, 8, 12}, { 0, 13, 13, 17}, { 0, 17, 17, 21} },
246 { { 3, 1, 1, 0}, { 0, 4, 4, 2}, { 0, 6, 6, 5}, { 0, 9, 9, 7} },
250 4, 5, 6, 7, 8, 10, 11, 13,
251 16, 19, 23, 27, 32, 38, 45, 54,
252 64, 76, 91, 108, 128, 152, 181, 215,
253 256, 304, 362, 431, 512, 609, 724, 861,
254 1024, 1218, 1448, 1722, 2048, 2435, 2896, 3444,
255 4096, 4871, 5793, 6889, 8192, 9742, 11585, 13777,
256 16384, 19484, 23170, 27554, 32768, 38968, 46341, 55109,
261 1, 2, 3, 4, 4, 5, 6, 7,
262 8, 10, 12, 14, 16, 19, 23, 27,
263 32, 38, 46, 54, 64, 76, 91, 108,
264 128, 152, 181, 216, 256, 305, 362, 431,
265 512, 609, 724, 861, 1024, 1218, 1448, 1722,
266 2048, 2436, 2897, 3445, 4096, 4871, 5793, 6889,
267 8192, 9742, 11585, 13777, 16384, 19484, 23171, 27555,
272 1, 2, 2, 3, 3, 4, 4, 5,
273 6, 7, 9, 10, 12, 14, 17, 20,
274 24, 29, 34, 41, 48, 57, 68, 81,
275 96, 114, 136, 162, 192, 228, 272, 323,
276 384, 457, 543, 646, 768, 913, 1086, 1292,
277 1536, 1827, 2172, 2583, 3072, 3653, 4344, 5166,
278 6144, 7307, 8689, 10333, 12288, 14613, 17378, 20666,
285 return ((x+1)*21845 + 10922) >> 16;
291 int i, remove_idx = -1;
293 for (i = 0; framelist[i]; i++)
294 if (framelist[i]->avframe->display_picture_number == picnum) {
295 remove_pic = framelist[i];
300 for (i = remove_idx; framelist[i]; i++)
301 framelist[i] = framelist[i+1];
309 for (i = 0; i < maxframes; i++)
311 framelist[i] =
frame;
321 int i, w, h, top_padding;
324 for (i = 0; i < 3; i++) {
372 for (j = 0; j < 3; j++)
373 for (k = 1; k < 4; k++)
380 for (i = 0; i < 3; i++) {
436 #define SIGN_CTX(x) (CTX_SIGN_ZERO + ((x) > 0) - ((x) < 0))
450 sign_pred = buf[-b->
stride];
454 pred_ctx += !(buf[-1] | buf[-b->
stride] | buf[-1-b->
stride]);
458 pred_ctx += !buf[-b->
stride];
463 coeff = (coeff * qfactor + qoffset + 2) >> 2;
465 coeff = (coeff ^ -sign) + sign;
476 coeff = (coeff * qfactor + qoffset + 2) >> 2;
478 coeff = (coeff ^ -sign) + sign;
489 int left,
int right,
int top,
int bottom,
490 int blockcnt_one,
int is_arith)
492 int x,
y, zero_block;
493 int qoffset, qfactor;
530 for (y = top; y < bottom; y++) {
531 for (x = left; x < right; x++) {
551 for (x = 1; x < b->
width; x++)
555 for (y = 1; y < b->
height; y++) {
556 buf[0] += buf[-b->
stride];
558 for (x = 1; x < b->
width; x++) {
572 int cb_x, cb_y, left, right, top, bottom;
577 int blockcnt_one = (cb_width + cb_height) == 2;
588 for (cb_y = 0; cb_y < cb_height; cb_y++) {
589 bottom = (b->
height * (cb_y+1)) / cb_height;
591 for (cb_x = 0; cb_x < cb_width; cb_x++) {
592 right = (b->
width * (cb_x+1)) / cb_width;
593 codeblock(s, b, &gb, &c, left, right, top, bottom, blockcnt_one, is_arith);
627 int level, num_bands = 0;
631 for (orientation = !!level; orientation < 4; orientation++) {
633 bands[num_bands++] =
b;
649 NULL, 4-!!level,
sizeof(
SubBand));
659 int slice_x,
int slice_y,
int bits_end,
678 for (y = top; y < bottom; y++) {
679 for (x = left; x < right; x++) {
722 for (orientation = !!level; orientation < 4; orientation++) {
725 &s->
plane[0].
band[level][orientation], NULL);
731 chroma_bits = 8*slice->
bytes - 7 - length_bits - luma_bits;
735 for (orientation = !!level; orientation < 4; orientation++) {
764 for (slice_y = 0; bufsize > 0 && slice_y < s->
lowdelay.
num_y; slice_y++)
765 for (slice_x = 0; bufsize > 0 && slice_x < s->
lowdelay.
num_x; slice_x++) {
769 slices[slice_num].
bytes = bytes;
770 slices[slice_num].
slice_x = slice_x;
771 slices[slice_num].
slice_y = slice_y;
789 int i, w, h,
level, orientation;
791 for (i = 0; i < 3; i++) {
803 for (orientation = !!level; orientation < 4; orientation++) {
842 static const uint8_t default_blen[] = { 4, 12, 16, 24 };
843 static const uint8_t default_bsep[] = { 4, 8, 12, 16 };
900 for (ref = 0; ref < s->
num_refs; ref++) {
958 #define CHECKEDREAD(dst, cond, errmsg) \
959 tmp = svq3_get_ue_golomb(gb); \
961 av_log(s->avctx, AV_LOG_ERROR, errmsg); \
1019 for (i = 0; i < 4; i++) {
1032 static const uint8_t avgsplit[7] = { 0, 0, 1, 1, 1, 2, 2 };
1039 return sbsplit[-stride];
1041 return avgsplit[sbsplit[-1] + sbsplit[-stride] + sbsplit[-stride-1]];
1051 return block[-1].
ref & refmask;
1053 return block[-stride].
ref & refmask;
1056 pred = (block[-1].
ref & refmask) + (block[-stride].ref & refmask) + (block[-stride-1].
ref & refmask);
1057 return (pred >> 1) & refmask;
1064 memset(block->
u.
dc, 0,
sizeof(block->
u.
dc));
1066 if (x && !(block[-1].ref & 3)) {
1067 for (i = 0; i < 3; i++)
1068 block->
u.
dc[i] += block[-1].
u.
dc[i];
1072 if (y && !(block[-stride].ref & 3)) {
1073 for (i = 0; i < 3; i++)
1074 block->
u.
dc[i] += block[-stride].
u.
dc[i];
1078 if (x && y && !(block[-1-stride].ref & 3)) {
1079 for (i = 0; i < 3; i++)
1080 block->
u.
dc[i] += block[-1-stride].
u.
dc[i];
1085 for (i = 0; i < 3; i++)
1086 block->
u.
dc[i] = (block->
u.
dc[i]+1)>>1;
1087 }
else if (n == 3) {
1088 for (i = 0; i < 3; i++)
1096 int refmask = ref+1;
1100 if (x && (block[-1].ref & mask) == refmask)
1101 pred[n++] = block[-1].
u.
mv[ref];
1103 if (y && (block[-stride].ref & mask) == refmask)
1104 pred[n++] = block[-stride].
u.
mv[ref];
1106 if (x && y && (block[-stride-1].ref & mask) == refmask)
1107 pred[n++] = block[-stride-1].
u.
mv[ref];
1111 block->
u.
mv[ref][0] = 0;
1112 block->
u.
mv[ref][1] = 0;
1115 block->
u.
mv[ref][0] = pred[0][0];
1116 block->
u.
mv[ref][1] = pred[0][1];
1119 block->
u.
mv[ref][0] = (pred[0][0] + pred[1][0] + 1) >> 1;
1120 block->
u.
mv[ref][1] = (pred[0][1] + pred[1][1] + 1) >> 1;
1123 block->
u.
mv[ref][0] =
mid_pred(pred[0][0], pred[1][0], pred[2][0]);
1124 block->
u.
mv[ref][1] =
mid_pred(pred[0][1], pred[1][1], pred[2][1]);
1137 int m = (1<<ep) - (c[0]*x + c[1]*y);
1138 int mx = m * ((
A[0][0] * x +
A[0][1]*
y) + (1<<ez) * b[0]);
1139 int my = m * ((
A[1][0] * x +
A[1][1]*
y) + (1<<ez) * b[1]);
1141 block->
u.
mv[ref][0] = (mx + (1<<(ez+ep))) >> (ez+ep);
1142 block->
u.
mv[ref][1] = (my + (1<<(ez+ep))) >> (ez+ep);
1160 for (i = 0; i < 3; i++)
1171 if (block->
ref & (i+1)) {
1175 pred_mv(block, stride, x, y, i);
1190 for (x = 1; x <
size; x++)
1193 for (y = 1; y <
size; y++) {
1195 for (x = 0; x <
size; x++)
1222 for (y = 0; y < s->
sbheight; y++) {
1223 for (x = 0; x < s->
sbwidth; x++) {
1234 for (i = 0; i < s->
num_refs; i++) {
1238 for (i = 0; i < 3; i++)
1242 for (x = 0; x < s->
sbwidth; x++) {
1246 for (q = 0; q < blkcnt; q++)
1247 for (p = 0; p < blkcnt; p++) {
1248 int bx = 4 * x + p*step;
1249 int by = 4 * y + q*step;
1261 #define ROLLOFF(i) offset == 1 ? ((i) ? 5 : 3) : \
1262 (1 + (6*(i) + offset - 1) / (2*offset - 1))
1266 else if (i > blen-1 - 2*offset)
1272 int left,
int right,
int wy)
1275 for (x = 0; left && x < p->
xblen >> 1; x++)
1276 obmc_weight[x] = wy*8;
1277 for (; x < p->
xblen >> right; x++)
1279 for (; x < p->
xblen; x++)
1280 obmc_weight[x] = wy*8;
1281 for (; x < stride; x++)
1286 int left,
int right,
int top,
int bottom)
1289 for (y = 0; top && y < p->
yblen >> 1; y++) {
1291 obmc_weight += stride;
1293 for (; y < p->
yblen >> bottom; y++) {
1296 obmc_weight += stride;
1298 for (; y < p->
yblen; y++) {
1300 obmc_weight += stride;
1310 if (top || bottom || by == 1) {
1345 int x,
int y,
int ref,
int plane)
1349 int motion_x = block->
u.
mv[ref][0];
1350 int motion_y = block->
u.
mv[ref][1];
1351 int mx, my, i, epel, nplanes = 0;
1374 src[0] = ref_hpel[(my>>1)+(mx>>2)] + y*p->
stride + x;
1378 for (i = 0; i < 4; i++)
1379 src[i] = ref_hpel[i] + y*p->
stride + x;
1403 src[!mx] = src[2 + !!mx];
1405 }
else if (!(my&3)) {
1406 src[0] = src[(my>>1) ];
1407 src[1] = src[(my>>1)+1];
1428 for (i = 0; i < nplanes; i++) {
1436 return (nplanes>>1) + epel;
1440 uint8_t *obmc_weight,
int xblen,
int yblen)
1445 for (y = 0; y < yblen; y++) {
1446 for (x = 0; x < xblen; x += 2) {
1447 dst[x ] += dc * obmc_weight[x ];
1448 dst[x+1] += dc * obmc_weight[x+1];
1456 uint16_t *mctmp,
uint8_t *obmc_weight,
1457 int plane,
int dstx,
int dsty)
1463 switch (block->
ref&3) {
1469 idx =
mc_subpel(s, block, src, dstx, dsty, (block->
ref&3)-1, plane);
1476 idx =
mc_subpel(s, block, src, dstx, dsty, 0, plane);
1478 idx =
mc_subpel(s, block, src, dstx, dsty, 1, plane);
1499 for (x = 1; x < s->
blwidth-1; x++) {
1541 for (i = 1; i < 4; i++) {
1550 ref->
hpel[plane][3], ref->
hpel[plane][0],
1566 int y, i,
comp, dsty;
1570 for (comp = 0; comp < 3; comp++) {
1578 for (comp = 0; comp < 3; comp++) {
1583 for (i = 0; i < 4; i++)
1596 for (y = 0; y < p->
height; y += 16) {
1612 for (y = 0; y < s->
blheight; y++) {
1615 uint16_t *mctmp = s->
mctmp + y*rowheight;
1628 mc_row(s, blocks, mctmp, comp, dsty);
1647 int chroma_x_shift, chroma_y_shift;
1656 for (i = 0; f->
data[i]; i++) {
1674 int i, j, refnum, refdist;
1689 for (i = 0; i < s->
num_refs; i++) {
1718 if (retire != picnum) {
1778 #define DATA_UNIT_HEADER_SIZE 13
1786 int ret, i, parse_code = buf[4];
1808 }
else if (parse_code ==
pc_eos) {
1816 if (sscanf(buf+14,
"Schroedinger %d.%d.%d", ver, ver+1, ver+2) == 3)
1817 if (ver[0] == 1 && ver[1] == 0 && ver[2] <= 7)
1820 }
else if (parse_code & 0x8) {
1838 tmp = parse_code & 0x03;
1844 s->
is_arith = (parse_code & 0x48) == 0x08;
1845 s->
low_delay = (parse_code & 0x88) == 0x88;
1873 int buf_size = pkt->
size;
1874 int i, data_unit_size, buf_idx = 0;
1896 if (buf[buf_idx ] ==
'B' && buf[buf_idx+1] ==
'B' &&
1897 buf[buf_idx+2] ==
'C' && buf[buf_idx+3] ==
'D')
1904 data_unit_size =
AV_RB32(buf+buf_idx+5);
1905 if (buf_idx + data_unit_size > buf_size || !data_unit_size) {
1906 if(buf_idx + data_unit_size > buf_size)
1908 "Data unit with size %d is larger than input buffer, discarding\n",
1919 buf_idx += data_unit_size;
1944 if (delayed_frame) {