FFmpeg
Macros | Functions
hevcdsp_init.c File Reference
#include "config.h"
#include "libavutil/cpu.h"
#include "libavutil/mem_internal.h"
#include "libavutil/x86/asm.h"
#include "libavutil/x86/cpu.h"
#include "libavcodec/hevc/dsp.h"
#include "libavcodec/x86/hevcdsp.h"
#include "libavcodec/x86/h26x/h2656dsp.h"

Go to the source code of this file.

Macros

#define LFC_FUNC(DIR, DEPTH, OPT)   void ff_hevc_ ## DIR ## _loop_filter_chroma_ ## DEPTH ## _ ## OPT(uint8_t *pix, ptrdiff_t stride, const int *tc, const uint8_t *no_p, const uint8_t *no_q);
 
#define LFL_FUNC(DIR, DEPTH, OPT)   void ff_hevc_ ## DIR ## _loop_filter_luma_ ## DEPTH ## _ ## OPT(uint8_t *pix, ptrdiff_t stride, int beta, const int *tc, const uint8_t *no_p, const uint8_t *no_q);
 
#define LFC_FUNCS(type, depth, opt)
 
#define LFL_FUNCS(type, depth, opt)
 
#define IDCT_DC_FUNCS(W, opt)
 
#define IDCT_FUNCS(opt)
 
#define ff_hevc_pel_filters   ff_hevc_qpel_filters
 
#define DECL_HV_FILTER(f)
 
#define FW_PUT(p, a, b, depth, opt)
 
#define FW_PUT_UNI(p, a, b, depth, opt)
 
#define mc_rep_func(name, bitd, step, W, opt)
 
#define mc_rep_uni_func(name, bitd, step, W, opt)
 
#define mc_rep_bi_func(name, bitd, step, W, opt)
 
#define mc_rep_funcs(name, bitd, step, W, opt)
 
#define mc_rep_func2(name, bitd, step1, step2, W, opt)
 
#define mc_rep_uni_func2(name, bitd, step1, step2, W, opt)
 
#define mc_rep_bi_func2(name, bitd, step1, step2, W, opt)
 
#define mc_rep_funcs2(name, bitd, step1, step2, W, opt)
 
#define SAO_BAND_FILTER_FUNCS(bitd, opt)
 
#define SAO_BAND_INIT(bitd, opt)
 
#define SAO_EDGE_FILTER_FUNCS(bitd, opt)
 
#define SAO_EDGE_INIT(bitd, opt)
 
#define EPEL_LINKS(pointer, my, mx, fname, bitd, opt)
 
#define QPEL_LINKS(pointer, my, mx, fname, bitd, opt)
 

Functions

 IDCT_DC_FUNCS (4x4, mmxext)
 
 IDCT_DC_FUNCS (8x8, sse2)
 
 IDCT_DC_FUNCS (16x16, sse2)
 
 IDCT_DC_FUNCS (32x32, sse2)
 
 IDCT_DC_FUNCS (16x16, avx2)
 
 IDCT_DC_FUNCS (32x32, avx2)
 
void ff_hevc_dsp_init_x86 (HEVCDSPContext *c, const int bit_depth)
 

Macro Definition Documentation

◆ LFC_FUNC

#define LFC_FUNC (   DIR,
  DEPTH,
  OPT 
)    void ff_hevc_ ## DIR ## _loop_filter_chroma_ ## DEPTH ## _ ## OPT(uint8_t *pix, ptrdiff_t stride, const int *tc, const uint8_t *no_p, const uint8_t *no_q);

Definition at line 33 of file hevcdsp_init.c.

◆ LFL_FUNC

#define LFL_FUNC (   DIR,
  DEPTH,
  OPT 
)    void ff_hevc_ ## DIR ## _loop_filter_luma_ ## DEPTH ## _ ## OPT(uint8_t *pix, ptrdiff_t stride, int beta, const int *tc, const uint8_t *no_p, const uint8_t *no_q);

Definition at line 36 of file hevcdsp_init.c.

◆ LFC_FUNCS

#define LFC_FUNCS (   type,
  depth,
  opt 
)
Value:
LFC_FUNC(h, depth, opt) \
LFC_FUNC(v, depth, opt)

Definition at line 39 of file hevcdsp_init.c.

◆ LFL_FUNCS

#define LFL_FUNCS (   type,
  depth,
  opt 
)
Value:
LFL_FUNC(h, depth, opt) \
LFL_FUNC(v, depth, opt)

Definition at line 43 of file hevcdsp_init.c.

◆ IDCT_DC_FUNCS

#define IDCT_DC_FUNCS (   W,
  opt 
)
Value:
void ff_hevc_idct_ ## W ## _dc_8_ ## opt(int16_t *coeffs); \
void ff_hevc_idct_ ## W ## _dc_10_ ## opt(int16_t *coeffs); \
void ff_hevc_idct_ ## W ## _dc_12_ ## opt(int16_t *coeffs)

Definition at line 63 of file hevcdsp_init.c.

◆ IDCT_FUNCS

#define IDCT_FUNCS (   opt)
Value:
void ff_hevc_idct_4x4_8_ ## opt(int16_t *coeffs, int col_limit); \
void ff_hevc_idct_4x4_10_ ## opt(int16_t *coeffs, int col_limit); \
void ff_hevc_idct_8x8_8_ ## opt(int16_t *coeffs, int col_limit); \
void ff_hevc_idct_8x8_10_ ## opt(int16_t *coeffs, int col_limit); \
void ff_hevc_idct_16x16_8_ ## opt(int16_t *coeffs, int col_limit); \
void ff_hevc_idct_16x16_10_ ## opt(int16_t *coeffs, int col_limit); \
void ff_hevc_idct_32x32_8_ ## opt(int16_t *coeffs, int col_limit); \
void ff_hevc_idct_32x32_10_ ## opt(int16_t *coeffs, int col_limit);

Definition at line 75 of file hevcdsp_init.c.

◆ ff_hevc_pel_filters

#define ff_hevc_pel_filters   ff_hevc_qpel_filters

Definition at line 89 of file hevcdsp_init.c.

◆ DECL_HV_FILTER

#define DECL_HV_FILTER (   f)
Value:
const uint8_t *hf = ff_hevc_ ## f ## _filters[mx]; \
const uint8_t *vf = ff_hevc_ ## f ## _filters[my];

Definition at line 90 of file hevcdsp_init.c.

◆ FW_PUT

#define FW_PUT (   p,
  a,
  b,
  depth,
  opt 
)
Value:
void ff_hevc_put_hevc_ ## a ## _ ## depth ## _##opt(int16_t *dst, const uint8_t *src, ptrdiff_t srcstride, \
int height, intptr_t mx, intptr_t my,int width) \
{ \
DECL_HV_FILTER(p) \
ff_h2656_put_ ## b ## _ ## depth ## _##opt(dst, 2 * MAX_PB_SIZE, src, srcstride, height, hf, vf, width); \
}

Definition at line 94 of file hevcdsp_init.c.

◆ FW_PUT_UNI

#define FW_PUT_UNI (   p,
  a,
  b,
  depth,
  opt 
)
Value:
void ff_hevc_put_hevc_uni_ ## a ## _ ## depth ## _##opt(uint8_t *dst, ptrdiff_t dststride, \
const uint8_t *src, ptrdiff_t srcstride, \
int height, intptr_t mx, intptr_t my, int width) \
{ \
DECL_HV_FILTER(p) \
ff_h2656_put_uni_ ## b ## _ ## depth ## _##opt(dst, dststride, src, srcstride, height, hf, vf, width); \
}

Definition at line 102 of file hevcdsp_init.c.

◆ mc_rep_func

