FFmpeg
Data Structures | Macros | Functions
dxva2_hevc.c File Reference
#include "config_components.h"
#include "libavutil/avassert.h"
#include "dxva2_internal.h"
#include "hevc/data.h"
#include "hevc/hevcdec.h"
#include "hwaccel_internal.h"

Go to the source code of this file.

Data Structures

struct  hevc_dxva2_picture_context
 

Macros

#define MAX_SLICES   256
 
#define DO_REF_LIST(ref_idx, ref_list)
 

Functions

static void fill_picture_entry (DXVA_PicEntry_HEVC *pic, unsigned index, unsigned flag)
 
static int get_refpic_index (const DXVA_PicParams_HEVC *pp, int surface_index)
 
void ff_dxva2_hevc_fill_picture_parameters (const AVCodecContext *avctx, AVDXVAContext *ctx, DXVA_PicParams_HEVC *pp)
 
void ff_dxva2_hevc_fill_scaling_lists (const AVCodecContext *avctx, AVDXVAContext *ctx, DXVA_Qmatrix_HEVC *qm)
 
static void fill_slice_short (DXVA_Slice_HEVC_Short *slice, unsigned position, unsigned size)
 
static int commit_bitstream_and_slice_buffer (AVCodecContext *avctx, DECODER_BUFFER_DESC *bs, DECODER_BUFFER_DESC *sc)
 
static int dxva2_hevc_start_frame (AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size)
 
static int dxva2_hevc_decode_slice (AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)
 
static int dxva2_hevc_end_frame (AVCodecContext *avctx)
 

Macro Definition Documentation

◆ MAX_SLICES

#define MAX_SLICES   256

Definition at line 32 of file dxva2_hevc.c.

◆ DO_REF_LIST

#define DO_REF_LIST (   ref_idx,
  ref_list 
)
Value:
{ \
const RefPicList *rpl = &h->rps[ref_idx]; \
for (i = 0, j = 0; i < FF_ARRAY_ELEMS(pp->ref_list); i++) { \
const HEVCFrame *frame = NULL; \
while (!frame && j < rpl->nb_refs) \
frame = rpl->ref[j++]; \
pp->ref_list[i] = get_refpic_index(pp, ff_dxva2_get_surface_index(avctx, ctx, frame->f, 0)); \
else \
pp->ref_list[i] = 0xff; \
} \
}

Function Documentation

◆ fill_picture_entry()

static void fill_picture_entry ( DXVA_PicEntry_HEVC *  pic,
unsigned  index,
unsigned  flag 
)
static

Definition at line 43 of file dxva2_hevc.c.

Referenced by ff_dxva2_hevc_fill_picture_parameters().

◆ get_refpic_index()

static int get_refpic_index ( const DXVA_PicParams_HEVC *  pp,
int  surface_index 
)
static

Definition at line 50 of file dxva2_hevc.c.

◆ ff_dxva2_hevc_fill_picture_parameters()

void ff_dxva2_hevc_fill_picture_parameters ( const AVCodecContext avctx,
AVDXVAContext ctx,
DXVA_PicParams_HEVC *  pp 
)

Definition at line 60 of file dxva2_hevc.c.

Referenced by d3d12va_hevc_start_frame(), and dxva2_hevc_start_frame().

◆ ff_dxva2_hevc_fill_scaling_lists()

void ff_dxva2_hevc_fill_scaling_lists ( const AVCodecContext avctx,
AVDXVAContext ctx,
DXVA_Qmatrix_HEVC *  qm 
)

Definition at line 205 of file dxva2_hevc.c.

Referenced by d3d12va_hevc_start_frame(), and dxva2_hevc_start_frame().

◆ fill_slice_short()

static void fill_slice_short ( DXVA_Slice_HEVC_Short *  slice,
unsigned  position,
unsigned  size 
)
static

Definition at line 234 of file dxva2_hevc.c.

Referenced by dxva2_hevc_decode_slice().

◆ commit_bitstream_and_slice_buffer()

static int commit_bitstream_and_slice_buffer ( AVCodecContext avctx,
DECODER_BUFFER_DESC bs,
DECODER_BUFFER_DESC sc 
)
static

Definition at line 243 of file dxva2_hevc.c.

Referenced by dxva2_hevc_end_frame().

◆ dxva2_hevc_start_frame()

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

Definition at line 365 of file dxva2_hevc.c.

◆ dxva2_hevc_decode_slice()

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

Definition at line 389 of file dxva2_hevc.c.

◆ dxva2_hevc_end_frame()

static int dxva2_hevc_end_frame ( AVCodecContext avctx)
static

Definition at line 412 of file dxva2_hevc.c.

RefPicList
Definition: hevcdec.h:192
HEVC_FRAME_FLAG_LONG_REF
#define HEVC_FRAME_FLAG_LONG_REF
Definition: hevcdec.h:354
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen.c:29
ctx
AVFormatContext * ctx
Definition: movenc.c:49
HEVC_FRAME_FLAG_SHORT_REF
#define HEVC_FRAME_FLAG_SHORT_REF
Definition: hevcdec.h:353
NULL
#define NULL
Definition: coverity.c:32
ff_dxva2_get_surface_index
unsigned ff_dxva2_get_surface_index(const AVCodecContext *avctx, AVDXVAContext *ctx, const AVFrame *frame, int curr)
Definition: dxva2.c:771
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
HEVCFrame
Definition: hevcdec.h:357
frame
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
Definition: filter_design.txt:264
h
h
Definition: vp9dsp_template.c:2070
get_refpic_index
static int get_refpic_index(const DXVA_PicParams_HEVC *pp, int surface_index)
Definition: dxva2_hevc.c:50