FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Functions | Variables
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 "mpegutils.h"

Go to the source code of this file.

Data Structures

struct  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, H264Picture *pic, int pic_structure)
 Translate an FFmpeg Picture into its VA API form. More...
 
static int dpb_add (DPB *dpb, H264Picture *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], H264Ref *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.

Function Documentation

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 38 of file vaapi_h264.c.

Referenced by fill_vaapi_ReferenceFrames(), and fill_vaapi_RefPicList().

static void fill_vaapi_pic ( VAPictureH264 *  va_pic,
H264Picture 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 54 of file vaapi_h264.c.

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

static int dpb_add ( DPB dpb,
H264Picture 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 93 of file vaapi_h264.c.

Referenced by fill_vaapi_ReferenceFrames().

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

Fill in VA API reference frames array.

Definition at line 124 of file vaapi_h264.c.

Referenced by vaapi_h264_start_frame().

static void fill_vaapi_RefPicList ( VAPictureH264  RefPicList[32],
H264Ref 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 158 of file vaapi_h264.c.

Referenced by vaapi_h264_decode_slice().

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 187 of file vaapi_h264.c.

Referenced by vaapi_h264_decode_slice().

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 225 of file vaapi_h264.c.

static int vaapi_h264_end_frame ( AVCodecContext avctx)
static

End a hardware decoding based frame.

Definition at line 293 of file vaapi_h264.c.

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 317 of file vaapi_h264.c.

Variable Documentation

AVHWAccel ff_h264_vaapi_hwaccel
Initial value:
= {
.name = "h264_vaapi",
.pix_fmt = AV_PIX_FMT_VAAPI,
.start_frame = vaapi_h264_start_frame,
.end_frame = vaapi_h264_end_frame,
.decode_slice = vaapi_h264_decode_slice,
.priv_data_size = sizeof(FFVAContext),
}
int ff_vaapi_context_fini(AVCodecContext *avctx)
Common AVHWAccel.uninit() implementation.
Definition: vaapi.c:65
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:317
int ff_vaapi_context_init(AVCodecContext *avctx)
Common AVHWAccel.init() implementation.
Definition: vaapi.c:44
static int vaapi_h264_end_frame(AVCodecContext *avctx)
End a hardware decoding based frame.
Definition: vaapi_h264.c:293
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:225

Definition at line 359 of file vaapi_h264.c.