TUT HEVC Encoder
Macros | Typedefs | Functions | Variables
strategies-picture.h File Reference

Interface for distortion metric functions. More...

#include "global.h"
#include "inter.h"
#include "kvazaar.h"
#include "encoderstate.h"
#include "strategies/optimized_sad_func_ptr_t.h"
Include dependency graph for strategies-picture.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define SATD_NxN(suffix, n)
 
#define SATD_ANY_SIZE(suffix)
 
#define STRATEGIES_PICTURE_EXPORTS
 

Typedefs

typedef kvz_pixel(* pred_buffer)[32 *32]
 
typedef unsigned() reg_sad_func(const kvz_pixel *const data1, const kvz_pixel *const data2, const int width, const int height, const unsigned stride1, const unsigned stride2)
 
typedef unsigned() cost_pixel_nxn_func(const kvz_pixel *block1, const kvz_pixel *block2)
 
typedef unsigned() cost_pixel_any_size_func(int width, int height, const kvz_pixel *block1, int stride1, const kvz_pixel *block2, int stride2)
 
typedef void() cost_pixel_nxn_multi_func(const pred_buffer preds, const kvz_pixel *orig, unsigned num_modes, unsigned *costs_out)
 
typedef void() cost_pixel_any_size_multi_func(int width, int height, const kvz_pixel **preds, const int stride, const kvz_pixel *orig, const int orig_stride, unsigned num_modes, unsigned *costs_out, int8_t *valid)
 
typedef unsigned() pixels_calc_ssd_func(const kvz_pixel *const ref, const kvz_pixel *const rec, const int ref_stride, const int rec_stride, const int width)
 
typedef optimized_sad_func_ptr_t() get_optimized_sad_func(int32_t)
 
typedef uint32_t() ver_sad_func(const kvz_pixel *pic_data, const kvz_pixel *ref_data, int32_t block_width, int32_t block_height, uint32_t pic_stride)
 
typedef uint32_t() hor_sad_func(const kvz_pixel *pic_data, const kvz_pixel *ref_data, int32_t width, int32_t height, uint32_t pic_stride, uint32_t ref_stride, uint32_t left, uint32_t right)
 
typedef void() inter_recon_bipred_func(lcu_t *const lcu, const yuv_t *const px_L0, const yuv_t *const px_L1, const yuv_im_t *const im_L0, const yuv_im_t *const im_L1, const unsigned pu_x, const unsigned pu_y, const unsigned pu_w, const unsigned pu_h, const unsigned im_flags_L0, const unsigned im_flags_L1, const bool predict_luma, const bool predict_chroma)
 
typedef double() pixel_var_func(const kvz_pixel *buf, const uint32_t len)
 

Functions

int kvz_strategy_register_picture (void *opaque, uint8_t bitdepth)
 
cost_pixel_nxn_funckvz_pixels_get_satd_func (unsigned n)
 Get a function that calculates SATD for NxN block. More...
 
cost_pixel_nxn_funckvz_pixels_get_sad_func (unsigned n)
 Get a function that calculates SAD for NxN block. More...
 
cost_pixel_nxn_multi_funckvz_pixels_get_satd_dual_func (unsigned n)
 Get a function that calculates SATDs for 2 NxN blocks. More...
 
cost_pixel_nxn_multi_funckvz_pixels_get_sad_dual_func (unsigned n)
 Get a function that calculates SADs for 2 NxN blocks. More...
 

Variables

reg_sad_funckvz_reg_sad
 
cost_pixel_nxn_funckvz_sad_4x4
 
cost_pixel_nxn_funckvz_sad_8x8
 
cost_pixel_nxn_funckvz_sad_16x16
 
cost_pixel_nxn_funckvz_sad_32x32
 
cost_pixel_nxn_funckvz_sad_64x64
 
cost_pixel_nxn_funckvz_satd_4x4
 
cost_pixel_nxn_funckvz_satd_8x8
 
cost_pixel_nxn_funckvz_satd_16x16
 
cost_pixel_nxn_funckvz_satd_32x32
 
cost_pixel_nxn_funckvz_satd_64x64
 
cost_pixel_any_size_funckvz_satd_any_size
 
cost_pixel_nxn_multi_funckvz_sad_4x4_dual
 
cost_pixel_nxn_multi_funckvz_sad_8x8_dual
 
cost_pixel_nxn_multi_funckvz_sad_16x16_dual
 
cost_pixel_nxn_multi_funckvz_sad_32x32_dual
 
cost_pixel_nxn_multi_funckvz_sad_64x64_dual
 
cost_pixel_nxn_multi_funckvz_satd_4x4_dual
 
cost_pixel_nxn_multi_funckvz_satd_8x8_dual
 
cost_pixel_nxn_multi_funckvz_satd_16x16_dual
 
