vaapi_encode: Allocate picture-private data in generic code

This commit is contained in:
Mark Thompson 2018-12-20 20:39:55 +00:00
parent 8ca55a2b9e
commit 26ce3a43a3
2 changed files with 16 additions and 3 deletions

View File

@ -570,14 +570,23 @@ static int vaapi_encode_discard(AVCodecContext *avctx,
return 0;
}
static VAAPIEncodePicture *vaapi_encode_alloc(void)
static VAAPIEncodePicture *vaapi_encode_alloc(AVCodecContext *avctx)
{
VAAPIEncodeContext *ctx = avctx->priv_data;
VAAPIEncodePicture *pic;
pic = av_mallocz(sizeof(*pic));
if (!pic)
return NULL;
if (ctx->codec->picture_priv_data_size > 0) {
pic->priv_data = av_mallocz(ctx->codec->picture_priv_data_size);
if (!pic->priv_data) {
av_freep(&pic);
return NULL;
}
}
pic->input_surface = VA_INVALID_ID;
pic->recon_surface = VA_INVALID_ID;
pic->output_buffer = VA_INVALID_ID;
@ -710,7 +719,7 @@ static int vaapi_encode_get_next(AVCodecContext *avctx,
}
}
pic = vaapi_encode_alloc();
pic = vaapi_encode_alloc(avctx);
if (!pic)
return AVERROR(ENOMEM);
@ -739,7 +748,7 @@ static int vaapi_encode_get_next(AVCodecContext *avctx,
for (i = 0; i < ctx->b_per_p &&
ctx->gop_counter < ctx->gop_size; i++) {
pic = vaapi_encode_alloc();
pic = vaapi_encode_alloc(avctx);
if (!pic)
goto fail;

View File

@ -268,6 +268,10 @@ typedef struct VAAPIEncodeType {
// add any necessary global parameters).
int (*configure)(AVCodecContext *avctx);
// The size of any private data structure associated with each
// picture (can be zero if not required).
size_t picture_priv_data_size;
// The size of the parameter structures:
// sizeof(VAEnc{type}ParameterBuffer{codec}).
size_t sequence_params_size;