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++) {
441 #define SIGN_CTX(x) (CTX_SIGN_ZERO + ((x) > 0) - ((x) < 0))
455 sign_pred = buf[-b->
stride];
459 pred_ctx += !(buf[-1] | buf[-b->
stride] | buf[-1-b->
stride]);
463 pred_ctx += !buf[-b->
stride];
468 coeff = (coeff * qfactor + qoffset + 2) >> 2;
470 coeff = (coeff ^ -sign) + sign;
481 coeff = (coeff * qfactor + qoffset + 2) >> 2;
483 coeff = (coeff ^ -sign) + sign;
494 int left,
int right,
int top,
int bottom,
495 int blockcnt_one,
int is_arith)
497 int x,
y, zero_block;
498 int qoffset, qfactor;
535 for (y = top; y < bottom; y++) {
536 for (x = left; x < right; x++) {
556 for (x = 1; x < b->
width; x++)
560 for (y = 1; y < b->
height; y++) {
561 buf[0] += buf[-b->
stride];
563 for (x = 1; x < b->
width; x++) {
577 int cb_x, cb_y, left, right, top, bottom;
582 int blockcnt_one = (cb_width + cb_height) == 2;
593 for (cb_y = 0; cb_y < cb_height; cb_y++) {
594 bottom = (b->
height * (cb_y+1)) / cb_height;
596 for (cb_x = 0; cb_x < cb_width; cb_x++) {
597 right = (b->
width * (cb_x+1)) / cb_width;
598 codeblock(s, b, &gb, &c, left, right, top, bottom, blockcnt_one, is_arith);
632 int level, num_bands = 0;
636 for (orientation = !!level; orientation < 4; orientation++) {
638 bands[num_bands++] =
b;
654 NULL, 4-!!level,
sizeof(
SubBand));
664 int slice_x,
int slice_y,
int bits_end,
683 for (y = top; y < bottom; y++) {
684 for (x = left; x < right; x++) {
727 for (orientation = !!level; orientation < 4; orientation++) {
730 &s->
plane[0].
band[level][orientation], NULL);
736 chroma_bits = 8*slice->
bytes - 7 - length_bits - luma_bits;
740 for (orientation = !!level; orientation < 4; orientation++) {
769 for (slice_y = 0; bufsize > 0 && slice_y < s->
lowdelay.
num_y; slice_y++)
770 for (slice_x = 0; bufsize > 0 && slice_x < s->
lowdelay.
num_x; slice_x++) {
774 slices[slice_num].
bytes = bytes;
775 slices[slice_num].
slice_x = slice_x;
776 slices[slice_num].
slice_y = slice_y;
794 int i, w, h,
level, orientation;
796 for (i = 0; i < 3; i++) {
808 for (orientation = !!level; orientation < 4; orientation++) {
847 static const uint8_t default_blen[] = { 4, 12, 16, 24 };
848 static const uint8_t default_bsep[] = { 4, 8, 12, 16 };
905 for (ref = 0; ref < s->
num_refs; ref++) {
963 #define CHECKEDREAD(dst, cond, errmsg) \
964 tmp = svq3_get_ue_golomb(gb); \
966 av_log(s->avctx, AV_LOG_ERROR, errmsg); \
1024 for (i = 0; i < 4; i++) {
1037 static const uint8_t avgsplit[7] = { 0, 0, 1, 1, 1, 2, 2 };
1046 return avgsplit[sbsplit[-1] + sbsplit[-
stride] + sbsplit[-stride-1]];
1056 return block[-1].
ref & refmask;
1061 pred = (block[-1].
ref & refmask) + (block[-stride].ref & refmask) + (block[-stride-1].
ref & refmask);
1062 return (pred >> 1) & refmask;
1069 memset(block->
u.
dc, 0,
sizeof(block->
u.
dc));
1071 if (x && !(block[-1].ref & 3)) {
1072 for (i = 0; i < 3; i++)
1073 block->
u.
dc[i] += block[-1].
u.
dc[i];
1077 if (y && !(block[-stride].ref & 3)) {
1078 for (i = 0; i < 3; i++)
1079 block->
u.
dc[i] += block[-stride].
u.
dc[i];
1083 if (x && y && !(block[-1-stride].ref & 3)) {
1084 for (i = 0; i < 3; i++)
1085 block->
u.
dc[i] += block[-1-stride].
u.
dc[i];
1090 for (i = 0; i < 3; i++)
1091 block->
u.
dc[i] = (block->
u.
dc[i]+1)>>1;
1092 }
else if (n == 3) {
1093 for (i = 0; i < 3; i++)
1101 int refmask = ref+1;
1105 if (x && (block[-1].ref & mask) == refmask)
1106 pred[n++] = block[-1].
u.
mv[ref];
1108 if (y && (block[-stride].ref & mask) == refmask)
1111 if (x && y && (block[-stride-1].ref & mask) == refmask)
1112 pred[n++] = block[-stride-1].
u.
mv[ref];
1116 block->
u.
mv[ref][0] = 0;
1117 block->
u.
mv[ref][1] = 0;
1120 block->
u.
mv[ref][0] = pred[0][0];
1121 block->
u.
mv[ref][1] = pred[0][1];
1124 block->
u.
mv[ref][0] = (pred[0][0] + pred[1][0] + 1) >> 1;
1125 block->
u.
mv[ref][1] = (pred[0][1] + pred[1][1] + 1) >> 1;
1128 block->
u.
mv[ref][0] =
mid_pred(pred[0][0], pred[1][0], pred[2][0]);
1129 block->
u.
mv[ref][1] =
mid_pred(pred[0][1], pred[1][1], pred[2][1]);
1142 int m = (1<<ep) - (c[0]*x + c[1]*y);
1143 int mx = m * ((
A[0][0] * x +
A[0][1]*
y) + (1<<ez) * b[0]);
1144 int my = m * ((
A[1][0] * x +
A[1][1]*
y) + (1<<ez) * b[1]);
1146 block->
u.
mv[ref][0] = (mx + (1<<(ez+ep))) >> (ez+ep);
1147 block->
u.
mv[ref][1] = (my + (1<<(ez+ep))) >> (ez+ep);
1165 for (i = 0; i < 3; i++)
1176 if (block->
ref & (i+1)) {
1180 pred_mv(block, stride, x, y, i);
1195 for (x = 1; x <
size; x++)
1198 for (y = 1; y <
size; y++) {
1200 for (x = 0; x <
size; x++)
1227 for (y = 0; y < s->
sbheight; y++) {
1228 for (x = 0; x < s->
sbwidth; x++) {
1239 for (i = 0; i < s->
num_refs; i++) {
1243 for (i = 0; i < 3; i++)
1247 for (x = 0; x < s->
sbwidth; x++) {
1251 for (q = 0; q < blkcnt; q++)
1252 for (p = 0; p < blkcnt; p++) {
1253 int bx = 4 * x + p*step;
1254 int by = 4 * y + q*step;
1266 #define ROLLOFF(i) offset == 1 ? ((i) ? 5 : 3) : \
1267 (1 + (6*(i) + offset - 1) / (2*offset - 1))
1271 else if (i > blen-1 - 2*offset)
1277 int left,
int right,
int wy)
1280 for (x = 0; left && x < p->
xblen >> 1; x++)
1281 obmc_weight[x] = wy*8;
1282 for (; x < p->
xblen >> right; x++)
1284 for (; x < p->
xblen; x++)
1285 obmc_weight[x] = wy*8;
1291 int left,
int right,
int top,
int bottom)
1294 for (y = 0; top && y < p->
yblen >> 1; y++) {
1298 for (; y < p->
yblen >> bottom; y++) {
1303 for (; y < p->
yblen; y++) {
1315 if (top || bottom || by == 1) {
1350 int x,
int y,
int ref,
int plane)
1354 int motion_x = block->
u.
mv[ref][0];
1355 int motion_y = block->
u.
mv[ref][1];
1356 int mx, my, i, epel, nplanes = 0;
1379 src[0] = ref_hpel[(my>>1)+(mx>>2)] + y*p->
stride + x;
1383 for (i = 0; i < 4; i++)
1384 src[i] = ref_hpel[i] + y*p->
stride + x;
1408 src[!mx] = src[2 + !!mx];
1410 }
else if (!(my&3)) {
1411 src[0] = src[(my>>1) ];
1412 src[1] = src[(my>>1)+1];
1433 for (i = 0; i < nplanes; i++) {
1441 return (nplanes>>1) + epel;
1445 uint8_t *obmc_weight,
int xblen,
int yblen)
1450 for (y = 0; y < yblen; y++) {
1451 for (x = 0; x < xblen; x += 2) {
1452 dst[x ] += dc * obmc_weight[x ];
1453 dst[x+1] += dc * obmc_weight[x+1];
1461 uint16_t *mctmp,
uint8_t *obmc_weight,
1462 int plane,
int dstx,
int dsty)
1468 switch (block->
ref&3) {
1474 idx =
mc_subpel(s, block, src, dstx, dsty, (block->
ref&3)-1, plane);
1481 idx =
mc_subpel(s, block, src, dstx, dsty, 0, plane);
1483 idx =
mc_subpel(s, block, src, dstx, dsty, 1, plane);
1504 for (x = 1; x < s->
blwidth-1; x++) {
1546 for (i = 1; i < 4; i++) {
1555 ref->
hpel[plane][3], ref->
hpel[plane][0],
1571 int y, i,
comp, dsty;
1575 for (comp = 0; comp < 3; comp++) {
1583 for (comp = 0; comp < 3; comp++) {
1588 for (i = 0; i < 4; i++)
1601 for (y = 0; y < p->
height; y += 16) {
1617 for (y = 0; y < s->
blheight; y++) {
1620 uint16_t *mctmp = s->
mctmp + y*rowheight;
1633 mc_row(s, blocks, mctmp, comp, dsty);
1656 int i, j, refnum, refdist;
1671 for (i = 0; i < s->
num_refs; i++) {
1700 if (retire != picnum) {
1760 #define DATA_UNIT_HEADER_SIZE 13
1768 int ret, i, parse_code = buf[4];
1790 }
else if (parse_code ==
pc_eos) {
1798 if (sscanf(buf+14,
"Schroedinger %d.%d.%d", ver, ver+1, ver+2) == 3)
1799 if (ver[0] == 1 && ver[1] == 0 && ver[2] <= 7)
1802 }
else if (parse_code & 0x8) {
1820 tmp = parse_code & 0x03;
1826 s->
is_arith = (parse_code & 0x48) == 0x08;
1827 s->
low_delay = (parse_code & 0x88) == 0x88;
1855 int buf_size = pkt->
size;
1856 int i, data_unit_size, buf_idx = 0;
1878 if (buf[buf_idx ] ==
'B' && buf[buf_idx+1] ==
'B' &&
1879 buf[buf_idx+2] ==
'C' && buf[buf_idx+3] ==
'D')
1886 data_unit_size =
AV_RB32(buf+buf_idx+5);
1887 if (buf_idx + data_unit_size > buf_size || !data_unit_size) {
1888 if(buf_idx + data_unit_size > buf_size)
1890 "Data unit with size %d is larger than input buffer, discarding\n",
1901 buf_idx += data_unit_size;
1926 if (delayed_frame) {