aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/vaapi_encode_h265.c
diff options
context:
space:
mode:
authorLynne <dev@lynne.ee>2024-08-21 23:27:15 +0800
committerLynne <dev@lynne.ee>2024-09-09 07:05:24 +0200
commit9db68ed042a9043362d57c79945f6a8d936f9dba (patch)
tree887988d3bf3186cbf552be7a233880fd5c96840a /libavcodec/vaapi_encode_h265.c
parentfdf8025eb64c99567eadbebfd488a8e04c028a10 (diff)
downloadffmpeg-9db68ed042a9043362d57c79945f6a8d936f9dba.tar.gz
hw_base_encode: refactor picture allocation/freeing
This commit cleans up and refactors the mess of private state upon private state that used to be. Now, FFHWBaseEncodePicture is fully initialized upon call-time, and, most importantly, this lets APIs which require initialization data for frames (VkImageViews) to initialize this for both the input image, and the reconstruction (DPB) image. Signed-off-by: Tong Wu <wutong1208@outlook.com>
Diffstat (limited to 'libavcodec/vaapi_encode_h265.c')
-rw-r--r--libavcodec/vaapi_encode_h265.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/libavcodec/vaapi_encode_h265.c b/libavcodec/vaapi_encode_h265.c
index 548029a645..6d59a98114 100644
--- a/libavcodec/vaapi_encode_h265.c
+++ b/libavcodec/vaapi_encode_h265.c
@@ -200,7 +200,7 @@ fail:
}
static int vaapi_encode_h265_write_extra_header(AVCodecContext *avctx,
- VAAPIEncodePicture *pic,
+ FFHWBaseEncodePicture *base,
int index, int *type,
char *data, size_t *data_len)
{
@@ -757,14 +757,14 @@ static int vaapi_encode_h265_init_sequence_params(AVCodecContext *avctx)
}
static int vaapi_encode_h265_init_picture_params(AVCodecContext *avctx,
- VAAPIEncodePicture *vaapi_pic)
+ FFHWBaseEncodePicture *pic)
{
FFHWBaseEncodeContext *base_ctx = avctx->priv_data;
VAAPIEncodeH265Context *priv = avctx->priv_data;
- FFHWBaseEncodePicture *pic = &vaapi_pic->base;
- VAAPIEncodeH265Picture *hpic = pic->priv_data;
+ VAAPIEncodePicture *vaapi_pic = pic->priv;
+ VAAPIEncodeH265Picture *hpic = pic->codec_priv;
FFHWBaseEncodePicture *prev = pic->prev;
- VAAPIEncodeH265Picture *hprev = prev ? prev->priv_data : NULL;
+ VAAPIEncodeH265Picture *hprev = prev ? prev->codec_priv : NULL;
VAEncPictureParameterBufferHEVC *vpic = vaapi_pic->codec_picture_params;
int i, j = 0;
@@ -923,10 +923,10 @@ static int vaapi_encode_h265_init_picture_params(AVCodecContext *avctx,
VAAPIEncodeH265Picture *href;
av_assert0(ref && ref->encode_order < pic->encode_order);
- href = ref->priv_data;
+ href = ref->codec_priv;
vpic->reference_frames[j++] = (VAPictureHEVC) {
- .picture_id = ((VAAPIEncodePicture *)ref)->recon_surface,
+ .picture_id = ((VAAPIEncodePicture *)ref->priv)->recon_surface,
.pic_order_cnt = href->pic_order_cnt,
.flags = (ref->display_order < pic->display_order ?
VA_PICTURE_HEVC_RPS_ST_CURR_BEFORE : 0) |
@@ -973,13 +973,13 @@ static int vaapi_encode_h265_init_picture_params(AVCodecContext *avctx,
}
static int vaapi_encode_h265_init_slice_params(AVCodecContext *avctx,
- VAAPIEncodePicture *vaapi_pic,
+ FFHWBaseEncodePicture *pic,
VAAPIEncodeSlice *slice)
{
FFHWBaseEncodeContext *base_ctx = avctx->priv_data;
VAAPIEncodeH265Context *priv = avctx->priv_data;
- const FFHWBaseEncodePicture *pic = &vaapi_pic->base;
- VAAPIEncodeH265Picture *hpic = pic->priv_data;
+ VAAPIEncodePicture *vaapi_pic = pic->priv;
+ VAAPIEncodeH265Picture *hpic = pic->codec_priv;
const H265RawSPS *sps = &priv->raw_sps;
const H265RawPPS *pps = &priv->raw_pps;
H265RawSliceHeader *sh = &priv->raw_slice.header;
@@ -1021,7 +1021,7 @@ static int vaapi_encode_h265_init_slice_params(AVCodecContext *avctx,
rps_pics = 0;
for (i = 0; i < MAX_REFERENCE_LIST_NUM; i++) {
for (j = 0; j < pic->nb_refs[i]; j++) {
- strp = pic->refs[i][j]->priv_data;
+ strp = pic->refs[i][j]->codec_priv;
rps_poc[rps_pics] = strp->pic_order_cnt;
rps_used[rps_pics] = 1;
++rps_pics;
@@ -1046,7 +1046,7 @@ static int vaapi_encode_h265_init_slice_params(AVCodecContext *avctx,
if (j < pic->nb_refs[1])
continue;
- strp = pic->dpb[i]->priv_data;
+ strp = pic->dpb[i]->codec_priv;
rps_poc[rps_pics] = strp->pic_order_cnt;
rps_used[rps_pics] = 0;
++rps_pics;