Lines Matching refs:td
78 static void decode_mode(VP9TileData *td)
90 VP9Context *s = td->s;
91 VP9Block *b = td->b;
92 int row = td->row, col = td->col, row7 = td->row7;
96 int have_a = row > 0, have_l = col > td->tile_col_start;
103 vp8_rac_get_tree(td->c, ff_vp9_segmentation_tree, s->s.h.segmentation.prob);
106 vp56_rac_get_prob_branchy(td->c,
108 td->left_segpred_ctx[row7]]))) {
127 memset(&td->left_segpred_ctx[row7], 1, h4);
129 b->seg_id = vp8_rac_get_tree(td->c, ff_vp9_segmentation_tree,
133 memset(&td->left_segpred_ctx[row7], 0, h4);
144 int c = td->left_skip_ctx[row7] + s->above_skip_ctx[col];
145 b->skip = vp56_rac_get_prob(td->c, s->prob.p.skip[c]);
146 td->counts.skip[c][b->skip]++;
157 c = s->above_intra_ctx[col] + td->left_intra_ctx[row7];
161 have_l ? 2 * td->left_intra_ctx[row7] : 0;
163 bit = vp56_rac_get_prob(td->c, s->prob.p.intra[c]);
164 td->counts.intra[c][bit]++;
174 (td->left_skip_ctx[row7] ? max_tx :
175 td->left_txfm_ctx[row7]) > max_tx;
181 c = td->left_skip_ctx[row7] ? 1 :
182 (td->left_txfm_ctx[row7] * 2 > max_tx);
188 b->tx = vp56_rac_get_prob(td->c, s->prob.p.tx32p[c][0]);
190 b->tx += vp56_rac_get_prob(td->c, s->prob.p.tx32p[c][1]);
192 b->tx += vp56_rac_get_prob(td->c, s->prob.p.tx32p[c][2]);
194 td->counts.tx32p[c][b->tx]++;
197 b->tx = vp56_rac_get_prob(td->c, s->prob.p.tx16p[c][0]);
199 b->tx += vp56_rac_get_prob(td->c, s->prob.p.tx16p[c][1]);
200 td->counts.tx16p[c][b->tx]++;
203 b->tx = vp56_rac_get_prob(td->c, s->prob.p.tx8p[c]);
204 td->counts.tx8p[c][b->tx]++;
216 uint8_t *l = &td->left_mode_ctx[(row7) << 1];
224 a[0] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree,
227 b->mode[1] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree,
238 a[0] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree,
241 b->mode[3] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree,
257 b->mode[0] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree,
266 b->uvmode = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree,
271 b->mode[0] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree,
273 td->counts.y_mode[0][b->mode[0]]++;
275 b->mode[1] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree,
277 td->counts.y_mode[0][b->mode[1]]++;
282 b->mode[2] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree,
284 td->counts.y_mode[0][b->mode[2]]++;
286 b->mode[3] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree,
288 td->counts.y_mode[0][b->mode[3]]++;
302 b->mode[0] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree,
307 td->counts.y_mode[sz][b->mode[3]]++;
309 b->uvmode = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree,
311 td->counts.uv_mode[b->mode[3]][b->uvmode]++;
344 if (s->above_comp_ctx[col] && td->left_comp_ctx[row7]) {
347 c = 2 + (td->left_intra_ctx[row7] ||
348 td->left_ref_ctx[row7] == s->s.h.fixcompref);
349 } else if (td->left_comp_ctx[row7]) {
355 (!td->left_intra_ctx[row7] &&
356 td->left_ref_ctx[row & 7] == s->s.h.fixcompref);
363 c = td->left_comp_ctx[row7] ? 3 :
364 (!td->left_intra_ctx[row7] && td->left_ref_ctx[row7] == s->s.h.fixcompref);
368 b->comp = vp56_rac_get_prob(td->c, s->prob.p.comp[c]);
369 td->counts.comp[c][b->comp]++;
383 if (td->left_intra_ctx[row7]) {
386 c = 1 + 2 * (td->left_ref_ctx[row7] != s->s.h.varcompref[1]);
388 } else if (td->left_intra_ctx[row7]) {
391 int refl = td->left_ref_ctx[row7], refa = s->above_ref_ctx[col];
395 } else if (!td->left_comp_ctx[row7] && !s->above_comp_ctx[col]) {
402 } else if (!td->left_comp_ctx[row7]) {
430 if (td->left_intra_ctx[row7]) {
432 } else if (td->left_comp_ctx[row7]) {
433 c = 4 * (td->left_ref_ctx[row7] != s->s.h.varcompref[1]);
435 c = 3 * (td->left_ref_ctx[row7] != s->s.h.varcompref[1]);
440 bit = vp56_rac_get_prob(td->c, s->prob.p.comp_ref[c]);
442 td->counts.comp_ref[c][bit]++;
447 if (have_l && !td->left_intra_ctx[row7]) {
448 if (td->left_comp_ctx[row7]) {
450 c = 1 + (!s->s.h.fixcompref || !td->left_ref_ctx[row7] ||
454 (!s->s.h.fixcompref || !td->left_ref_ctx[row7]);
457 c = (3 * !td->left_ref_ctx[row7]) +
460 c = 2 * !td->left_ref_ctx[row7] + 2 * !s->above_ref_ctx[col];
469 } else if (have_l && !td->left_intra_ctx[row7]) {
470 if (td->left_intra_ctx[row7]) {
472 } else if (td->left_comp_ctx[row7]) {
473 c = 1 + (!s->s.h.fixcompref || !td->left_ref_ctx[row7]);
475 c = 4 * (!td->left_ref_ctx[row7]);
480 bit = vp56_rac_get_prob(td->c, s->prob.p.single_ref[c][0]);
481 td->counts.single_ref[c][0][bit]++;
488 if (td->left_intra_ctx[row7]) {
500 if (td->left_intra_ctx[row7]) {
502 } else if (td->left_comp_ctx[row7]) {
504 td->left_ref_ctx[row7] == 1);
505 } else if (!td->left_ref_ctx[row7]) {
508 c = 4 * (td->left_ref_ctx[row7] == 1);
511 if (td->left_comp_ctx[row7]) {
512 if (td->left_ref_ctx[row7] == s->above_ref_ctx[col]) {
514 td->left_ref_ctx[row7] == 1);
518 } else if (!td->left_ref_ctx[row7]) {
522 c = 3 * (td->left_ref_ctx[row7] == 1) +
525 } else if (td->left_comp_ctx[row7]) {
528 td->left_ref_ctx[row7] == 1);
531 (s->s.h.fixcompref == 1 || td->left_ref_ctx[row7] == 1);
534 if (!td->left_ref_ctx[row7]) {
537 c = 4 * (td->left_ref_ctx[row7] == 1);
539 } else if (!td->left_ref_ctx[row7]) {
542 c = 2 * (td->left_ref_ctx[row7] == 1) +
556 if (td->left_intra_ctx[row7] ||
557 (!td->left_comp_ctx[row7] && !td->left_ref_ctx[row7])) {
559 } else if (td->left_comp_ctx[row7]) {
560 c = 3 * (s->s.h.fixcompref == 1 || td->left_ref_ctx[row7] == 1);
562 c = 4 * (td->left_ref_ctx[row7] == 1);
567 bit = vp56_rac_get_prob(td->c, s->prob.p.single_ref[c][1]);
568 td->counts.single_ref[c][1][bit]++;
588 [td->left_mode_ctx[row7 + off[b->bs]]];
590 b->mode[0] = vp8_rac_get_tree(td->c, ff_vp9_inter_mode_tree,
595 td->counts.mv_mode[c][b->mode[0] - 10]++;
603 if (have_l && td->left_mode_ctx[row7] >= NEARESTMV) {
604 c = s->above_filter_ctx[col] == td->left_filter_ctx[row7] ?
605 td->left_filter_ctx[row7] : 3;
609 } else if (have_l && td->left_mode_ctx[row7] >= NEARESTMV) {
610 c = td->left_filter_ctx[row7];
615 filter_id = vp8_rac_get_tree(td->c, ff_vp9_filter_tree,
617 td->counts.filter[c][filter_id]++;
624 int c = inter_mode_ctx_lut[s->above_mode_ctx[col]][td->left_mode_ctx[row7]];
626 b->mode[0] = vp8_rac_get_tree(td->c, ff_vp9_inter_mode_tree,
628 td->counts.mv_mode[c][b->mode[0] - 10]++;
629 ff_vp9_fill_mv(td, b->mv[0], b->mode[0], 0);
632 b->mode[1] = vp8_rac_get_tree(td->c, ff_vp9_inter_mode_tree,
634 td->counts.mv_mode[c][b->mode[1] - 10]++;
635 ff_vp9_fill_mv(td, b->mv[1], b->mode[1], 1);
643 b->mode[2] = vp8_rac_get_tree(td->c, ff_vp9_inter_mode_tree,
645 td->counts.mv_mode[c][b->mode[2] - 10]++;
646 ff_vp9_fill_mv(td, b->mv[2], b->mode[2], 2);
649 b->mode[3] = vp8_rac_get_tree(td->c, ff_vp9_inter_mode_tree,
651 td->counts.mv_mode[c][b->mode[3] - 10]++;
652 ff_vp9_fill_mv(td, b->mv[3], b->mode[3], 3);
667 ff_vp9_fill_mv(td, b->mv[0], b->mode[0], -1);
740 case 1: SET_CTXS(td, left, row7, 1); break;
741 case 2: SET_CTXS(td, left, row7, 2); break;
742 case 4: SET_CTXS(td, left, row7, 4); break;
743 case 8: SET_CTXS(td, left, row7, 8); break;
752 AV_COPY32(&td->left_mv_ctx[row7 * 2 + 0][0], &b->mv[1][0]);
753 AV_COPY32(&td->left_mv_ctx[row7 * 2 + 0][1], &b->mv[1][1]);
754 AV_WN32A(&td->left_mv_ctx[row7 * 2 + 1][0], mv0);
755 AV_WN32A(&td->left_mv_ctx[row7 * 2 + 1][1], mv1);
768 AV_WN32A(&td->left_mv_ctx[row7 * 2 + n][0], mv0);
769 AV_WN32A(&td->left_mv_ctx[row7 * 2 + n][1], mv1);
922 static int decode_coeffs_b_8bpp(VP9TileData *td, int16_t *coef, int n_coeffs,
928 return decode_coeffs_b_generic(td->c, coef, n_coeffs, 0, 1, 8, cnt, eob, p,
932 static int decode_coeffs_b32_8bpp(VP9TileData *td, int16_t *coef, int n_coeffs,
938 return decode_coeffs_b_generic(td->c, coef, n_coeffs, 1, 1, 8, cnt, eob, p,
942 static int decode_coeffs_b_16bpp(VP9TileData *td, int16_t *coef, int n_coeffs,
948 return decode_coeffs_b_generic(td->c, coef, n_coeffs, 0, 0, td->s->s.h.bpp, cnt, eob, p,
952 static int decode_coeffs_b32_16bpp(VP9TileData *td, int16_t *coef, int n_coeffs,
958 return decode_coeffs_b_generic(td->c, coef, n_coeffs, 1, 0, td->s->s.h.bpp, cnt, eob, p,
962 static av_always_inline int decode_coeffs(VP9TileData *td, int is8bitsperpixel)
964 VP9Context *s = td->s;
965 VP9Block *b = td->b;
966 int row = td->row, col = td->col;
968 unsigned (*c)[6][3] = td->counts.coef[b->tx][0 /* y */][!b->intra];
969 unsigned (*e)[6][2] = td->counts.eob[b->tx][0 /* y */][!b->intra];
981 uint8_t *l = &td->left_y_nnz_ctx[(row & 7) << 1];
1007 (td, td->block + 16 * n * bytesperpixel, 16 * step * step, \
1013 AV_WN16A(&td->eob[n], ret); \
1015 td->eob[n] = ret; \
1081 (td, td->uvblock[pl] + 16 * n * bytesperpixel, \
1087 AV_WN16A(&td->uveob[pl][n], ret); \
1089 td->uveob[pl][n] = ret; \
1095 c = td->counts.coef[b->uvtx][1 /* uv */][!b->intra];
1096 e = td->counts.eob[b->uvtx][1 /* uv */][!b->intra];
1103 l = &td->left_uv_nnz_ctx[pl][(row & 7) << !s->ss_v];
1129 static int decode_coeffs_8bpp(VP9TileData *td)
1131 return decode_coeffs(td, 1);
1134 static int decode_coeffs_16bpp(VP9TileData *td)
1136 return decode_coeffs(td, 0);
1261 void ff_vp9_decode_block(VP9TileData *td, int row, int col,
1265 VP9Context *s = td->s;
1266 VP9Block *b = td->b;
1273 td->row = row;
1274 td->row7 = row & 7;
1275 td->col = col;
1276 td->col7 = col & 7;
1278 td->min_mv.x = -(128 + col * 64);
1279 td->min_mv.y = -(128 + row * 64);
1280 td->max_mv.x = 128 + (s->cols - col - w4) * 64;
1281 td->max_mv.y = 128 + (s->rows - row - h4) * 64;
1287 decode_mode(td);
1291 if (td->block_structure) {
1292 td->block_structure[td->nb_block_structure].row = row;
1293 td->block_structure[td->nb_block_structure].col = col;
1294 td->block_structure[td->nb_block_structure].block_size_idx_x = av_log2(w4);
1295 td->block_structure[td->nb_block_structure].block_size_idx_y = av_log2(h4);
1296 td->nb_block_structure++;
1303 has_coeffs = decode_coeffs_8bpp(td);
1305 has_coeffs = decode_coeffs_16bpp(td);
1310 memset(&td->left_skip_ctx[td->row7], 1, h4);
1313 int row7 = td->row7;
1342 case 1: SPLAT_ZERO_YUV(td->left, nnz_ctx, row7, 1, v); break;
1343 case 2: SPLAT_ZERO_YUV(td->left, nnz_ctx, row7, 2, v); break;
1344 case 4: SPLAT_ZERO_YUV(td->left, nnz_ctx, row7, 4, v); break;
1345 case 8: SPLAT_ZERO_YUV(td->left, nnz_ctx, row7, 8, v); break;
1350 s->td[0].b++;
1351 s->td[0].block += w4 * h4 * 64 * bytesperpixel;
1352 s->td[0].uvblock[0] += w4 * h4 * 64 * bytesperpixel >> (s->ss_h + s->ss_v);
1353 s->td[0].uvblock[1] += w4 * h4 * 64 * bytesperpixel >> (s->ss_h + s->ss_v);
1354 s->td[0].eob += 4 * w4 * h4;
1355 s->td[0].uveob[0] += 4 * w4 * h4 >> (s->ss_h + s->ss_v);
1356 s->td[0].uveob[1] += 4 * w4 * h4 >> (s->ss_h + s->ss_v);
1370 td->dst[0] = td->tmp_y;
1371 td->y_stride = 128;
1373 td->dst[0] = f->data[0] + yoff;
1374 td->y_stride = f->linesize[0];
1377 td->dst[1] = td->tmp_uv[0];
1378 td->dst[2] = td->tmp_uv[1];
1379 td->uv_stride = 128;
1381 td->dst[1] = f->data[1] + uvoff;
1382 td->dst[2] = f->data[2] + uvoff;
1383 td->uv_stride = f->linesize[1];
1387 ff_vp9_intra_recon_16bpp(td, yoff, uvoff);
1389 ff_vp9_intra_recon_8bpp(td, yoff, uvoff);
1393 ff_vp9_inter_recon_16bpp(td);
1395 ff_vp9_inter_recon_8bpp(td);
1407 td->tmp_y + o * bytesperpixel, 128, h, 0, 0);
1422 td->tmp_uv[0] + o * bytesperpixel, 128, h, 0, 0);
1424 td->tmp_uv[1] + o * bytesperpixel, 128, h, 0, 0);
1435 int skip_inter = !b->intra && b->skip, col7 = td->col7, row7 = td->row7;
1447 s->td[0].b++;
1448 s->td[0].block += w4 * h4 * 64 * bytesperpixel;
1449 s->td[0].uvblock[0] += w4 * h4 * 64 * bytesperpixel >> (s->ss_v + s->ss_h);
1450 s->td[0].uvblock[1] += w4 * h4 * 64 * bytesperpixel >> (s->ss_v + s->ss_h);
1451 s->td[0].eob += 4 * w4 * h4;
1452 s->td[0].uveob[0] += 4 * w4 * h4 >> (s->ss_v + s->ss_h);
1453 s->td[0].uveob[1] += 4 * w4 * h4 >> (s->ss_v + s->ss_h);