---
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
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel