Browse Source

vaapi_encode: Allocate picture-private data in generic code

tags/n4.2
Mark Thompson 6 years ago
parent
commit
26ce3a43a3
2 changed files with 16 additions and 3 deletions
  1. +12
    -3
      libavcodec/vaapi_encode.c
  2. +4
    -0
      libavcodec/vaapi_encode.h

+ 12
- 3
libavcodec/vaapi_encode.c 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;



+ 4
- 0
libavcodec/vaapi_encode.h 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;


Loading…
Cancel
Save