X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fvaapi_h264.c;h=7529f0469cb74bb5b67d74dd921652a6fdaa6950;hb=08b94f160a2c966bb83e32bde0e52246fafa2155;hp=7cbe8c1826557439c3a317eb8ee4fd9154fa57fe;hpb=759001c534287a96dc96d1e274665feb7059145d;p=ffmpeg diff --git a/libavcodec/vaapi_h264.c b/libavcodec/vaapi_h264.c index 7cbe8c18265..7529f0469cb 100644 --- a/libavcodec/vaapi_h264.c +++ b/libavcodec/vaapi_h264.c @@ -22,6 +22,7 @@ #include "vaapi_internal.h" #include "h264.h" +#include "mpegutils.h" /** * @file @@ -51,14 +52,14 @@ static void init_vaapi_pic(VAPictureH264 *va_pic) * supersedes pic's field type if nonzero. */ static void fill_vaapi_pic(VAPictureH264 *va_pic, - Picture *pic, + H264Picture *pic, int pic_structure) { if (pic_structure == 0) pic_structure = pic->reference; pic_structure &= PICT_FRAME; /* PICT_TOP_FIELD|PICT_BOTTOM_FIELD */ - va_pic->picture_id = ff_vaapi_get_surface_id(pic); + va_pic->picture_id = ff_vaapi_get_surface_id(&pic->f); va_pic->frame_idx = pic->long_ref ? pic->pic_id : pic->frame_num; va_pic->flags = 0; @@ -89,7 +90,7 @@ typedef struct DPB { * available. The decoded picture buffer's size must be large enough * to receive the new VA API picture object. */ -static int dpb_add(DPB *dpb, Picture *pic) +static int dpb_add(DPB *dpb, H264Picture *pic) { int i; @@ -98,7 +99,7 @@ static int dpb_add(DPB *dpb, Picture *pic) for (i = 0; i < dpb->size; i++) { VAPictureH264 * const va_pic = &dpb->va_pics[i]; - if (va_pic->picture_id == ff_vaapi_get_surface_id(pic)) { + if (va_pic->picture_id == ff_vaapi_get_surface_id(&pic->f)) { VAPictureH264 temp_va_pic; fill_vaapi_pic(&temp_va_pic, pic, 0); @@ -133,13 +134,13 @@ static int fill_vaapi_ReferenceFrames(VAPictureParameterBufferH264 *pic_param, init_vaapi_pic(&dpb.va_pics[i]); for (i = 0; i < h->short_ref_count; i++) { - Picture * const pic = h->short_ref[i]; + H264Picture * const pic = h->short_ref[i]; if (pic && pic->reference && dpb_add(&dpb, pic) < 0) return -1; } for (i = 0; i < 16; i++) { - Picture * const pic = h->long_ref[i]; + H264Picture * const pic = h->long_ref[i]; if (pic && pic->reference && dpb_add(&dpb, pic) < 0) return -1; } @@ -155,7 +156,7 @@ static int fill_vaapi_ReferenceFrames(VAPictureParameterBufferH264 *pic_param, * @param[in] ref_count The number of reference pictures in ref_list */ static void fill_vaapi_RefPicList(VAPictureH264 RefPicList[32], - Picture *ref_list, + H264Picture *ref_list, unsigned int ref_count) { unsigned int i, n = 0; @@ -297,7 +298,7 @@ static int vaapi_h264_end_frame(AVCodecContext *avctx) if (ret < 0) goto finish; - ret = ff_vaapi_render_picture(vactx, ff_vaapi_get_surface_id(h->cur_pic_ptr)); + ret = ff_vaapi_render_picture(vactx, ff_vaapi_get_surface_id(&h->cur_pic_ptr->f)); if (ret < 0) goto finish; @@ -324,7 +325,7 @@ static int vaapi_h264_decode_slice(AVCodecContext *avctx, if (!slice_param) return -1; slice_param->slice_data_bit_offset = get_bits_count(&h->gb) + 8; /* bit buffer started beyond nal_unit_type */ - slice_param->first_mb_in_slice = (h->mb_y >> FIELD_OR_MBAFF_PICTURE) * h->mb_width + h->mb_x; + slice_param->first_mb_in_slice = (h->mb_y >> FIELD_OR_MBAFF_PICTURE(h)) * h->mb_width + h->mb_x; slice_param->slice_type = ff_h264_get_slice_type(h); slice_param->direct_spatial_mv_pred_flag = h->slice_type == AV_PICTURE_TYPE_B ? h->direct_spatial_mv_pred : 0; slice_param->num_ref_idx_l0_active_minus1 = h->list_count > 0 ? h->ref_count[0] - 1 : 0; @@ -332,8 +333,8 @@ static int vaapi_h264_decode_slice(AVCodecContext *avctx, slice_param->cabac_init_idc = h->cabac_init_idc; slice_param->slice_qp_delta = h->qscale - h->pps.init_qp; slice_param->disable_deblocking_filter_idc = h->deblocking_filter < 2 ? !h->deblocking_filter : h->deblocking_filter; - slice_param->slice_alpha_c0_offset_div2 = h->slice_alpha_c0_offset / 2 - 26; - slice_param->slice_beta_offset_div2 = h->slice_beta_offset / 2 - 26; + slice_param->slice_alpha_c0_offset_div2 = h->slice_alpha_c0_offset / 2; + slice_param->slice_beta_offset_div2 = h->slice_beta_offset / 2; slice_param->luma_log2_weight_denom = h->luma_log2_weight_denom; slice_param->chroma_log2_weight_denom = h->chroma_log2_weight_denom;