|
|
|
@ -70,15 +70,15 @@ static void fill_picture_parameters(struct dxva_context *ctx, const H264Context |
|
|
|
|
ff_dxva2_get_surface_index(ctx, r), |
|
|
|
|
r->long_ref != 0); |
|
|
|
|
|
|
|
|
|
if ((r->reference & PICT_TOP_FIELD) && r->field_poc[0] != INT_MAX) |
|
|
|
|
if ((r->f.reference & PICT_TOP_FIELD) && r->field_poc[0] != INT_MAX) |
|
|
|
|
pp->FieldOrderCntList[i][0] = r->field_poc[0]; |
|
|
|
|
if ((r->reference & PICT_BOTTOM_FIELD) && r->field_poc[1] != INT_MAX) |
|
|
|
|
if ((r->f.reference & PICT_BOTTOM_FIELD) && r->field_poc[1] != INT_MAX) |
|
|
|
|
pp->FieldOrderCntList[i][1] = r->field_poc[1]; |
|
|
|
|
|
|
|
|
|
pp->FrameNumList[i] = r->long_ref ? r->pic_id : r->frame_num; |
|
|
|
|
if (r->reference & PICT_TOP_FIELD) |
|
|
|
|
if (r->f.reference & PICT_TOP_FIELD) |
|
|
|
|
pp->UsedForReferenceFlags |= 1 << (2*i + 0); |
|
|
|
|
if (r->reference & PICT_BOTTOM_FIELD) |
|
|
|
|
if (r->f.reference & PICT_BOTTOM_FIELD) |
|
|
|
|
pp->UsedForReferenceFlags |= 1 << (2*i + 1); |
|
|
|
|
} else { |
|
|
|
|
pp->RefFrameList[i].bPicEntry = 0xff; |
|
|
|
@ -216,7 +216,7 @@ static void fill_slice_long(AVCodecContext *avctx, DXVA_Slice_H264_Long *slice, |
|
|
|
|
unsigned plane; |
|
|
|
|
fill_picture_entry(&slice->RefPicList[list][i], |
|
|
|
|
ff_dxva2_get_surface_index(ctx, r), |
|
|
|
|
r->reference == PICT_BOTTOM_FIELD); |
|
|
|
|
r->f.reference == PICT_BOTTOM_FIELD); |
|
|
|
|
for (plane = 0; plane < 3; plane++) { |
|
|
|
|
int w, o; |
|
|
|
|
if (plane == 0 && h->luma_weight_flag[list]) { |
|
|
|
@ -265,7 +265,7 @@ static int commit_bitstream_and_slice_buffer(AVCodecContext *avctx, |
|
|
|
|
const unsigned mb_count = s->mb_width * s->mb_height; |
|
|
|
|
struct dxva_context *ctx = avctx->hwaccel_context; |
|
|
|
|
const Picture *current_picture = h->s.current_picture_ptr; |
|
|
|
|
struct dxva2_picture_context *ctx_pic = current_picture->hwaccel_picture_private; |
|
|
|
|
struct dxva2_picture_context *ctx_pic = current_picture->f.hwaccel_picture_private; |
|
|
|
|
DXVA_Slice_H264_Short *slice = NULL; |
|
|
|
|
uint8_t *dxva_data, *current, *end; |
|
|
|
|
unsigned dxva_size; |
|
|
|
@ -360,7 +360,7 @@ static int start_frame(AVCodecContext *avctx, |
|
|
|
|
{ |
|
|
|
|
const H264Context *h = avctx->priv_data; |
|
|
|
|
struct dxva_context *ctx = avctx->hwaccel_context; |
|
|
|
|
struct dxva2_picture_context *ctx_pic = h->s.current_picture_ptr->hwaccel_picture_private; |
|
|
|
|
struct dxva2_picture_context *ctx_pic = h->s.current_picture_ptr->f.hwaccel_picture_private; |
|
|
|
|
|
|
|
|
|
if (!ctx->decoder || !ctx->cfg || ctx->surface_count <= 0) |
|
|
|
|
return -1; |
|
|
|
@ -384,7 +384,7 @@ static int decode_slice(AVCodecContext *avctx, |
|
|
|
|
const H264Context *h = avctx->priv_data; |
|
|
|
|
struct dxva_context *ctx = avctx->hwaccel_context; |
|
|
|
|
const Picture *current_picture = h->s.current_picture_ptr; |
|
|
|
|
struct dxva2_picture_context *ctx_pic = current_picture->hwaccel_picture_private; |
|
|
|
|
struct dxva2_picture_context *ctx_pic = current_picture->f.hwaccel_picture_private; |
|
|
|
|
unsigned position; |
|
|
|
|
|
|
|
|
|
if (ctx_pic->slice_count >= MAX_SLICES) |
|
|
|
@ -413,7 +413,7 @@ static int end_frame(AVCodecContext *avctx) |
|
|
|
|
H264Context *h = avctx->priv_data; |
|
|
|
|
MpegEncContext *s = &h->s; |
|
|
|
|
struct dxva2_picture_context *ctx_pic = |
|
|
|
|
h->s.current_picture_ptr->hwaccel_picture_private; |
|
|
|
|
h->s.current_picture_ptr->f.hwaccel_picture_private; |
|
|
|
|
|
|
|
|
|
if (ctx_pic->slice_count <= 0 || ctx_pic->bitstream_size <= 0) |
|
|
|
|
return -1; |
|
|
|
|