History

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.

Lynne committed 2 years ago

Commit 9db68ed1 parent fdf802514 files · +201 −211Browse files

Showing the changes to libavcodec/vaapi_encode_mpeg2.c (1 of 14 files). Show all

Unified · Split

libavcodec/vaapi_encode_mpeg2.c+7−8
@@ -141,7 +141,7 @@ fail: · 140 unmodified lines
141}141}
142 142
143static int vaapi_encode_mpeg2_write_picture_header(AVCodecContext *avctx,143static int vaapi_encode_mpeg2_write_picture_header(AVCodecContext *avctx,
144 VAAPIEncodePicture *pic,144 FFHWBaseEncodePicture *pic,
145 char *data, size_t *data_len)145 char *data, size_t *data_len)
146{146{
147 VAAPIEncodeMPEG2Context *priv = avctx->priv_data;147 VAAPIEncodeMPEG2Context *priv = avctx->priv_data;
@@ -418,10 +418,10 @@ static int vaapi_encode_mpeg2_init_sequence_params(AVCodecContext *avctx) · 270 unmodified lines
418}418}
419 419
420static int vaapi_encode_mpeg2_init_picture_params(AVCodecContext *avctx,420static int vaapi_encode_mpeg2_init_picture_params(AVCodecContext *avctx,
421 VAAPIEncodePicture *vaapi_pic)421 FFHWBaseEncodePicture *pic)
422{422{
423 VAAPIEncodeMPEG2Context *priv = avctx->priv_data;423 VAAPIEncodeMPEG2Context *priv = avctx->priv_data;
424 const FFHWBaseEncodePicture *pic = &vaapi_pic->base;424 VAAPIEncodePicture *vaapi_pic = pic->priv;
425 MPEG2RawPictureHeader *ph = &priv->picture_header;425 MPEG2RawPictureHeader *ph = &priv->picture_header;
426 MPEG2RawPictureCodingExtension *pce = &priv->picture_coding_extension.data.picture_coding;426 MPEG2RawPictureCodingExtension *pce = &priv->picture_coding_extension.data.picture_coding;
427 VAEncPictureParameterBufferMPEG2 *vpic = vaapi_pic->codec_picture_params;427 VAEncPictureParameterBufferMPEG2 *vpic = vaapi_pic->codec_picture_params;
@@ -460,12 +460,12 @@ static int vaapi_encode_mpeg2_init_picture_params(AVCodecContext *avctx, · 32 unmodified lines
460 break;460 break;
461 case FF_HW_PICTURE_TYPE_P:461 case FF_HW_PICTURE_TYPE_P:
462 vpic->picture_type = VAEncPictureTypePredictive;462 vpic->picture_type = VAEncPictureTypePredictive;
463 vpic->forward_reference_picture = ((VAAPIEncodePicture *)pic->refs[0][0])->recon_surface;463 vpic->forward_reference_picture = ((VAAPIEncodePicture *)pic->refs[0][0]->priv)->recon_surface;
464 break;464 break;
465 case FF_HW_PICTURE_TYPE_B:465 case FF_HW_PICTURE_TYPE_B:
466 vpic->picture_type = VAEncPictureTypeBidirectional;466 vpic->picture_type = VAEncPictureTypeBidirectional;
467 vpic->forward_reference_picture = ((VAAPIEncodePicture *)pic->refs[0][0])->recon_surface;467 vpic->forward_reference_picture = ((VAAPIEncodePicture *)pic->refs[0][0]->priv)->recon_surface;
468 vpic->backward_reference_picture = ((VAAPIEncodePicture *)pic->refs[1][0])->recon_surface;468 vpic->backward_reference_picture = ((VAAPIEncodePicture *)pic->refs[1][0]->priv)->recon_surface;
469 break;469 break;
470 default:470 default:
471 av_assert0(0 && "invalid picture type");471 av_assert0(0 && "invalid picture type");
@@ -481,10 +481,9 @@ static int vaapi_encode_mpeg2_init_picture_params(AVCodecContext *avctx, · 9 unmodified lines
481}481}
482 482
483static int vaapi_encode_mpeg2_init_slice_params(AVCodecContext *avctx,483static int vaapi_encode_mpeg2_init_slice_params(AVCodecContext *avctx,
484 VAAPIEncodePicture *vaapi_pic,484 FFHWBaseEncodePicture *pic,
485 VAAPIEncodeSlice *slice)485 VAAPIEncodeSlice *slice)
486{486{
487 const FFHWBaseEncodePicture *pic = &vaapi_pic->base;
488 VAAPIEncodeMPEG2Context *priv = avctx->priv_data;487 VAAPIEncodeMPEG2Context *priv = avctx->priv_data;
489 VAEncSliceParameterBufferMPEG2 *vslice = slice->codec_slice_params;488 VAEncSliceParameterBufferMPEG2 *vslice = slice->codec_slice_params;
490 int qp;489 int qp;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t