11 #ifndef AOM_AV1_COMMON_CDEF_H_
12 #define AOM_AV1_COMMON_CDEF_H_
14 #define CDEF_STRENGTH_BITS 6
16 #define CDEF_PRI_STRENGTHS 16
17 #define CDEF_SEC_STRENGTHS 4
19 #include "config/aom_config.h"
21 #include "aom/aom_integer.h"
22 #include "aom_ports/mem.h"
23 #include "av1/common/av1_common_int.h"
24 #include "av1/common/cdef_block.h"
26 enum { TOP, LEFT, BOTTOM, RIGHT, BOUNDARIES } UENUM1BYTE(BOUNDARY);
28 struct AV1CdefSyncData;
33 uint16_t *top_linebuf[MAX_MB_PLANE];
34 uint16_t *bot_linebuf[MAX_MB_PLANE];
37 dlist[MI_SIZE_64X64 * MI_SIZE_64X64];
43 int frame_boundary[BOUNDARIES];
53 int var[CDEF_NBLOCKS][CDEF_NBLOCKS];
60 static INLINE
int sign(
int i) {
return i < 0 ? -1 : 1; }
62 static INLINE
int constrain(
int diff,
int threshold,
int damping) {
63 if (!threshold)
return 0;
65 const int shift = AOMMAX(0, damping - get_msb(threshold));
67 AOMMIN(abs(diff), AOMMAX(0, threshold - (abs(diff) >> shift)));
75 int mi_row,
int mi_col, cdef_list *dlist,
78 typedef void (*cdef_init_fb_row_t)(
80 CdefBlockInfo *
const fb_info, uint16_t **
const linebuf, uint16_t *
const src,
81 struct AV1CdefSyncData *
const cdef_sync,
int fbr);
97 MACROBLOCKD *xd, cdef_init_fb_row_t cdef_init_fb_row_fn);
99 uint16_t **
const linebuf, uint16_t **
const colbuf,
100 uint16_t *
const src,
int fbr,
101 cdef_init_fb_row_t cdef_init_fb_row_fn,
102 struct AV1CdefSyncData *
const cdef_sync);
103 void av1_cdef_init_fb_row(
const AV1_COMMON *
const cm,
106 uint16_t **
const linebuf, uint16_t *
const src,
107 struct AV1CdefSyncData *
const cdef_sync,
int fbr);
112 #endif // AOM_AV1_COMMON_CDEF_H_