blob: 1258970c40e81662d52f2d2942953a0c2f42a73d [file] [log] [blame]
/*
* Copyright (c) 2022, Alliance for Open Media. All rights reserved
*
* This source code is subject to the terms of the BSD 3-Clause Clear License
* and the Alliance for Open Media Patent License 1.0. If the BSD 3-Clause Clear
* License was not distributed with this source code in the LICENSE file, you
* can obtain it at aomedia.org/license/software-license/bsd-3-c-c/. If the
* Alliance for Open Media Patent License 1.0 was not distributed with this
* source code in the PATENTS file, you can obtain it at
* aomedia.org/license/patent-license/.
*/
#ifndef AOM_AV1_COMMON_PEF_H_
#define AOM_AV1_COMMON_PEF_H_
#include "config/aom_config.h"
#include "aom_ports/mem.h"
#include "av1/common/blockd.h"
#include "av1/common/seg_common.h"
#ifdef __cplusplus
extern "C" {
#endif
#define PEF_SHIFT 11
#define PEF_QTHR 150
#define PEF_DELTA 2
#define PEF_THR_SHIFT 3
#define PEF_DELTA_SCALE 8
#define PEF_BD_FACTOR 24
#define PEF_MCU_SZ 8
// Structure for PEF parameters
typedef struct {
int filter_level[2];
int filter_level_u;
int filter_level_v;
int delta_q_luma[2];
int delta_side_luma[2];
int delta_q_u;
int delta_side_u;
int delta_q_v;
int delta_side_v;
int pef_delta;
} PefParams;
// Structure for intermediate thresholds
typedef struct {
uint16_t q_thr[MAX_MB_PLANE][2];
uint16_t side_thr[MAX_MB_PLANE][2];
} PefInfo;
// Structure for PEF function input
typedef struct {
// 0 for OPFL prediciton, 1 for TIP prediciton, 2 for TIP frame, 3 for
// refinemv prediction
int pef_mode;
int plane;
int bw;
int bh;
int ss_x;
int ss_y;
int bit_depth;
uint16_t *dst;
int dst_stride;
int_mv *mv_refined;
#if CONFIG_REFINEMV
REFINEMV_SUBMB_INFO *refinemv_subinfo;
#endif // CONFIG_REFINEMV
} PefFuncInput;
typedef void (*filt_func)(uint16_t *s, int stride, int bd, uint16_t q_thresh,
uint16_t side_thresh, int q_mult, int w_mult, int n,
int filt_len);
// Initialize PEF parameters
void init_pef_parameter(struct AV1Common *const cm, int plane_start,
int plane_end);
// enhance TIP frame
void enhance_tip_frame(struct AV1Common *const cm, MACROBLOCKD *xd);
// enhance prediction blocks
void enhance_prediction(const struct AV1Common *cm, MACROBLOCKD *xd, int plane,
uint16_t *dst, int dst_stride, int bw, int bh
#if CONFIG_OPTFLOW_REFINEMENT
,
int_mv *const mv_refined, int use_opfl
#endif // CONFIG_OPTFLOW_REFINEMENT
#if CONFIG_REFINEMV
,
int use_refinemv, REFINEMV_SUBMB_INFO *refinemv_subinfo
#endif // CONFIG_REFINEMV
);
#ifdef __cplusplus
} // extern "C"
#endif
#endif // AOM_AV1_COMMON_PEF_H_