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;
1314 for (last = 0; last < 2; last++) {
1323 memset(max_level, 0,
MAX_RUN + 1);
1325 memset(index_run, rl->
n,
MAX_RUN + 1);
1326 for (i = start; i <
end; i++) {
1329 if (index_run[run] == rl->
n)
1331 if (level > max_level[run])
1333 if (run > max_run[level])
1337 rl->
max_level[last] = static_store[last];
1350 memcpy(rl->
index_run[last], index_run, MAX_RUN + 1);
1358 for (q = 0; q < 32; q++) {
1360 int qadd = (q - 1) | 1;
1374 }
else if (len < 0) {
1378 if (code == rl->
n) {
1384 if (code >= rl->
last) run += 192;
1411 if (pic->
f.
data[0] == NULL)
1435 "Internal error, picture buffer overflow\n");
1470 for (intra = 0; intra < 2; intra++) {
1472 for (i = 0; i < 64; i++) {
1478 for (i = 0; i < 64; i++) {
1518 "releasing zombie picture\n");
1582 av_dlog(s->
avctx,
"L%p N%p C%p L%p N%p C%p type:%d drop:%d\n",
1593 int h_chroma_shift, v_chroma_shift;
1595 &h_chroma_shift, &v_chroma_shift);
1598 "warning: first frame is no keyframe\n");
1601 "allocate dummy last picture for field based first keyframe\n");
1619 (avctx->
height >> v_chroma_shift) *
1622 (avctx->
height >> v_chroma_shift) *
1626 for(i=0; i<avctx->
height; i++)
1652 #if 0 // BUFREF-FIXME
1676 for (i = 0; i < 4; i++) {
1763 assert(i < MAX_PICTURE_COUNT);
1790 sx = av_clip(sx, 0, w - 1);
1791 sy = av_clip(sy, 0, h - 1);
1792 ex = av_clip(ex, 0, w - 1);
1793 ey = av_clip(ey, 0, h - 1);
1795 buf[sy * stride + sx] +=
color;
1804 f = ((ey - sy) << 16) / ex;
1805 for (x = 0; x <= ex; x++) {
1807 fr = (x * f) & 0xFFFF;
1808 buf[y * stride + x] += (color * (0x10000 - fr)) >> 16;
1809 if(fr) buf[(y + 1) * stride + x] += (color * fr ) >> 16;
1819 f = ((ex - sx) << 16) / ey;
1822 for(y= 0; y <= ey; y++){
1824 fr = (y*f) & 0xFFFF;
1825 buf[y * stride + x] += (color * (0x10000 - fr)) >> 16;
1826 if(fr) buf[y * stride + x + 1] += (color * fr ) >> 16;
1843 sx = av_clip(sx, -100, w + 100);
1844 sy = av_clip(sy, -100, h + 100);
1845 ex = av_clip(ex, -100, w + 100);
1846 ey = av_clip(ey, -100, h + 100);
1851 if (dx * dx + dy * dy > 3 * 3) {
1860 draw_line(buf, sx, sy, sx + rx, sy + ry, w, h, stride, color);
1861 draw_line(buf, sx, sy, sx - ry, sy + rx, w, h, stride, color);
1863 draw_line(buf, sx, sy, ex, ey, w, h, stride, color);
1871 int mb_width,
int mb_height,
int mb_stride,
int quarter_sample)
1883 for (y = 0; y < mb_height; y++) {
1884 for (x = 0; x < mb_width; x++) {
1886 int count = mbskip_table[x + y * mb_stride];
1896 int mb_type = p->
mb_type[x + y * mb_stride];
1912 else if (
IS_GMC(mb_type))
1950 const int shift = 1 + quarter_sample;
1954 int h_chroma_shift, v_chroma_shift, block_height;
1958 const int mv_stride = (mb_width << mv_sample_log2) +
1968 ptr = pict->
data[0];
1969 block_height = 16 >> v_chroma_shift;
1971 for (mb_y = 0; mb_y < mb_height; mb_y++) {
1973 for (mb_x = 0; mb_x < mb_width; mb_x++) {
1974 const int mb_index = mb_x + mb_y * mb_stride;
1977 for (type = 0; type < 3; type++) {
2004 for (i = 0; i < 4; i++) {
2005 int sx = mb_x * 16 + 4 + 8 * (i & 1);
2006 int sy = mb_y * 16 + 4 + 8 * (i >> 1);
2007 int xy = (mb_x * 2 + (i & 1) +
2008 (mb_y * 2 + (i >> 1)) * mv_stride) << (mv_sample_log2 - 1);
2016 for (i = 0; i < 2; i++) {
2017 int sx = mb_x * 16 + 8;
2018 int sy = mb_y * 16 + 4 + 8 * i;
2019 int xy = (mb_x * 2 + (mb_y * 2 + i) * mv_stride) << (mv_sample_log2 - 1);
2026 draw_arrow(ptr, sx, sy, mx + sx, my + sy, width,
2031 for (i = 0; i < 2; i++) {
2032 int sx = mb_x * 16 + 4 + 8 * i;
2033 int sy = mb_y * 16 + 8;
2034 int xy = (mb_x * 2 + i + mb_y * 2 * mv_stride) << (mv_sample_log2 - 1);
2041 draw_arrow(ptr, sx, sy, mx + sx, my + sy, width,
2045 int sx= mb_x * 16 + 8;
2046 int sy= mb_y * 16 + 8;
2047 int xy= (mb_x + mb_y * mv_stride) << mv_sample_log2;
2056 0x0101010101010101ULL;
2058 for (y = 0; y < block_height; y++) {
2059 *(uint64_t *)(pict->
data[1] + 8 * mb_x +
2060 (block_height * mb_y + y) *
2062 *(uint64_t *)(pict->
data[2] + 8 * mb_x +
2063 (block_height * mb_y + y) *
2069 int mb_type = p->
mb_type[mb_index];
2072 #define COLOR(theta, r) \
2073 u = (int)(128 + r * cos(theta * 3.141592 / 180)); \
2074 v = (int)(128 + r * sin(theta * 3.141592 / 180));
2091 }
else if (
IS_GMC(mb_type)) {
2093 }
else if (
IS_SKIP(mb_type)) {
2104 u *= 0x0101010101010101ULL;
2105 v *= 0x0101010101010101ULL;
2106 for (y = 0; y < block_height; y++) {
2107 *(uint64_t *)(pict->
data[1] + 8 * mb_x +
2108 (block_height * mb_y + y) * pict->
linesize[1]) = u;
2109 *(uint64_t *)(pict->
data[2] + 8 * mb_x +
2110 (block_height * mb_y + y) * pict->
linesize[2]) = v;
2115 *(uint64_t *)(pict->
data[0] + 16 * mb_x + 0 +
2116 (16 * mb_y + 8) * pict->
linesize[0]) ^= 0x8080808080808080ULL;
2117 *(uint64_t *)(pict->
data[0] + 16 * mb_x + 8 +
2118 (16 * mb_y + 8) * pict->
linesize[0]) ^= 0x8080808080808080ULL;
2121 for (y = 0; y < 16; y++)
2122 pict->
data[0][16 * mb_x + 8 + (16 * mb_y + y) *
2125 if (
IS_8X8(mb_type) && mv_sample_log2 >= 2) {
2126 int dm = 1 << (mv_sample_log2 - 2);
2127 for (i = 0; i < 4; i++) {
2128 int sx = mb_x * 16 + 8 * (i & 1);
2129 int sy = mb_y * 16 + 8 * (i >> 1);
2130 int xy = (mb_x * 2 + (i & 1) +
2131 (mb_y * 2 + (i >> 1)) * mv_stride) << (mv_sample_log2 - 1);
2134 if (mv[0] != mv[dm] ||
2135 mv[dm * mv_stride] != mv[dm * (mv_stride + 1)])
2136 for (y = 0; y < 8; y++)
2137 pict->
data[0][sx + 4 + (sy + y) * pict->
linesize[0]] ^= 0x80;
2138 if (mv[0] != mv[dm * mv_stride] || mv[dm] != mv[dm * (mv_stride + 1)])
2139 *(uint64_t *)(pict->
data[0] + sx + (sy + 4) *
2140 pict->
linesize[0]) ^= 0x8080808080808080ULL;
2149 mbskip_table[mb_index] = 0;
2175 int field_based,
int field_select,
2176 int src_x,
int src_y,
2178 int h_edge_pos,
int v_edge_pos,
2180 int motion_x,
int motion_y)
2183 const int op_index =
FFMIN(lowres, 3);
2184 const int s_mask = (2 <<
lowres) - 1;
2193 sx = motion_x & s_mask;
2194 sy = motion_y & s_mask;
2195 src_x += motion_x >> lowres + 1;
2196 src_y += motion_y >> lowres + 1;
2198 src += src_y * stride + src_x;
2200 if ((
unsigned)src_x >
FFMAX( h_edge_pos - (!!sx) - w, 0) ||
2201 (unsigned)src_y >
FFMAX((v_edge_pos >> field_based) - (!!sy) - h, 0)) {
2203 (h + 1) << field_based, src_x,
2204 src_y << field_based,
2211 sx = (sx << 2) >>
lowres;
2212 sy = (sy << 2) >>
lowres;
2215 pix_op[op_index](dest,
src,
stride, h, sx, sy);
2229 int motion_x,
int motion_y,
2232 uint8_t *ptr_y, *ptr_cb, *ptr_cr;
2233 int mx, my, src_x, src_y, uvsrc_x, uvsrc_y, uvlinesize, linesize, sx, sy,
2237 const int block_s = 8>>
lowres;
2238 const int s_mask = (2 <<
lowres) - 1;
2251 motion_y += (bottom_field - field_select)*((1 << lowres)-1);
2254 sx = motion_x & s_mask;
2255 sy = motion_y & s_mask;
2256 src_x = s->
mb_x * 2 * block_s + (motion_x >> lowres + 1);
2257 src_y = (mb_y * 2 * block_s >> field_based) + (motion_y >> lowres + 1);
2260 uvsx = ((motion_x >> 1) & s_mask) | (sx & 1);
2261 uvsy = ((motion_y >> 1) & s_mask) | (sy & 1);
2262 uvsrc_x = src_x >> 1;
2263 uvsrc_y = src_y >> 1;
2268 uvsx = (2 * mx) & s_mask;
2269 uvsy = (2 * my) & s_mask;
2270 uvsrc_x = s->
mb_x * block_s + (mx >>
lowres);
2271 uvsrc_y = mb_y * block_s + (my >>
lowres);
2278 uvsrc_x = s->
mb_x * block_s + (mx >> lowres + 1);
2279 uvsrc_y = (mb_y * block_s >> field_based) + (my >> lowres + 1);
2285 uvsy = motion_y & s_mask;
2287 uvsrc_x = s->
mb_x*block_s + (mx >> (lowres+1));
2290 uvsx = motion_x & s_mask;
2291 uvsy = motion_y & s_mask;
2298 ptr_y = ref_picture[0] + src_y * linesize + src_x;
2299 ptr_cb = ref_picture[1] + uvsrc_y * uvlinesize + uvsrc_x;
2300 ptr_cr = ref_picture[2] + uvsrc_y * uvlinesize + uvsrc_x;
2302 if ((
unsigned) src_x >
FFMAX( h_edge_pos - (!!sx) - 2 * block_s, 0) || uvsrc_y<0 ||
2303 (
unsigned) src_y >
FFMAX((v_edge_pos >> field_based) - (!!sy) - h, 0)) {
2305 linesize >> field_based, 17, 17 + field_based,
2306 src_x, src_y << field_based, h_edge_pos,
2313 uvsrc_x, uvsrc_y << field_based,
2314 h_edge_pos >> 1, v_edge_pos >> 1);
2317 uvsrc_x, uvsrc_y << field_based,
2318 h_edge_pos >> 1, v_edge_pos >> 1);
2320 ptr_cr = uvbuf + 16;
2337 sx = (sx << 2) >>
lowres;
2338 sy = (sy << 2) >>
lowres;
2339 pix_op[lowres - 1](dest_y, ptr_y, linesize, h, sx, sy);
2343 uvsx = (uvsx << 2) >>
lowres;
2344 uvsy = (uvsy << 2) >>
lowres;
2346 pix_op[op_index](dest_cb, ptr_cb, uvlinesize, hc, uvsx, uvsy);
2347 pix_op[op_index](dest_cr, ptr_cr, uvlinesize, hc, uvsx, uvsy);
2360 const int op_index =
FFMIN(lowres, 3);
2361 const int block_s = 8 >>
lowres;
2362 const int s_mask = (2 <<
lowres) - 1;
2363 const int h_edge_pos = s->
h_edge_pos >> lowres + 1;
2364 const int v_edge_pos = s->
v_edge_pos >> lowres + 1;
2365 int emu = 0, src_x, src_y,
offset, sx, sy;
2380 src_x = s->
mb_x * block_s + (mx >> lowres + 1);
2381 src_y = s->
mb_y * block_s + (my >> lowres + 1);
2384 ptr = ref_picture[1] +
offset;
2386 if ((
unsigned) src_x >
FFMAX(h_edge_pos - (!!sx) - block_s, 0) ||
2387 (unsigned) src_y >
FFMAX(v_edge_pos - (!!sy) - block_s, 0)) {
2389 9, 9, src_x, src_y, h_edge_pos, v_edge_pos);
2394 sx = (sx << 2) >>
lowres;
2395 sy = (sy << 2) >>
lowres;
2396 pix_op[op_index](dest_cb, ptr, s->
uvlinesize, block_s, sx, sy);
2398 ptr = ref_picture[2] +
offset;
2401 src_x, src_y, h_edge_pos, v_edge_pos);
2404 pix_op[op_index](dest_cr, ptr, s->
uvlinesize, block_s, sx, sy);
2427 const int block_s = 8 >>
lowres;
2436 ref_picture, pix_op,
2437 s->
mv[dir][0][0], s->
mv[dir][0][1],
2443 for (i = 0; i < 4; i++) {
2446 ref_picture[0], 0, 0,
2447 (2 * mb_x + (i & 1)) * block_s,
2448 (2 * mb_y + (i >> 1)) * block_s,
2451 block_s, block_s, pix_op,
2452 s->
mv[dir][i][0], s->
mv[dir][i][1]);
2454 mx += s->
mv[dir][i][0];
2455 my += s->
mv[dir][i][1];
2467 ref_picture, pix_op,
2468 s->
mv[dir][0][0], s->
mv[dir][0][1],
2473 ref_picture, pix_op,
2474 s->
mv[dir][1][0], s->
mv[dir][1][1],
2484 ref_picture, pix_op,
2486 s->
mv[dir][0][1], 2 * block_s, mb_y >> 1);
2490 for (i = 0; i < 2; i++) {
2502 ref2picture, pix_op,
2503 s->
mv[dir][i][0], s->
mv[dir][i][1] +
2504 2 * block_s * i, block_s, mb_y >> 1);
2506 dest_y += 2 * block_s * s->
linesize;
2513 for (i = 0; i < 2; i++) {
2515 for (j = 0; j < 2; j++) {
2518 ref_picture, pix_op,
2519 s->
mv[dir][2 * i + j][0],
2520 s->
mv[dir][2 * i + j][1],
2526 for (i = 0; i < 2; i++) {
2529 ref_picture, pix_op,
2530 s->
mv[dir][2 * i][0],s->
mv[dir][2 * i][1],
2531 2 * block_s, mb_y >> 1);
2554 int my_max = INT_MIN, my_min = INT_MAX, qpel_shift = !s->
quarter_sample;
2555 int my,
off, i, mvs;
2574 for (i = 0; i < mvs; i++) {
2575 my = s->
mv[dir][i][1]<<qpel_shift;
2576 my_max =
FFMAX(my_max, my);
2577 my_min =
FFMIN(my_min, my);
2580 off = (
FFMAX(-my_min, my_max) + 63) >> 6;
2589 int16_t *
block,
int i,
uint8_t *dest,
int line_size,
int qscale)
2605 int16_t *
block,
int i,
uint8_t *dest,
int line_size,
int qscale)
2627 memset(s->
ac_val[0][xy ], 0, 32 *
sizeof(int16_t));
2628 memset(s->
ac_val[0][xy + wrap], 0, 32 *
sizeof(int16_t));
2641 memset(s->
ac_val[1][xy], 0, 16 *
sizeof(int16_t));
2642 memset(s->
ac_val[2][xy], 0, 16 *
sizeof(int16_t));
2659 int lowres_flag,
int is_mpeg12)
2672 for(j=0; j<64; j++){
2696 uint8_t *dest_y, *dest_cb, *dest_cr;
2697 int dct_linesize, dct_offset;
2703 const int block_size= lowres_flag ? 8>>s->
avctx->
lowres : 8;
2722 dct_offset = s->
interlaced_dct ? linesize : linesize * block_size;
2726 dest_cb= s->
dest[1];
2727 dest_cr= s->
dest[2];
2810 add_dct(s, block[0], 0, dest_y , dct_linesize);
2811 add_dct(s, block[1], 1, dest_y + block_size, dct_linesize);
2812 add_dct(s, block[2], 2, dest_y + dct_offset , dct_linesize);
2813 add_dct(s, block[3], 3, dest_y + dct_offset + block_size, dct_linesize);
2817 add_dct(s, block[4], 4, dest_cb, uvlinesize);
2818 add_dct(s, block[5], 5, dest_cr, uvlinesize);
2822 dct_offset = s->
interlaced_dct ? uvlinesize : uvlinesize*block_size;
2824 add_dct(s, block[4], 4, dest_cb, dct_linesize);
2825 add_dct(s, block[5], 5, dest_cr, dct_linesize);
2826 add_dct(s, block[6], 6, dest_cb+dct_offset, dct_linesize);
2827 add_dct(s, block[7], 7, dest_cr+dct_offset, dct_linesize);
2829 add_dct(s, block[8], 8, dest_cb+block_size, dct_linesize);
2830 add_dct(s, block[9], 9, dest_cr+block_size, dct_linesize);
2831 add_dct(s, block[10], 10, dest_cb+block_size+dct_offset, dct_linesize);
2832 add_dct(s, block[11], 11, dest_cr+block_size+dct_offset, dct_linesize);
2837 else if (CONFIG_WMV2_DECODER || CONFIG_WMV2_ENCODER) {
2844 put_dct(s, block[1], 1, dest_y + block_size, dct_linesize, s->
qscale);
2845 put_dct(s, block[2], 2, dest_y + dct_offset , dct_linesize, s->
qscale);
2846 put_dct(s, block[3], 3, dest_y + dct_offset + block_size, dct_linesize, s->
qscale);
2863 s->
dsp.
idct_put(dest_y + block_size, dct_linesize, block[1]);
2864 s->
dsp.
idct_put(dest_y + dct_offset , dct_linesize, block[2]);
2865 s->
dsp.
idct_put(dest_y + dct_offset + block_size, dct_linesize, block[3]);
2874 dct_offset = s->
interlaced_dct? uvlinesize : uvlinesize*block_size;
2878 s->
dsp.
idct_put(dest_cb + dct_offset, dct_linesize, block[6]);
2879 s->
dsp.
idct_put(dest_cr + dct_offset, dct_linesize, block[7]);
2881 s->
dsp.
idct_put(dest_cb + block_size, dct_linesize, block[8]);
2882 s->
dsp.
idct_put(dest_cr + block_size, dct_linesize, block[9]);
2883 s->
dsp.
idct_put(dest_cb + block_size + dct_offset, dct_linesize, block[10]);
2884 s->
dsp.
idct_put(dest_cr + block_size + dct_offset, dct_linesize, block[11]);
2914 Picture *last,
int y,
int h,
int picture_structure,
2916 int v_edge_pos,
int h_edge_pos)
2921 const int field_pic = picture_structure !=
PICT_FRAME;
2933 int sides = 0, edge_h;
2935 if (y + h >= v_edge_pos)
2938 edge_h=
FFMIN(h, v_edge_pos - y);
2941 linesize[0], h_edge_pos, edge_h,
2944 linesize[1], h_edge_pos >> hshift, edge_h >> vshift,
2947 linesize[2], h_edge_pos >> hshift, edge_h >> vshift,
2976 offset[2]= (y >> vshift) * src->
linesize[1];
2984 y, picture_structure, h);
3017 s->
dest[0] += s->
mb_y * linesize << mb_size;
3021 s->
dest[0] += (s->
mb_y>>1) * linesize << mb_size;
3045 for(i=0; i<=last; i++){
3046 const int j= scantable[i];
3051 for(i=0; i<=last; i++){
3052 const int j= scantable[i];
3053 const int perm_j= permutation[j];
3054 block[perm_j]= temp[j];
3062 if(s==NULL || s->
picture==NULL)
3087 int16_t *
block,
int n,
int qscale)
3089 int i,
level, nCoeffs;
3090 const uint16_t *quant_matrix;
3097 for(i=1;i<=nCoeffs;i++) {
3103 level = (int)(level * qscale * quant_matrix[j]) >> 3;
3104 level = (level - 1) | 1;
3107 level = (int)(level * qscale * quant_matrix[j]) >> 3;
3108 level = (level - 1) | 1;
3116 int16_t *
block,
int n,
int qscale)
3118 int i,
level, nCoeffs;
3119 const uint16_t *quant_matrix;
3124 for(i=0; i<=nCoeffs; i++) {
3130 level = (((level << 1) + 1) * qscale *
3131 ((int) (quant_matrix[j]))) >> 4;
3132 level = (level - 1) | 1;
3135 level = (((level << 1) + 1) * qscale *
3136 ((int) (quant_matrix[j]))) >> 4;
3137 level = (level - 1) | 1;
3145 int16_t *
block,
int n,
int qscale)
3147 int i,
level, nCoeffs;
3148 const uint16_t *quant_matrix;
3155 for(i=1;i<=nCoeffs;i++) {
3161 level = (int)(level * qscale * quant_matrix[j]) >> 3;
3164 level = (int)(level * qscale * quant_matrix[j]) >> 3;
3172 int16_t *
block,
int n,
int qscale)
3174 int i,
level, nCoeffs;
3175 const uint16_t *quant_matrix;
3184 for(i=1;i<=nCoeffs;i++) {
3190 level = (int)(level * qscale * quant_matrix[j]) >> 3;
3193 level = (int)(level * qscale * quant_matrix[j]) >> 3;
3203 int16_t *
block,
int n,
int qscale)
3205 int i,
level, nCoeffs;
3206 const uint16_t *quant_matrix;
3213 for(i=0; i<=nCoeffs; i++) {
3219 level = (((level << 1) + 1) * qscale *
3220 ((int) (quant_matrix[j]))) >> 4;
3223 level = (((level << 1) + 1) * qscale *
3224 ((int) (quant_matrix[j]))) >> 4;
3234 int16_t *
block,
int n,
int qscale)
3236 int i,
level, qmul, qadd;
3245 qadd = (qscale - 1) | 1;
3254 for(i=1; i<=nCoeffs; i++) {
3258 level = level * qmul - qadd;
3260 level = level * qmul + qadd;
3268 int16_t *
block,
int n,
int qscale)
3270 int i,
level, qmul, qadd;
3275 qadd = (qscale - 1) | 1;
3280 for(i=0; i<=nCoeffs; i++) {
3284 level = level * qmul - qadd;
3286 level = level * qmul + qadd;
3300 else if (qscale > 31)
3316 #if CONFIG_ERROR_RESILIENCE