]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/vaapi_h264.c
configure: Don't pass MSVC compiler options -M[TD] to armasm
[ffmpeg] / libavcodec / vaapi_h264.c
index 7cbe8c1826557439c3a317eb8ee4fd9154fa57fe..7529f0469cb74bb5b67d74dd921652a6fdaa6950 100644 (file)
@@ -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;