52 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
53 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
58 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
59 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
60 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
61 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
62 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
63 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
64 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
65 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
70 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
71 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
72 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
73 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
74 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
75 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
76 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
77 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
82 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
83 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
84 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
85 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
86 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
87 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
88 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
89 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
94 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
95 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
96 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
97 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
98 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
99 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
100 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
101 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
112 0, 1, 2, 3, 8, 9, 16, 17,
113 10, 11, 4, 5, 6, 7, 15, 14,
114 13, 12, 19, 18, 24, 25, 32, 33,
115 26, 27, 20, 21, 22, 23, 28, 29,
116 30, 31, 34, 35, 40, 41, 48, 49,
117 42, 43, 36, 37, 38, 39, 44, 45,
118 46, 47, 50, 51, 56, 57, 58, 59,
119 52, 53, 54, 55, 60, 61, 62, 63,
123 0, 8, 16, 24, 1, 9, 2, 10,
124 17, 25, 32, 40, 48, 56, 57, 49,
125 41, 33, 26, 18, 3, 11, 4, 12,
126 19, 27, 34, 42, 50, 58, 35, 43,
127 51, 59, 20, 28, 5, 13, 6, 14,
128 21, 29, 36, 44, 52, 60, 37, 45,
129 53, 61, 22, 30, 7, 15, 23, 31,
130 38, 46, 54, 62, 39, 47, 55, 63,
134 int16_t *
block,
int n,
int qscale)
136 int i,
level, nCoeffs;
137 const uint16_t *quant_matrix;
144 for(i=1;i<=nCoeffs;i++) {
150 level = (int)(level * qscale * quant_matrix[j]) >> 3;
151 level = (level - 1) | 1;
154 level = (int)(level * qscale * quant_matrix[j]) >> 3;
155 level = (level - 1) | 1;
163 int16_t *
block,
int n,
int qscale)
165 int i,
level, nCoeffs;
166 const uint16_t *quant_matrix;
171 for(i=0; i<=nCoeffs; i++) {
177 level = (((level << 1) + 1) * qscale *
178 ((int) (quant_matrix[j]))) >> 4;
179 level = (level - 1) | 1;
182 level = (((level << 1) + 1) * qscale *
183 ((int) (quant_matrix[j]))) >> 4;
184 level = (level - 1) | 1;
192 int16_t *
block,
int n,
int qscale)
194 int i,
level, nCoeffs;
195 const uint16_t *quant_matrix;
202 for(i=1;i<=nCoeffs;i++) {
208 level = (int)(level * qscale * quant_matrix[j]) >> 3;
211 level = (int)(level * qscale * quant_matrix[j]) >> 3;
219 int16_t *
block,
int n,
int qscale)
221 int i,
level, nCoeffs;
222 const uint16_t *quant_matrix;
231 for(i=1;i<=nCoeffs;i++) {
237 level = (int)(level * qscale * quant_matrix[j]) >> 3;
240 level = (int)(level * qscale * quant_matrix[j]) >> 3;
250 int16_t *
block,
int n,
int qscale)
252 int i,
level, nCoeffs;
253 const uint16_t *quant_matrix;
260 for(i=0; i<=nCoeffs; i++) {
266 level = (((level << 1) + 1) * qscale *
267 ((int) (quant_matrix[j]))) >> 4;
270 level = (((level << 1) + 1) * qscale *
271 ((int) (quant_matrix[j]))) >> 4;
281 int16_t *
block,
int n,
int qscale)
283 int i,
level, qmul, qadd;
292 qadd = (qscale - 1) | 1;
301 for(i=1; i<=nCoeffs; i++) {
305 level = level * qmul - qadd;
307 level = level * qmul + qadd;
315 int16_t *
block,
int n,
int qscale)
317 int i,
level, qmul, qadd;
322 qadd = (qscale - 1) | 1;
327 for(i=0; i<=nCoeffs; i++) {
331 level = level * qmul - qadd;
333 level = level * qmul + qadd;
342 int mb_x,
int mb_y,
int mb_intra,
int mb_skipped)
352 memcpy(s->
mv,
mv,
sizeof(*
mv));
371 memset(dst + h*linesize, 128, 16);
377 memset(dst + h*linesize, 128, 8);
392 for (i=0; i<4; i++) {
412 if (HAVE_INTRINSICS_NEON)
505 if (r < 0 || !pic->f->buf[0]) {
513 for (i = 0; pic->
f->
data[i]; i++) {
538 "get_buffer() failed (stride changed)\n");
545 "get_buffer() failed (uv stride mismatch)\n");
553 "get_buffer() failed to allocate context scratch buffers.\n");
575 for (i = 0; i < 2; i++) {
606 int mv_size = 2 * (b8_array_size + 4) *
sizeof(int16_t);
607 int ref_index_size = 4 * mb_array_size;
609 for (i = 0; mv_size && i < 2; i++) {
626 #define MAKE_WRITABLE(table) \
629 (ret = av_buffer_make_writable(&pic->table)) < 0)\
640 for (i = 0; i < 2; i++) {
692 for (i = 0; i < 2; i++) {
728 memset((
uint8_t*)pic + off, 0,
sizeof(*pic) - off);
735 #define UPDATE_TABLE(table)\
738 (!dst->table || dst->table->buffer != src->table->buffer)) {\
739 av_buffer_unref(&dst->table);\
740 dst->table = av_buffer_ref(src->table);\
742 ff_free_picture_tables(dst);\
743 return AVERROR(ENOMEM);\
754 for (i = 0; i < 2; i++) {
765 for (i = 0; i < 2; i++) {
827 int yc_size = y_size + 2 * c_size;
847 2 * 64 *
sizeof(
int), fail)
853 for (i = 0; i < 12; i++) {
862 yc_size *
sizeof(int16_t) * 16, fail);
895 #define COPY(a) bak->a = src->a
896 COPY(edge_emu_buffer);
901 COPY(obmc_scratchpad);
929 for (i = 0; i < 12; i++) {
937 "scratch buffers.\n");
965 if (
s1->context_initialized){
997 if (
s1->picture[i].f->buf[0] &&
1002 #define UPDATE_PICTURE(pic)\
1004 ff_mpeg_unref_picture(s, &s->pic);\
1005 if (s1->pic.f && s1->pic.f->buf[0])\
1006 ret = ff_mpeg_ref_picture(s, &s->pic, &s1->pic);\
1008 ret = update_picture_tables(&s->pic, &s1->pic);\
1028 (
char *) &
s1->pb_field_time +
sizeof(
s1->pb_field_time) -
1029 (
char *) &
s1->last_time_base);
1039 if (
s1->bitstream_buffer) {
1040 if (
s1->bitstream_buffer_size +
1044 s1->allocated_bitstream_buffer_size);
1047 s1->bitstream_buffer_size);
1057 "scratch buffers.\n");
1062 "be allocated due to unknown size.\n");
1067 (
char *) &
s1->rtp_mode - (
char *) &
s1->progressive_sequence);
1069 if (!
s1->first_field) {
1071 if (
s1->current_picture_ptr)
1170 int y_size, c_size, yc_size, i, mb_array_size, mv_table_size, x,
y;
1194 yc_size = y_size + 2 * c_size;
1227 mb_array_size *
sizeof(
float), fail);
1229 mb_array_size *
sizeof(
float), fail);
1236 for (i = 0; i < 2; i++) {
1238 for (j = 0; j < 2; j++) {
1239 for (k = 0; k < 2; k++) {
1242 mv_table_size * 2 *
sizeof(int16_t),
1271 for (i = 0; i < yc_size; i++)
1295 int nb_slices = (HAVE_THREADS &&
1309 "decoding to AV_PIX_FMT_NONE is not supported.\n");
1320 " reducing to %d\n", nb_slices, max_slices);
1321 nb_slices = max_slices;
1372 if (nb_slices > 1) {
1373 for (i = 1; i < nb_slices; i++) {
1378 for (i = 0; i < nb_slices; i++) {
1382 (s->
mb_height * (i) + nb_slices / 2) / nb_slices;
1384 (s->
mb_height * (i + 1) + nb_slices / 2) / nb_slices;
1423 for (i = 0; i < 2; i++) {
1424 for (j = 0; j < 2; j++) {
1425 for (k = 0; k < 2; k++) {
1500 if (nb_slices > 1) {
1501 for (i = 1; i < nb_slices; i++) {
1506 for (i = 0; i < nb_slices; i++) {
1510 (s->
mb_height * (i) + nb_slices / 2) / nb_slices;
1512 (s->
mb_height * (i + 1) + nb_slices / 2) / nb_slices;
1593 for (last = 0; last < 2; last++) {
1602 memset(max_level, 0,
MAX_RUN + 1);
1604 memset(index_run, rl->
n,
MAX_RUN + 1);
1605 for (i = start; i <
end; i++) {
1608 if (index_run[run] == rl->
n)
1610 if (level > max_level[run])
1612 if (run > max_run[level])
1616 rl->
max_level[last] = static_store[last];
1629 memcpy(rl->
index_run[last], index_run, MAX_RUN + 1);
1637 VLC vlc = { .
table =
table, .table_allocated = static_size };
1641 for (q = 0; q < 32; q++) {
1643 int qadd = (q - 1) | 1;
1650 int code = vlc.
table[i][0];
1657 }
else if (len < 0) {
1661 if (code == rl->
n) {
1667 if (code >= rl->
last) run += 192;
1692 if (!pic->
f->
buf[0])
1716 "Internal error, picture buffer overflow\n");
1748 int i, h_chroma_shift, v_chroma_shift;
1752 for(i=0; i<frame->
height; i++)
1756 0x80, FF_CEIL_RSHIFT(frame->
width, h_chroma_shift));
1758 0x80, FF_CEIL_RSHIFT(frame->
width, h_chroma_shift));
1792 "releasing zombie picture\n");
1852 av_dlog(s->
avctx,
"L%p N%p C%p L%p N%p C%p type:%d drop:%d\n",
1862 int h_chroma_shift, v_chroma_shift;
1864 &h_chroma_shift, &v_chroma_shift);
1867 "allocating dummy last picture for B frame\n");
1870 "warning: first frame is no keyframe\n");
1873 "allocate dummy last picture for field based first keyframe\n");
1893 for(i=0; i<avctx->
height; i++)
1895 0x80, avctx->
width);
1898 0x80, FF_CEIL_RSHIFT(avctx->
width, h_chroma_shift));
1900 0x80, FF_CEIL_RSHIFT(avctx->
width, h_chroma_shift));
1904 for(i=0; i<avctx->
height; i++)
1934 #if 0 // BUFREF-FIXME
1958 for (i = 0; i < 4; i++) {
2003 static int clip_line(
int *sx,
int *sy,
int *ex,
int *ey,
int maxx)
2011 *sy = *ey + (*sy - *ey) * (int64_t)*ex / (*ex - *sx);
2018 *ey = *sy + (*ey - *sy) * (int64_t)(maxx - *sx) / (*ex - *sx);
2037 if (
clip_line(&sx, &sy, &ex, &ey, w - 1))
2039 if (
clip_line(&sy, &sx, &ey, &ex, h - 1))
2042 sx = av_clip(sx, 0, w - 1);
2043 sy = av_clip(sy, 0, h - 1);
2044 ex = av_clip(ex, 0, w - 1);
2045 ey = av_clip(ey, 0, h - 1);
2047 buf[sy * stride + sx] +=
color;
2054 buf += sx + sy * stride;
2056 f = ((ey - sy) << 16) / ex;
2057 for (x = 0; x <= ex; x++) {
2059 fr = (x * f) & 0xFFFF;
2060 buf[y * stride + x] += (color * (0x10000 - fr)) >> 16;
2061 if(fr) buf[(y + 1) * stride + x] += (color * fr ) >> 16;
2068 buf += sx + sy * stride;
2071 f = ((ex - sx) << 16) / ey;
2074 for(y= 0; y <= ey; y++){
2076 fr = (y*f) & 0xFFFF;
2077 buf[y * stride + x] += (color * (0x10000 - fr)) >> 16;
2078 if(fr) buf[y * stride + x + 1] += (color * fr ) >> 16;
2091 int ey,
int w,
int h,
int stride,
int color,
int tail,
int direction)
2100 sx = av_clip(sx, -100, w + 100);
2101 sy = av_clip(sy, -100, h + 100);
2102 ex = av_clip(ex, -100, w + 100);
2103 ey = av_clip(ey, -100, h + 100);
2108 if (dx * dx + dy * dy > 3 * 3) {
2122 draw_line(buf, sx, sy, sx + rx, sy + ry, w, h, stride, color);
2123 draw_line(buf, sx, sy, sx - ry, sy + rx, w, h, stride, color);
2125 draw_line(buf, sx, sy, ex, ey, w, h, stride, color);
2130 int dst_x,
int dst_y,
2131 int src_x,
int src_y,
2134 if (dst_x == src_x && dst_y == src_y)
2142 mb->
source = direction ? 1 : -1;
2151 uint32_t *mbtype_table, int8_t *qscale_table, int16_t (*motion_val[2])[2],
2153 int mb_width,
int mb_height,
int mb_stride,
int quarter_sample)
2156 const int shift = 1 + quarter_sample;
2158 const int mv_stride = (mb_width << mv_sample_log2) +
2160 int mb_x, mb_y, mbcount = 0;
2168 for (mb_y = 0; mb_y < mb_height; mb_y++) {
2169 for (mb_x = 0; mb_x < mb_width; mb_x++) {
2170 int i, direction, mb_type = mbtype_table[mb_x + mb_y * mb_stride];
2171 for (direction = 0; direction < 2; direction++) {
2175 for (i = 0; i < 4; i++) {
2176 int sx = mb_x * 16 + 4 + 8 * (i & 1);
2177 int sy = mb_y * 16 + 4 + 8 * (i >> 1);
2178 int xy = (mb_x * 2 + (i & 1) +
2179 (mb_y * 2 + (i >> 1)) * mv_stride) << (mv_sample_log2 - 1);
2180 int mx = (motion_val[direction][xy][0] >>
shift) + sx;
2181 int my = (motion_val[direction][xy][1] >>
shift) + sy;
2182 mbcount +=
add_mb(mvs + mbcount, mb_type, sx, sy, mx, my, direction);
2184 }
else if (
IS_16X8(mb_type)) {
2185 for (i = 0; i < 2; i++) {
2186 int sx = mb_x * 16 + 8;
2187 int sy = mb_y * 16 + 4 + 8 * i;
2188 int xy = (mb_x * 2 + (mb_y * 2 + i) * mv_stride) << (mv_sample_log2 - 1);
2189 int mx = (motion_val[direction][xy][0] >>
shift);
2190 int my = (motion_val[direction][xy][1] >>
shift);
2195 mbcount +=
add_mb(mvs + mbcount, mb_type, sx, sy, mx + sx, my + sy, direction);
2197 }
else if (
IS_8X16(mb_type)) {
2198 for (i = 0; i < 2; i++) {
2199 int sx = mb_x * 16 + 4 + 8 * i;
2200 int sy = mb_y * 16 + 8;
2201 int xy = (mb_x * 2 + i + mb_y * 2 * mv_stride) << (mv_sample_log2 - 1);
2202 int mx = motion_val[direction][xy][0] >>
shift;
2203 int my = motion_val[direction][xy][1] >>
shift;
2208 mbcount +=
add_mb(mvs + mbcount, mb_type, sx, sy, mx + sx, my + sy, direction);
2211 int sx = mb_x * 16 + 8;
2212 int sy = mb_y * 16 + 8;
2213 int xy = (mb_x + mb_y * mv_stride) << mv_sample_log2;
2214 int mx = (motion_val[direction][xy][0]>>
shift) + sx;
2215 int my = (motion_val[direction][xy][1]>>
shift) + sy;
2216 mbcount +=
add_mb(mvs + mbcount, mb_type, sx, sy, mx, my, direction);
2236 if (avctx->
hwaccel || !mbtype_table
2246 for (y = 0; y < mb_height; y++) {
2247 for (x = 0; x < mb_width; x++) {
2249 int count = mbskip_table[x + y * mb_stride];
2256 qscale_table[x + y * mb_stride]);
2259 int mb_type = mbtype_table[x + y * mb_stride];
2275 else if (
IS_GMC(mb_type))
2315 int h_chroma_shift, v_chroma_shift, block_height;
2317 const int shift = 1 + quarter_sample;
2323 const int mv_stride = (mb_width << mv_sample_log2) +
2334 ptr = pict->
data[0];
2336 block_height = 16 >> v_chroma_shift;
2338 for (mb_y = 0; mb_y < mb_height; mb_y++) {
2340 for (mb_x = 0; mb_x < mb_width; mb_x++) {
2341 const int mb_index = mb_x + mb_y * mb_stride;
2343 if ((avctx->
debug_mv) && motion_val[0]) {
2345 for (type = 0; type < 3; type++) {
2367 if (!
USES_LIST(mbtype_table[mb_index], direction))
2370 if (
IS_8X8(mbtype_table[mb_index])) {
2372 for (i = 0; i < 4; i++) {
2373 int sx = mb_x * 16 + 4 + 8 * (i & 1);
2374 int sy = mb_y * 16 + 4 + 8 * (i >> 1);
2375 int xy = (mb_x * 2 + (i & 1) +
2376 (mb_y * 2 + (i >> 1)) * mv_stride) << (mv_sample_log2 - 1);
2377 int mx = (motion_val[direction][xy][0] >>
shift) + sx;
2378 int my = (motion_val[direction][xy][1] >>
shift) + sy;
2380 height, pict->
linesize[0], 100, 0, direction);
2382 }
else if (
IS_16X8(mbtype_table[mb_index])) {
2384 for (i = 0; i < 2; i++) {
2385 int sx = mb_x * 16 + 8;
2386 int sy = mb_y * 16 + 4 + 8 * i;
2387 int xy = (mb_x * 2 + (mb_y * 2 + i) * mv_stride) << (mv_sample_log2 - 1);
2388 int mx = (motion_val[direction][xy][0] >>
shift);
2389 int my = (motion_val[direction][xy][1] >>
shift);
2394 draw_arrow(ptr, sx, sy, mx + sx, my + sy, width,
2395 height, pict->
linesize[0], 100, 0, direction);
2397 }
else if (
IS_8X16(mbtype_table[mb_index])) {
2399 for (i = 0; i < 2; i++) {
2400 int sx = mb_x * 16 + 4 + 8 * i;
2401 int sy = mb_y * 16 + 8;
2402 int xy = (mb_x * 2 + i + mb_y * 2 * mv_stride) << (mv_sample_log2 - 1);
2403 int mx = motion_val[direction][xy][0] >>
shift;
2404 int my = motion_val[direction][xy][1] >>
shift;
2409 draw_arrow(ptr, sx, sy, mx + sx, my + sy, width,
2410 height, pict->
linesize[0], 100, 0, direction);
2413 int sx= mb_x * 16 + 8;
2414 int sy= mb_y * 16 + 8;
2415 int xy= (mb_x + mb_y * mv_stride) << mv_sample_log2;
2416 int mx= (motion_val[direction][xy][0]>>
shift) + sx;
2417 int my= (motion_val[direction][xy][1]>>
shift) + sy;
2418 draw_arrow(ptr, sx, sy, mx, my, width, height, pict->
linesize[0], 100, 0, direction);
2424 uint64_t
c = (qscale_table[mb_index] * 128 / 31) *
2425 0x0101010101010101ULL;
2427 for (y = 0; y < block_height; y++) {
2428 *(uint64_t *)(pict->
data[1] + 8 * mb_x +
2429 (block_height * mb_y + y) *
2431 *(uint64_t *)(pict->
data[2] + 8 * mb_x +
2432 (block_height * mb_y + y) *
2438 int mb_type = mbtype_table[mb_index];
2441 #define COLOR(theta, r) \
2442 u = (int)(128 + r * cos(theta * 3.141592 / 180)); \
2443 v = (int)(128 + r * sin(theta * 3.141592 / 180));
2460 }
else if (
IS_GMC(mb_type)) {
2462 }
else if (
IS_SKIP(mb_type)) {
2473 u *= 0x0101010101010101ULL;
2474 v *= 0x0101010101010101ULL;
2475 for (y = 0; y < block_height; y++) {
2476 *(uint64_t *)(pict->
data[1] + 8 * mb_x +
2477 (block_height * mb_y + y) * pict->
linesize[1]) = u;
2478 *(uint64_t *)(pict->
data[2] + 8 * mb_x +
2479 (block_height * mb_y + y) * pict->
linesize[2]) = v;
2484 *(uint64_t *)(pict->
data[0] + 16 * mb_x + 0 +
2485 (16 * mb_y + 8) * pict->
linesize[0]) ^= 0x8080808080808080ULL;
2486 *(uint64_t *)(pict->
data[0] + 16 * mb_x + 8 +
2487 (16 * mb_y + 8) * pict->
linesize[0]) ^= 0x8080808080808080ULL;
2490 for (y = 0; y < 16; y++)
2491 pict->
data[0][16 * mb_x + 8 + (16 * mb_y + y) *
2494 if (
IS_8X8(mb_type) && mv_sample_log2 >= 2) {
2495 int dm = 1 << (mv_sample_log2 - 2);
2496 for (i = 0; i < 4; i++) {
2497 int sx = mb_x * 16 + 8 * (i & 1);
2498 int sy = mb_y * 16 + 8 * (i >> 1);
2499 int xy = (mb_x * 2 + (i & 1) +
2500 (mb_y * 2 + (i >> 1)) * mv_stride) << (mv_sample_log2 - 1);
2503 if (mv[0] != mv[dm] ||
2504 mv[dm * mv_stride] != mv[dm * (mv_stride + 1)])
2505 for (y = 0; y < 8; y++)
2506 pict->
data[0][sx + 4 + (sy + y) * pict->
linesize[0]] ^= 0x80;
2507 if (mv[0] != mv[dm * mv_stride] || mv[dm] != mv[dm * (mv_stride + 1)])
2508 *(uint64_t *)(pict->
data[0] + sx + (sy + 4) *
2509 pict->
linesize[0]) ^= 0x8080808080808080ULL;
2518 mbskip_table[mb_index] = 0;
2545 int field_based,
int field_select,
2546 int src_x,
int src_y,
2548 int h_edge_pos,
int v_edge_pos,
2550 int motion_x,
int motion_y)
2553 const int op_index =
FFMIN(lowres, 3);
2554 const int s_mask = (2 <<
lowres) - 1;
2563 sx = motion_x & s_mask;
2564 sy = motion_y & s_mask;
2565 src_x += motion_x >> lowres + 1;
2566 src_y += motion_y >> lowres + 1;
2568 src += src_y * stride + src_x;
2570 if ((
unsigned)src_x >
FFMAX( h_edge_pos - (!!sx) - w, 0) ||
2571 (unsigned)src_y >
FFMAX((v_edge_pos >> field_based) - (!!sy) - h, 0)) {
2574 w + 1, (h + 1) << field_based,
2575 src_x, src_y << field_based,
2576 h_edge_pos, v_edge_pos);
2581 sx = (sx << 2) >>
lowres;
2582 sy = (sy << 2) >>
lowres;
2585 pix_op[op_index](dest,
src, stride, h, sx, sy);
2599 int motion_x,
int motion_y,
2602 uint8_t *ptr_y, *ptr_cb, *ptr_cr;
2603 int mx, my, src_x, src_y, uvsrc_x, uvsrc_y, sx, sy, uvsx, uvsy;
2604 ptrdiff_t uvlinesize, linesize;
2607 const int block_s = 8>>
lowres;
2608 const int s_mask = (2 <<
lowres) - 1;
2621 motion_y += (bottom_field - field_select)*((1 << lowres)-1);
2624 sx = motion_x & s_mask;
2625 sy = motion_y & s_mask;
2626 src_x = s->
mb_x * 2 * block_s + (motion_x >> lowres + 1);
2627 src_y = (mb_y * 2 * block_s >> field_based) + (motion_y >> lowres + 1);
2630 uvsx = ((motion_x >> 1) & s_mask) | (sx & 1);
2631 uvsy = ((motion_y >> 1) & s_mask) | (sy & 1);
2632 uvsrc_x = src_x >> 1;
2633 uvsrc_y = src_y >> 1;
2638 uvsx = (2 * mx) & s_mask;
2639 uvsy = (2 * my) & s_mask;
2640 uvsrc_x = s->
mb_x * block_s + (mx >>
lowres);
2641 uvsrc_y = mb_y * block_s + (my >>
lowres);
2648 uvsrc_x = s->
mb_x * block_s + (mx >> lowres + 1);
2649 uvsrc_y = (mb_y * block_s >> field_based) + (my >> lowres + 1);
2655 uvsy = motion_y & s_mask;
2657 uvsrc_x = s->
mb_x*block_s + (mx >> (lowres+1));
2660 uvsx = motion_x & s_mask;
2661 uvsy = motion_y & s_mask;
2668 ptr_y = ref_picture[0] + src_y * linesize + src_x;
2669 ptr_cb = ref_picture[1] + uvsrc_y * uvlinesize + uvsrc_x;
2670 ptr_cr = ref_picture[2] + uvsrc_y * uvlinesize + uvsrc_x;
2672 if ((
unsigned) src_x >
FFMAX( h_edge_pos - (!!sx) - 2 * block_s, 0) || uvsrc_y<0 ||
2673 (
unsigned) src_y >
FFMAX((v_edge_pos >> field_based) - (!!sy) - h, 0)) {
2675 linesize >> field_based, linesize >> field_based,
2676 17, 17 + field_based,
2677 src_x, src_y << field_based, h_edge_pos,
2684 uvlinesize >> field_based, uvlinesize >> field_based,
2686 uvsrc_x, uvsrc_y << field_based,
2687 h_edge_pos >> 1, v_edge_pos >> 1);
2689 uvlinesize >> field_based,uvlinesize >> field_based,
2691 uvsrc_x, uvsrc_y << field_based,
2692 h_edge_pos >> 1, v_edge_pos >> 1);
2711 sx = (sx << 2) >>
lowres;
2712 sy = (sy << 2) >>
lowres;
2713 pix_op[lowres - 1](dest_y, ptr_y, linesize, h, sx, sy);
2717 uvsx = (uvsx << 2) >>
lowres;
2718 uvsy = (uvsy << 2) >>
lowres;
2720 pix_op[op_index](dest_cb, ptr_cb, uvlinesize, hc, uvsx, uvsy);
2721 pix_op[op_index](dest_cr, ptr_cr, uvlinesize, hc, uvsx, uvsy);
2734 const int op_index =
FFMIN(lowres, 3);
2735 const int block_s = 8 >>
lowres;
2736 const int s_mask = (2 <<
lowres) - 1;
2737 const int h_edge_pos = s->
h_edge_pos >> lowres + 1;
2738 const int v_edge_pos = s->
v_edge_pos >> lowres + 1;
2739 int emu = 0, src_x, src_y, sx, sy;
2755 src_x = s->
mb_x * block_s + (mx >> lowres + 1);
2756 src_y = s->
mb_y * block_s + (my >> lowres + 1);
2759 ptr = ref_picture[1] +
offset;
2760 if ((
unsigned) src_x >
FFMAX(h_edge_pos - (!!sx) - block_s, 0) ||
2761 (unsigned) src_y >
FFMAX(v_edge_pos - (!!sy) - block_s, 0)) {
2765 src_x, src_y, h_edge_pos, v_edge_pos);
2769 sx = (sx << 2) >>
lowres;
2770 sy = (sy << 2) >>
lowres;
2771 pix_op[op_index](dest_cb, ptr, s->
uvlinesize, block_s, sx, sy);
2773 ptr = ref_picture[2] +
offset;
2778 src_x, src_y, h_edge_pos, v_edge_pos);
2781 pix_op[op_index](dest_cr, ptr, s->
uvlinesize, block_s, sx, sy);
2798 int dir,
uint8_t **ref_picture,
2804 const int block_s = 8 >>
lowres;
2813 ref_picture, pix_op,
2814 s->
mv[dir][0][0], s->
mv[dir][0][1],
2820 for (i = 0; i < 4; i++) {
2823 ref_picture[0], 0, 0,
2824 (2 * mb_x + (i & 1)) * block_s,
2825 (2 * mb_y + (i >> 1)) * block_s,
2828 block_s, block_s, pix_op,
2829 s->
mv[dir][i][0], s->
mv[dir][i][1]);
2831 mx += s->
mv[dir][i][0];
2832 my += s->
mv[dir][i][1];
2844 ref_picture, pix_op,
2845 s->
mv[dir][0][0], s->
mv[dir][0][1],
2850 ref_picture, pix_op,
2851 s->
mv[dir][1][0], s->
mv[dir][1][1],
2861 ref_picture, pix_op,
2863 s->
mv[dir][0][1], 2 * block_s, mb_y >> 1);
2867 for (i = 0; i < 2; i++) {
2872 ref2picture = ref_picture;
2879 ref2picture, pix_op,
2880 s->
mv[dir][i][0], s->
mv[dir][i][1] +
2881 2 * block_s * i, block_s, mb_y >> 1);
2883 dest_y += 2 * block_s * s->
linesize;
2890 for (i = 0; i < 2; i++) {
2892 for (j = 0; j < 2; j++) {
2895 ref_picture, pix_op,
2896 s->
mv[dir][2 * i + j][0],
2897 s->
mv[dir][2 * i + j][1],
2903 for (i = 0; i < 2; i++) {
2906 ref_picture, pix_op,
2907 s->
mv[dir][2 * i][0],s->
mv[dir][2 * i][1],
2908 2 * block_s, mb_y >> 1);
2931 int my_max = INT_MIN, my_min = INT_MAX, qpel_shift = !s->
quarter_sample;
2932 int my, off, i, mvs;
2951 for (i = 0; i < mvs; i++) {
2952 my = s->
mv[dir][i][1]<<qpel_shift;
2953 my_max =
FFMAX(my_max, my);
2954 my_min =
FFMIN(my_min, my);
2957 off = (
FFMAX(-my_min, my_max) + 63) >> 6;
2966 int16_t *
block,
int i,
uint8_t *dest,
int line_size,
int qscale)
2982 int16_t *
block,
int i,
uint8_t *dest,
int line_size,
int qscale)
3004 memset(s->
ac_val[0][xy ], 0, 32 *
sizeof(int16_t));
3005 memset(s->
ac_val[0][xy + wrap], 0, 32 *
sizeof(int16_t));
3018 memset(s->
ac_val[1][xy], 0, 16 *
sizeof(int16_t));
3019 memset(s->
ac_val[2][xy], 0, 16 *
sizeof(int16_t));
3036 int lowres_flag,
int is_mpeg12)
3051 for(j=0; j<64; j++){
3078 uint8_t *dest_y, *dest_cb, *dest_cr;
3079 int dct_linesize, dct_offset;
3085 const int block_size= lowres_flag ? 8>>s->
avctx->
lowres : 8;
3104 dct_offset = s->
interlaced_dct ? linesize : linesize * block_size;
3108 dest_cb= s->
dest[1];
3109 dest_cr= s->
dest[2];
3192 add_dct(s, block[0], 0, dest_y , dct_linesize);
3193 add_dct(s, block[1], 1, dest_y + block_size, dct_linesize);
3194 add_dct(s, block[2], 2, dest_y + dct_offset , dct_linesize);
3195 add_dct(s, block[3], 3, dest_y + dct_offset + block_size, dct_linesize);
3199 add_dct(s, block[4], 4, dest_cb, uvlinesize);
3200 add_dct(s, block[5], 5, dest_cr, uvlinesize);
3204 dct_offset = s->
interlaced_dct ? uvlinesize : uvlinesize*block_size;
3206 add_dct(s, block[4], 4, dest_cb, dct_linesize);
3207 add_dct(s, block[5], 5, dest_cr, dct_linesize);
3208 add_dct(s, block[6], 6, dest_cb+dct_offset, dct_linesize);
3209 add_dct(s, block[7], 7, dest_cr+dct_offset, dct_linesize);
3211 add_dct(s, block[8], 8, dest_cb+block_size, dct_linesize);
3212 add_dct(s, block[9], 9, dest_cr+block_size, dct_linesize);
3213 add_dct(s, block[10], 10, dest_cb+block_size+dct_offset, dct_linesize);
3214 add_dct(s, block[11], 11, dest_cr+block_size+dct_offset, dct_linesize);
3219 else if (CONFIG_WMV2_DECODER || CONFIG_WMV2_ENCODER) {
3226 put_dct(s, block[1], 1, dest_y + block_size, dct_linesize, s->
qscale);
3227 put_dct(s, block[2], 2, dest_y + dct_offset , dct_linesize, s->
qscale);
3228 put_dct(s, block[3], 3, dest_y + dct_offset + block_size, dct_linesize, s->
qscale);
3245 s->
idsp.
idct_put(dest_y + block_size, dct_linesize, block[1]);
3246 s->
idsp.
idct_put(dest_y + dct_offset, dct_linesize, block[2]);
3247 s->
idsp.
idct_put(dest_y + dct_offset + block_size, dct_linesize, block[3]);
3256 dct_offset = s->
interlaced_dct ? uvlinesize : uvlinesize*block_size;
3260 s->
idsp.
idct_put(dest_cb + dct_offset, dct_linesize, block[6]);
3261 s->
idsp.
idct_put(dest_cr + dct_offset, dct_linesize, block[7]);
3263 s->
idsp.
idct_put(dest_cb + block_size, dct_linesize, block[8]);
3264 s->
idsp.
idct_put(dest_cr + block_size, dct_linesize, block[9]);
3265 s->
idsp.
idct_put(dest_cb + block_size + dct_offset, dct_linesize, block[10]);
3266 s->
idsp.
idct_put(dest_cr + block_size + dct_offset, dct_linesize, block[11]);
3320 s->
dest[0] += s->
mb_y * linesize << mb_size;
3324 s->
dest[0] += (s->
mb_y>>1) * linesize << mb_size;
3348 for(i=0; i<=last; i++){
3349 const int j= scantable[i];
3354 for(i=0; i<=last; i++){
3355 const int j= scantable[i];
3356 const int perm_j= permutation[j];
3357 block[perm_j]= temp[j];
3396 else if (qscale > 31)