23 #include <X11/extensions/XvMC.h>
59 cbp <<= 12-mb_block_count;
60 for (i = 0; i < mb_block_count; i++) {
86 "Render token doesn't look as expected.\n");
92 "Rendering surface contains %i unprocessed blocks.\n",
103 "Rendering surface doesn't provide enough block structures to work with.\n");
157 XvMCMacroBlock *mv_block;
159 int i, cbp, blocks_per_mb;
194 mv_block->x = s->
mb_x;
195 mv_block->y = s->
mb_y;
198 mv_block->macroblock_type = XVMC_MB_TYPE_INTRA;
200 mv_block->macroblock_type = XVMC_MB_TYPE_PATTERN;
203 mv_block->macroblock_type |= XVMC_MB_TYPE_MOTION_FORWARD;
205 mv_block->PMV[0][0][0] = s->
mv[0][0][0];
206 mv_block->PMV[0][0][1] = s->
mv[0][0][1];
207 mv_block->PMV[1][0][0] = s->
mv[0][1][0];
208 mv_block->PMV[1][0][1] = s->
mv[0][1][1];
211 mv_block->macroblock_type |= XVMC_MB_TYPE_MOTION_BACKWARD;
212 mv_block->PMV[0][1][0] = s->
mv[1][0][0];
213 mv_block->PMV[0][1][1] = s->
mv[1][0][1];
214 mv_block->PMV[1][1][0] = s->
mv[1][1][0];
215 mv_block->PMV[1][1][1] = s->
mv[1][1][1];
220 mv_block->motion_type = XVMC_PREDICTION_FRAME;
223 mv_block->motion_type = XVMC_PREDICTION_16x8;
226 mv_block->motion_type = XVMC_PREDICTION_FIELD;
228 mv_block->PMV[0][0][1] <<= 1;
229 mv_block->PMV[1][0][1] <<= 1;
230 mv_block->PMV[0][1][1] <<= 1;
231 mv_block->PMV[1][1][1] <<= 1;
235 mv_block->motion_type = XVMC_PREDICTION_DUAL_PRIME;
238 mv_block->PMV[0][0][0] = s->
mv[0][0][0];
239 mv_block->PMV[0][0][1] = s->
mv[0][0][1] << 1;
241 mv_block->PMV[0][1][0] = s->
mv[0][0][0];
242 mv_block->PMV[0][1][1] = s->
mv[0][0][1] << 1;
244 mv_block->PMV[1][0][0] = s->
mv[0][2][0];
245 mv_block->PMV[1][0][1] = s->
mv[0][2][1] << 1;
247 mv_block->PMV[1][1][0] = s->
mv[0][3][0];
248 mv_block->PMV[1][1][1] = s->
mv[0][3][1] << 1;
251 mv_block->PMV[0][1][0] = s->
mv[0][2][0];
252 mv_block->PMV[0][1][1] = s->
mv[0][2][1];
259 mv_block->motion_vertical_field_select = 0;
263 mv_block->motion_vertical_field_select |= s->
field_select[0][0];
264 mv_block->motion_vertical_field_select |= s->
field_select[1][0] << 1;
265 mv_block->motion_vertical_field_select |= s->
field_select[0][1] << 2;
266 mv_block->motion_vertical_field_select |= s->
field_select[1][1] << 3;
279 for (i = 0; i < blocks_per_mb; i++) {
287 for (i = 4; i < blocks_per_mb; i++) {
293 cbp &= 0xf << (blocks_per_mb - 4);
297 mv_block->coded_block_pattern = cbp;
299 mv_block->macroblock_type &= ~XVMC_MB_TYPE_PATTERN;
301 for (i = 0; i < blocks_per_mb; i++) {