Go to the documentation of this file.
   20 #include <va/va_enc_mpeg2.h> 
   67                                              char *
data, 
size_t *data_len,
 
   81                "%zu < %zu.\n", *data_len,
 
  102                "type = %d.\n", 
type);
 
  110                                                     char *
data, 
size_t *data_len)
 
  144                                                    char *
data, 
size_t *data_len)
 
  176     VAEncSequenceParameterBufferMPEG2 *vseq = 
ctx->codec_sequence_params;
 
  177     VAEncPictureParameterBufferMPEG2  *vpic = 
ctx->codec_picture_params;
 
  178     int code, ext_n, ext_d;
 
  180     memset(sh,   0, 
sizeof(*sh));
 
  181     memset(
se,   0, 
sizeof(*
se));
 
  182     memset(sde,  0, 
sizeof(*sde));
 
  183     memset(goph, 0, 
sizeof(*goph));
 
  184     memset(ph,   0, 
sizeof(*ph));
 
  185     memset(pce,  0, 
sizeof(*pce));
 
  188     if (
ctx->va_bit_rate > 0) {
 
  202     switch (avctx->
level) {
 
  230                                   (
AVRational) { avctx->width, avctx->height });
 
  242                    "representable, signalling square pixels instead.\n",
 
  257                                    &
code, &ext_n, &ext_d, 0);
 
  274     se->profile_and_level_indication = avctx->
profile << 4 | avctx->
level;
 
  275     se->progressive_sequence = 1;
 
  276     se->chroma_format        = 1;
 
  278     se->horizontal_size_extension = avctx->
width  >> 12;
 
  279     se->vertical_size_extension   = avctx->
height >> 12;
 
  281     se->bit_rate_extension        = priv->
bit_rate >> 18;
 
  283     se->low_delay                 = 
