46 int16_t *
block,
int n,
int qscale);
48 int16_t *
block,
int n,
int qscale);
50 int16_t *
block,
int n,
int qscale);
52 int16_t *
block,
int n,
int qscale);
54 int16_t *
block,
int n,
int qscale);
56 int16_t *
block,
int n,
int qscale);
58 int16_t *
block,
int n,
int qscale);
62 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
63 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
68 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
69 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
70 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
71 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
72 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
73 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
74 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
75 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
80 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
81 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
82 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
83 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
84 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
85 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
86 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
87 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
92 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
93 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
94 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
95 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
96 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
97 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
98 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
99 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
104 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
105 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
106 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
107 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
108 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
109 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
110 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
111 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
128 int mb_x,
int mb_y,
int mb_intra,
int mb_skipped)
138 memcpy(s->
mv,
mv,
sizeof(*
mv));
243 if (r < 0 || !pic->f.data[0]) {
264 "get_buffer() failed (stride changed)\n");
271 "get_buffer() failed (uv stride mismatch)\n");
279 "get_buffer() failed to allocate context scratch buffers.\n");
301 for (i = 0; i < 2; i++) {
332 int mv_size = 2 * (b8_array_size + 4) *
sizeof(int16_t);
333 int ref_index_size = 4 * mb_array_size;
335 for (i = 0; mv_size && i < 2; i++) {
352 #define MAKE_WRITABLE(table) \
355 (ret = av_buffer_make_writable(&pic->table)) < 0)\
366 for (i = 0; i < 2; i++) {
388 assert(pic->
f.
data[0]);
391 assert(!pic->
f.
data[0]);
418 for (i = 0; i < 2; i++) {
454 memset((
uint8_t*)pic + off, 0,
sizeof(*pic) - off);
461 #define UPDATE_TABLE(table)\
464 (!dst->table || dst->table->buffer != src->table->buffer)) {\
465 av_buffer_unref(&dst->table);\
466 dst->table = av_buffer_ref(src->table);\
468 free_picture_tables(dst);\
469 return AVERROR(ENOMEM);\
480 for (i = 0; i < 2; i++) {
491 for (i = 0; i < 2; i++) {
544 int yc_size = y_size + 2 * c_size;
561 2 * 64 *
sizeof(
int), fail)
567 for (i = 0; i < 12; i++) {
574 yc_size *
sizeof(int16_t) * 16, fail);
607 #define COPY(a) bak->a = src->a
608 COPY(edge_emu_buffer);
613 COPY(obmc_scratchpad);
641 for (i = 0; i < 12; i++) {
647 "scratch buffers.\n");
675 if (
s1->context_initialized){
707 if (
s1->picture[i].f.data[0] &&
712 #define UPDATE_PICTURE(pic)\
714 ff_mpeg_unref_picture(s, &s->pic);\
715 if (s1->pic.f.data[0])\
716 ret = ff_mpeg_ref_picture(s, &s->pic, &s1->pic);\
718 ret = update_picture_tables(&s->pic, &s1->pic);\
738 (
char *) &
s1->shape - (
char *) &
s1->time_increment_bits);
748 if (
s1->bitstream_buffer) {
749 if (
s1->bitstream_buffer_size +
753 s1->allocated_bitstream_buffer_size);
756 s1->bitstream_buffer_size);
766 "scratch buffers.\n");
771 "be allocated due to unknown size.\n");
776 (
char *) &
s1->rtp_mode - (
char *) &
s1->progressive_sequence);
778 if (!
s1->first_field) {
780 if (
s1->current_picture_ptr)
870 int y_size, c_size, yc_size, i, mb_array_size, mv_table_size, x,
y;
895 yc_size = y_size + 2 * c_size;
925 mb_array_size *
sizeof(
float), fail);
927 mb_array_size *
sizeof(
float), fail);
934 for (i = 0; i < 2; i++) {
936 for (j = 0; j < 2; j++) {
937 for (k = 0; k < 2; k++) {
940 mv_table_size * 2 *
sizeof(int16_t),
969 for (i = 0; i < yc_size; i++)
993 int nb_slices = (HAVE_THREADS &&
1007 "decoding to AV_PIX_FMT_NONE is not supported.\n");
1018 " reducing to %d\n", nb_slices, max_slices);
1019 nb_slices = max_slices;
1044 (
MAX_RUN + 1) * 2 *
sizeof(
int), fail);
1083 if (nb_slices > 1) {
1084 for (i = 1; i < nb_slices; i++) {
1089 for (i = 0; i < nb_slices; i++) {
1093 (s->
mb_height * (i) + nb_slices / 2) / nb_slices;
1095 (s->
mb_height * (i + 1) + nb_slices / 2) / nb_slices;
1134 for (i = 0; i < 2; i++) {
1135 for (j = 0; j < 2; j++) {
1136 for (k = 0; k < 2; k++) {
1211 if (nb_slices > 1) {
1212 for (i = 1; i < nb_slices; i++) {
1217 for (i = 0; i < nb_slices; i++) {
1221 (s->
mb_height * (i) + nb_slices / 2) / nb_slices;
1223 (s->
mb_height * (i + 1) + nb_slices / 2) / nb_slices;
1313 for (last = 0; last < 2; last++) {
1322 memset(max_level, 0,
MAX_RUN + 1);
1324 memset(index_run, rl->
n,
MAX_RUN + 1);
1325 for (i = start; i <
end; i++) {
1328 if (index_run[run] == rl->
n)
1330 if (level > max_level[run])
1332 if (run > max_run[level])
1336 rl->
max_level[last] = static_store[last];
1349 memcpy(rl->
index_run[last], index_run, MAX_RUN + 1);
1357 for (q = 0; q < 32; q++) {
1359 int qadd = (q - 1) | 1;
1373 }
else if (len < 0) {
1377 if (code == rl->
n) {
1383 if (code >= rl->
last) run += 192;
1434 "Internal error, picture buffer overflow\n");
1469 for (intra = 0; intra < 2; intra++) {
1471 for (i = 0; i < 64; i++) {
1477 for (i = 0; i < 64; i++) {
1517 "releasing zombie picture\n");
1581 av_dlog(s->
avctx,
"L%p N%p C%p L%p N%p C%p type:%d drop:%d\n",
1592 int h_chroma_shift, v_chroma_shift;
1594 &h_chroma_shift, &v_chroma_shift);
1597 "warning: first frame is no keyframe\n");
1600 "allocate dummy last picture for field based first keyframe\n");
1618 (avctx->
height >> v_chroma_shift) *
1621 (avctx->
height >> v_chroma_shift) *
1625 for(i=0; i<avctx->
height; i++)
1651 #if 0 // BUFREF-FIXME
1675 for (i = 0; i < 4; i++) {
1762 assert(i < MAX_PICTURE_COUNT);
1789 sx = av_clip(sx, 0, w - 1);
1790 sy = av_clip(sy, 0, h - 1);
1791 ex = av_clip(ex, 0, w - 1);
1792 ey = av_clip(ey, 0, h - 1);
1794 buf[sy * stride + sx] +=
color;
1803 f = ((ey - sy) << 16) / ex;
1804 for (x = 0; x <= ex; x++) {
1806 fr = (x * f) & 0xFFFF;
1807 buf[y * stride + x] += (color * (0x10000 - fr)) >> 16;
1808 if(fr) buf[(y + 1) * stride + x] += (color * fr ) >> 16;
1818 f = ((ex - sx) << 16) / ey;
1821 for(y= 0; y <= ey; y++){
1823 fr = (y*f) & 0xFFFF;
1824 buf[y * stride + x] += (color * (0x10000 - fr)) >> 16;
1825 if(fr) buf[y * stride + x + 1] += (color * fr ) >> 16;
1842 sx = av_clip(sx, -100, w + 100);
1843 sy = av_clip(sy, -100, h + 100);
1844 ex = av_clip(ex, -100, w + 100);
1845 ey = av_clip(ey, -100, h + 100);
1850 if (dx * dx + dy * dy > 3 * 3) {
1859 draw_line(buf, sx, sy, sx + rx, sy + ry, w, h, stride, color);
1860 draw_line(buf, sx, sy, sx - ry, sy + rx, w, h, stride, color);
1862 draw_line(buf, sx, sy, ex, ey, w, h, stride, color);
1870 int mb_width,
int mb_height,
int mb_stride,
int quarter_sample)
1882 for (y = 0; y < mb_height; y++) {
1883 for (x = 0; x < mb_width; x++) {
1885 int count = mbskip_table[x + y * mb_stride];
1895 int mb_type = p->
mb_type[x + y * mb_stride];
1911 else if (
IS_GMC(mb_type))
1949 const int shift = 1 + quarter_sample;
1953 int h_chroma_shift, v_chroma_shift, block_height;
1957 const int mv_stride = (mb_width << mv_sample_log2) +
1967 ptr = pict->
data[0];
1968 block_height = 16 >> v_chroma_shift;
1970 for (mb_y = 0; mb_y < mb_height; mb_y++) {
1972 for (mb_x = 0; mb_x < mb_width; mb_x++) {
1973 const int mb_index = mb_x + mb_y * mb_stride;
1976 for (type = 0; type < 3; type++) {
2003 for (i = 0; i < 4; i++) {
2004 int sx = mb_x * 16 + 4 + 8 * (i & 1);
2005 int sy = mb_y * 16 + 4 + 8 * (i >> 1);
2006 int xy = (mb_x * 2 + (i & 1) +
2007 (mb_y * 2 + (i >> 1)) * mv_stride) << (mv_sample_log2 - 1);
2015 for (i = 0; i < 2; i++) {
2016 int sx = mb_x * 16 + 8;
2017 int sy = mb_y * 16 + 4 + 8 * i;
2018 int xy = (mb_x * 2 + (mb_y * 2 + i) * mv_stride) << (mv_sample_log2 - 1);
2025 draw_arrow(ptr, sx, sy, mx + sx, my + sy, width,
2030 for (i = 0; i < 2; i++) {
2031 int sx = mb_x * 16 + 4 + 8 * i;
2032 int sy = mb_y * 16 + 8;
2033 int xy = (mb_x * 2 + i + mb_y * 2 * mv_stride) << (mv_sample_log2 - 1);
2040 draw_arrow(ptr, sx, sy, mx + sx, my + sy, width,
2044 int sx= mb_x * 16 + 8;
2045 int sy= mb_y * 16 + 8;
2046 int xy= (mb_x + mb_y * mv_stride) << mv_sample_log2;
2055 0x0101010101010101ULL;
2057 for (y = 0; y < block_height; y++) {
2058 *(uint64_t *)(pict->
data[1] + 8 * mb_x +
2059 (block_height * mb_y + y) *
2061 *(uint64_t *)(pict->
data[2] + 8 * mb_x +
2062 (block_height * mb_y + y) *
2068 int mb_type = p->
mb_type[mb_index];
2071 #define COLOR(theta, r) \
2072 u = (int)(128 + r * cos(theta * 3.141592 / 180)); \
2073 v = (int)(128 + r * sin(theta * 3.141592 / 180));
2090 }
else if (
IS_GMC(mb_type)) {
2092 }
else if (
IS_SKIP(mb_type)) {
2103 u *= 0x0101010101010101ULL;
2104 v *= 0x0101010101010101ULL;
2105 for (y = 0; y < block_height; y++) {
2106 *(uint64_t *)(pict->
data[1] + 8 * mb_x +
2107 (block_height * mb_y + y) * pict->
linesize[1]) = u;
2108 *(uint64_t *)(pict->
data[2] + 8 * mb_x +
2109 (block_height * mb_y + y) * pict->
linesize[2]) = v;
2114 *(uint64_t *)(pict->
data[0] + 16 * mb_x + 0 +
2115 (16 * mb_y + 8) * pict->
linesize[0]) ^= 0x8080808080808080ULL;
2116 *(uint64_t *)(pict->
data[0] + 16 * mb_x + 8 +
2117 (16 * mb_y + 8) * pict->
linesize[0]) ^= 0x8080808080808080ULL;
2120 for (y = 0; y < 16; y++)
2121 pict->
data[0][16 * mb_x + 8 + (16 * mb_y + y) *
2124 if (
IS_8X8(mb_type) && mv_sample_log2 >= 2) {
2125 int dm = 1 << (mv_sample_log2 - 2);
2126 for (i = 0; i < 4; i++) {
2127 int sx = mb_x * 16 + 8 * (i & 1);
2128 int sy = mb_y * 16 + 8 * (i >> 1);
2129 int xy = (mb_x * 2 + (i & 1) +
2130 (mb_y * 2 + (i >> 1)) * mv_stride) << (mv_sample_log2 - 1);
2133 if (mv[0] != mv[dm] ||
2134 mv[dm * mv_stride] != mv[dm * (mv_stride + 1)])
2135 for (y = 0; y < 8; y++)
2136 pict->
data[0][sx + 4 + (sy + y) * pict->
linesize[0]] ^= 0x80;
2137 if (mv[0] != mv[dm * mv_stride] || mv[dm] != mv[dm * (mv_stride + 1)])
2138 *(uint64_t *)(pict->
data[0] + sx + (sy + 4) *
2139 pict->
linesize[0]) ^= 0x8080808080808080ULL;
2148 mbskip_table[mb_index] = 0;
2174 int field_based,
int field_select,
2175 int src_x,
int src_y,
2177 int h_edge_pos,
int v_edge_pos,
2179 int motion_x,
int motion_y)
2182 const int op_index =
FFMIN(lowres, 3);
2183 const int s_mask = (2 <<
lowres) - 1;
2192 sx = motion_x & s_mask;
2193 sy = motion_y & s_mask;
2194 src_x += motion_x >> lowres + 1;
2195 src_y += motion_y >> lowres + 1;
2197 src += src_y * stride + src_x;
2199 if ((
unsigned)src_x >
FFMAX( h_edge_pos - (!!sx) - w, 0) ||
2200 (unsigned)src_y >
FFMAX((v_edge_pos >> field_based) - (!!sy) - h, 0)) {
2202 (h + 1) << field_based, src_x,
2203 src_y << field_based,
2210 sx = (sx << 2) >>
lowres;
2211 sy = (sy << 2) >>
lowres;
2214 pix_op[op_index](dest,
src,
stride, h, sx, sy);
2228 int motion_x,
int motion_y,
2231 uint8_t *ptr_y, *ptr_cb, *ptr_cr;
2232 int mx, my, src_x, src_y, uvsrc_x, uvsrc_y, uvlinesize, linesize, sx, sy,
2236 const int block_s = 8>>
lowres;
2237 const int s_mask = (2 <<
lowres) - 1;
2250 motion_y += (bottom_field - field_select)*((1 << lowres)-1);
2253 sx = motion_x & s_mask;
2254 sy = motion_y & s_mask;
2255 src_x = s->
mb_x * 2 * block_s + (motion_x >> lowres + 1);
2256 src_y = (mb_y * 2 * block_s >> field_based) + (motion_y >> lowres + 1);
2259 uvsx = ((motion_x >> 1) & s_mask) | (sx & 1);
2260 uvsy = ((motion_y >> 1) & s_mask) | (sy & 1);
2261 uvsrc_x = src_x >> 1;
2262 uvsrc_y = src_y >> 1;
2267 uvsx = (2 * mx) & s_mask;
2268 uvsy = (2 * my) & s_mask;
2269 uvsrc_x = s->
mb_x * block_s + (mx >>
lowres);
2270 uvsrc_y = mb_y * block_s + (my >>
lowres);
2277 uvsrc_x = s->
mb_x * block_s + (mx >> lowres + 1);
2278 uvsrc_y = (mb_y * block_s >> field_based) + (my >> lowres + 1);
2284 uvsy = motion_y & s_mask;
2286 uvsrc_x = s->
mb_x*block_s + (mx >> (lowres+1));
2289 uvsx = motion_x & s_mask;
2290 uvsy = motion_y & s_mask;
2297 ptr_y = ref_picture[0] + src_y * linesize + src_x;
2298 ptr_cb = ref_picture[1] + uvsrc_y * uvlinesize + uvsrc_x;
2299 ptr_cr = ref_picture[2] + uvsrc_y * uvlinesize + uvsrc_x;
2301 if ((
unsigned) src_x >
FFMAX( h_edge_pos - (!!sx) - 2 * block_s, 0) || uvsrc_y<0 ||
2302 (
unsigned) src_y >
FFMAX((v_edge_pos >> field_based) - (!!sy) - h, 0)) {
2304 linesize >> field_based, 17, 17 + field_based,
2305 src_x, src_y << field_based, h_edge_pos,
2312 uvsrc_x, uvsrc_y << field_based,
2313 h_edge_pos >> 1, v_edge_pos >> 1);
2316 uvsrc_x, uvsrc_y << field_based,
2317 h_edge_pos >> 1, v_edge_pos >> 1);
2319 ptr_cr = uvbuf + 16;
2336 sx = (sx << 2) >>
lowres;
2337 sy = (sy << 2) >>
lowres;
2338 pix_op[lowres - 1](dest_y, ptr_y, linesize, h, sx, sy);
2342 uvsx = (uvsx << 2) >>
lowres;
2343 uvsy = (uvsy << 2) >>
lowres;
2345 pix_op[op_index](dest_cb, ptr_cb, uvlinesize, hc, uvsx, uvsy);
2346 pix_op[op_index](dest_cr, ptr_cr, uvlinesize, hc, uvsx, uvsy);
2359 const int op_index =
FFMIN(lowres, 3);
2360 const int block_s = 8 >>
lowres;
2361 const int s_mask = (2 <<
lowres) - 1;
2362 const int h_edge_pos = s->
h_edge_pos >> lowres + 1;
2363 const int v_edge_pos = s->
v_edge_pos >> lowres + 1;
2364 int emu = 0, src_x, src_y,
offset, sx, sy;
2379 src_x = s->
mb_x * block_s + (mx >> lowres + 1);
2380 src_y = s->
mb_y * block_s + (my >> lowres + 1);
2383 ptr = ref_picture[1] +
offset;
2385 if ((
unsigned) src_x >
FFMAX(h_edge_pos - (!!sx) - block_s, 0) ||
2386 (unsigned) src_y >
FFMAX(v_edge_pos - (!!sy) - block_s, 0)) {
2388 9, 9, src_x, src_y, h_edge_pos, v_edge_pos);
2393 sx = (sx << 2) >>
lowres;
2394 sy = (sy << 2) >>
lowres;
2395 pix_op[op_index](dest_cb, ptr, s->
uvlinesize, block_s, sx, sy);
2397 ptr = ref_picture[2] +
offset;
2400 src_x, src_y, h_edge_pos, v_edge_pos);
2403 pix_op[op_index](dest_cr, ptr, s->
uvlinesize, block_s, sx, sy);
2426 const int block_s = 8 >>
lowres;
2435 ref_picture, pix_op,
2436 s->
mv[dir][0][0], s->
mv[dir][0][1],
2442 for (i = 0; i < 4; i++) {
2445 ref_picture[0], 0, 0,
2446 (2 * mb_x + (i & 1)) * block_s,
2447 (2 * mb_y + (i >> 1)) * block_s,
2450 block_s, block_s, pix_op,
2451 s->
mv[dir][i][0], s->
mv[dir][i][1]);
2453 mx += s->
mv[dir][i][0];
2454 my += s->
mv[dir][i][1];
2466 ref_picture, pix_op,
2467 s->
mv[dir][0][0], s->
mv[dir][0][1],
2472 ref_picture, pix_op,
2473 s->
mv[dir][1][0], s->
mv[dir][1][1],
2483 ref_picture, pix_op,
2485 s->
mv[dir][0][1], 2 * block_s, mb_y >> 1);
2489 for (i = 0; i < 2; i++) {
2501 ref2picture, pix_op,
2502 s->
mv[dir][i][0], s->
mv[dir][i][1] +
2503 2 * block_s * i, block_s, mb_y >> 1);
2505 dest_y += 2 * block_s * s->
linesize;
2512 for (i = 0; i < 2; i++) {
2514 for (j = 0; j < 2; j++) {
2517 ref_picture, pix_op,
2518 s->
mv[dir][2 * i + j][0],
2519 s->
mv[dir][2 * i + j][1],
2525 for (i = 0; i < 2; i++) {
2528 ref_picture, pix_op,
2529 s->
mv[dir][2 * i][0],s->
mv[dir][2 * i][1],
2530 2 * block_s, mb_y >> 1);
2553 int my_max = INT_MIN, my_min = INT_MAX, qpel_shift = !s->
quarter_sample;
2554 int my,
off, i, mvs;
2573 for (i = 0; i < mvs; i++) {
2574 my = s->
mv[dir][i][1]<<qpel_shift;
2575 my_max =
FFMAX(my_max, my);
2576 my_min =
FFMIN(my_min, my);
2579 off = (
FFMAX(-my_min, my_max) + 63) >> 6;
2588 int16_t *
block,
int i,
uint8_t *dest,
int line_size,
int qscale)
2604 int16_t *
block,
int i,
uint8_t *dest,
int line_size,
int qscale)
2626 memset(s->
ac_val[0][xy ], 0, 32 *
sizeof(int16_t));
2627 memset(s->
ac_val[0][xy + wrap], 0, 32 *
sizeof(int16_t));
2640 memset(s->
ac_val[1][xy], 0, 16 *
sizeof(int16_t));
2641 memset(s->
ac_val[2][xy], 0, 16 *
sizeof(int16_t));
2658 int lowres_flag,
int is_mpeg12)
2671 for(j=0; j<64; j++){
2695 uint8_t *dest_y, *dest_cb, *dest_cr;
2696 int dct_linesize, dct_offset;
2702 const int block_size= lowres_flag ? 8>>s->
avctx->
lowres : 8;
2721 dct_offset = s->
interlaced_dct ? linesize : linesize * block_size;
2725 dest_cb= s->
dest[1];
2726 dest_cr= s->
dest[2];
2809 add_dct(s, block[0], 0, dest_y , dct_linesize);
2810 add_dct(s, block[1], 1, dest_y + block_size, dct_linesize);
2811 add_dct(s, block[2], 2, dest_y + dct_offset , dct_linesize);
2812 add_dct(s, block[3], 3, dest_y + dct_offset + block_size, dct_linesize);
2816 add_dct(s, block[4], 4, dest_cb, uvlinesize);
2817 add_dct(s, block[5], 5, dest_cr, uvlinesize);
2821 dct_offset = s->
interlaced_dct ? uvlinesize : uvlinesize*block_size;
2823 add_dct(s, block[4], 4, dest_cb, dct_linesize);
2824 add_dct(s, block[5], 5, dest_cr, dct_linesize);
2825 add_dct(s, block[6], 6, dest_cb+dct_offset, dct_linesize);
2826 add_dct(s, block[7], 7, dest_cr+dct_offset, dct_linesize);
2828 add_dct(s, block[8], 8, dest_cb+block_size, dct_linesize);
2829 add_dct(s, block[9], 9, dest_cr+block_size, dct_linesize);
2830 add_dct(s, block[10], 10, dest_cb+block_size+dct_offset, dct_linesize);
2831 add_dct(s, block[11], 11, dest_cr+block_size+dct_offset, dct_linesize);
2836 else if (CONFIG_WMV2_DECODER || CONFIG_WMV2_ENCODER) {
2843 put_dct(s, block[1], 1, dest_y + block_size, dct_linesize, s->
qscale);
2844 put_dct(s, block[2], 2, dest_y + dct_offset , dct_linesize, s->
qscale);
2845 put_dct(s, block[3], 3, dest_y + dct_offset + block_size, dct_linesize, s->
qscale);
2862 s->
dsp.
idct_put(dest_y + block_size, dct_linesize, block[1]);
2863 s->
dsp.
idct_put(dest_y + dct_offset , dct_linesize, block[2]);
2864 s->
dsp.
idct_put(dest_y + dct_offset + block_size, dct_linesize, block[3]);
2873 dct_offset = s->
interlaced_dct? uvlinesize : uvlinesize*block_size;
2877 s->
dsp.
idct_put(dest_cb + dct_offset, dct_linesize, block[6]);
2878 s->
dsp.
idct_put(dest_cr + dct_offset, dct_linesize, block[7]);
2880 s->
dsp.
idct_put(dest_cb + block_size, dct_linesize, block[8]);
2881 s->
dsp.
idct_put(dest_cr + block_size, dct_linesize, block[9]);
2882 s->
dsp.
idct_put(dest_cb + block_size + dct_offset, dct_linesize, block[10]);
2883 s->
dsp.
idct_put(dest_cr + block_size + dct_offset, dct_linesize, block[11]);
2913 Picture *last,
int y,
int h,
int picture_structure,
2915 int v_edge_pos,
int h_edge_pos)
2920 const int field_pic = picture_structure !=
PICT_FRAME;
2932 int sides = 0, edge_h;
2934 if (y + h >= v_edge_pos)
2937 edge_h=
FFMIN(h, v_edge_pos - y);
2940 linesize[0], h_edge_pos, edge_h,
2943 linesize[1], h_edge_pos >> hshift, edge_h >> vshift,
2946 linesize[2], h_edge_pos >> hshift, edge_h >> vshift,
2975 offset[2]= (y >> vshift) * src->
linesize[1];
2983 y, picture_structure, h);
3016 s->
dest[0] += s->
mb_y * linesize << mb_size;
3020 s->
dest[0] += (s->
mb_y>>1) * linesize << mb_size;
3044 for(i=0; i<=last; i++){
3045 const int j= scantable[i];
3050 for(i=0; i<=last; i++){
3051 const int j= scantable[i];
3052 const int perm_j= permutation[j];
3053 block[perm_j]= temp[j];
3086 int16_t *
block,
int n,
int qscale)
3088 int i,
level, nCoeffs;
3089 const uint16_t *quant_matrix;
3096 for(i=1;i<=nCoeffs;i++) {
3102 level = (int)(level * qscale * quant_matrix[j]) >> 3;
3103 level = (level - 1) | 1;
3106 level = (int)(level * qscale * quant_matrix[j]) >> 3;
3107 level = (level - 1) | 1;
3115 int16_t *
block,
int n,
int qscale)
3117 int i,
level, nCoeffs;
3118 const uint16_t *quant_matrix;
3123 for(i=0; i<=nCoeffs; i++) {
3129 level = (((level << 1) + 1) * qscale *
3130 ((int) (quant_matrix[j]))) >> 4;
3131 level = (level - 1) | 1;
3134 level = (((level << 1) + 1) * qscale *
3135 ((int) (quant_matrix[j]))) >> 4;
3136 level = (level - 1) | 1;
3144 int16_t *
block,
int n,
int qscale)
3146 int i,
level, nCoeffs;
3147 const uint16_t *quant_matrix;
3154 for(i=1;i<=nCoeffs;i++) {
3160 level = (int)(level * qscale * quant_matrix[j]) >> 3;
3163 level = (int)(level * qscale * quant_matrix[j]) >> 3;
3171 int16_t *
block,
int n,
int qscale)
3173 int i,
level, nCoeffs;
3174 const uint16_t *quant_matrix;
3183 for(i=1;i<=nCoeffs;i++) {
3189 level = (int)(level * qscale * quant_matrix[j]) >> 3;
3192 level = (int)(level * qscale * quant_matrix[j]) >> 3;
3202 int16_t *
block,
int n,
int qscale)
3204 int i,
level, nCoeffs;
3205 const uint16_t *quant_matrix;
3212 for(i=0; i<=nCoeffs; i++) {
3218 level = (((level << 1) + 1) * qscale *
3219 ((int) (quant_matrix[j]))) >> 4;
3222 level = (((level << 1) + 1) * qscale *
3223 ((int) (quant_matrix[j]))) >> 4;
3233 int16_t *
block,
int n,
int qscale)
3235 int i,
level, qmul, qadd;
3244 qadd = (qscale - 1) | 1;
3253 for(i=1; i<=nCoeffs; i++) {
3257 level = level * qmul - qadd;
3259 level = level * qmul + qadd;
3267 int16_t *
block,
int n,
int qscale)
3269 int i,
level, qmul, qadd;
3274 qadd = (qscale - 1) | 1;
3279 for(i=0; i<=nCoeffs; i++) {
3283 level = level * qmul - qadd;
3285 level = level * qmul + qadd;
3299 else if (qscale > 31)
3315 #if CONFIG_ERROR_RESILIENCE