#define mc_rep_func (   name,
  bitd,
  step,
  W,
  opt 
)
Value:
void ff_hevc_put_hevc_##name##W##_##bitd##_##opt(int16_t *_dst, \
const uint8_t *_src, ptrdiff_t _srcstride, int height, \
intptr_t mx, intptr_t my, int width) \
{ \
int i; \
int16_t *dst; \
for (i = 0; i < W; i += step) { \
const uint8_t *src = _src + (i * ((bitd + 7) / 8)); \
dst = _dst + i; \
ff_hevc_put_hevc_##name##step##_##bitd##_##opt(dst, src, _srcstride, height, mx, my, width); \
} \
}

Definition at line 192 of file hevcdsp_init.c.

◆ mc_rep_uni_func

#define mc_rep_uni_func (   name,
  bitd,
  step,
  W,
  opt 
)
Value:
void ff_hevc_put_hevc_uni_##name##W##_##bitd##_##opt(uint8_t *_dst, ptrdiff_t dststride, \
const uint8_t *_src, ptrdiff_t _srcstride, int height, \
intptr_t mx, intptr_t my, int width) \
{ \
int i; \
uint8_t *dst; \
for (i = 0; i < W; i += step) { \
const uint8_t *src = _src + (i * ((bitd + 7) / 8)); \
dst = _dst + (i * ((bitd + 7) / 8)); \
ff_hevc_put_hevc_uni_##name##step##_##bitd##_##opt(dst, dststride, src, _srcstride, \
height, mx, my, width); \
} \
}

Definition at line 205 of file hevcdsp_init.c.

◆ mc_rep_bi_func

#define mc_rep_bi_func (   name,
  bitd,
  step,
  W,
  opt 
)
Value:
void ff_hevc_put_hevc_bi_##name##W##_##bitd##_##opt(uint8_t *_dst, ptrdiff_t dststride, const uint8_t *_src, \
ptrdiff_t _srcstride, const int16_t *_src2, \
int height, intptr_t mx, intptr_t my, int width) \
{ \
int i; \
uint8_t *dst; \
for (i = 0; i < W ; i += step) { \
const uint8_t *src = _src + (i * ((bitd + 7) / 8)); \
const int16_t *src2 = _src2 + i; \
dst = _dst + (i * ((bitd + 7) / 8)); \
ff_hevc_put_hevc_bi_##name##step##_##bitd##_##opt(dst, dststride, src, _srcstride, src2, \
height, mx, my, width); \
} \
}

Definition at line 219 of file hevcdsp_init.c.

◆ mc_rep_funcs

#define mc_rep_funcs (   name,
  bitd,
  step,
  W,
  opt 
)
Value:
mc_rep_func(name, bitd, step, W, opt) \
mc_rep_uni_func(name, bitd, step, W, opt) \
mc_rep_bi_func(name, bitd, step, W, opt)

Definition at line 235 of file hevcdsp_init.c.

◆ mc_rep_func2

#define mc_rep_func2 (   name,
  bitd,
  step1,
  step2,
  W,
  opt 
)
Value:
void ff_hevc_put_hevc_##name##W##_##bitd##_##opt(int16_t *dst, \
const uint8_t *src, ptrdiff_t _srcstride, int height, \
intptr_t mx, intptr_t my, int width) \
{ \
ff_hevc_put_hevc_##name##step1##_##bitd##_##opt(dst, src, _srcstride, height, mx, my, width); \
ff_hevc_put_hevc_##name##step2##_##bitd##_##opt(dst + step1, src + (step1 * ((bitd + 7) / 8)), \
}

Definition at line 240 of file hevcdsp_init.c.

◆ mc_rep_uni_func2