cost_pixel_nxn_multi_funckvz_satd_32x32_dual
 
cost_pixel_nxn_multi_funckvz_satd_64x64_dual
 
cost_pixel_any_size_multi_funckvz_satd_any_size_quad
 
pixels_calc_ssd_funckvz_pixels_calc_ssd
 
inter_recon_bipred_funckvz_bipred_average
 
get_optimized_sad_funckvz_get_optimized_sad
 
ver_sad_funckvz_ver_sad
 
hor_sad_funckvz_hor_sad
 
pixel_var_funckvz_pixel_var
 

Macro Definition Documentation

◆ SATD_ANY_SIZE

#define SATD_ANY_SIZE (   suffix)

◆ SATD_NxN

#define SATD_NxN (   suffix,
 
)
Value:
/* Declare the function in advance, hopefully reducing the probability that the
* macro expands to something unexpected and silently breaks things. */ \
static cost_pixel_nxn_func satd_ ## n ## x ## n ## _ ## suffix;\
static unsigned satd_ ## n ## x ## n ## _ ## suffix ( \
const kvz_pixel * const block1, \
const kvz_pixel * const block2) \
{ \
unsigned sum = 0; \
for (unsigned y = 0; y < (n); y += 8) { \
unsigned row = y * (n); \
for (unsigned x = 0; x < (n); x += 8) { \
sum += satd_8x8_subblock_ ## suffix(&block1[row + x], (n), &block2[row + x], (n)); \
} \
} \
return sum >> (KVZ_BIT_DEPTH - 8); \
}
uint8_t kvz_pixel
Definition: kvazaar.h:95
#define KVZ_BIT_DEPTH
Definition: kvazaar.h:91
unsigned() cost_pixel_nxn_func(const kvz_pixel *block1, const kvz_pixel *block2)
Definition: strategies-picture.h:117

◆ STRATEGIES_PICTURE_EXPORTS

#define STRATEGIES_PICTURE_EXPORTS
Value:
{"reg_sad", (void**) &kvz_reg_sad}, \
{"sad_4x4", (void**) &kvz_sad_4x4}, \
{"sad_8x8", (void**) &kvz_sad_8x8}, \
{"sad_16x16", (void**) &kvz_sad_16x16}, \
{"sad_32x32", (void**) &kvz_sad_32x32}, \
{"sad_64x64", (void**) &kvz_sad_64x64}, \
{"satd_4x4", (void**) &kvz_satd_4x4}, \
{"satd_8x8", (void**) &kvz_satd_8x8}, \
{"satd_16x16", (void**) &kvz_satd_16x16}, \
{"satd_32x32", (void**) &kvz_satd_32x32}, \
{"satd_64x64", (void**) &kvz_satd_64x64}, \
{"satd_any_size", (void**) &kvz_satd_any_size}, \
{"sad_4x4_dual", (void**) &kvz_sad_4x4_dual}, \
{"sad_8x8_dual", (void**) &kvz_sad_8x8_dual}, \
{"sad_16x16_dual", (void**) &kvz_sad_16x16_dual}, \
{"sad_32x32_dual", (void**) &kvz_sad_32x32_dual}, \
{"sad_64x64_dual", (void**) &kvz_sad_64x64_dual}, \
{"satd_4x4_dual", (void**) &kvz_satd_4x4_dual}, \
{"satd_8x8_dual", (void**) &kvz_satd_8x8_dual}, \
{"satd_16x16_dual", (void**) &kvz_satd_16x16_dual}, \
{"satd_32x32_dual", (void**) &kvz_satd_32x32_dual}, \
{"satd_64x64_dual", (void**) &kvz_satd_64x64_dual}, \
{"satd_any_size_quad", (void**) &kvz_satd_any_size_quad}, \
{"pixels_calc_ssd", (void**) &kvz_pixels_calc_ssd}, \
{"bipred_average", (void**) &kvz_bipred_average}, \
{"get_optimized_sad", (void**) &kvz_get_optimized_sad}, \
{"ver_sad", (void**) &kvz_ver_sad}, \
{"hor_sad", (void**) &kvz_hor_sad}, \
{"pixel_var", (void**) &kvz_pixel_var}, \
cost_pixel_nxn_multi_func * kvz_satd_32x32_dual
Definition: strategies-picture.c:67
pixels_calc_ssd_func * kvz_pixels_calc_ssd
Definition: strategies-picture.c:73
cost_pixel_nxn_func * kvz_satd_8x8
Definition: strategies-picture.c:53
cost_pixel_nxn_func * kvz_sad_8x8
Definition: strategies-picture.c:47
cost_pixel_nxn_multi_func * kvz_sad_8x8_dual
Definition: strategies-picture.c:59
cost_pixel_nxn_multi_func * kvz_sad_32x32_dual
Definition: strategies-picture.c:61
reg_sad_func * kvz_reg_sad
Definition: strategies-picture.c:44
get_optimized_sad_func * kvz_get_optimized_sad
Definition: strategies-picture.c:77
cost_pixel_any_size_multi_func * kvz_satd_any_size_quad
Definition: strategies-picture.c:71
cost_pixel_nxn_multi_func * kvz_sad_4x4_dual
Definition: strategies-picture.c:58
cost_pixel_nxn_func * kvz_satd_32x32
Definition: strategies-picture.c:55
cost_pixel_any_size_func * kvz_satd_any_size
Definition: strategies-picture.c:70
cost_pixel_nxn_func * kvz_sad_64x64
Definition: strategies-picture.c:50
cost_pixel_nxn_multi_func * kvz_satd_8x8_dual
Definition: strategies-picture.c:65
hor_sad_func * kvz_hor_sad
Definition: strategies-picture.c:79
cost_pixel_nxn_multi_func * kvz_satd_64x64_dual
Definition: strategies-picture.c:68
pixel_var_func * kvz_pixel_var
Definition: strategies-picture.c:81
cost_pixel_nxn_multi_func * kvz_sad_64x64_dual
Definition: strategies-picture.c:62
cost_pixel_nxn_func * kvz_satd_64x64
Definition: strategies-picture.c:56
cost_pixel_nxn_func * kvz_satd_16x16
Definition: strategies-picture.c:54
cost_pixel_nxn_multi_func * kvz_sad_16x16_dual
Definition: strategies-picture.c:60
cost_pixel_nxn_multi_func * kvz_satd_16x16_dual
Definition: strategies-picture.c:66
ver_sad_func * kvz_ver_sad
Definition: strategies-picture.c:78
inter_recon_bipred_func * kvz_bipred_average
Definition: strategies-picture.c:75
cost_pixel_nxn_func * kvz_sad_32x32
Definition: strategies-picture.c:49
cost_pixel_nxn_func * kvz_sad_16x16
Definition: strategies-picture.c:48
cost_pixel_nxn_multi_func * kvz_satd_4x4_dual
Definition: strategies-picture.c:64
cost_pixel_nxn_func * kvz_sad_4x4
Definition: strategies-picture.c:46
cost_pixel_nxn_func * kvz_satd_4x4
Definition: strategies-picture.c:52

