23 #include <X11/extensions/XvMC.h>
61 cbp <<= 12-mb_block_count;
62 for (i = 0; i < mb_block_count; i++) {
88 "Render token doesn't look as expected.\n");
94 "Rendering surface contains %i unprocessed blocks.\n",
105 "Rendering surface doesn't provide enough block structures to work with.\n");
159 XvMCMacroBlock *mv_block;
161 int i, cbp, blocks_per_mb;
196 mv_block->x = s->
mb_x;
197 mv_block->y = s->
mb_y;
200 mv_block->macroblock_type = XVMC_MB_TYPE_INTRA;
202 mv_block->macroblock_type = XVMC_MB_TYPE_PATTERN;
205 mv_block->macroblock_type |= XVMC_MB_TYPE_MOTION_FORWARD;
207 mv_block->PMV[0][0][0] = s->
mv[0][0][0];
208 mv_block->PMV[0][0][1] = s->
mv[0][0][1];
209 mv_block->PMV[1][0][0] = s->
mv[0][1][0];
210 mv_block->PMV[1][0][1] = s->
mv[0][1][1];
213 mv_block->macroblock_type |= XVMC_MB_TYPE_MOTION_BACKWARD;
214 mv_block->PMV[0][1][0] = s->
mv[1][0][0];
215 mv_block->PMV[0][1][1] = s->
mv[1][0][1];
216 mv_block->PMV[1][1][0] = s->
mv[1][1][0];
217 mv_block->PMV[1][1][1] = s->
mv[1][1][1];
222 mv_block->motion_type = XVMC_PREDICTION_FRAME;
225 mv_block->motion_type = XVMC_PREDICTION_16x8;
228 mv_block->motion_type = XVMC_PREDICTION_FIELD;
230 mv_block->PMV[0][0][1] <<= 1;
231 mv_block->PMV[1][0][1] <<= 1;
232 mv_block->PMV[0][1][1] <<= 1;
233 mv_block->PMV[1][1][1] <<= 1;
237 mv_block->motion_type = XVMC_PREDICTION_DUAL_PRIME;
240 mv_block->PMV[0][0][0] = s->
mv[0][0][0];
241 mv_block->PMV[0][0][1] = s->
mv[0][0][1] << 1;
243 mv_block->PMV[0][1][0] = s->
mv[0][0][0];
244 mv_block->PMV[0][1][1] = s->
mv[0][0][1] << 1;
246 mv_block->PMV[1][0][0] = s->
mv[0][2][0];
247 mv_block->PMV[1][0][1] = s->
mv[0][2][1] << 1;
249 mv_block->PMV[1][1][0] = s->
mv[0][3][0];
250 mv_block->PMV[1][1][1] = s->
mv[0][3][1] << 1;
253 mv_block->PMV[0][1][0] = s->
mv[0][2][0];
254 mv_block->PMV[0][1][1] = s->
mv[0][2][1];
261 mv_block->motion_vertical_field_select = 0;
265 mv_block->motion_vertical_field_select |= s->
field_select[0][0];
266 mv_block->motion_vertical_field_select |= s->
field_select[1][0] << 1;
267 mv_block->motion_vertical_field_select |= s->
field_select[0][1] << 2;
268 mv_block->motion_vertical_field_select |= s->
field_select[1][1] << 3;
281 for (i = 0; i < blocks_per_mb; i++) {
289 for (i = 4; i < blocks_per_mb; i++) {
295 cbp &= 0xf << (blocks_per_mb - 4);
299 mv_block->coded_block_pattern = cbp;
301 mv_block->macroblock_type &= ~XVMC_MB_TYPE_PATTERN;
303 for (i = 0; i < blocks_per_mb; i++) {
316 if (s->
avctx->xvmc_acceleration == 1) {