Showing the changes to libavcodec/vaapi_encode_mpeg2.c (1 of 1 file). Show all
Unified · Split
| @@ -28,6 +28,9 @@ · 27 unmodified lines | ||
| 28 | 28 | #include "vaapi_encode.h" |
| 29 | 29 | |
| 30 | 30 | typedef struct VAAPIEncodeMPEG2Context { |
| 31 | + VAAPIEncodeContext common; | |
| 32 | + | |
| 33 | + // Derived settings. | |
| 31 | 34 | int mb_width; |
| 32 | 35 | int mb_height; |
| 33 | 36 | |
| @@ -35,15 +38,6 @@ typedef struct VAAPIEncodeMPEG2Context { · 1 unmodified line | ||
| 35 | 38 | int quant_p; |
| 36 | 39 | int quant_b; |
| 37 | 40 | |
| 38 | − MPEG2RawSequenceHeader sequence_header; | |
| 39 | − MPEG2RawExtensionData sequence_extension; | |
| 40 | − MPEG2RawExtensionData sequence_display_extension; | |
| 41 | − MPEG2RawGroupOfPicturesHeader gop_header; | |
| 42 | − MPEG2RawPictureHeader picture_header; | |
| 43 | − MPEG2RawExtensionData picture_coding_extension; | |
| 44 | − | |
| 45 | − int64_t last_i_frame; | |
| 46 | − | |
| 47 | 41 | unsigned int bit_rate; |
| 48 | 42 | unsigned int vbv_buffer_size; |
| 49 | 43 | |
| @@ -52,6 +46,17 @@ typedef struct VAAPIEncodeMPEG2Context { · 2 unmodified lines | ||
| 52 | 46 | unsigned int f_code_horizontal; |
| 53 | 47 | unsigned int f_code_vertical; |
| 54 | 48 | |
| 49 | + // Stream state. | |
| 50 | + int64_t last_i_frame; | |
| 51 | + | |
| 52 | + // Writer structures. | |
| 53 | + MPEG2RawSequenceHeader sequence_header; | |
| 54 | + MPEG2RawExtensionData sequence_extension; | |
| 55 | + MPEG2RawExtensionData sequence_display_extension; | |
| 56 | + MPEG2RawGroupOfPicturesHeader gop_header; | |
| 57 | + MPEG2RawPictureHeader picture_header; | |
| 58 | + MPEG2RawExtensionData picture_coding_extension; | |
| 59 | + | |
| 55 | 60 | CodedBitstreamContext *cbc; |
| 56 | 61 | CodedBitstreamFragment current_fragment; |
| 57 | 62 | } VAAPIEncodeMPEG2Context; |
| @@ -61,8 +66,7 @@ static int vaapi_encode_mpeg2_write_fragment(AVCodecContext *avctx, · 3 unmodified lines | ||
| 61 | 66 | char *data, size_t *data_len, |
| 62 | 67 | CodedBitstreamFragment *frag) |
| 63 | 68 | { |
| 64 | − VAAPIEncodeContext *ctx = avctx->priv_data; | |
| 65 | − VAAPIEncodeMPEG2Context *priv = ctx->priv_data; | |
| 69 | + VAAPIEncodeMPEG2Context *priv = avctx->priv_data; | |
| 66 | 70 | int err; |
| 67 | 71 | |
| 68 | 72 | err = ff_cbs_write_fragment_data(priv->cbc, frag); |
| @@ -88,8 +92,7 @@ static int vaapi_encode_mpeg2_add_header(AVCodecContext *avctx, · 19 unmodified lines | ||
| 88 | 92 | CodedBitstreamFragment *frag, |
| 89 | 93 | int type, void *header) |
| 90 | 94 | { |
| 91 | − VAAPIEncodeContext *ctx = avctx->priv_data; | |
| 92 | − VAAPIEncodeMPEG2Context *priv = ctx->priv_data; | |
| 95 | + VAAPIEncodeMPEG2Context *priv = avctx->priv_data; | |
| 93 | 96 | int err; |
| 94 | 97 | |
| 95 | 98 | 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, · 9 unmodified lines | ||
| 105 | 108 | static int vaapi_encode_mpeg2_write_sequence_header(AVCodecContext *avctx, |
| 106 | 109 | char *data, size_t *data_len) |
| 107 | 110 | { |
| 108 | − VAAPIEncodeContext *ctx = avctx->priv_data; | |
| 109 | − VAAPIEncodeMPEG2Context *priv = ctx->priv_data; | |
| 111 | + VAAPIEncodeMPEG2Context *priv = avctx->priv_data; | |
| 110 | 112 | CodedBitstreamFragment *frag = &priv->current_fragment; |
| 111 | 113 | int err; |
| 112 | 114 | |
| @@ -140,8 +142,7 @@ static int vaapi_encode_mpeg2_write_picture_header(AVCodecContext *avctx, · 27 unmodified lines | ||
| 140 | 142 | VAAPIEncodePicture *pic, |
| 141 | 143 | char *data, size_t *data_len) |
| 142 | 144 | { |
| 143 | − VAAPIEncodeContext *ctx = avctx->priv_data; | |
| 144 | − VAAPIEncodeMPEG2Context *priv = ctx->priv_data; | |
| 145 | + VAAPIEncodeMPEG2Context *priv = avctx->priv_data; | |
| 145 | 146 | CodedBitstreamFragment *frag = &priv->current_fragment; |
| 146 | 147 | int err; |
| 147 | 148 | |
| @@ -164,7 +165,7 @@ fail: · 16 unmodified lines | ||
| 164 | 165 | static int vaapi_encode_mpeg2_init_sequence_params(AVCodecContext *avctx) |
| 165 | 166 | { |
| 166 | 167 | VAAPIEncodeContext *ctx = avctx->priv_data; |
| 167 | − VAAPIEncodeMPEG2Context *priv = ctx->priv_data; | |
| 168 | + VAAPIEncodeMPEG2Context *priv = avctx->priv_data; | |
| 168 | 169 | MPEG2RawSequenceHeader *sh = &priv->sequence_header; |
| 169 | 170 | MPEG2RawSequenceExtension *se = &priv->sequence_extension.data.sequence; |
| 170 | 171 | MPEG2RawSequenceDisplayExtension *sde = &priv->sequence_display_extension.data.sequence_display; |
| @@ -416,8 +417,7 @@ static int vaapi_encode_mpeg2_init_sequence_params(AVCodecContext *avctx) · 245 unmodified lines | ||
| 416 | 417 | static int vaapi_encode_mpeg2_init_picture_params(AVCodecContext *avctx, |
| 417 | 418 | VAAPIEncodePicture *pic) |
| 418 | 419 | { |
| 419 | − VAAPIEncodeContext *ctx = avctx->priv_data; | |
| 420 | − VAAPIEncodeMPEG2Context *priv = ctx->priv_data; | |
| 420 | + VAAPIEncodeMPEG2Context *priv = avctx->priv_data; | |
| 421 | 421 | MPEG2RawPictureHeader *ph = &priv->picture_header; |
| 422 | 422 | MPEG2RawPictureCodingExtension *pce = &priv->picture_coding_extension.data.picture_coding; |
| 423 | 423 | VAEncPictureParameterBufferMPEG2 *vpic = pic->codec_picture_params; |
| @@ -482,9 +482,8 @@ static int vaapi_encode_mpeg2_init_slice_params(AVCodecContext *avctx, · 58 unmodified lines | ||
| 482 | 482 | VAAPIEncodePicture *pic, |
| 483 | 483 | VAAPIEncodeSlice *slice) |
| 484 | 484 | { |
| 485 | − VAAPIEncodeContext *ctx = avctx->priv_data; | |
| 485 | + VAAPIEncodeMPEG2Context *priv = avctx->priv_data; | |
| 486 | 486 | VAEncSliceParameterBufferMPEG2 *vslice = slice->codec_slice_params; |
| 487 | − VAAPIEncodeMPEG2Context *priv = ctx->priv_data; | |
| 488 | 487 | int qp; |
| 489 | 488 | |
| 490 | 489 | vslice->macroblock_address = priv->mb_width * slice->index; |
| @@ -515,7 +514,7 @@ static int vaapi_encode_mpeg2_init_slice_params(AVCodecContext *avctx, · 24 unmodified lines | ||
| 515 | 514 | static av_cold int vaapi_encode_mpeg2_configure(AVCodecContext *avctx) |
| 516 | 515 | { |
| 517 | 516 | VAAPIEncodeContext *ctx = avctx->priv_data; |
| 518 | − VAAPIEncodeMPEG2Context *priv = ctx->priv_data; | |
| 517 | + VAAPIEncodeMPEG2Context *priv = avctx->priv_data; | |
| 519 | 518 | int err; |
| 520 | 519 | |
| 521 | 520 | err = ff_cbs_init(&priv->cbc, AV_CODEC_ID_MPEG2VIDEO, avctx); |
| @@ -638,11 +637,9 @@ static av_cold int vaapi_encode_mpeg2_init(AVCodecContext *avctx) · 116 unmodified lines | ||
| 638 | 637 | |
| 639 | 638 | static av_cold int vaapi_encode_mpeg2_close(AVCodecContext *avctx) |
| 640 | 639 | { |
| 641 | − VAAPIEncodeContext *ctx = avctx->priv_data; | |
| 642 | − VAAPIEncodeMPEG2Context *priv = ctx->priv_data; | |
| 640 | + VAAPIEncodeMPEG2Context *priv = avctx->priv_data; | |
| 643 | 641 | |
| 644 | − if (priv) | |
| 645 | − ff_cbs_close(&priv->cbc); | |
| 642 | + ff_cbs_close(&priv->cbc); | |
| 646 | 643 | |
| 647 | 644 | return ff_vaapi_encode_close(avctx); |
| 648 | 645 | } |
| @@ -665,7 +662,7 @@ AVCodec ff_mpeg2_vaapi_encoder = { · 16 unmodified lines | ||
| 665 | 662 | .long_name = NULL_IF_CONFIG_SMALL("MPEG-2 (VAAPI)"), |
| 666 | 663 | .type = AVMEDIA_TYPE_VIDEO, |
| 667 | 664 | .id = AV_CODEC_ID_MPEG2VIDEO, |
| 668 | − .priv_data_size = sizeof(VAAPIEncodeContext), | |
| 665 | + .priv_data_size = sizeof(VAAPIEncodeMPEG2Context), | |
| 669 | 666 | .init = &vaapi_encode_mpeg2_init, |
| 670 | 667 | .encode2 = &ff_vaapi_encode2, |
| 671 | 668 | .close = &vaapi_encode_mpeg2_close, |