24 #define ROUNDED_DIV_MVx2(a, b) \
25 (VP56mv) { .x = ROUNDED_DIV(a.x + b.x, 2), .y = ROUNDED_DIV(a.y + b.y, 2) }
26 #define ROUNDED_DIV_MVx4(a, b, c, d) \
27 (VP56mv) { .x = ROUNDED_DIV(a.x + b.x + c.x + d.x, 4), \
28 .y = ROUNDED_DIV(a.y + b.y + c.y + d.y, 4) }
33 { 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 },
34 { 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4 },
38 int row = s->
row, col = s->
col;
60 row << 3, col << 3, &b->
mv[0][0],,,,, 8, 4, w1, h1, 0);
62 s->
dst[0] + 4 * ls_y, ls_y,
64 (row << 3) + 4, col << 3, &b->
mv[2][0],,,,, 8, 4, w1, h1, 0);
70 s->
dst[1], s->
dst[2], ls_uv,
73 row << 2, col << (3 - s->
ss_h),
74 &uvmv,,,,, 8 >> s->
ss_h, 4, w1, h1, 0);
77 s->
dst[1], s->
dst[2], ls_uv,
80 row << 3, col << (3 - s->
ss_h),
81 &b->
mv[0][0],,,,, 8 >> s->
ss_h, 4, w1, h1, 0);
91 s->
dst[1] + 4 * ls_uv, s->
dst[2] + 4 * ls_uv, ls_uv,
94 (row << 3) + 4, col << (3 - s->
ss_h),
95 &uvmv,,,,, 8 >> s->
ss_h, 4, w1, h1, 0);
100 ref2->data[0], ref2->linesize[0], tref2,
101 row << 3, col << 3, &b->
mv[0][1],,,,, 8, 4, w2, h2, 1);
103 s->
dst[0] + 4 * ls_y, ls_y,
104 ref2->data[0], ref2->linesize[0], tref2,
105 (row << 3) + 4, col << 3, &b->
mv[2][1],,,,, 8, 4, w2, h2, 1);
111 s->
dst[1], s->
dst[2], ls_uv,
112 ref2->data[1], ref2->linesize[1],
113 ref2->data[2], ref2->linesize[2], tref2,
114 row << 2, col << (3 - s->
ss_h),
115 &uvmv,,,,, 8 >> s->
ss_h, 4, w2, h2, 1);
118 s->
dst[1], s->
dst[2], ls_uv,
119 ref2->data[1], ref2->linesize[1],
120 ref2->data[2], ref2->linesize[2], tref2,
121 row << 3, col << (3 - s->
ss_h),
122 &b->
mv[0][1],,,,, 8 >> s->
ss_h, 4, w2, h2, 1);
132 s->
dst[1] + 4 * ls_uv, s->
dst[2] + 4 * ls_uv, ls_uv,
133 ref2->data[1], ref2->linesize[1],
134 ref2->data[2], ref2->linesize[2], tref2,
135 (row << 3) + 4, col << (3 - s->
ss_h),
136 &uvmv,,,,, 8 >> s->
ss_h, 4, w2, h2, 1);
142 row << 3, col << 3, &b->
mv[0][0],,,,, 4, 8, w1, h1, 0);
145 row << 3, (col << 3) + 4, &b->
mv[1][0],,,,, 4, 8, w1, h1, 0);
151 s->
dst[1], s->
dst[2], ls_uv,
154 row << (3 - s->
ss_v), col << 2,
155 &uvmv,,,,, 4, 8 >> s->
ss_v, w1, h1, 0);
158 s->
dst[1], s->
dst[2], ls_uv,
161 row << (3 - s->
ss_v), col << 3,
162 &b->
mv[0][0],,,,, 4, 8 >> s->
ss_v, w1, h1, 0);
164 s->
dst[1] + 4 * bytesperpixel,
165 s->
dst[2] + 4 * bytesperpixel, ls_uv,
168 row << (3 - s->
ss_v), (col << 3) + 4,
169 &b->
mv[1][0],,,,, 4, 8 >> s->
ss_v, w1, h1, 0);
174 ref2->data[0], ref2->linesize[0], tref2,
175 row << 3, col << 3, &b->
mv[0][1],,,,, 4, 8, w2, h2, 1);
177 ref2->data[0], ref2->linesize[0], tref2,
178 row << 3, (col << 3) + 4, &b->
mv[1][1],,,,, 4, 8, w2, h2, 1);
184 s->
dst[1], s->
dst[2], ls_uv,
185 ref2->data[1], ref2->linesize[1],
186 ref2->data[2], ref2->linesize[2], tref2,
187 row << (3 - s->
ss_v), col << 2,
188 &uvmv,,,,, 4, 8 >> s->
ss_v, w2, h2, 1);
191 s->
dst[1], s->
dst[2], ls_uv,
192 ref2->data[1], ref2->linesize[1],
193 ref2->data[2], ref2->linesize[2], tref2,
194 row << (3 - s->
ss_v), col << 3,
195 &b->
mv[0][1],,,,, 4, 8 >> s->
ss_v, w2, h2, 1);
197 s->
dst[1] + 4 * bytesperpixel,
198 s->
dst[2] + 4 * bytesperpixel, ls_uv,
199 ref2->data[1], ref2->linesize[1],
200 ref2->data[2], ref2->linesize[2], tref2,
201 row << (3 - s->
ss_v), (col << 3) + 4,
202 &b->
mv[1][1],,,,, 4, 8 >> s->
ss_v, w2, h2, 1);
216 row << 3, col << 3, &b->
mv[0][0],
217 0, 0, 8, 8, 4, 4, w1, h1, 0);
220 row << 3, (col << 3) + 4, &b->
mv[1][0],
221 4, 0, 8, 8, 4, 4, w1, h1, 0);
223 s->
dst[0] + 4 * ls_y, ls_y,
225 (row << 3) + 4, col << 3, &b->
mv[2][0],
226 0, 4, 8, 8, 4, 4, w1, h1, 0);
228 s->
dst[0] + 4 * ls_y + 4 * bytesperpixel, ls_y,
230 (row << 3) + 4, (col << 3) + 4, &b->
mv[3][0],
231 4, 4, 8, 8, 4, 4, w1, h1, 0);
237 b->
mv[2][0], b->
mv[3][0]);
239 s->
dst[1], s->
dst[2], ls_uv,
243 &uvmv, 0, 0, 4, 4, 4, 4, w1, h1, 0);
247 s->
dst[1], s->
dst[2], ls_uv,
251 &uvmv, 0, 0, 8, 4, 4, 4, w1, h1, 0);
254 s->
dst[1] + 4 * bytesperpixel,
255 s->
dst[2] + 4 * bytesperpixel, ls_uv,
258 row << 2, (col << 3) + 4,
259 &uvmv, 4, 0, 8, 4, 4, 4, w1, h1, 0);
266 s->
dst[1], s->
dst[2], ls_uv,
270 &uvmv, 0, 0, 4, 8, 4, 4, w1, h1, 0);
276 s->
dst[1] + 4 * ls_uv, s->
dst[2] + 4 * ls_uv, ls_uv,
279 (row << 3) + 4, col << 2,
280 &uvmv, 0, 4, 4, 8, 4, 4, w1, h1, 0);
283 s->
dst[1], s->
dst[2], ls_uv,
287 &b->
mv[0][0], 0, 0, 8, 8, 4, 4, w1, h1, 0);
289 s->
dst[1] + 4 * bytesperpixel,
290 s->
dst[2] + 4 * bytesperpixel, ls_uv,
293 row << 3, (col << 3) + 4,
294 &b->
mv[1][0], 4, 0, 8, 8, 4, 4, w1, h1, 0);
296 s->
dst[1] + 4 * ls_uv, s->
dst[2] + 4 * ls_uv, ls_uv,
299 (row << 3) + 4, col << 3,
300 &b->
mv[2][0], 0, 4, 8, 8, 4, 4, w1, h1, 0);
302 s->
dst[1] + 4 * ls_uv + 4 * bytesperpixel,
303 s->
dst[2] + 4 * ls_uv + 4 * bytesperpixel, ls_uv,
306 (row << 3) + 4, (col << 3) + 4,
307 &b->
mv[3][0], 4, 4, 8, 8, 4, 4, w1, h1, 0);
313 ref2->data[0], ref2->linesize[0], tref2,
314 row << 3, col << 3, &b->
mv[0][1], 0, 0, 8, 8, 4, 4, w2, h2, 1);
316 ref2->data[0], ref2->linesize[0], tref2,
317 row << 3, (col << 3) + 4, &b->
mv[1][1], 4, 0, 8, 8, 4, 4, w2, h2, 1);
319 s->
dst[0] + 4 * ls_y, ls_y,
320 ref2->data[0], ref2->linesize[0], tref2,
321 (row << 3) + 4, col << 3, &b->
mv[2][1], 0, 4, 8, 8, 4, 4, w2, h2, 1);
323 s->
dst[0] + 4 * ls_y + 4 * bytesperpixel, ls_y,
324 ref2->data[0], ref2->linesize[0], tref2,
325 (row << 3) + 4, (col << 3) + 4, &b->
mv[3][1], 4, 4, 8, 8, 4, 4, w2, h2, 1);
331 b->
mv[2][1], b->
mv[3][1]);
333 s->
dst[1], s->
dst[2], ls_uv,
334 ref2->data[1], ref2->linesize[1],
335 ref2->data[2], ref2->linesize[2], tref2,
337 &uvmv, 0, 0, 4, 4, 4, 4, w2, h2, 1);
341 s->
dst[1], s->
dst[2], ls_uv,
342 ref2->data[1], ref2->linesize[1],
343 ref2->data[2], ref2->linesize[2], tref2,
345 &uvmv, 0, 0, 8, 4, 4, 4, w2, h2, 1);
348 s->
dst[1] + 4 * bytesperpixel,
349 s->
dst[2] + 4 * bytesperpixel, ls_uv,
350 ref2->data[1], ref2->linesize[1],
351 ref2->data[2], ref2->linesize[2], tref2,
352 row << 2, (col << 3) + 4,
353 &uvmv, 4, 0, 8, 4, 4, 4, w2, h2, 1);
360 s->
dst[1], s->
dst[2], ls_uv,
361 ref2->data[1], ref2->linesize[1],
362 ref2->data[2], ref2->linesize[2], tref2,
364 &uvmv, 0, 0, 4, 8, 4, 4, w2, h2, 1);
370 s->
dst[1] + 4 * ls_uv, s->
dst[2] + 4 * ls_uv, ls_uv,
371 ref2->data[1], ref2->linesize[1],
372 ref2->data[2], ref2->linesize[2], tref2,
373 (row << 3) + 4, col << 2,
374 &uvmv, 0, 4, 4, 8, 4, 4, w2, h2, 1);
377 s->
dst[1], s->
dst[2], ls_uv,
378 ref2->data[1], ref2->linesize[1],
379 ref2->data[2], ref2->linesize[2], tref2,
381 &b->
mv[0][1], 0, 0, 8, 8, 4, 4, w2, h2, 1);
383 s->
dst[1] + 4 * bytesperpixel,
384 s->
dst[2] + 4 * bytesperpixel, ls_uv,
385 ref2->data[1], ref2->linesize[1],
386 ref2->data[2], ref2->linesize[2], tref2,
387 row << 3, (col << 3) + 4,
388 &b->
mv[1][1], 4, 0, 8, 8, 4, 4, w2, h2, 1);
390 s->
dst[1] + 4 * ls_uv, s->
dst[2] + 4 * ls_uv, ls_uv,
391 ref2->data[1], ref2->linesize[1],
392 ref2->data[2], ref2->linesize[2], tref2,
393 (row << 3) + 4, col << 3,
394 &b->
mv[2][1], 0, 4, 8, 8, 4, 4, w2, h2, 1);
396 s->
dst[1] + 4 * ls_uv + 4 * bytesperpixel,
397 s->
dst[2] + 4 * ls_uv + 4 * bytesperpixel, ls_uv,
398 ref2->data[1], ref2->linesize[1],
399 ref2->data[2], ref2->linesize[2], tref2,
400 (row << 3) + 4, (col << 3) + 4,
401 &b->
mv[3][1], 4, 4, 8, 8, 4, 4, w2, h2, 1);
407 int bwl = bwlog_tab[0][b->
bs];
415 row << 3, col << 3, &b->
mv[0][0], 0, 0, bw, bh, bw, bh, w1, h1, 0);
419 s->
dst[1], s->
dst[2], ls_uv,
422 row << (3 - s->
ss_v), col << (3 - s->
ss_h),
423 &b->
mv[0][0], 0, 0, uvbw, uvbh, uvbw, uvbh, w1, h1, 0);
427 ref2->data[0], ref2->linesize[0], tref2,
428 row << 3, col << 3, &b->
mv[0][1], 0, 0, bw, bh, bw, bh, w2, h2, 1);
432 s->
dst[1], s->
dst[2], ls_uv,
433 ref2->data[1], ref2->linesize[1],
434 ref2->data[2], ref2->linesize[2], tref2,
435 row << (3 - s->
ss_v), col << (3 - s->
ss_h),
436 &b->
mv[0][1], 0, 0, uvbw, uvbh, uvbw, uvbh, w2, h2, 1);
This structure describes decoded (raw) audio or video data.
#define ROUNDED_DIV_MVx4(a, b, c, d)
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
int width
width and height of the video frame
#define ROUNDED_DIV_MVx2(a, b)
#define mc_luma_dir(s, mc, dst, dst_ls, src, src_ls, tref, row, col, mv, px, py, pw, ph, bw, bh, w, h, i)
#define mc_chroma_dir(s, mc, dstu, dstv, dst_ls, srcu, srcu_ls, srcv, srcv_ls, tref, row, col, mv, px, py, pw, ph, bw, bh, w, h, i)
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
main external API structure.
const uint8_t ff_vp9_bwh_tab[2][N_BS_SIZES][2]
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
static void FN() inter_pred(AVCodecContext *avctx)