avcodec/vaapi_encode: move pic->input_surface initialization to encode_alloc

When allocating the VAAPIEncodePicture, pic->input_surface can be
initialized right in the place. This movement simplifies the send_frame
logic and is the preparation for moving vaapi_encode_send_frame to the base layer.

Signed-off-by: Tong Wu <tong1.wu@intel.com>
This commit is contained in:
Tong Wu 2024-01-02 11:08:46 +08:00 committed by Lynne
parent dea5204b41
commit f303c26292
1 changed files with 4 additions and 4 deletions

View File

@ -878,7 +878,8 @@ static int vaapi_encode_discard(AVCodecContext *avctx,
return 0; return 0;
} }
static VAAPIEncodePicture *vaapi_encode_alloc(AVCodecContext *avctx) static VAAPIEncodePicture *vaapi_encode_alloc(AVCodecContext *avctx,
const AVFrame *frame)
{ {
VAAPIEncodeContext *ctx = avctx->priv_data; VAAPIEncodeContext *ctx = avctx->priv_data;
VAAPIEncodePicture *pic; VAAPIEncodePicture *pic;
@ -895,7 +896,7 @@ static VAAPIEncodePicture *vaapi_encode_alloc(AVCodecContext *avctx)
} }
} }
pic->input_surface = VA_INVALID_ID; pic->input_surface = (VASurfaceID)(uintptr_t)frame->data[3];
pic->recon_surface = VA_INVALID_ID; pic->recon_surface = VA_INVALID_ID;
pic->output_buffer = VA_INVALID_ID; pic->output_buffer = VA_INVALID_ID;
@ -1332,7 +1333,7 @@ static int vaapi_encode_send_frame(AVCodecContext *avctx, AVFrame *frame)
if (err < 0) if (err < 0)
return err; return err;
pic = vaapi_encode_alloc(avctx); pic = vaapi_encode_alloc(avctx, frame);
if (!pic) if (!pic)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
@ -1345,7 +1346,6 @@ static int vaapi_encode_send_frame(AVCodecContext *avctx, AVFrame *frame)
if (ctx->input_order == 0 || frame->pict_type == AV_PICTURE_TYPE_I) if (ctx->input_order == 0 || frame->pict_type == AV_PICTURE_TYPE_I)
pic->force_idr = 1; pic->force_idr = 1;
pic->input_surface = (VASurfaceID)(uintptr_t)frame->data[3];
pic->pts = frame->pts; pic->pts = frame->pts;
pic->duration = frame->duration; pic->duration = frame->duration;