|
|
|
@ -37,7 +37,7 @@ |
|
|
|
|
*/ |
|
|
|
|
void ff_xvmc_init_block(MpegEncContext *s) |
|
|
|
|
{ |
|
|
|
|
struct xvmc_pixfmt_render *render = (struct xvmc_pixfmt_render*)s->current_picture.data[2]; |
|
|
|
|
struct xvmc_pix_fmt *render = (struct xvmc_pix_fmt*)s->current_picture.data[2]; |
|
|
|
|
assert(render && render->unique_id == AV_XVMC_RENDER_MAGIC); |
|
|
|
|
|
|
|
|
|
s->block = (DCTELEM *)(render->data_blocks + render->next_free_data_block_num * 64); |
|
|
|
@ -64,7 +64,7 @@ void ff_xvmc_pack_pblocks(MpegEncContext *s, int cbp) |
|
|
|
|
*/ |
|
|
|
|
int ff_xvmc_field_start(MpegEncContext*s, AVCodecContext *avctx) |
|
|
|
|
{ |
|
|
|
|
struct xvmc_pixfmt_render *last, *next, *render = (struct xvmc_pixfmt_render*)s->current_picture.data[2]; |
|
|
|
|
struct xvmc_pix_fmt *last, *next, *render = (struct xvmc_pix_fmt*)s->current_picture.data[2]; |
|
|
|
|
const int mb_block_count = 4 + (1 << s->chroma_format); |
|
|
|
|
|
|
|
|
|
assert(avctx); |
|
|
|
@ -97,7 +97,7 @@ int ff_xvmc_field_start(MpegEncContext*s, AVCodecContext *avctx) |
|
|
|
|
case FF_I_TYPE: |
|
|
|
|
return 0; // no prediction from other frames
|
|
|
|
|
case FF_B_TYPE: |
|
|
|
|
next = (struct xvmc_pixfmt_render*)s->next_picture.data[2]; |
|
|
|
|
next = (struct xvmc_pix_fmt*)s->next_picture.data[2]; |
|
|
|
|
if (!next) |
|
|
|
|
return -1; |
|
|
|
|
if (next->unique_id != AV_XVMC_RENDER_MAGIC) |
|
|
|
@ -105,7 +105,7 @@ int ff_xvmc_field_start(MpegEncContext*s, AVCodecContext *avctx) |
|
|
|
|
render->p_future_surface = next->p_surface; |
|
|
|
|
// no return here, going to set forward prediction
|
|
|
|
|
case FF_P_TYPE: |
|
|
|
|
last = (struct xvmc_pixfmt_render*)s->last_picture.data[2]; |
|
|
|
|
last = (struct xvmc_pix_fmt*)s->last_picture.data[2]; |
|
|
|
|
if (!last) |
|
|
|
|
last = render; // predict second field from the first
|
|
|
|
|
if (last->unique_id != AV_XVMC_RENDER_MAGIC) |
|
|
|
@ -123,7 +123,7 @@ return -1; |
|
|
|
|
*/ |
|
|
|
|
void ff_xvmc_field_end(MpegEncContext *s) |
|
|
|
|
{ |
|
|
|
|
struct xvmc_pixfmt_render *render = (struct xvmc_pixfmt_render*)s->current_picture.data[2]; |
|
|
|
|
struct xvmc_pix_fmt *render = (struct xvmc_pix_fmt*)s->current_picture.data[2]; |
|
|
|
|
assert(render); |
|
|
|
|
|
|
|
|
|
if (render->filled_mv_blocks_num > 0) |
|
|
|
@ -133,7 +133,7 @@ void ff_xvmc_field_end(MpegEncContext *s) |
|
|
|
|
void ff_xvmc_decode_mb(MpegEncContext *s) |
|
|
|
|
{ |
|
|
|
|
XvMCMacroBlock *mv_block; |
|
|
|
|
struct xvmc_pixfmt_render *render; |
|
|
|
|
struct xvmc_pix_fmt *render; |
|
|
|
|
int i, cbp, blocks_per_mb; |
|
|
|
|
|
|
|
|
|
const int mb_xy = s->mb_y * s->mb_stride + s->mb_x; |
|
|
|
@ -160,7 +160,7 @@ void ff_xvmc_decode_mb(MpegEncContext *s) |
|
|
|
|
s->current_picture.qscale_table[mb_xy] = s->qscale; |
|
|
|
|
|
|
|
|
|
// start of XVMC-specific code
|
|
|
|
|
render = (struct xvmc_pixfmt_render*)s->current_picture.data[2]; |
|
|
|
|
render = (struct xvmc_pix_fmt*)s->current_picture.data[2]; |
|
|
|
|
assert(render); |
|
|
|
|
assert(render->unique_id == AV_XVMC_RENDER_MAGIC); |
|
|
|
|
assert(render->mv_blocks); |
|
|
|
|