34                                            int type, 
char *
data, 
size_t bit_len)
 
   38     VABufferID param_buffer, data_buffer;
 
   39     VAEncPackedHeaderParameterBuffer 
params = {
 
   41         .bit_length = bit_len,
 
   42         .has_emulation_bytes = 1,
 
   48                          VAEncPackedHeaderParameterBufferType,
 
   49                          sizeof(params), 1, ¶ms, ¶m_buffer);
 
   50     if (vas != VA_STATUS_SUCCESS) {
 
   52                "for packed header (type %d): %d (%s).\n",
 
   53                type, vas, vaErrorStr(vas));
 
   59                          VAEncPackedHeaderDataBufferType,
 
   60                          (bit_len + 7) / 8, 1, data, &data_buffer);
 
   61     if (vas != VA_STATUS_SUCCESS) {
 
   63                "for packed header (type %d): %d (%s).\n",
 
   64                type, vas, vaErrorStr(vas));
 
   70            "(%zu bits).\n", type, param_buffer, data_buffer, bit_len);
 
   85                          type, len, 1, data, &buffer);
 
   86     if (vas != VA_STATUS_SUCCESS) {
 
   88                "(type %d): %d (%s).\n", type, vas, vaErrorStr(vas));
 
  116     if (vas != VA_STATUS_SUCCESS) {
 
  118                "%d (%s).\n", vas, vaErrorStr(vas));
 
  146         for (i = 0; i < pic->
nb_refs; i++) {
 
  154     for (i = 0; i < pic->
nb_refs; i++) {
 
  182                          VAEncCodedBufferType,
 
  185     if (vas != VA_STATUS_SUCCESS) {
 
  187                "output buffer: %d (%s).\n", vas, vaErrorStr(vas));
 
  211                                                  VAEncMiscParameterBufferType,
 
  221                                              VAEncSequenceParameterBufferType,
 
  232                    "parameters: %d.\n", err);
 
  236                                              VAEncPictureParameterBufferType,
 
  245             bit_len = 8 * 
sizeof(
data);
 
  249                        "header: %d.\n", err);
 
  261         bit_len = 8 * 
sizeof(
data);
 
  265                    "header: %d.\n", err);
 
  285                        "buffer %d: %d.\n", i, err);
 
  299             bit_len = 8 * 
sizeof(
data);
 
  306                        "header %d: %d.\n", i, err);
 
  338                        "parameters: %d.\n", err);
 
  344             bit_len = 8 * 
sizeof(
data);
 
  349                        "header: %d.\n", err);
 
  361                                                  VAEncSliceParameterBufferType,
 
  371     if (vas != VA_STATUS_SUCCESS) {
 
  373                "%d (%s).\n", vas, vaErrorStr(vas));
 
  375         goto fail_with_picture;
 
  380     if (vas != VA_STATUS_SUCCESS) {
 
  382                "%d (%s).\n", vas, vaErrorStr(vas));
 
  384         goto fail_with_picture;
 
  388     if (vas != VA_STATUS_SUCCESS) {
 
  390                "%d (%s).\n", vas, vaErrorStr(vas));
 
  417     VACodedBufferSegment *buf_list, *
buf;
 
  428     if (vas != VA_STATUS_SUCCESS) {
 
  430                "%d (%s).\n", vas, vaErrorStr(vas));
 
  435     for (buf = buf_list; 
buf; buf = buf->next) {
 
  437                "(status %08x).\n", buf->size, buf->status);
 
  443         memcpy(pkt->
data, buf->buf, buf->size);
 
  452     if (vas != VA_STATUS_SUCCESS) {
 
  454                "%d (%s).\n", vas, vaErrorStr(vas));
 
  484                "%"PRId64