Typedef Documentation

◆ cost_pixel_any_size_func

typedef unsigned() cost_pixel_any_size_func(int width, int height, const kvz_pixel *block1, int stride1, const kvz_pixel *block2, int stride2)

◆ cost_pixel_any_size_multi_func

typedef void() cost_pixel_any_size_multi_func(int width, int height, const kvz_pixel **preds, const int stride, const kvz_pixel *orig, const int orig_stride, unsigned num_modes, unsigned *costs_out, int8_t *valid)

◆ cost_pixel_nxn_func

typedef unsigned() cost_pixel_nxn_func(const kvz_pixel *block1, const kvz_pixel *block2)

◆ cost_pixel_nxn_multi_func

typedef void() cost_pixel_nxn_multi_func(const pred_buffer preds, const kvz_pixel *orig, unsigned num_modes, unsigned *costs_out)

◆ get_optimized_sad_func

typedef optimized_sad_func_ptr_t() get_optimized_sad_func(int32_t)

◆ hor_sad_func

typedef uint32_t() hor_sad_func(const kvz_pixel *pic_data, const kvz_pixel *ref_data, int32_t width, int32_t height, uint32_t pic_stride, uint32_t ref_stride, uint32_t left, uint32_t right)

◆ inter_recon_bipred_func

typedef void() inter_recon_bipred_func(lcu_t *const lcu, const yuv_t *const px_L0, const yuv_t *const px_L1, const yuv_im_t *const im_L0, const yuv_im_t *const im_L1, const unsigned pu_x, const unsigned pu_y, const unsigned pu_w, const unsigned pu_h, const unsigned im_flags_L0, const unsigned im_flags_L1, const bool predict_luma, const bool predict_chroma)

◆ pixel_var_func

typedef double() pixel_var_func(const kvz_pixel *buf, const uint32_t len)

◆ pixels_calc_ssd_func

typedef unsigned() pixels_calc_ssd_func(const kvz_pixel *const ref, const kvz_pixel *const rec, const int ref_stride, const int rec_stride, const int width)

◆ pred_buffer

typedef kvz_pixel(* pred_buffer)[32 *32]

◆ reg_sad_func

typedef unsigned() reg_sad_func(const kvz_pixel *const data1, const kvz_pixel *const data2, const int width, const int height, const unsigned stride1, const unsigned stride2)

