20 #include <va/va_enc_mpeg2.h> 67 char *
data,
size_t *data_len,
81 "%zu < %zu.\n", *data_len,
101 "type = %d.\n", type);
109 char *
data,
size_t *data_len)
143 char *
data,
size_t *data_len)
177 int code, ext_n, ext_d;
179 memset(sh, 0,
sizeof(*sh));
180 memset(se, 0,
sizeof(*se));
181 memset(sde, 0,
sizeof(*sde));
182 memset(goph, 0,
sizeof(*goph));
183 memset(ph, 0,
sizeof(*ph));
184 memset(pce, 0,
sizeof(*pce));
201 switch (avctx->
level) {
229 (
AVRational) { avctx->width, avctx->height });
241 "representable, signalling square pixels instead.\n",
256 &code, &ext_n, &ext_d, 0);
353 *vseq = (VAEncSequenceParameterBufferMPEG2) {
357 .picture_width = avctx->
width,
358 .picture_height = avctx->
height,
365 .sequence_extension.bits = {
382 *vpic = (VAEncPictureParameterBufferMPEG2) {
383 .forward_reference_picture = VA_INVALID_ID,
384 .backward_reference_picture = VA_INVALID_ID,
385 .reconstructed_picture = VA_INVALID_ID,
386 .coded_buf = VA_INVALID_ID,
389 .f_code = { { 15, 15 }, { 15, 15 } },
391 .picture_coding_extension.bits = {
405 .composite_display.bits = {
455 vpic->picture_type = VAEncPictureTypeIntra;
458 vpic->picture_type = VAEncPictureTypePredictive;
462 vpic->picture_type = VAEncPictureTypeBidirectional;
471 vpic->f_code[0][0] = pce->
f_code[0][0];
472 vpic->f_code[0][1] = pce->
f_code[0][1];
473 vpic->f_code[1][0] = pce->
f_code[1][0];
474 vpic->f_code[1][1] = pce->
f_code[1][1];
505 vslice->quantiser_scale_code = qp;
538 "%d / %d / %d for I- / P- / B-frames.\n",
571 .default_quality = 10,
573 .sequence_params_size =
sizeof(VAEncSequenceParameterBufferMPEG2),
576 .picture_params_size =
sizeof(VAEncPictureParameterBufferMPEG2),
579 .slice_params_size =
sizeof(VAEncSliceParameterBufferMPEG2),
582 .sequence_header_type = VAEncPackedHeaderSequence,
585 .picture_header_type = VAEncPackedHeaderPicture,
603 switch (avctx->
level) {
615 if (avctx->
height % 4096 == 0 || avctx->
width % 4096 == 0) {
617 "height or width divisible by 4096.\n");
622 VA_ENC_PACKED_HEADER_PICTURE;
640 #define OFFSET(x) offsetof(VAAPIEncodeMPEG2Context, x) 641 #define FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM) 646 {
"profile",
"Set profile (in profile_and_level_indication)",
650 #define PROFILE(name, value) name, NULL, 0, AV_OPT_TYPE_CONST, \ 651 { .i64 = value }, 0, 0, FLAGS, "profile" 656 {
"level",
"Set level (in profile_and_level_indication)",
658 { .i64 = 4 }, 0, 15,
FLAGS,
"level" },
660 #define LEVEL(name, value) name, NULL, 0, AV_OPT_TYPE_CONST, \ 661 { .i64 = value }, 0, 0, FLAGS, "level" 662 {
LEVEL(
"low", 10) },
663 {
LEVEL(
"main", 8) },
664 {
LEVEL(
"high_1440", 6) },
665 {
LEVEL(
"high", 4) },
675 {
"i_qfactor",
"1" },
676 {
"i_qoffset",
"0" },
677 {
"b_qfactor",
"6/5" },
678 {
"b_qoffset",
"0" },
692 .
name =
"mpeg2_vaapi",
700 .priv_class = &vaapi_encode_mpeg2_class,
704 .
defaults = vaapi_encode_mpeg2_defaults,
710 .wrapper_name =
"vaapi",
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
static av_cold int vaapi_encode_mpeg2_configure(AVCodecContext *avctx)
MPEG2RawExtensionData sequence_extension
uint8_t frame_pred_frame_dct
uint8_t extension_start_code_identifier
#define FF_PROFILE_MPEG2_MAIN
AVRational av_div_q(AVRational b, AVRational c)
Divide one rational by another.
#define se(name, range_min, range_max)
uint16_t bit_rate_extension
ptrdiff_t const GLvoid * data
#define AV_LOG_WARNING
Something somehow does not look correct.
#define LIBAVUTIL_VERSION_INT
static const VAAPIEncodeProfile vaapi_encode_mpeg2_profiles[]
static av_cold int init(AVCodecContext *avctx)
MPEG2RawSequenceExtension sequence
#define AV_CODEC_CAP_HARDWARE
Codec is backed by a hardware implementation.
uint8_t progressive_sequence
int ff_cbs_init(CodedBitstreamContext **ctx_ptr, enum AVCodecID codec_id, void *log_ctx)
Create and initialise a new context for the given codec.
const char * av_default_item_name(void *ptr)
Return the context name.
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel...
uint16_t display_horizontal_size
MPEG2RawExtensionData sequence_display_extension
void * codec_sequence_params
static av_cold int vaapi_encode_mpeg2_init(AVCodecContext *avctx)
unsigned int vbv_buffer_size
float i_quant_offset
qscale offset between P and I-frames
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
uint8_t composite_display_flag
uint8_t transfer_characteristics
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
#define av_assert0(cond)
assert() equivalent, that is always enabled.
static int vaapi_encode_mpeg2_write_picture_header(AVCodecContext *avctx, VAAPIEncodePicture *pic, char *data, size_t *data_len)
static int vaapi_encode_mpeg2_add_header(AVCodecContext *avctx, CodedBitstreamFragment *frag, int type, void *header)
static const AVClass vaapi_encode_mpeg2_class
uint8_t repeat_first_field
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...
uint16_t display_vertical_size
static double av_q2d(AVRational a)
Convert an AVRational to a double.
VASurfaceID recon_surface
static const uint8_t header[24]
MPEG2RawSequenceHeader sequence_header
static int vaapi_encode_mpeg2_write_fragment(AVCodecContext *avctx, char *data, size_t *data_len, CodedBitstreamFragment *frag)
void ff_cbs_fragment_reset(CodedBitstreamFragment *frag)
Free the units contained in a fragment as well as the fragment's own data buffer, but not the units a...
MPEG2RawPictureCodingExtension picture_coding
uint8_t colour_description
size_t data_size
The number of bytes in the bitstream.
AVCodec ff_mpeg2_vaapi_encoder
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static int vaapi_encode_mpeg2_init_picture_params(AVCodecContext *avctx, VAAPIEncodePicture *pic)
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
static const AVCodecDefault vaapi_encode_mpeg2_defaults[]
MPEG2RawPictureHeader picture_header
simple assert() macros that are a bit more flexible than ISO C assert().
const char * name
Name of the codec implementation.
float i_quant_factor
qscale factor between P- and I-frames If > 0 then the last P-frame quantizer will be used (q = lastp_...
static const AVCodecDefault defaults[]
void ff_mpeg12_find_best_frame_rate(AVRational frame_rate, int *code, int *ext_n, int *ext_d, int nonstandard)
void * codec_picture_params
size_t data_bit_padding
The number of bits which should be ignored in the final byte.
int rc_buffer_size
decoder bitstream buffer size
CodedBitstreamContext * cbc
#define PROFILE(name, value)
static av_cold int vaapi_encode_mpeg2_close(AVCodecContext *avctx)
static int vaapi_encode_mpeg2_init_sequence_params(AVCodecContext *avctx)
uint8_t progressive_frame
uint8_t concealment_motion_vectors
int width
picture width / height.
unsigned int f_code_vertical
#define FF_PROFILE_UNKNOWN
const VAAPIEncodeProfile * profiles
av_cold int ff_vaapi_encode_init(AVCodecContext *avctx)
enum AVColorPrimaries color_primaries
Chromaticity coordinates of the source primaries.
VAAPIEncodeContext common
void * codec_picture_params
int ff_vaapi_encode_receive_packet(AVCodecContext *avctx, AVPacket *pkt)
uint8_t horizontal_size_extension
preferred ID for MPEG-1/2 video decoding
uint8_t * data
Pointer to the bitstream form of this fragment.
int ff_cbs_write_fragment_data(CodedBitstreamContext *ctx, CodedBitstreamFragment *frag)
Write the content of the fragment to its own internal buffer.
union MPEG2RawExtensionData::@35 data
struct VAAPIEncodePicture * refs[MAX_PICTURE_REFERENCES]
static int vaapi_encode_mpeg2_init_slice_params(AVCodecContext *avctx, VAAPIEncodePicture *pic, VAAPIEncodeSlice *slice)
uint8_t picture_structure
const struct VAAPIEncodeType * codec
Libavcodec external API header.
#define VAAPI_ENCODE_RC_OPTIONS
MPEG2RawSequenceDisplayExtension sequence_display
Coded bitstream fragment structure, combining one or more units.
main external API structure.
uint8_t sub_carrier_phase
uint8_t frame_rate_extension_n
uint8_t vbv_buffer_size_extension
uint8_t frame_rate_extension_d
static const AVOption vaapi_encode_mpeg2_options[]
CodedBitstreamFragment current_fragment
Describe the class of an AVClass context structure.
Context structure for coded bitstream operations.
#define LEVEL(name, value)
enum AVColorSpace colorspace
YUV colorspace type.
Rational number (pair of numerator and denominator).
enum AVColorTransferCharacteristic color_trc
Color Transfer Characteristic.
MPEG2RawExtensionData picture_coding_extension
static const VAAPIEncodeType vaapi_encode_type_mpeg2
uint8_t extension_start_code
int ff_cbs_insert_unit_content(CodedBitstreamFragment *frag, int position, CodedBitstreamUnitType type, void *content, AVBufferRef *content_buf)
Insert a new unit into a fragment with the given content.
void ff_cbs_close(CodedBitstreamContext **ctx_ptr)
Close a context and free all internal state.
float b_quant_offset
qscale offset between IP and B-frames
unsigned int f_code_horizontal
static enum AVPixelFormat pix_fmts[]
#define VAAPI_ENCODE_COMMON_OPTIONS
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
static av_always_inline AVRational av_inv_q(AVRational q)
Invert a rational.
static int av_cmp_q(AVRational a, AVRational b)
Compare two rationals.
uint8_t intra_dc_precision
uint8_t profile_and_level_indication
uint8_t vertical_size_extension
#define FF_PROFILE_MPEG2_SIMPLE
void * codec_slice_params
MPEG2RawGroupOfPicturesHeader gop_header
uint8_t matrix_coefficients
void ff_cbs_fragment_free(CodedBitstreamFragment *frag)
Free the units array of a fragment in addition to what ff_cbs_fragment_reset does.
unsigned int desired_packed_headers
static int vaapi_encode_mpeg2_write_sequence_header(AVCodecContext *avctx, char *data, size_t *data_len)
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
AVPixelFormat
Pixel format.
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators...
av_cold int ff_vaapi_encode_close(AVCodecContext *avctx)
const AVCodecHWConfigInternal *const ff_vaapi_encode_hw_configs[]