ctx->b_per_p == 0;
 
  285     se->frame_rate_extension_n = ext_n;
 
  286     se->frame_rate_extension_d = ext_d;
 
  355     *vseq = (VAEncSequenceParameterBufferMPEG2) {
 
  356         .intra_period = 
ctx->gop_size,
 
  357         .ip_period    = 
ctx->b_per_p + 1,
 
  359         .picture_width  = avctx->
width,
 
  360         .picture_height = avctx->
height,
 
  362         .bits_per_second          = 
ctx->va_bit_rate,
 
  367         .sequence_extension.bits = {
 
  368             .profile_and_level_indication = 
se->profile_and_level_indication,
 
  369             .progressive_sequence         = 
se->progressive_sequence,
 
  370             .chroma_format                = 
se->chroma_format,
 
  371             .low_delay                    = 
se->low_delay,
 
  372             .frame_rate_extension_n       = 
se->frame_rate_extension_n,
 
  373             .frame_rate_extension_d       = 
se->frame_rate_extension_d,
 
  384     *vpic = (VAEncPictureParameterBufferMPEG2) {
 
  385         .forward_reference_picture  = VA_INVALID_ID,
 
  386         .backward_reference_picture = VA_INVALID_ID,
 
  387         .reconstructed_picture      = VA_INVALID_ID,
 
  388         .coded_buf                  = VA_INVALID_ID,
 
  391         .f_code    = { { 15, 15 }, { 15, 15 } },
 
  393         .picture_coding_extension.bits = {
 
  407         .composite_display.bits = {
 
  457         vpic->picture_type = VAEncPictureTypeIntra;
 
  460         vpic->picture_type = VAEncPictureTypePredictive;
 
  464         vpic->picture_type = VAEncPictureTypeBidirectional;
 
  473     vpic->f_code[0][0]       = pce->
f_code[0][0];
 
  474     vpic->f_code[0][1]       = pce->
f_code[0][1];
 
  475     vpic->f_code[1][0]       = pce->
f_code[1][0];
 
  476     vpic->f_code[1][1]       = pce->
f_code[1][1];
 
  507     vslice->quantiser_scale_code = qp;
 
  524     if (
ctx->va_rc_mode == VA_RC_CQP) {
 
  525         priv->
quant_p = av_clip(
ctx->rc_quality, 1, 31);
 
  540                "%d / %d / %d for I- / P- / B-frames.\n",
 
  552     ctx->nb_slices  = 
ctx->slice_block_rows;
 
  555     ctx->roi_quant_range = 31;
 
  573     .default_quality       = 10,
 
  575     .sequence_params_size  = 
sizeof(VAEncSequenceParameterBufferMPEG2),
 
  578     .picture_params_size   = 
sizeof(VAEncPictureParameterBufferMPEG2),
 
  581     .slice_params_size     = 
sizeof(VAEncSliceParameterBufferMPEG2),
 
  584     .sequence_header_type  = VAEncPackedHeaderSequence,
 
  587     .picture_header_type   = VAEncPackedHeaderPicture,
 
  605     switch (avctx->
level) {
 
  617     if (avctx->
height % 4096 == 0 || avctx->
width % 4096 == 0) {
 
  619                "height or width divisible by 4096.\n");
 
  623     ctx->desired_packed_headers = VA_ENC_PACKED_HEADER_SEQUENCE |
 
  624                                   VA_ENC_PACKED_HEADER_PICTURE;
 
  642 #define OFFSET(x) offsetof(VAAPIEncodeMPEG2Context, x) 
  643 #define FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM) 
  648     { 
"profile", 
"Set profile (in profile_and_level_indication)",
 
  652 #define PROFILE(name, value)  name, NULL, 0, AV_OPT_TYPE_CONST, \ 
  653       { .i64 = value }, 0, 0, FLAGS, "profile" 
  658     { 
"level", 
"Set level (in profile_and_level_indication)",
 
  660       { .i64 = 4 }, 0, 15, 
FLAGS, 
"level" },
 
  662 #define LEVEL(name, value) name, NULL, 0, AV_OPT_TYPE_CONST, \ 
  663       { .i64 = value }, 0, 0, FLAGS, "level" 
  664     { 
LEVEL(
"low",       10) },
 
  665     { 
LEVEL(
"main",       8) },
 
  666     { 
LEVEL(
"high_1440",  6) },
 
  667     { 
LEVEL(
"high",       4) },
 
  677     { 
"i_qfactor",      
"1"   },
 
  678     { 
"i_qoffset",      
"0"   },
 
  679     { 
"b_qfactor",      
"6/5" },
 
  680     { 
"b_qoffset",      
"0"   },
 
  694     .
name           = 
"mpeg2_vaapi",
 
  712     .wrapper_name   = 
"vaapi",
 
  
CodedBitstreamContext * cbc
 
MPEG2RawPictureHeader picture_header
 
static int vaapi_encode_mpeg2_write_fragment(AVCodecContext *avctx, char *data, size_t *data_len, CodedBitstreamFragment *frag)
 
#define AV_LOG_WARNING
Something somehow does not look correct.
 
void * codec_slice_params
 
AVPixelFormat
Pixel format.
 
static av_cold int init(AVCodecContext *avctx)
 
#define FF_PROFILE_MPEG2_SIMPLE
 
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
 
enum AVColorSpace colorspace
YUV colorspace type.
 
MPEG2RawGroupOfPicturesHeader gop_header
 
unsigned int vbv_buffer_size
 
#define AV_CODEC_CAP_HARDWARE
Codec is backed by a hardware implementation.
 
AVRational av_div_q(AVRational b, AVRational c)
Divide one rational by another.
 
#define se(name, range_min, range_max)
 
unsigned int f_code_horizontal
 
MPEG2RawSequenceDisplayExtension sequence_display
 
enum AVColorTransferCharacteristic color_trc
Color Transfer Characteristic.
 
Context structure for coded bitstream operations.
 
void ff_cbs_close(CodedBitstreamContext **ctx_ptr)
Close a context and free all internal state.
 
struct VAAPIEncodePicture * refs[MAX_PICTURE_REFERENCES]
 
@ MPEG2_EXTENSION_SEQUENCE
 
float b_quant_offset
qscale offset between IP and B-frames
 
void ff_cbs_fragment_free(CodedBitstreamContext *ctx, CodedBitstreamFragment *frag)
Free the units array of a fragment in addition to what ff_cbs_fragment_reset does.
 
av_cold int ff_vaapi_encode_close(AVCodecContext *avctx)
 
uint16_t display_horizontal_size
 
static av_cold int vaapi_encode_mpeg2_close(AVCodecContext *avctx)
 
const AVCodecHWConfigInternal * ff_vaapi_encode_hw_configs[]
 
#define FF_PROFILE_MPEG2_MAIN
 
void ff_mpeg12_find_best_frame_rate(AVRational frame_rate, int *code, int *ext_n, int *ext_d, int nonstandard)
 
static av_cold int vaapi_encode_mpeg2_configure(AVCodecContext *avctx)
 
float i_quant_factor
qscale factor between P- and I-frames If > 0 then the last P-frame quantizer will be used (q = lastp_...
 
uint8_t frame_pred_frame_dct
 
uint8_t extension_start_code
 
@ MPEG2_EXTENSION_PICTURE_CODING
 
static const AVCodecDefault defaults[]
 
static const AVOption vaapi_encode_mpeg2_options[]
 
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
 
uint8_t concealment_motion_vectors
 
VAAPIEncodeContext common
 
uint8_t colour_description
 
enum AVColorPrimaries color_primaries
Chromaticity coordinates of the source primaries.
 
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
 
void * codec_picture_params
 
uint8_t composite_display_flag
 
Coded bitstream fragment structure, combining one or more units.
 
static int vaapi_encode_mpeg2_init_picture_params(AVCodecContext *avctx, VAAPIEncodePicture *pic)
 
size_t data_size
The number of bytes in the bitstream.
 
static double av_q2d(AVRational a)
Convert an AVRational to a double.
 
#define FF_PROFILE_UNKNOWN
 
#define av_assert0(cond)
assert() equivalent, that is always enabled.
 
static enum AVPixelFormat pix_fmts[]
 
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
 
#define LEVEL(name, value)
 
int ff_vaapi_encode_receive_packet(AVCodecContext *avctx, AVPacket *pkt)
 
size_t data_bit_padding
The number of bits which should be ignored in the final byte.
 
int ff_vaapi_encode_send_frame(AVCodecContext *avctx, const AVFrame *frame)
 
@ MPEG2_EXTENSION_SEQUENCE_DISPLAY
 
int rc_buffer_size
decoder bitstream buffer size
 
#define LIBAVUTIL_VERSION_INT
 
Describe the class of an AVClass context structure.
 
const VAAPIEncodeProfile * profiles
 
Rational number (pair of numerator and denominator).
 
@ MPEG2_START_SEQUENCE_HEADER
 
const char * av_default_item_name(void *ptr)
Return the context name.
 
uint8_t repeat_first_field
 
#define PROFILE(name, value)
 
MPEG2RawExtensionData picture_coding_extension
 
static const VAAPIEncodeProfile vaapi_encode_mpeg2_profiles[]
 
uint8_t matrix_coefficients
 
static av_cold int vaapi_encode_mpeg2_init(AVCodecContext *avctx)
 
MPEG2RawSequenceExtension sequence
 
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
 
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
 
#define VAAPI_ENCODE_RC_OPTIONS
 
uint8_t extension_start_code_identifier
 
static const AVClass vaapi_encode_mpeg2_class
 
CodedBitstreamFragment current_fragment
 
uint8_t * data
Pointer to the bitstream form of this fragment.
 
static const uint8_t header[24]
 
#define VAAPI_ENCODE_COMMON_OPTIONS
 
VASurfaceID recon_surface
 
float b_quant_factor
qscale factor between IP and B-frames If > 0 then the last P-frame quantizer will be used (q= lastp_q...
 
static const VAAPIEncodeType vaapi_encode_type_mpeg2
 
static int vaapi_encode_mpeg2_init_slice_params(AVCodecContext *avctx, VAAPIEncodePicture *pic, VAAPIEncodeSlice *slice)
 
and forward the test the status of outputs and forward it to the corresponding return FFERROR_NOT_READY If the filters stores internally one or a few frame for some it can consider them to be part of the FIFO and delay acknowledging a status change accordingly Example code
 
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
 
static int vaapi_encode_mpeg2_write_sequence_header(AVCodecContext *avctx, char *data, size_t *data_len)
 
const char * name
Name of the codec implementation.
 
static av_always_inline AVRational av_inv_q(AVRational q)
Invert a rational.
 
static int vaapi_encode_mpeg2_init_sequence_params(AVCodecContext *avctx)
 
uint8_t transfer_characteristics
 
int ff_cbs_write_fragment_data(CodedBitstreamContext *ctx, CodedBitstreamFragment *frag)
Write the content of the fragment to its own internal buffer.
 
static int av_cmp_q(AVRational a, AVRational b)
Compare two rationals.
 
av_cold int ff_vaapi_encode_init(AVCodecContext *avctx)
 
union MPEG2RawExtensionData::@39 data
 
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
 
int ff_cbs_init(CodedBitstreamContext **ctx_ptr, enum AVCodecID codec_id, void *log_ctx)
Create and initialise a new context for the given codec.
 
AVCodec ff_mpeg2_vaapi_encoder
 
static const AVCodecDefault vaapi_encode_mpeg2_defaults[]
 
MPEG2RawPictureCodingExtension picture_coding
 
main external API structure.
 
float i_quant_offset
qscale offset between P and I-frames
 
void ff_cbs_fragment_reset(CodedBitstreamContext *ctx, CodedBitstreamFragment *frag)
Free the units contained in a fragment as well as the fragment's own data buffer, but not the units a...
 
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
 
uint8_t picture_structure
 
MPEG2RawExtensionData sequence_extension
 
unsigned int f_code_vertical
 
uint16_t display_vertical_size
 
MPEG2RawSequenceHeader sequence_header
 
int ff_cbs_insert_unit_content(CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, int position, CodedBitstreamUnitType type, void *content, AVBufferRef *content_buf)
Insert a new unit into a fragment with the given content.
 
static int vaapi_encode_mpeg2_add_header(AVCodecContext *avctx, CodedBitstreamFragment *frag, int type, void *header)
 
uint8_t intra_dc_precision
 
int width
picture width / height.
 
MPEG2RawExtensionData sequence_display_extension
 
static int vaapi_encode_mpeg2_write_picture_header(AVCodecContext *avctx, VAAPIEncodePicture *pic, char *data, size_t *data_len)
 
@ AV_CODEC_ID_MPEG2VIDEO
preferred ID for MPEG-1/2 video decoding
 
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel.
 
uint8_t sub_carrier_phase
 
uint8_t progressive_frame