◆ ver_sad_func

typedef uint32_t() ver_sad_func(const kvz_pixel *pic_data, const kvz_pixel *ref_data, int32_t block_width, int32_t block_height, uint32_t pic_stride)

Function Documentation

◆ kvz_pixels_get_sad_dual_func()

cost_pixel_nxn_multi_func * kvz_pixels_get_sad_dual_func ( unsigned  n)
Parameters
nWidth of the region for which SAD is calculated.
Returns
Pointer to cost_pixel_nxn_multi_func.
Here is the caller graph for this function:

◆ kvz_pixels_get_sad_func()

cost_pixel_nxn_func * kvz_pixels_get_sad_func ( unsigned  n)
Parameters
nWidth of the region for which SAD is calculated.
Returns
Pointer to cost_16bit_nxn_func.
Here is the caller graph for this function:

◆ kvz_pixels_get_satd_dual_func()

cost_pixel_nxn_multi_func * kvz_pixels_get_satd_dual_func ( unsigned  n)
Parameters
nWidth of the region for which SATD is calculated.
Returns
Pointer to cost_pixel_nxn_multi_func.
Here is the caller graph for this function:

◆ kvz_pixels_get_satd_func()

cost_pixel_nxn_func * kvz_pixels_get_satd_func ( unsigned  n)
Parameters
nWidth of the region for which SATD is calculated.
Returns
Pointer to cost_16bit_nxn_func.
Here is the caller graph for this function:

◆ kvz_strategy_register_picture()

int kvz_strategy_register_picture ( void *  opaque,
uint8_t  bitdepth 
)
Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ kvz_bipred_average

inter_recon_bipred_func* kvz_bipred_average
extern

◆ kvz_get_optimized_sad

get_optimized_sad_func* kvz_get_optimized_sad
extern

◆ kvz_hor_sad

hor_sad_func* kvz_hor_sad
extern

◆ kvz_pixel_var

pixel_var_func* kvz_pixel_var
extern

◆ kvz_pixels_calc_ssd

pixels_calc_ssd_func* kvz_pixels_calc_ssd
extern

◆ kvz_reg_sad

reg_sad_func* kvz_reg_sad
extern

◆ kvz_sad_16x16

cost_pixel_nxn_func* kvz_sad_16x16
extern

◆ kvz_sad_16x16_dual

cost_pixel_nxn_multi_func* kvz_sad_16x16_dual
extern

◆ kvz_sad_32x32

cost_pixel_nxn_func* kvz_sad_32x32
extern

◆ kvz_sad_32x32_dual

cost_pixel_nxn_multi_func* kvz_sad_32x32_dual
extern

◆ kvz_sad_4x4

cost_pixel_nxn_func* kvz_sad_4x4
extern

◆ kvz_sad_4x4_dual

cost_pixel_nxn_multi_func* kvz_sad_4x4_dual
extern

◆ kvz_sad_64x64

cost_pixel_nxn_func* kvz_sad_64x64
extern

◆ kvz_sad_64x64_dual

cost_pixel_nxn_multi_func* kvz_sad_64x64_dual
extern

◆ kvz_sad_8x8

cost_pixel_nxn_func* kvz_sad_8x8
extern

◆ kvz_sad_8x8_dual

cost_pixel_nxn_multi_func* kvz_sad_8x8_dual
extern

◆ kvz_satd_16x16

cost_pixel_nxn_func* kvz_satd_16x16
extern

◆ kvz_satd_16x16_dual

cost_pixel_nxn_multi_func* kvz_satd_16x16_dual
extern

◆ kvz_satd_32x32

cost_pixel_nxn_func* kvz_satd_32x32
extern

◆ kvz_satd_32x32_dual

cost_pixel_nxn_multi_func* kvz_satd_32x32_dual
extern

◆ kvz_satd_4x4

cost_pixel_nxn_func* kvz_satd_4x4
extern

◆ kvz_satd_4x4_dual

cost_pixel_nxn_multi_func* kvz_satd_4x4_dual
extern

◆ kvz_satd_64x64

cost_pixel_nxn_func* kvz_satd_64x64
extern

◆ kvz_satd_64x64_dual

cost_pixel_nxn_multi_func* kvz_satd_64x64_dual
extern

◆ kvz_satd_8x8

cost_pixel_nxn_func* kvz_satd_8x8
extern

◆ kvz_satd_8x8_dual

cost_pixel_nxn_multi_func* kvz_satd_8x8_dual
extern

◆ kvz_satd_any_size

cost_pixel_any_size_func* kvz_satd_any_size
extern

◆ kvz_satd_any_size_quad

cost_pixel_any_size_multi_func* kvz_satd_any_size_quad
extern

◆ kvz_ver_sad

ver_sad_func* kvz_ver_sad
extern