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 CALC_PADDING(size, depth) \
77 (((size + (1 << depth) - 1) >> depth) << depth)
79 #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++) {
462 #define SIGN_CTX(x) (CTX_SIGN_ZERO + ((x) > 0) - ((x) < 0))
476 sign_pred = buf[-b->
stride];
480 pred_ctx += !(buf[-1] | buf[-b->
stride] | buf[-1-b->
stride]);
484 pred_ctx += !buf[-b->
stride];
489 coeff = (coeff * qfactor + qoffset + 2) >> 2;
491 coeff = (coeff ^ -sign) + sign;
502 coeff = (coeff * qfactor + qoffset + 2) >> 2;
504 coeff = (coeff ^ -sign) + sign;
515 int left,
int right,
int top,
int bottom,
516 int blockcnt_one,
int is_arith)
518 int x,
y, zero_block;
519 int qoffset, qfactor;
556 for (y = top; y < bottom; y++) {
557 for (x = left; x < right; x++) {
577 for (x = 1; x < b->
width; x++)
581 for (y = 1; y < b->
height; y++) {
582 buf[0] += buf[-b->
stride];
584 for (x = 1; x < b->
width; x++) {
598 int cb_x, cb_y, left, right, top, bottom;
603 int blockcnt_one = (cb_width + cb_height) == 2;
614 for (cb_y = 0; cb_y < cb_height; cb_y++) {
615 bottom = (b->
height * (cb_y+1LL)) / cb_height;
617 for (cb_x = 0; cb_x < cb_width; cb_x++) {
618 right = (b->
width * (cb_x+1LL)) / cb_width;
619 codeblock(s, b, &gb, &c, left, right, top, bottom, blockcnt_one, is_arith);
653 int level, num_bands = 0;
657 for (orientation = !!level; orientation < 4; orientation++) {
659 bands[num_bands++] =
b;
685 int slice_x,
int slice_y,
int bits_end,
704 for (y = top; y < bottom; y++) {
705 for (x = left; x < right; x++) {
748 for (orientation = !!level; orientation < 4; orientation++) {
757 chroma_bits = 8*slice->
bytes - 7 - length_bits - luma_bits;
761 for (orientation = !!level; orientation < 4; orientation++) {
792 for (slice_y = 0; bufsize > 0 && slice_y < s->
lowdelay.
num_y; slice_y++)
793 for (slice_x = 0; bufsize > 0 && slice_x < s->
lowdelay.
num_x; slice_x++) {
797 slices[slice_num].
bytes = bytes;
798 slices[slice_num].
slice_x = slice_x;
799 slices[slice_num].
slice_y = slice_y;
818 int i, w, h,
level, orientation;
820 for (i = 0; i < 3; i++) {
832 for (orientation = !!level; orientation < 4; orientation++) {
871 static const uint8_t default_blen[] = { 4, 12, 16, 24 };
872 static const uint8_t default_bsep[] = { 4, 8, 12, 16 };
929 for (ref = 0; ref < s->
num_refs; ref++) {
987 #define CHECKEDREAD(dst, cond, errmsg) \
988 tmp = svq3_get_ue_golomb(gb); \
990 av_log(s->avctx, AV_LOG_ERROR, errmsg); \
1048 for (i = 0; i < 4; i++) {
1061 static const uint8_t avgsplit[7] = { 0, 0, 1, 1, 1, 2, 2 };
1068 return sbsplit[-stride];
1070 return avgsplit[sbsplit[-1] + sbsplit[-stride] + sbsplit[-stride-1]];
1080 return block[-1].
ref & refmask;
1082 return block[-stride].
ref & refmask;
1085 pred = (block[-1].
ref & refmask) + (block[-stride].ref & refmask) + (block[-stride-1].
ref & refmask);
1086 return (pred >> 1) & refmask;
1093 memset(block->
u.
dc, 0,
sizeof(block->
u.
dc));
1095 if (x && !(block[-1].ref & 3)) {
1096 for (i = 0; i < 3; i++)
1097 block->
u.
dc[i] += block[-1].
u.
dc[i];
1101 if (y && !(block[-stride].ref & 3)) {
1102 for (i = 0; i < 3; i++)
1103 block->
u.
dc[i] += block[-stride].
u.
dc[i];
1107 if (x && y && !(block[-1-stride].ref & 3)) {
1108 for (i = 0; i < 3; i++)
1109 block->
u.
dc[i] += block[-1-stride].
u.
dc[i];
1114 for (i = 0; i < 3; i++)
1115 block->
u.
dc[i] = (block->
u.
dc[i]+1)>>1;
1116 }
else if (n == 3) {
1117 for (i = 0; i < 3; i++)
1125 int refmask = ref+1;
1129 if (x && (block[-1].ref & mask) == refmask)
1130 pred[n++] = block[-1].
u.
mv[ref];
1132 if (y && (block[-stride].ref & mask) == refmask)
1133 pred[n++] = block[-stride].
u.
mv[ref];
1135 if (x && y && (block[-stride-1].ref & mask) == refmask)
1136 pred[n++] = block[-stride-1].
u.
mv[ref];
1140 block->
u.
mv[ref][0] = 0;
1141 block->
u.
mv[ref][1] = 0;
1144 block->
u.
mv[ref][0] = pred[0][0];
1145 block->
u.
mv[ref][1] = pred[0][1];
1148 block->
u.
mv[ref][0] = (pred[0][0] + pred[1][0] + 1) >> 1;
1149 block->
u.
mv[ref][1] = (pred[0][1] + pred[1][1] + 1) >> 1;
1152 block->
u.
mv[ref][0] =
mid_pred(pred[0][0], pred[1][0], pred[2][0]);
1153 block->
u.
mv[ref][1] =
mid_pred(pred[0][1], pred[1][1], pred[2][1]);
1166 int m = (1<<ep) - (c[0]*x + c[1]*y);
1167 int mx = m * ((
A[0][0] * x +
A[0][1]*
y) + (1<<ez) * b[0]);
1168 int my = m * ((
A[1][0] * x +
A[1][1]*
y) + (1<<ez) * b[1]);
1170 block->
u.
mv[ref][0] = (mx + (1<<(ez+ep))) >> (ez+ep);
1171 block->
u.
mv[ref][1] = (my + (1<<(ez+ep))) >> (ez+ep);
1189 for (i = 0; i < 3; i++)
1200 if (block->
ref & (i+1)) {
1204 pred_mv(block, stride, x, y, i);
1219 for (x = 1; x <
size; x++)
1222 for (y = 1; y <
size; y++) {
1224 for (x = 0; x <
size; x++)
1251 for (y = 0; y < s->
sbheight; y++) {
1252 for (x = 0; x < s->
sbwidth; x++) {
1263 for (i = 0; i < s->
num_refs; i++) {
1267 for (i = 0; i < 3; i++)
1271 for (x = 0; x < s->
sbwidth; x++) {
1275 for (q = 0; q < blkcnt; q++)
1276 for (p = 0; p < blkcnt; p++) {
1277 int bx = 4 * x + p*step;
1278 int by = 4 * y + q*step;
1290 #define ROLLOFF(i) offset == 1 ? ((i) ? 5 : 3) : \
1291 (1 + (6*(i) + offset - 1) / (2*offset - 1))
1295 else if (i > blen-1 - 2*offset)
1301 int left,
int right,
int wy)
1304 for (x = 0; left && x < p->
xblen >> 1; x++)
1305 obmc_weight[x] = wy*8;
1306 for (; x < p->
xblen >> right; x++)
1308 for (; x < p->
xblen; x++)
1309 obmc_weight[x] = wy*8;
1310 for (; x < stride; x++)
1315 int left,
int right,
int top,
int bottom)
1318 for (y = 0; top && y < p->
yblen >> 1; y++) {
1320 obmc_weight += stride;
1322 for (; y < p->
yblen >> bottom; y++) {
1325 obmc_weight += stride;
1327 for (; y < p->
yblen; y++) {
1329 obmc_weight += stride;
1339 if (top || bottom || by == 1) {
1374 int x,
int y,
int ref,
int plane)
1378 int motion_x = block->
u.
mv[ref][0];
1379 int motion_y = block->
u.
mv[ref][1];
1380 int mx, my, i, epel, nplanes = 0;
1403 src[0] = ref_hpel[(my>>1)+(mx>>2)] + y*p->
stride + x;
1407 for (i = 0; i < 4; i++)
1408 src[i] = ref_hpel[i] + y*p->
stride + x;
1432 src[!mx] = src[2 + !!mx];
1434 }
else if (!(my&3)) {
1435 src[0] = src[(my>>1) ];
1436 src[1] = src[(my>>1)+1];
1457 for (i = 0; i < nplanes; i++) {
1465 return (nplanes>>1) + epel;
1469 uint8_t *obmc_weight,
int xblen,
int yblen)
1474 for (y = 0; y < yblen; y++) {
1475 for (x = 0; x < xblen; x += 2) {
1476 dst[x ] += dc * obmc_weight[x ];
1477 dst[x+1] += dc * obmc_weight[x+1];
1485 uint16_t *mctmp,
uint8_t *obmc_weight,
1486 int plane,
int dstx,
int dsty)
1492 switch (block->
ref&3) {
1498 idx =
mc_subpel(s, block, src, dstx, dsty, (block->
ref&3)-1, plane);
1505 idx =
mc_subpel(s, block, src, dstx, dsty, 0, plane);
1507 idx =
mc_subpel(s, block, src, dstx, dsty, 1, plane);
1528 for (x = 1; x < s->
blwidth-1; x++) {
1570 for (i = 1; i < 4; i++) {
1579 ref->
hpel[plane][3], ref->
hpel[plane][0],
1595 int y, i,
comp, dsty;
1600 for (comp = 0; comp < 3; comp++) {
1610 for (comp = 0; comp < 3; comp++) {
1615 for (i = 0; i < 4; i++)
1628 for (y = 0; y < p->
height; y += 16) {
1644 for (y = 0; y < s->
blheight; y++) {
1647 uint16_t *mctmp = s->
mctmp + y*rowheight;
1660 mc_row(s, blocks, mctmp, comp, dsty);
1679 int chroma_x_shift, chroma_y_shift;
1688 for (i = 0; f->
data[i]; i++) {
1706 int i, j, refnum, refdist;
1721 for (i = 0; i < s->
num_refs; i++) {
1750 if (retire != picnum) {
1810 #define DATA_UNIT_HEADER_SIZE 13
1818 int ret, i, parse_code = buf[4];
1840 }
else if (parse_code ==
pc_eos) {
1848 if (sscanf(buf+14,
"Schroedinger %d.%d.%d", ver, ver+1, ver+2) == 3)
1849 if (ver[0] == 1 && ver[1] == 0 && ver[2] <= 7)
1852 }
else if (parse_code & 0x8) {
1870 tmp = parse_code & 0x03;
1876 s->
is_arith = (parse_code & 0x48) == 0x08;
1877 s->
low_delay = (parse_code & 0x88) == 0x88;
1908 int buf_size = pkt->
size;
1909 int i, data_unit_size, buf_idx = 0;
1931 if (buf[buf_idx ] ==
'B' && buf[buf_idx+1] ==
'B' &&
1932 buf[buf_idx+2] ==
'C' && buf[buf_idx+3] ==
'D')
1939 data_unit_size =
AV_RB32(buf+buf_idx+5);
1940 if (buf_idx + data_unit_size > buf_size || !data_unit_size) {
1941 if(buf_idx + data_unit_size > buf_size)
1943 "Data unit with size %d is larger than input buffer, discarding\n",
1954 buf_idx += data_unit_size;
1978 if (delayed_frame) {