#define mc_rep_uni_func2 (   name,
  bitd,
  step1,
  step2,
  W,
  opt 
)
Value:
void ff_hevc_put_hevc_uni_##name##W##_##bitd##_##opt(uint8_t *dst, ptrdiff_t dststride, \
const uint8_t *src, ptrdiff_t _srcstride, int height, \
intptr_t mx, intptr_t my, int width) \
{ \
ff_hevc_put_hevc_uni_##name##step1##_##bitd##_##opt(dst, dststride, src, _srcstride, height, mx, my, width);\
ff_hevc_put_hevc_uni_##name##step2##_##bitd##_##opt(dst + (step1 * ((bitd + 7) / 8)), dststride, \
src + (step1 * ((bitd + 7) / 8)), _srcstride, \
height, mx, my, width); \
}

Definition at line 249 of file hevcdsp_init.c.

◆ mc_rep_bi_func2

#define mc_rep_bi_func2 (   name,
  bitd,
  step1,
  step2,
  W,
  opt 
)
Value:
void ff_hevc_put_hevc_bi_##name##W##_##bitd##_##opt(uint8_t *dst, ptrdiff_t dststride, const uint8_t *src, \
ptrdiff_t _srcstride, const int16_t *src2, \
int height, intptr_t mx, intptr_t my, int width) \
{ \
ff_hevc_put_hevc_bi_##name##step1##_##bitd##_##opt(dst, dststride, src, _srcstride, src2, height, mx, my, width);\
ff_hevc_put_hevc_bi_##name##step2##_##bitd##_##opt(dst + (step1 * ((bitd + 7) / 8)), dststride, \
src + (step1 * ((bitd + 7) / 8)), _srcstride, \
src2 + step1, height, mx, my, width); \
}

Definition at line 259 of file hevcdsp_init.c.

◆ mc_rep_funcs2

#define mc_rep_funcs2 (   name,
  bitd,
  step1,
  step2,
  W,
  opt 
)
Value:
mc_rep_func2(name, bitd, step1, step2, W, opt) \
mc_rep_uni_func2(name, bitd, step1, step2, W, opt) \
mc_rep_bi_func2(name, bitd, step1, step2, W, opt)

Definition at line 270 of file hevcdsp_init.c.

◆ SAO_BAND_FILTER_FUNCS

#define SAO_BAND_FILTER_FUNCS (   bitd,
  opt 
)
Value:
void ff_hevc_sao_band_filter_8_##bitd##_##opt(uint8_t *_dst, const uint8_t *_src, ptrdiff_t _stride_dst, ptrdiff_t _stride_src, \
const int16_t *sao_offset_val, int sao_left_class, int width, int height); \
void ff_hevc_sao_band_filter_16_##bitd##_##opt(uint8_t *_dst, const uint8_t *_src, ptrdiff_t _stride_dst, ptrdiff_t _stride_src, \
const int16_t *sao_offset_val, int sao_left_class, int width, int height); \
void ff_hevc_sao_band_filter_32_##bitd##_##opt(uint8_t *_dst, const uint8_t *_src, ptrdiff_t _stride_dst, ptrdiff_t _stride_src, \
const int16_t *sao_offset_val, int sao_left_class, int width, int height); \
void ff_hevc_sao_band_filter_48_##bitd##_##opt(uint8_t *_dst, const uint8_t *_src, ptrdiff_t _stride_dst, ptrdiff_t _stride_src, \
const int16_t *sao_offset_val, int sao_left_class, int width, int height); \
void ff_hevc_sao_band_filter_64_##bitd##_##opt(uint8_t *_dst, const uint8_t *_src, ptrdiff_t _stride_dst, ptrdiff_t _stride_src, \
const int16_t *sao_offset_val, int sao_left_class, int width, int height);

Definition at line 729 of file hevcdsp_init.c.

◆ SAO_BAND_INIT

#define SAO_BAND_INIT (   bitd,
  opt 
)
Value:
do { \
c->sao_band_filter[0] = ff_hevc_sao_band_filter_8_##bitd##_##opt; \
c->sao_band_filter[1] = ff_hevc_sao_band_filter_16_##bitd##_##opt; \
c->sao_band_filter[2] = ff_hevc_sao_band_filter_32_##bitd##_##opt; \
c->sao_band_filter[3] = ff_hevc_sao_band_filter_48_##bitd##_##opt; \
c->sao_band_filter[4] = ff_hevc_sao_band_filter_64_##bitd##_##opt; \
} while (0)

