---
The const changes were split out (see 1/6).

 libavcodec/vaapi_h264.c | 53 +++++++++++++++++++++++++++----------------------
 1 file changed, 29 insertions(+), 24 deletions(-)

diff --git a/libavcodec/vaapi_h264.c b/libavcodec/vaapi_h264.c
index 8769786..8e30dcd 100644
--- a/libavcodec/vaapi_h264.c
+++ b/libavcodec/vaapi_h264.c
@@ -20,7 +20,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */

-#include "vaapi_internal.h"
+#include "vaapi_decode.h"
 #include "h264dec.h"
 #include "h264_ps.h"
 #include "mpegutils.h"
@@ -226,19 +226,21 @@ static int vaapi_h264_start_frame(AVCodecContext          
*avctx,
                                   av_unused const uint8_t *buffer,
                                   av_unused uint32_t       size)
 {
-    struct vaapi_context *vactx = avctx->hwaccel_context;
     const H264Context  *h   = avctx->priv_data;
+    VAAPIDecodePicture *pic = h->cur_pic_ptr->hwaccel_picture_private;
     const PPS          *pps = h->ps.pps;
     const SPS          *sps = h->ps.sps;
     VAPictureParameterBufferH264 *pic_param;
     VAIQMatrixBufferH264         *iq_matrix;

-    vactx->slice_param_size = sizeof(VASliceParameterBufferH264);
+    pic->output_surface = ff_vaapi_get_surface_id(h->cur_pic_ptr->f);

-    /* Fill in VAPictureParameterBufferH264. */
-    pic_param = ff_vaapi_alloc_pic_param(vactx, 
sizeof(VAPictureParameterBufferH264));
+    pic_param = ff_vaapi_decode_alloc_param_buffer(avctx, pic,
+                                                   
VAPictureParameterBufferType,
+                                                   sizeof(*pic_param));
     if (!pic_param)
         return -1;
+
     fill_vaapi_pic(&pic_param->CurrPic, h->cur_pic_ptr, h->picture_structure);
     if (fill_vaapi_ReferenceFrames(pic_param, h) < 0)
         return -1;
@@ -280,7 +282,9 @@ static int vaapi_h264_start_frame(AVCodecContext          
*avctx,
     pic_param->frame_num                                        = 
h->poc.frame_num;

     /* Fill in VAIQMatrixBufferH264. */
-    iq_matrix = ff_vaapi_alloc_iq_matrix(vactx, sizeof(VAIQMatrixBufferH264));
+    iq_matrix = ff_vaapi_decode_alloc_param_buffer(avctx, pic,
+                                                   VAIQMatrixBufferType,
+                                                   sizeof(*iq_matrix));
     if (!iq_matrix)
         return -1;
     memcpy(iq_matrix->ScalingList4x4, pps->scaling_matrix4, 
sizeof(iq_matrix->ScalingList4x4));
@@ -292,23 +296,18 @@ static int vaapi_h264_start_frame(AVCodecContext          
*avctx,
 /** End a hardware decoding based frame. */
 static int vaapi_h264_end_frame(AVCodecContext *avctx)
 {
-    struct vaapi_context *vactx = avctx->hwaccel_context;
     const H264Context  *h   = avctx->priv_data;
+    VAAPIDecodePicture *pic = h->cur_pic_ptr->hwaccel_picture_private;
     H264SliceContext   *sl  = &h->slice_ctx[0];
     int ret;

-    ret = ff_vaapi_commit_slices(vactx);
-    if (ret < 0)
-        goto finish;
-
-    ret = ff_vaapi_render_picture(vactx, 
ff_vaapi_get_surface_id(h->cur_pic_ptr->f));
+    ret = ff_vaapi_decode_issue(avctx, pic);
     if (ret < 0)
-        goto finish;
+        goto fail;

     ff_h264_draw_horiz_band(h, sl, 0, h->avctx->height);

-finish:
-    ff_vaapi_common_end_frame(avctx);
+fail:
     return ret;
 }

@@ -318,11 +317,13 @@ static int vaapi_h264_decode_slice(AVCodecContext *avctx,
                                    uint32_t        size)
 {
     const H264Context      *h   = avctx->priv_data;
+    VAAPIDecodePicture     *pic = h->cur_pic_ptr->hwaccel_picture_private;
     const H264SliceContext *sl  = &h->slice_ctx[0];
     VASliceParameterBufferH264 *slice_param;

-    /* Fill in VASliceParameterBufferH264. */
-    slice_param = (VASliceParameterBufferH264 
*)ff_vaapi_alloc_slice(avctx->hwaccel_context, buffer, size);
+    slice_param = ff_vaapi_decode_alloc_slice_buffer(avctx, pic,
+                                                     sizeof(*slice_param),
+                                                     buffer, size);
     if (!slice_param)
         return -1;
     slice_param->slice_data_bit_offset          = get_bits_count(&sl->gb);
@@ -352,11 +353,15 @@ static int vaapi_h264_decode_slice(AVCodecContext *avctx,
 }

 AVHWAccel ff_h264_vaapi_hwaccel = {
-    .name           = "h264_vaapi",
-    .type           = AVMEDIA_TYPE_VIDEO,
-    .id             = AV_CODEC_ID_H264,
-    .pix_fmt        = AV_PIX_FMT_VAAPI,
-    .start_frame    = vaapi_h264_start_frame,
-    .end_frame      = vaapi_h264_end_frame,
-    .decode_slice   = vaapi_h264_decode_slice,
+    .name                 = "h264_vaapi",
+    .type                 = AVMEDIA_TYPE_VIDEO,
+    .id                   = AV_CODEC_ID_H264,
+    .pix_fmt              = AV_PIX_FMT_VAAPI,
+    .start_frame          = &vaapi_h264_start_frame,
+    .end_frame            = &vaapi_h264_end_frame,
+    .decode_slice         = &vaapi_h264_decode_slice,
+    .frame_priv_data_size = sizeof(VAAPIDecodePicture),
+    .init                 = &ff_vaapi_decode_init,
+    .uninit               = &ff_vaapi_decode_uninit,
+    .priv_data_size       = sizeof(VAAPIDecodeContext),
 };
-- 
2.8.1

_______________________________________________
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to