|
|
|
@ -51,7 +51,7 @@ static void fill_picture_parameters(struct dxva_context *ctx, const H264Context |
|
|
|
|
memset(pp, 0, sizeof(*pp)); |
|
|
|
|
/* Configure current picture */ |
|
|
|
|
fill_picture_entry(&pp->CurrPic, |
|
|
|
|
ff_dxva2_get_surface_index(ctx, current_picture), |
|
|
|
|
ff_dxva2_get_surface_index(ctx, ¤t_picture->f), |
|
|
|
|
h->picture_structure == PICT_BOTTOM_FIELD); |
|
|
|
|
/* Configure the set of references */ |
|
|
|
|
pp->UsedForReferenceFlags = 0; |
|
|
|
@ -67,7 +67,7 @@ static void fill_picture_parameters(struct dxva_context *ctx, const H264Context |
|
|
|
|
} |
|
|
|
|
if (r) { |
|
|
|
|
fill_picture_entry(&pp->RefFrameList[i], |
|
|
|
|
ff_dxva2_get_surface_index(ctx, r), |
|
|
|
|
ff_dxva2_get_surface_index(ctx, &r->f), |
|
|
|
|
r->long_ref != 0); |
|
|
|
|
|
|
|
|
|
if ((r->reference & PICT_TOP_FIELD) && r->field_poc[0] != INT_MAX) |
|
|
|
@ -243,9 +243,9 @@ static void fill_slice_long(AVCodecContext *avctx, DXVA_Slice_H264_Long *slice, |
|
|
|
|
unsigned plane; |
|
|
|
|
unsigned index; |
|
|
|
|
if (ctx->workaround & FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO) |
|
|
|
|
index = ff_dxva2_get_surface_index(ctx, r); |
|
|
|
|
index = ff_dxva2_get_surface_index(ctx, &r->f); |
|
|
|
|
else |
|
|
|
|
index = get_refpic_index(pp, ff_dxva2_get_surface_index(ctx, r)); |
|
|
|
|
index = get_refpic_index(pp, ff_dxva2_get_surface_index(ctx, &r->f)); |
|
|
|
|
fill_picture_entry(&slice->RefPicList[list][i], index, |
|
|
|
|
r->reference == PICT_BOTTOM_FIELD); |
|
|
|
|
for (plane = 0; plane < 3; plane++) { |
|
|
|
@ -448,7 +448,7 @@ static int dxva2_h264_end_frame(AVCodecContext *avctx) |
|
|
|
|
|
|
|
|
|
if (ctx_pic->slice_count <= 0 || ctx_pic->bitstream_size <= 0) |
|
|
|
|
return -1; |
|
|
|
|
ret = ff_dxva2_common_end_frame(avctx, h->cur_pic_ptr, |
|
|
|
|
ret = ff_dxva2_common_end_frame(avctx, &h->cur_pic_ptr->f, |
|
|
|
|
&ctx_pic->pp, sizeof(ctx_pic->pp), |
|
|
|
|
&ctx_pic->qm, sizeof(ctx_pic->qm), |
|
|
|
|
commit_bitstream_and_slice_buffer); |
|
|
|
|