"/%"PRId64
".\n",
 
  561         for (i = 0; i < pic->
nb_refs; i++) {
 
  581                 for (i = 0; i < pic->
nb_refs; i++) {
 
  585                 if (i < pic->nb_refs)
 
  664         for (i = 0; i < ctx->
b_per_p; i++) {
 
  681     for (i = 0, pic = start; pic; i++, pic = pic->
next) {
 
  701                pic->display_order, pic->encode_order);
 
  739             for (pic = ctx->
pic_start; pic != last_pic; pic = pic->
next) {
 
  742                     pic->
refs[1] = last_pic;
 
  753         for (pic = last_pic->
next; pic; pic = next) {
 
  788         for (pic = old->
next; pic; pic = pic->
next) {
 
  791             for (i = 0; i < pic->
nb_refs; i++) {
 
  792                 if (pic->
refs[i] == old) {
 
  810                      const AVFrame *input_image, 
int *got_packet)
 
  835         pic->
pts = input_image->
pts;
 
  886                 pkt->
dts = INT64_MIN;
 
  918     VAEntrypoint *entrypoints = 
NULL;
 
  919     VAConfigAttrib attr[] = {
 
  920         { VAConfigAttribRateControl     },
 
  921         { VAConfigAttribEncMaxRefFrames },
 
  930     vas = vaQueryConfigProfiles(ctx->
hwctx->
display, profiles, &n);
 
  931     if (vas != VA_STATUS_SUCCESS) {
 
  933                vas, vaErrorStr(vas));
 
  937     for (i = 0; i < 
n; i++) {
 
  956     if (vas != VA_STATUS_SUCCESS) {
 
  959                vas, vaErrorStr(vas));
 
  963     for (i = 0; i < 
n; i++) {
 
  977     if (vas != VA_STATUS_SUCCESS) {
 
  979                "attributes: %d (%s).\n", vas, vaErrorStr(vas));
 
  984         if (attr[i].
value == VA_ATTRIB_NOT_SUPPORTED) {
 
  990         switch (attr[i].
type) {
 
  991         case VAConfigAttribRateControl:
 
  994                        "supported: %x\n", attr[i].
value);
 
  999         case VAConfigAttribEncMaxRefFrames:
 
 1001             unsigned int ref_l0 = attr[i].value & 0xffff;
 
 1002             unsigned int ref_l1 = (attr[i].value >> 16) & 0xffff;
 
 1004             if (avctx->
gop_size > 1 && ref_l0 < 1) {
 
 1006                        "supported (%x).\n", attr[i].
value);
 
 1012                        "supported (%x).\n", attr[i].
value);
 
 1041                "required to associate the encoding device.\n");
 
 1084     if (vas != VA_STATUS_SUCCESS) {
 
 1086                "configuration: %d (%s).\n", vas, vaErrorStr(vas));
 
 1134                "size %dx%d (constraints: width %d-%d height %d-%d).\n",
 
 1161                "frame context: %d.\n", err);
 
 1172     if (vas != VA_STATUS_SUCCESS) {
 
 1174                "context: %d (%s).\n", vas, vaErrorStr(vas));
 
 1205                    "failed: %d.\n", err);
 
 1234     for (pic = ctx->
pic_start; pic; pic = next) {
 
This struct aggregates all the (hardware/vendor-specific) "high-level" state, i.e. 
VASurfaceID input_surface
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it...
VAAPI-specific data associated with a frame pool. 
This structure describes decoded (raw) audio or video data. 
VAAPIEncodeSlice * slices[MAX_PICTURE_SLICES]
VAEntrypoint va_entrypoint
ptrdiff_t const GLvoid * data
static const char * picture_type_name[]
static int vaapi_encode_free(AVCodecContext *avctx, VAAPIEncodePicture *pic)
char codec_options_data[0]
int max_b_frames
maximum number of B-frames between non-B-frames Note: The output will be delayed by max_b_frames+1 re...
av_cold int ff_vaapi_encode_close(AVCodecContext *avctx)
int width
The allocated dimensions of the frames in this pool. 
void * av_hwdevice_hwconfig_alloc(AVBufferRef *ref)
Allocate a HW-specific configuration structure for a given HW device. 
enum AVPixelFormat format
The pixel format identifying the underlying HW surface type. 
int(* write_slice_header)(AVCodecContext *avctx, VAAPIEncodePicture *pic, VAAPIEncodeSlice *slice, char *data, size_t *data_len)
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
void * codec_sequence_params
AVBufferRef * input_frames_ref
size_t picture_params_size
AVHWDeviceContext * device
int max_width
The maximum size of frames in this hw_frames_ctx. 
void av_hwframe_constraints_free(AVHWFramesConstraints **constraints)
Free an AVHWFrameConstraints structure. 
static int vaapi_encode_mangle_end(AVCodecContext *avctx)
#define av_assert0(cond)
assert() equivalent, that is always enabled. 
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values. 
static av_cold int end(AVCodecContext *avctx)
int(* write_picture_header)(AVCodecContext *avctx, VAAPIEncodePicture *pic, char *data, size_t *data_len)
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame. 
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user). 
av_cold int ff_vaapi_encode_init(AVCodecContext *avctx, const VAAPIEncodeType *type)
void * hwctx
The format-specific data, allocated and freed by libavutil along with this context. 
#define AVERROR_EOF
End of file. 
VASurfaceID recon_surface
#define AV_PKT_FLAG_KEY
The packet contains a keyframe. 
int av_new_packet(AVPacket *pkt, int size)
Allocate the payload of a packet and initialize its fields with default values. 
VAConfigAttrib config_attributes[MAX_CONFIG_ATTRIBUTES]
AVHWFramesContext * input_frames
int width
width and height of the video frame 
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
VAAPI hardware pipeline configuration details. 
static int vaapi_encode_step(AVCodecContext *avctx, VAAPIEncodePicture *target)
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g. 
int ff_vaapi_encode2(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *input_image, int *got_packet)
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers. 
VAEncMiscParameterBuffer * global_params[MAX_GLOBAL_PARAMS]
simple assert() macros that are a bit more flexible than ISO C assert(). 
int av_hwframe_ctx_init(AVBufferRef *ref)
Finalize the context before use. 
int(* init_picture_params)(AVCodecContext *avctx, VAAPIEncodePicture *pic)
void * codec_picture_params
int av_hwframe_get_buffer(AVBufferRef *hwframe_ref, AVFrame *frame, int flags)
Allocate a new frame attached to the given AVHWFramesContext. 
int(* write_extra_header)(AVCodecContext *avctx, VAAPIEncodePicture *pic, int index, int *type, char *data, size_t *data_len)
AVHWFramesContext * recon_frames
int flags
A combination of AV_PKT_FLAG values. 
int initial_pool_size
Initial size of the frame pool. 
static int vaapi_encode_get_next(AVCodecContext *avctx, VAAPIEncodePicture **pic_out)
AVBufferRef * hw_frames_ctx
A reference to the AVHWFramesContext describing the input (for encoding) or output (decoding) frames...
static int vaapi_encode_make_param_buffer(AVCodecContext *avctx, VAAPIEncodePicture *pic, int type, char *data, size_t len)
GLsizei GLboolean const GLfloat * value
int(* close)(AVCodecContext *avctx)
struct VAAPIEncodePicture * next
static int vaapi_encode_discard(AVCodecContext *avctx, VAAPIEncodePicture *pic)
void * codec_picture_params
int64_t ts_ring[MAX_REORDER_DELAY *3]
#define FF_ARRAY_ELEMS(a)
VADisplay display
The VADisplay handle, to be filled by the user. 
int(* write_sequence_header)(AVCodecContext *avctx, char *data, size_t *data_len)
struct VAAPIEncodePicture * refs[MAX_PICTURE_REFERENCES]
int min_width
The minimum size of frames in this hw_frames_ctx. 
const struct VAAPIEncodeType * codec
Libavcodec external API header. 
This struct describes the constraints on hardware frames attached to a given device with a hardware-s...
VAAPIEncodePicture * pic_start
main external API structure. 
AVHWFramesConstraints * av_hwdevice_get_hwframe_constraints(AVBufferRef *ref, const void *hwconfig)
Get the constraints on HW frames given a device and the HW-specific configuration to be used with tha...
uint8_t * data
The data buffer. 
int(* write_extra_buffer)(AVCodecContext *avctx, VAAPIEncodePicture *pic, int index, int *type, char *data, size_t *data_len)
static VAAPIEncodePicture * vaapi_encode_alloc(void)
VABufferID param_buffers[MAX_PARAM_BUFFERS]
void * hwctx
The format-specific data, allocated and freed automatically along with this context. 
static const AVProfile profiles[]
This struct describes a set or pool of "hardware" frames (i.e. 
AVBufferRef * recon_frames_ref
static av_cold int vaapi_encode_check_config(AVCodecContext *avctx)
VAAPIEncodePicture * pic_end
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes. 
AVBufferRef * device_ref
A reference to the parent AVHWDeviceContext. 
size_t global_params_size[MAX_GLOBAL_PARAMS]
static int vaapi_encode_issue(AVCodecContext *avctx, VAAPIEncodePicture *pic)
int gop_size
the number of pictures in a group of pictures, or 0 for intra_only 
size_t sequence_params_size
static int vaapi_encode_clear_old(AVCodecContext *avctx)
common internal and external API header 
static int vaapi_encode_output(AVCodecContext *avctx, VAAPIEncodePicture *pic, AVPacket *pkt)
AVBufferRef * av_hwframe_ctx_alloc(AVBufferRef *device_ref_in)
Allocate an AVHWFramesContext tied to a given device context. 
AVBufferRef * av_buffer_ref(AVBufferRef *buf)
Create a new reference to an AVBuffer. 
enum AVPixelFormat * valid_sw_formats
A list of possible values for sw_format in the hw_frames_ctx, terminated by AV_PIX_FMT_NONE. 
void * codec_slice_params
int(* init_slice_params)(AVCodecContext *avctx, VAAPIEncodePicture *pic, VAAPIEncodeSlice *slice)
static int vaapi_encode_wait(AVCodecContext *avctx, VAAPIEncodePicture *pic)
VAConfigID config_id
ID of a VAAPI pipeline configuration. 
int(* init_sequence_params)(AVCodecContext *avctx)
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed...
static int vaapi_encode_make_packed_header(AVCodecContext *avctx, VAAPIEncodePicture *pic, int type, char *data, size_t bit_len)
VASurfaceID * surface_ids
The surfaces IDs of all surfaces in the pool after creation. 
#define av_malloc_array(a, b)
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown. 
enum AVPixelFormat sw_format
The pixel format identifying the actual data layout of the hardware frames. 
AVPixelFormat
Pixel format. 
This structure stores compressed data. 
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
int(* init)(AVCodecContext *avctx)
AVVAAPIDeviceContext * hwctx