[FFmpeg-devel] [PATCH 04/26] vaapi_encode_mpeg2: Move common structure into context
Xiang, Haihao
haihao.xiang at intel.com
Wed Apr 25 10:43:26 EEST 2018
> ---
> libavcodec/vaapi_encode_mpeg2.c | 50 ++++++++++++++++++++------------------
> ---
> 1 file changed, 24 insertions(+), 26 deletions(-)
>
> diff --git a/libavcodec/vaapi_encode_mpeg2.c b/libavcodec/vaapi_encode_mpeg2.c
> index 42df77ea49..5dd1f39cbc 100644
> --- a/libavcodec/vaapi_encode_mpeg2.c
> +++ b/libavcodec/vaapi_encode_mpeg2.c
> @@ -28,6 +28,9 @@
> #include "vaapi_encode.h"
>
> typedef struct VAAPIEncodeMPEG2Context {
> + VAAPIEncodeContext common;
> +
> + // Derived settings.
> int mb_width;
> int mb_height;
>
> @@ -35,15 +38,6 @@ typedef struct VAAPIEncodeMPEG2Context {
> int quant_p;
> int quant_b;
>
> - MPEG2RawSequenceHeader sequence_header;
> - MPEG2RawExtensionData sequence_extension;
> - MPEG2RawExtensionData sequence_display_extension;
> - MPEG2RawGroupOfPicturesHeader gop_header;
> - MPEG2RawPictureHeader picture_header;
> - MPEG2RawExtensionData picture_coding_extension;
> -
> - int64_t last_i_frame;
> -
> unsigned int bit_rate;
> unsigned int vbv_buffer_size;
>
> @@ -52,6 +46,17 @@ typedef struct VAAPIEncodeMPEG2Context {
> unsigned int f_code_horizontal;
> unsigned int f_code_vertical;
>
> + // Stream state.
> + int64_t last_i_frame;
> +
> + // Writer structures.
> + MPEG2RawSequenceHeader sequence_header;
> + MPEG2RawExtensionData sequence_extension;
> + MPEG2RawExtensionData sequence_display_extension;
> + MPEG2RawGroupOfPicturesHeader gop_header;
> + MPEG2RawPictureHeader picture_header;
> + MPEG2RawExtensionData picture_coding_extension;
> +
> CodedBitstreamContext *cbc;
> CodedBitstreamFragment current_fragment;
> } VAAPIEncodeMPEG2Context;
> @@ -61,8 +66,7 @@ static int vaapi_encode_mpeg2_write_fragment(AVCodecContext
> *avctx,
> char *data, size_t *data_len,
> CodedBitstreamFragment *frag)
> {
> - VAAPIEncodeContext *ctx = avctx->priv_data;
> - VAAPIEncodeMPEG2Context *priv = ctx->priv_data;
> + VAAPIEncodeMPEG2Context *priv = avctx->priv_data;
> int err;
>
> err = ff_cbs_write_fragment_data(priv->cbc, frag);
> @@ -88,8 +92,7 @@ static int vaapi_encode_mpeg2_add_header(AVCodecContext
> *avctx,
> CodedBitstreamFragment *frag,
> int type, void *header)
> {
> - VAAPIEncodeContext *ctx = avctx->priv_data;
> - VAAPIEncodeMPEG2Context *priv = ctx->priv_data;
> + VAAPIEncodeMPEG2Context *priv = avctx->priv_data;
> int err;
>
> err = ff_cbs_insert_unit_content(priv->cbc, frag, -1, type, header,
> NULL);
> @@ -105,8 +108,7 @@ static int vaapi_encode_mpeg2_add_header(AVCodecContext
> *avctx,
> static int vaapi_encode_mpeg2_write_sequence_header(AVCodecContext *avctx,
> char *data, size_t
> *data_len)
> {
> - VAAPIEncodeContext *ctx = avctx->priv_data;
> - VAAPIEncodeMPEG2Context *priv = ctx->priv_data;
> + VAAPIEncodeMPEG2Context *priv = avctx->priv_data;
> CodedBitstreamFragment *frag = &priv->current_fragment;
> int err;
>
> @@ -140,8 +142,7 @@ static int
> vaapi_encode_mpeg2_write_picture_header(AVCodecContext *avctx,
> VAAPIEncodePicture *pic,
> char *data, size_t
> *data_len)
> {
> - VAAPIEncodeContext *ctx = avctx->priv_data;
> - VAAPIEncodeMPEG2Context *priv = ctx->priv_data;
> + VAAPIEncodeMPEG2Context *priv = avctx->priv_data;
> CodedBitstreamFragment *frag = &priv->current_fragment;
> int err;
>
> @@ -164,7 +165,7 @@ fail:
> static int vaapi_encode_mpeg2_init_sequence_params(AVCodecContext *avctx)
> {
> VAAPIEncodeContext *ctx = avctx->priv_data;
> - VAAPIEncodeMPEG2Context *priv = ctx->priv_data;
> + VAAPIEncodeMPEG2Context *priv = avctx->priv_data;
> MPEG2RawSequenceHeader *sh = &priv->sequence_header;
> MPEG2RawSequenceExtension *se = &priv-
> >sequence_extension.data.sequence;
> MPEG2RawSequenceDisplayExtension *sde = &priv-
> >sequence_display_extension.data.sequence_display;
> @@ -416,8 +417,7 @@ static int
> vaapi_encode_mpeg2_init_sequence_params(AVCodecContext *avctx)
> static int vaapi_encode_mpeg2_init_picture_params(AVCodecContext *avctx,
> VAAPIEncodePicture *pic)
> {
> - VAAPIEncodeContext *ctx = avctx->priv_data;
> - VAAPIEncodeMPEG2Context *priv = ctx->priv_data;
> + VAAPIEncodeMPEG2Context *priv = avctx->priv_data;
> MPEG2RawPictureHeader *ph = &priv->picture_header;
> MPEG2RawPictureCodingExtension *pce = &priv-
> >picture_coding_extension.data.picture_coding;
> VAEncPictureParameterBufferMPEG2 *vpic = pic->codec_picture_params;
> @@ -482,9 +482,8 @@ static int
> vaapi_encode_mpeg2_init_slice_params(AVCodecContext *avctx,
> VAAPIEncodePicture *pic,
> VAAPIEncodeSlice *slice)
> {
> - VAAPIEncodeContext *ctx = avctx->priv_data;
> + VAAPIEncodeMPEG2Context *priv = avctx->priv_data;
> VAEncSliceParameterBufferMPEG2 *vslice = slice->codec_slice_params;
> - VAAPIEncodeMPEG2Context *priv = ctx->priv_data;
> int qp;
>
> vslice->macroblock_address = priv->mb_width * slice->index;
> @@ -515,7 +514,7 @@ static int
> vaapi_encode_mpeg2_init_slice_params(AVCodecContext *avctx,
> static av_cold int vaapi_encode_mpeg2_configure(AVCodecContext *avctx)
> {
> VAAPIEncodeContext *ctx = avctx->priv_data;
> - VAAPIEncodeMPEG2Context *priv = ctx->priv_data;
> + VAAPIEncodeMPEG2Context *priv = avctx->priv_data;
> int err;
>
> err = ff_cbs_init(&priv->cbc, AV_CODEC_ID_MPEG2VIDEO, avctx);
> @@ -638,8 +637,7 @@ static av_cold int vaapi_encode_mpeg2_init(AVCodecContext
> *avctx)
>
> static av_cold int vaapi_encode_mpeg2_close(AVCodecContext *avctx)
> {
> - VAAPIEncodeContext *ctx = avctx->priv_data;
> - VAAPIEncodeMPEG2Context *priv = ctx->priv_data;
> + VAAPIEncodeMPEG2Context *priv = avctx->priv_data;
>
> if (priv)
Is this check necessary?
> ff_cbs_close(&priv->cbc);
> @@ -665,7 +663,7 @@ AVCodec ff_mpeg2_vaapi_encoder = {
> .long_name = NULL_IF_CONFIG_SMALL("MPEG-2 (VAAPI)"),
> .type = AVMEDIA_TYPE_VIDEO,
> .id = AV_CODEC_ID_MPEG2VIDEO,
> - .priv_data_size = sizeof(VAAPIEncodeContext),
> + .priv_data_size = sizeof(VAAPIEncodeMPEG2Context),
> .init = &vaapi_encode_mpeg2_init,
> .encode2 = &ff_vaapi_encode2,
> .close = &vaapi_encode_mpeg2_close,
More information about the ffmpeg-devel
mailing list