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++) {
424 #define SIGN_CTX(x) (CTX_SIGN_ZERO + ((x) > 0) - ((x) < 0))
438 sign_pred = buf[-b->
stride];
442 pred_ctx += !(buf[-1] | buf[-b->
stride] | buf[-1-b->
stride]);
446 pred_ctx += !buf[-b->
stride];
451 coeff = (coeff * qfactor + qoffset + 2) >> 2;
453 coeff = (coeff ^ -sign) + sign;
464 coeff = (coeff * qfactor + qoffset + 2) >> 2;
466 coeff = (coeff ^ -sign) + sign;
477 int left,
int right,
int top,
int bottom,
478 int blockcnt_one,
int is_arith)
480 int x,
y, zero_block;
481 int qoffset, qfactor;
518 for (y = top; y < bottom; y++) {
519 for (x = left; x < right; x++) {
539 for (x = 1; x < b->
width; x++)
543 for (y = 1; y < b->
height; y++) {
544 buf[0] += buf[-b->
stride];
546 for (x = 1; x < b->
width; x++) {
560 int cb_x, cb_y, left, right, top, bottom;
565 int blockcnt_one = (cb_width + cb_height) == 2;
576 for (cb_y = 0; cb_y < cb_height; cb_y++) {
577 bottom = (b->
height * (cb_y+1)) / cb_height;
579 for (cb_x = 0; cb_x < cb_width; cb_x++) {
580 right = (b->
width * (cb_x+1)) / cb_width;
581 codeblock(s, b, &gb, &c, left, right, top, bottom, blockcnt_one, is_arith);
615 int level, num_bands = 0;
619 for (orientation = !!level; orientation < 4; orientation++) {
621 bands[num_bands++] =
b;
637 NULL, 4-!!level,
sizeof(
SubBand));
647 int slice_x,
int slice_y,
int bits_end,
666 for (y = top; y < bottom; y++) {
667 for (x = left; x < right; x++) {
710 for (orientation = !!level; orientation < 4; orientation++) {
713 &s->
plane[0].
band[level][orientation], NULL);
719 chroma_bits = 8*slice->
bytes - 7 - length_bits - luma_bits;
723 for (orientation = !!level; orientation < 4; orientation++) {
752 for (slice_y = 0; bufsize > 0 && slice_y < s->
lowdelay.
num_y; slice_y++)
753 for (slice_x = 0; bufsize > 0 && slice_x < s->
lowdelay.
num_x; slice_x++) {
757 slices[slice_num].
bytes = bytes;
758 slices[slice_num].
slice_x = slice_x;
759 slices[slice_num].
slice_y = slice_y;
777 int i, w, h,
level, orientation;
779 for (i = 0; i < 3; i++) {
791 for (orientation = !!level; orientation < 4; orientation++) {
830 static const uint8_t default_blen[] = { 4, 12, 16, 24 };
831 static const uint8_t default_bsep[] = { 4, 8, 12, 16 };
888 for (ref = 0; ref < s->
num_refs; ref++) {
946 #define CHECKEDREAD(dst, cond, errmsg) \
947 tmp = svq3_get_ue_golomb(gb); \
949 av_log(s->avctx, AV_LOG_ERROR, errmsg); \
1007 for (i = 0; i < 4; i++) {
1020 static const uint8_t avgsplit[7] = { 0, 0, 1, 1, 1, 2, 2 };
1029 return avgsplit[sbsplit[-1] + sbsplit[-
stride] + sbsplit[-stride-1]];
1039 return block[-1].
ref & refmask;
1044 pred = (block[-1].
ref & refmask) + (block[-stride].ref & refmask) + (block[-stride-1].
ref & refmask);
1045 return (pred >> 1) & refmask;
1052 memset(block->
u.
dc, 0,
sizeof(block->
u.
dc));
1054 if (x && !(block[-1].ref & 3)) {
1055 for (i = 0; i < 3; i++)
1056 block->
u.
dc[i] += block[-1].
u.
dc[i];
1060 if (y && !(block[-stride].ref & 3)) {
1061 for (i = 0; i < 3; i++)
1062 block->
u.
dc[i] += block[-stride].
u.
dc[i];
1066 if (x && y && !(block[-1-stride].ref & 3)) {
1067 for (i = 0; i < 3; i++)
1068 block->
u.
dc[i] += block[-1-stride].
u.
dc[i];
1073 for (i = 0; i < 3; i++)
1074 block->
u.
dc[i] = (block->
u.
dc[i]+1)>>1;
1075 }
else if (n == 3) {
1076 for (i = 0; i < 3; i++)
1084 int refmask = ref+1;
1088 if (x && (block[-1].ref & mask) == refmask)
1089 pred[n++] = block[-1].
u.
mv[ref];
1091 if (y && (block[-stride].ref & mask) == refmask)
1094 if (x && y && (block[-stride-1].ref & mask) == refmask)
1095 pred[n++] = block[-stride-1].
u.
mv[ref];
1099 block->
u.
mv[ref][0] = 0;
1100 block->
u.
mv[ref][1] = 0;
1103 block->
u.
mv[ref][0] = pred[0][0];
1104 block->
u.
mv[ref][1] = pred[0][1];
1107 block->
u.
mv[ref][0] = (pred[0][0] + pred[1][0] + 1) >> 1;
1108 block->
u.
mv[ref][1] = (pred[0][1] + pred[1][1] + 1) >> 1;
1111 block->
u.
mv[ref][0] =
mid_pred(pred[0][0], pred[1][0], pred[2][0]);
1112 block->
u.
mv[ref][1] =
mid_pred(pred[0][1], pred[1][1], pred[2][1]);
1125 int m = (1<<ep) - (c[0]*x + c[1]*y);
1126 int mx = m * ((
A[0][0] * x +
A[0][1]*
y) + (1<<ez) * b[0]);
1127 int my = m * ((
A[1][0] * x +
A[1][1]*
y) + (1<<ez) * b[1]);
1129 block->
u.
mv[ref][0] = (mx + (1<<(ez+ep))) >> (ez+ep);
1130 block->
u.
mv[ref][1] = (my + (1<<(ez+ep))) >> (ez+ep);
1148 for (i = 0; i < 3; i++)
1159 if (block->
ref & (i+1)) {
1163 pred_mv(block, stride, x, y, i);
1178 for (x = 1; x <
size; x++)
1181 for (y = 1; y <
size; y++) {
1183 for (x = 0; x <
size; x++)
1210 for (y = 0; y < s->
sbheight; y++) {
1211 for (x = 0; x < s->
sbwidth; x++) {
1222 for (i = 0; i < s->
num_refs; i++) {
1226 for (i = 0; i < 3; i++)
1230 for (x = 0; x < s->
sbwidth; x++) {
1234 for (q = 0; q < blkcnt; q++)
1235 for (p = 0; p < blkcnt; p++) {
1236 int bx = 4 * x + p*step;
1237 int by = 4 * y + q*step;
1249 #define ROLLOFF(i) offset == 1 ? ((i) ? 5 : 3) : \
1250 (1 + (6*(i) + offset - 1) / (2*offset - 1))
1254 else if (i > blen-1 - 2*offset)
1260 int left,
int right,
int wy)
1263 for (x = 0; left && x < p->
xblen >> 1; x++)
1264 obmc_weight[x] = wy*8;
1265 for (; x < p->
xblen >> right; x++)
1267 for (; x < p->
xblen; x++)
1268 obmc_weight[x] = wy*8;
1274 int left,
int right,
int top,
int bottom)
1277 for (y = 0; top && y < p->
yblen >> 1; y++) {
1281 for (; y < p->
yblen >> bottom; y++) {
1286 for (; y < p->
yblen; y++) {
1298 if (top || bottom || by == 1) {
1333 int x,
int y,
int ref,
int plane)
1337 int motion_x = block->
u.
mv[ref][0];
1338 int motion_y = block->
u.
mv[ref][1];
1339 int mx, my, i, epel, nplanes = 0;
1362 src[0] = ref_hpel[(my>>1)+(mx>>2)] + y*p->
stride + x;
1366 for (i = 0; i < 4; i++)
1367 src[i] = ref_hpel[i] + y*p->
stride + x;
1391 src[!mx] = src[2 + !!mx];
1393 }
else if (!(my&3)) {
1394 src[0] = src[(my>>1) ];
1395 src[1] = src[(my>>1)+1];
1416 for (i = 0; i < nplanes; i++) {
1423 return (nplanes>>1) + epel;
1427 uint8_t *obmc_weight,
int xblen,
int yblen)
1432 for (y = 0; y < yblen; y++) {
1433 for (x = 0; x < xblen; x += 2) {
1434 dst[x ] += dc * obmc_weight[x ];
1435 dst[x+1] += dc * obmc_weight[x+1];
1443 uint16_t *mctmp,
uint8_t *obmc_weight,
1444 int plane,
int dstx,
int dsty)
1450 switch (block->
ref&3) {
1456 idx =
mc_subpel(s, block, src, dstx, dsty, (block->
ref&3)-1, plane);
1463 idx =
mc_subpel(s, block, src, dstx, dsty, 0, plane);
1465 idx =
mc_subpel(s, block, src, dstx, dsty, 1, plane);
1486 for (x = 1; x < s->
blwidth-1; x++) {
1528 for (i = 1; i < 4; i++) {
1537 ref->
hpel[plane][3], ref->
hpel[plane][0],
1553 int y, i,
comp, dsty;
1557 for (comp = 0; comp < 3; comp++) {
1565 for (comp = 0; comp < 3; comp++) {
1570 for (i = 0; i < 4; i++)
1583 for (y = 0; y < p->
height; y += 16) {
1599 for (y = 0; y < s->
blheight; y++) {
1602 uint16_t *mctmp = s->
mctmp + y*rowheight;
1615 mc_row(s, blocks, mctmp, comp, dsty);
1638 int i, j, refnum, refdist;
1653 for (i = 0; i < s->
num_refs; i++) {
1682 if (retire != picnum) {
1742 #define DATA_UNIT_HEADER_SIZE 13
1750 int ret, i, parse_code = buf[4];
1772 }
else if (parse_code ==
pc_eos) {
1780 if (sscanf(buf+14,
"Schroedinger %d.%d.%d", ver, ver+1, ver+2) == 3)
1781 if (ver[0] == 1 && ver[1] == 0 && ver[2] <= 7)
1784 }
else if (parse_code & 0x8) {
1802 tmp = parse_code & 0x03;
1808 s->
is_arith = (parse_code & 0x48) == 0x08;
1809 s->
low_delay = (parse_code & 0x88) == 0x88;
1837 int buf_size = pkt->
size;
1838 int i, data_unit_size, buf_idx = 0;
1860 if (buf[buf_idx ] ==
'B' && buf[buf_idx+1] ==
'B' &&
1861 buf[buf_idx+2] ==
'C' && buf[buf_idx+3] ==
'D')
1868 data_unit_size =
AV_RB32(buf+buf_idx+5);
1869 if (buf_idx + data_unit_size > buf_size || !data_unit_size) {
1870 if(buf_idx + data_unit_size > buf_size)
1872 "Data unit with size %d is larger than input buffer, discarding\n",
1883 buf_idx += data_unit_size;
1908 if (delayed_frame) {