Definition at line 751 of file hevcdsp_init.c.

◆ SAO_EDGE_FILTER_FUNCS

#define SAO_EDGE_FILTER_FUNCS (   bitd,
  opt 
)
Value:
void ff_hevc_sao_edge_filter_8_##bitd##_##opt(uint8_t *_dst, const uint8_t *_src, ptrdiff_t stride_dst, \
const int16_t *sao_offset_val, int eo, int width, int height); \
void ff_hevc_sao_edge_filter_16_##bitd##_##opt(uint8_t *_dst, const uint8_t *_src, ptrdiff_t stride_dst, \
const int16_t *sao_offset_val, int eo, int width, int height); \
void ff_hevc_sao_edge_filter_32_##bitd##_##opt(uint8_t *_dst, const uint8_t *_src, ptrdiff_t stride_dst, \
const int16_t *sao_offset_val, int eo, int width, int height); \
void ff_hevc_sao_edge_filter_48_##bitd##_##opt(uint8_t *_dst, const uint8_t *_src, ptrdiff_t stride_dst, \
const int16_t *sao_offset_val, int eo, int width, int height); \
void ff_hevc_sao_edge_filter_64_##bitd##_##opt(uint8_t *_dst, const uint8_t *_src, ptrdiff_t stride_dst, \
const int16_t *sao_offset_val, int eo, int width, int height); \

Definition at line 759 of file hevcdsp_init.c.

◆ SAO_EDGE_INIT

#define SAO_EDGE_INIT (   bitd,
  opt 
)
Value:
do { \
c->sao_edge_filter[0] = ff_hevc_sao_edge_filter_8_##bitd##_##opt; \
c->sao_edge_filter[1] = ff_hevc_sao_edge_filter_16_##bitd##_##opt; \
c->sao_edge_filter[2] = ff_hevc_sao_edge_filter_32_##bitd##_##opt; \
c->sao_edge_filter[3] = ff_hevc_sao_edge_filter_48_##bitd##_##opt; \
c->sao_edge_filter[4] = ff_hevc_sao_edge_filter_64_##bitd##_##opt; \
} while (0)

Definition at line 778 of file hevcdsp_init.c.

◆ EPEL_LINKS

