Home | History | Annotate | Download | only in decoder

Lines Matching defs:xd

26 extern void mb_init_dequantizer(VP8D_COMP *pbi, MACROBLOCKD *xd);
27 extern void clamp_mvs(MACROBLOCKD *xd);
36 static void setup_decoding_thread_data(VP8D_COMP *pbi, MACROBLOCKD *xd, MB_ROW_DEC *mbrd, int count)
45 mbd->rtcd = xd->rtcd;
47 mbd->subpixel_predict = xd->subpixel_predict;
48 mbd->subpixel_predict8x4 = xd->subpixel_predict8x4;
49 mbd->subpixel_predict8x8 = xd->subpixel_predict8x8;
50 mbd->subpixel_predict16x16 = xd->subpixel_predict16x16;
64 mbd->segmentation_enabled = xd->segmentation_enabled;
65 mbd->mb_segement_abs_delta = xd->mb_segement_abs_delta;
66 vpx_memcpy(mbd->segment_feature_data, xd->segment_feature_data, sizeof(xd->segment_feature_data));
69 vpx_memcpy(mbd->ref_lf_deltas, xd->ref_lf_deltas, sizeof(xd->ref_lf_deltas));
71 vpx_memcpy(mbd->mode_lf_deltas, xd->mode_lf_deltas, sizeof(xd->mode_lf_deltas));
74 mbd->mode_ref_lf_delta_enabled = xd->mode_ref_lf_delta_enabled;
75 mbd->mode_ref_lf_delta_update = xd->mode_ref_lf_delta_update;
81 mbd->block[j].dequant = xd->block[j].dequant;
90 static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd, int mb_row, int mb_col)
93 int i, do_clamp = xd->mode_info_context->mbmi.need_to_clamp_mvs;
96 if (xd->mode_info_context->mbmi.mb_skip_coeff)
98 vp8_reset_mb_tokens_context(xd);
102 eobtotal = vp8_decode_mb_tokens(pbi, xd);
108 clamp_mvs(xd);
111 xd->mode_info_context->mbmi.dc_diff = 1;
113 if (xd->mode_info_context->mbmi.mode != B_PRED && xd->mode_info_context->mbmi.mode != SPLITMV && eobtotal == 0)
115 xd->mode_info_context->mbmi.dc_diff = 0;
117 /*mt_skip_recon_mb(pbi, xd, mb_row, mb_col);*/
118 if (xd->frame_type == KEY_FRAME || xd->mode_info_context->mbmi.ref_frame == INTRA_FRAME)
120 vp8mt_build_intra_predictors_mbuv_s(pbi, xd, mb_row, mb_col);
121 vp8mt_build_intra_predictors_mby_s(pbi, xd, mb_row, mb_col);
125 vp8_build_inter_predictors_mb_s(xd);
130 if (xd->segmentation_enabled)
131 mb_init_dequantizer(pbi, xd);
134 if (xd->frame_type == KEY_FRAME || xd->mode_info_context->mbmi.ref_frame == INTRA_FRAME)
136 vp8mt_build_intra_predictors_mbuv(pbi, xd, mb_row, mb_col);
138 if (xd->mode_info_context->mbmi.mode != B_PRED)
140 vp8mt_build_intra_predictors_mby(pbi, xd, mb_row, mb_col);
142 vp8mt_intra_prediction_down_copy(pbi, xd, mb_row, mb_col);
147 vp8_build_inter_predictors_mb(xd);
151 if (xd->mode_info_context->mbmi.mode != B_PRED && xd->mode_info_context->mbmi.mode != SPLITMV)
153 BLOCKD *b = &xd->block[24];
157 if (xd->eobs[24] > 1)
176 (xd->qcoeff, xd->block[0].dequant,
177 xd->predictor, xd->dst.y_buffer,
178 xd->dst.y_stride, xd->eobs, xd->block[24].diff);
180 else if ((xd->frame_type == KEY_FRAME || xd->mode_info_context->mbmi.ref_frame == INTRA_FRAME) && xd->mode_info_context->mbmi.mode == B_PRED)
184 BLOCKD *b = &xd->block[i];
185 vp8mt_predict_intra4x4(pbi, xd, b->bmi.mode, b->predictor, mb_row, mb_col, i);
187 if (xd->eobs[i] > 1)
205 (xd->qcoeff, xd->block[0].dequant,
206 xd->predictor, xd->dst.y_buffer,
207 xd->dst.y_stride, xd->eobs);
211 (xd->qcoeff+16*16, xd->block[16].dequant,
212 xd->predictor+16*16, xd->dst.u_buffer, xd->dst.v_buffer,
213 xd->dst.uv_stride, xd->eobs+16);
237 MACROBLOCKD *xd = &mbrd->mbd;
256 int alt_flt_enabled = xd->segmentation_enabled;
268 xd->above_context = pc->above_context;
269 xd->left_context = &mb_row_left_context;
271 xd->up_available = (mb_row != 0);
273 xd->mb_to_top_edge = -((mb_row * 16)) << 3;
274 xd->mb_to_bottom_edge = ((pc->mb_rows - 1 - mb_row) * 16) << 3;
287 if (xd->mode_info_context->mbmi.mode == SPLITMV || xd->mode_info_context->mbmi.mode == B_PRED)
291 BLOCKD *d = &xd->block[i];
292 vpx_memcpy(&d->bmi, &xd->mode_info_context->bmi[i], sizeof(B_MODE_INFO));
299 xd->mb_to_left_edge = -((mb_col * 16) << 3);
300 xd->mb_to_right_edge = ((pc->mb_cols - 1 - mb_col) * 16) << 3;
302 xd->dst.y_buffer = pc->yv12_fb[dst_fb_idx].y_buffer + recon_yoffset;
303 xd->dst.u_buffer = pc->yv12_fb[dst_fb_idx].u_buffer + recon_uvoffset;
304 xd->dst.v_buffer = pc->yv12_fb[dst_fb_idx].v_buffer + recon_uvoffset;
306 xd->left_available = (mb_col != 0);
309 if (xd->mode_info_context->mbmi.ref_frame == LAST_FRAME)
311 else if (xd->mode_info_context->mbmi.ref_frame == GOLDEN_FRAME)
316 xd->pre.y_buffer = pc->yv12_fb[ref_fb_idx].y_buffer + recon_yoffset;
317 xd->pre.u_buffer = pc->yv12_fb[ref_fb_idx].u_buffer + recon_uvoffset;
318 xd->pre.v_buffer = pc->yv12_fb[ref_fb_idx].v_buffer + recon_uvoffset;
320 vp8_build_uvmvs(xd, pc->full_pixel);
321 decode_macroblock(pbi, xd, mb_row, mb_col);
328 vpx_memcpy((pbi->mt_yabove_row[mb_row + 1] + 32 + mb_col*16), (xd->dst.y_buffer + 15 * recon_y_stride), 16);
329 vpx_memcpy((pbi->mt_uabove_row[mb_row + 1] + 16 + mb_col*8), (xd->dst.u_buffer + 7 * recon_uv_stride), 8);
330 vpx_memcpy((pbi->mt_vabove_row[mb_row + 1] + 16 + mb_col*8), (xd->dst.v_buffer + 7 * recon_uv_stride), 8);
336 MODE_INFO *next = xd->mode_info_context +1;
338 if (xd->frame_type == KEY_FRAME || next->mbmi.ref_frame == INTRA_FRAME)
341 pbi->mt_yleft_col[mb_row][i] = xd->dst.y_buffer [i* recon_y_stride + 15];
344 pbi->mt_uleft_col[mb_row][i] = xd->dst.u_buffer [i* recon_uv_stride + 7];
345 pbi->mt_vleft_col[mb_row][i] = xd->dst.v_buffer [i* recon_uv_stride + 7];
351 Segment = (alt_flt_enabled) ? xd->mode_info_context->mbmi.segment_id : 0;
357 filter_level = vp8_adjust_mb_lf_value(xd, filter_level);
363 pc->lf_mbv(xd->dst.y_buffer, xd->dst.u_buffer, xd->dst.v_buffer, recon_y_stride, recon_uv_stride, &lfi[filter_level], pc->simpler_lpf);
365 if (xd->mode_info_context->mbmi.dc_diff > 0)
366 pc->lf_bv(xd->dst.y_buffer, xd->dst.u_buffer, xd->dst.v_buffer, recon_y_stride, recon_uv_stride, &lfi[filter_level], pc->simpler_lpf);
370 pc->lf_mbh(xd->dst.y_buffer, xd->dst.u_buffer, xd->dst.v_buffer, recon_y_stride, recon_uv_stride, &lfi[filter_level], pc->simpler_lpf);
372 if (xd->mode_info_context->mbmi.dc_diff > 0)
373 pc->lf_bh(xd->dst.y_buffer, xd->dst.u_buffer, xd->dst.v_buffer, recon_y_stride, recon_uv_stride, &lfi[filter_level], pc->simpler_lpf);
380 ++xd->mode_info_context; /* next mb */
382 xd->above_context++;
404 vp8_extend_mb_row(&pc->yv12_fb[dst_fb_idx], xd->dst.y_buffer + 16, xd->dst.u_buffer + 8, xd->dst.v_buffer + 8);
406 ++xd->mode_info_context; /* skip prediction column */
409 xd->mode_info_context += xd->mode_info_stride * pbi->decoding_thread_count;
681 void vp8mt_decode_mb_rows( VP8D_COMP *pbi, MACROBLOCKD *xd)
694 int alt_flt_enabled = xd->segmentation_enabled;
721 setup_decoding_thread_data(pbi, xd, pbi->mb_row_di, pbi->decoding_thread_count);
729 xd->current_bc = &pbi->mbc[mb_row%num_part];
731 /* vp8_decode_mb_row(pbi, pc, mb_row, xd); */
750 xd->above_context = pc->above_context;
751 xd->up_available = (mb_row != 0);
753 xd->mb_to_top_edge = -((mb_row * 16)) << 3;
754 xd->mb_to_bottom_edge = ((pc->mb_rows - 1 - mb_row) * 16) << 3;
766 if (xd->mode_info_context->mbmi.mode == SPLITMV || xd->mode_info_context->mbmi.mode == B_PRED)
770 BLOCKD *d = &xd->block[i];
771 vpx_memcpy(&d->bmi, &xd->mode_info_context->bmi[i], sizeof(B_MODE_INFO));
778 xd->mb_to_left_edge = -((mb_col * 16) << 3);
779 xd->mb_to_right_edge = ((pc->mb_cols - 1 - mb_col) * 16) << 3;
781 xd->dst.y_buffer = pc->yv12_fb[dst_fb_idx].y_buffer + recon_yoffset;
782 xd->dst.u_buffer = pc->yv12_fb[dst_fb_idx].u_buffer + recon_uvoffset;
783 xd->dst.v_buffer = pc->yv12_fb[dst_fb_idx].v_buffer + recon_uvoffset;
785 xd->left_available = (mb_col != 0);
788 if (xd->mode_info_context->mbmi.ref_frame == LAST_FRAME)
790 else if (xd->mode_info_context->mbmi.ref_frame == GOLDEN_FRAME)
795 xd->pre.y_buffer = pc->yv12_fb[ref_fb_idx].y_buffer + recon_yoffset;
796 xd->pre.u_buffer = pc->yv12_fb[ref_fb_idx].u_buffer + recon_uvoffset;
797 xd->pre.v_buffer = pc->yv12_fb[ref_fb_idx].v_buffer + recon_uvoffset;
799 if (xd->mode_info_context->mbmi.ref_frame != INTRA_FRAME)
802 xd->corrupted |= pc->yv12_fb[ref_fb_idx].corrupted;
805 vp8_build_uvmvs(xd, pc->full_pixel);
806 decode_macroblock(pbi, xd, mb_row, mb_col);
809 xd->corrupted |= vp8dx_bool_error(xd->current_bc);
816 vpx_memcpy((pbi->mt_yabove_row[mb_row +1] + 32 + mb_col*16), (xd->dst.y_buffer + 15 * recon_y_stride), 16);
817 vpx_memcpy((pbi->mt_uabove_row[mb_row +1] + 16 + mb_col*8), (xd->dst.u_buffer + 7 * recon_uv_stride), 8);
818 vpx_memcpy((pbi->mt_vabove_row[mb_row +1] + 16 + mb_col*8), (xd->dst.v_buffer + 7 * recon_uv_stride), 8);
824 MODE_INFO *next = xd->mode_info_context +1;
826 if (xd->frame_type == KEY_FRAME || next->mbmi.ref_frame == INTRA_FRAME)
829 pbi->mt_yleft_col[mb_row][i] = xd->dst.y_buffer [i* recon_y_stride + 15];
832 pbi->mt_uleft_col[mb_row][i] = xd->dst.u_buffer [i* recon_uv_stride + 7];
833 pbi->mt_vleft_col[mb_row][i] = xd->dst.v_buffer [i* recon_uv_stride + 7];
839 Segment = (alt_flt_enabled) ? xd->mode_info_context->mbmi.segment_id : 0;
845 filter_level = vp8_adjust_mb_lf_value(xd, filter_level);
851 pc->lf_mbv(xd->dst.y_buffer, xd->dst.u_buffer, xd->dst.v_buffer, recon_y_stride, recon_uv_stride, &lfi[filter_level], pc->simpler_lpf);
853 if (xd->mode_info_context->mbmi.dc_diff > 0)
854 pc->lf_bv(xd->dst.y_buffer, xd->dst.u_buffer, xd->dst.v_buffer, recon_y_stride, recon_uv_stride, &lfi[filter_level], pc->simpler_lpf);
858 pc->lf_mbh(xd->dst.y_buffer, xd->dst.u_buffer, xd->dst.v_buffer, recon_y_stride, recon_uv_stride, &lfi[filter_level], pc->simpler_lpf);
860 if (xd->mode_info_context->mbmi.dc_diff > 0)
861 pc->lf_bh(xd->dst.y_buffer, xd->dst.u_buffer, xd->dst.v_buffer, recon_y_stride, recon_uv_stride, &lfi[filter_level], pc->simpler_lpf);
868 ++xd->mode_info_context; /* next mb */
870 xd->above_context++;
891 vp8_extend_mb_row(&pc->yv12_fb[dst_fb_idx], xd->dst.y_buffer + 16, xd->dst.u_buffer + 8, xd->dst.v_buffer + 8);
893 ++xd->mode_info_context; /* skip prediction column */
895 xd->mode_info_context += xd->mode_info_stride * pbi->decoding_thread_count;