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.
Showing the changes to libavcodec/vaapi_encode_mpeg2.c (1 of 14 files). Show all
Unified · Split
| @@ -141,7 +141,7 @@ fail: · 140 unmodified lines | |||
| 141 | } | 141 | } |
| 142 | 142 | ||
| 143 | static int vaapi_encode_mpeg2_write_picture_header(AVCodecContext *avctx, | 143 | static 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 | ||
| 420 | static int vaapi_encode_mpeg2_init_picture_params(AVCodecContext *avctx, | 420 | static 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 | ||
| 483 | static int vaapi_encode_mpeg2_init_slice_params(AVCodecContext *avctx, | 483 | static 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; |