vaapi_h264.c File Reference

This file implements the glue code between FFmpeg's and VA API's structures for H.264 decoding. More...

#include "vaapi_internal.h"
#include "h264.h"
Include dependency graph for vaapi_h264.c:

Go to the source code of this file.

Data Structures

struct  DPB
 Decoded Picture Buffer (DPB). More...
 

Typedefs

typedef struct DPB DPB
 Decoded Picture Buffer (DPB). More...
 

Functions

static void init_vaapi_pic (VAPictureH264 *va_pic)
 Initialize an empty VA API picture. More...
 
static void fill_vaapi_pic (VAPictureH264 *va_pic, Picture *pic, int pic_structure)
 Translate an FFmpeg Picture into its VA API form. More...
 
static int dpb_add (DPB *dpb, Picture *pic)
 Append picture to the decoded picture buffer, in a VA API form that merges the second field picture attributes with the first, if available. More...
 
static int fill_vaapi_ReferenceFrames (VAPictureParameterBufferH264 *pic_param, H264Context *h)
 Fill in VA API reference frames array. More...
 
static void fill_vaapi_RefPicList (VAPictureH264 RefPicList[32], Picture *ref_list, unsigned int ref_count)
 Fill in VA API reference picture lists from the FFmpeg reference picture list. More...
 
static void fill_vaapi_plain_pred_weight_table (H264Context *h, int list, unsigned char *luma_weight_flag, short luma_weight[32], short luma_offset[32], unsigned char *chroma_weight_flag, short chroma_weight[32][2], short chroma_offset[32][2])
 Fill in prediction weight table. More...
 
static int vaapi_h264_start_frame (AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size)
 Initialize and start decoding a frame with VA API. More...
 
static int vaapi_h264_end_frame (AVCodecContext *avctx)
 End a hardware decoding based frame. More...
 
static int vaapi_h264_decode_slice (AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)
 Decode the given H.264 slice with VA API. More...
 

Variables

AVHWAccel ff_h264_vaapi_hwaccel
 

Detailed Description

This file implements the glue code between FFmpeg's and VA API's structures for H.264 decoding.

Definition in file vaapi_h264.c.

Typedef Documentation

typedef struct DPB DPB

Decoded Picture Buffer (DPB).

Function Documentation

static int dpb_add ( DPB dpb,
Picture pic 
)
static

Append picture to the decoded picture buffer, in a VA API form that merges the second field picture attributes with the first, if available.

The decoded picture buffer's size must be large enough to receive the new VA API picture object.

Definition at line 92 of file vaapi_h264.c.

Referenced by fill_vaapi_ReferenceFrames().

static void fill_vaapi_pic ( VAPictureH264 *  va_pic,
Picture pic,
int  pic_structure 
)
static

Translate an FFmpeg Picture into its VA API form.

Parameters
[out]va_picA pointer to VA API's own picture struct
[in]picA pointer to the FFmpeg picture struct to convert
[in]pic_structureThe picture field type (as defined in mpegvideo.h), supersedes pic's field type if nonzero.

Definition at line 53 of file vaapi_h264.c.

Referenced by dpb_add(), fill_vaapi_RefPicList(), and vaapi_h264_start_frame().

static void fill_vaapi_plain_pred_weight_table ( H264Context h,
int  list,
unsigned char *  luma_weight_flag,
short  luma_weight[32],
short  luma_offset[32],
unsigned char *  chroma_weight_flag,
short  chroma_weight[32][2],
short  chroma_offset[32][2] 
)
static

Fill in prediction weight table.

VA API requires a plain prediction weight table as it does not infer any value.

Parameters
[in]hA pointer to the current H.264 context
[in]listThe reference frame list index to use
[out]luma_weight_flagVA API plain luma weight flag
[out]luma_weightVA API plain luma weight table
[out]luma_offsetVA API plain luma offset table
[out]chroma_weight_flagVA API plain chroma weight flag
[out]chroma_weightVA API plain chroma weight table
[out]chroma_offsetVA API plain chroma offset table

Definition at line 185 of file vaapi_h264.c.

Referenced by vaapi_h264_decode_slice().

static int fill_vaapi_ReferenceFrames ( VAPictureParameterBufferH264 *  pic_param,
H264Context h 
)
static

Fill in VA API reference frames array.

Definition at line 123 of file vaapi_h264.c.

Referenced by vaapi_h264_start_frame().

static void fill_vaapi_RefPicList ( VAPictureH264  RefPicList[32],
Picture ref_list,
unsigned int  ref_count 
)
static

Fill in VA API reference picture lists from the FFmpeg reference picture list.

Parameters
[out]RefPicListVA API internal reference picture list
[in]ref_listA pointer to the FFmpeg reference list
[in]ref_countThe number of reference pictures in ref_list

Definition at line 157 of file vaapi_h264.c.

Referenced by vaapi_h264_decode_slice().

static void init_vaapi_pic ( VAPictureH264 *  va_pic)
static

Initialize an empty VA API picture.

VA API requires a fixed-size reference picture array.

Definition at line 37 of file vaapi_h264.c.

Referenced by fill_vaapi_ReferenceFrames(), and fill_vaapi_RefPicList().

static int vaapi_h264_decode_slice ( AVCodecContext avctx,
const uint8_t buffer,
uint32_t  size 
)
static

Decode the given H.264 slice with VA API.

Definition at line 313 of file vaapi_h264.c.

static int vaapi_h264_end_frame ( AVCodecContext avctx)
static

End a hardware decoding based frame.

Definition at line 290 of file vaapi_h264.c.

static int vaapi_h264_start_frame ( AVCodecContext avctx,
av_unused const uint8_t buffer,
av_unused uint32_t  size 
)
static

Initialize and start decoding a frame with VA API.

Definition at line 222 of file vaapi_h264.c.

Variable Documentation

AVHWAccel ff_h264_vaapi_hwaccel
Initial value:
= {
.name = "h264_vaapi",
.start_frame = vaapi_h264_start_frame,
.end_frame = vaapi_h264_end_frame,
.decode_slice = vaapi_h264_decode_slice,
}
HW decoding through VA API, Picture.data[3] contains a vaapi_render_state struct which contains the b...
Definition: pixfmt.h:126
static int vaapi_h264_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)
Decode the given H.264 slice with VA API.
Definition: vaapi_h264.c:313
static int vaapi_h264_end_frame(AVCodecContext *avctx)
End a hardware decoding based frame.
Definition: vaapi_h264.c:290
static int vaapi_h264_start_frame(AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size)
Initialize and start decoding a frame with VA API.
Definition: vaapi_h264.c:222

Definition at line 353 of file vaapi_h264.c.