#define EPEL_LINKS (   pointer,
  my,
  mx,
  fname,
  bitd,
  opt 
)
Value:
PEL_LINK(pointer, 1, my , mx , fname##4 , bitd, opt ); \
PEL_LINK(pointer, 2, my , mx , fname##6 , bitd, opt ); \
PEL_LINK(pointer, 3, my , mx , fname##8 , bitd, opt ); \
PEL_LINK(pointer, 4, my , mx , fname##12, bitd, opt ); \
PEL_LINK(pointer, 5, my , mx , fname##16, bitd, opt ); \
PEL_LINK(pointer, 6, my , mx , fname##24, bitd, opt ); \
PEL_LINK(pointer, 7, my , mx , fname##32, bitd, opt ); \
PEL_LINK(pointer, 8, my , mx , fname##48, bitd, opt ); \
PEL_LINK(pointer, 9, my , mx , fname##64, bitd, opt )

Definition at line 786 of file hevcdsp_init.c.

◆ QPEL_LINKS

#define QPEL_LINKS (   pointer,
  my,
  mx,
  fname,
  bitd,
  opt 
)
Value:
PEL_LINK(pointer, 1, my , mx , fname##4 , bitd, opt ); \
PEL_LINK(pointer, 3, my , mx , fname##8 , bitd, opt ); \
PEL_LINK(pointer, 4, my , mx , fname##12, bitd, opt ); \
PEL_LINK(pointer, 5, my , mx , fname##16, bitd, opt ); \
PEL_LINK(pointer, 6, my , mx , fname##24, bitd, opt ); \
PEL_LINK(pointer, 7, my , mx , fname##32, bitd, opt ); \
PEL_LINK(pointer, 8, my , mx , fname##48, bitd, opt ); \
PEL_LINK(pointer, 9, my , mx , fname##64, bitd, opt )

Definition at line 796 of file hevcdsp_init.c.

Function Documentation

◆ IDCT_DC_FUNCS() [1/6]

IDCT_DC_FUNCS ( 4x4  ,
mmxext   
)

◆ IDCT_DC_FUNCS() [2/6]

IDCT_DC_FUNCS ( 8x8  ,
sse2   
)

◆ IDCT_DC_FUNCS() [3/6]

IDCT_DC_FUNCS ( 16x16  ,
sse2   
)

◆ IDCT_DC_FUNCS() [4/6]

IDCT_DC_FUNCS ( 32x32  ,
sse2   
)

◆ IDCT_DC_FUNCS() [5/6]

IDCT_DC_FUNCS ( 16x16  ,
avx2   
)

◆ IDCT_DC_FUNCS() [6/6]

IDCT_DC_FUNCS ( 32x32  ,
avx2   
)

◆ ff_hevc_dsp_init_x86()

void ff_hevc_dsp_init_x86 ( HEVCDSPContext c,
const int  bit_depth 
)

Definition at line 806 of file hevcdsp_init.c.

Referenced by ff_hevc_dsp_init().

_dst
uint8_t * _dst
Definition: dsp.h:52
name
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default minimum maximum flags name is the option name
Definition: writing_filters.txt:88
mc_rep_func2
#define mc_rep_func2(name, bitd, step1, step2, W, opt)
Definition: hevcdsp_init.c:240
PEL_LINK
#define PEL_LINK(dst, idx1, idx2, idx3, name, D, opt)
Definition: hevcdsp.h:32
step
trying all byte sequences megabyte in length and selecting the best looking sequence will yield cases to try But a word about which is also called distortion Distortion can be quantified by almost any quality measurement one chooses the sum of squared differences is used but more complex methods that consider psychovisual effects can be used as well It makes no difference in this discussion First step
Definition: rate_distortion.txt:58
b
#define b
Definition: input.c:41
mc_rep_func
#define mc_rep_func(name, bitd, step, W, opt)
Definition: hevcdsp_init.c:192
_src
uint8_t ptrdiff_t const uint8_t * _src
Definition: dsp.h:52
mx
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t mx
Definition: dsp.h:53
_srcstride
uint8_t ptrdiff_t const uint8_t ptrdiff_t _srcstride
Definition: dsp.h:53
W
@ W
Definition: vf_addroi.c:27
my
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t my
Definition: dsp.h:53
srcstride
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t const uint8_t ptrdiff_t srcstride
Definition: dsp.h:84
LFL_FUNC
#define LFL_FUNC(DIR, DEPTH, OPT)
Definition: hevcdsp_init.c:36
f
f
Definition: af_crystalizer.c:122
height
#define height
Definition: dsp.h:85
dst
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition: dsp.h:83
a
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
Definition: undefined.txt:41
LFC_FUNC
#define LFC_FUNC(DIR, DEPTH, OPT)
Definition: hevcdsp_init.c:33
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
src2
const pixel * src2
Definition: h264pred_template.c:422
hf
uint8_t ptrdiff_t const uint8_t ptrdiff_t int const int8_t * hf
Definition: dsp.h:249
MAX_PB_SIZE
#define MAX_PB_SIZE
Definition: dsp.h:32
_
#define _
h
h
Definition: vp9dsp_template.c:2070
width
#define width
Definition: dsp.h:85
vf
uint8_t ptrdiff_t const uint8_t ptrdiff_t int const int8_t const int8_t * vf
Definition: dsp.h:249
src
#define src
Definition: vp8dsp.c:248