| /* |
| * Copyright (c) 2016 The WebM project authors. All Rights Reserved. |
| * |
| * Use of this source code is governed by a BSD-style license |
| * that can be found in the LICENSE file in the root of the source |
| * tree. An additional intellectual property rights grant can be found |
| * in the file PATENTS. All contributing project authors may |
| * be found in the AUTHORS file in the root of the source tree. |
| */ |
| |
| #ifndef VP10_COMMON_RESTORATION_H_ |
| #define VP10_COMMON_RESTORATION_H_ |
| |
| #include "vpx_ports/mem.h" |
| #include "./vpx_config.h" |
| |
| #include "vp10/common/blockd.h" |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #define RESTORATION_LEVEL_BITS_KF 4 |
| #define RESTORATION_LEVELS_KF (1 << RESTORATION_LEVEL_BITS_KF) |
| #define RESTORATION_LEVEL_BITS 3 |
| #define RESTORATION_LEVELS (1 << RESTORATION_LEVEL_BITS) |
| #define DEF_RESTORATION_LEVEL 2 |
| |
| #define RESTORATION_HALFWIN 3 |
| #define RESTORATION_HALFWIN1 (RESTORATION_HALFWIN + 1) |
| #define RESTORATION_WIN (2 * RESTORATION_HALFWIN + 1) |
| #define RESTORATION_WIN2 ((RESTORATION_WIN) * (RESTORATION_WIN)) |
| |
| #define RESTORATION_FILT_BITS 7 |
| #define RESTORATION_FILT_STEP (1 << RESTORATION_FILT_BITS) |
| |
| #define WIENER_FILT_TAP0_MINV -5 |
| #define WIENER_FILT_TAP1_MINV (-23) |
| #define WIENER_FILT_TAP2_MINV -20 |
| |
| #define WIENER_FILT_TAP0_BITS 4 |
| #define WIENER_FILT_TAP1_BITS 5 |
| #define WIENER_FILT_TAP2_BITS 6 |
| |
| #define WIENER_FILT_BITS \ |
| ((WIENER_FILT_TAP0_BITS + WIENER_FILT_TAP1_BITS + WIENER_FILT_TAP2_BITS) * 2) |
| |
| #define WIENER_FILT_TAP0_MAXV \ |
| (WIENER_FILT_TAP0_MINV -1 + (1 << WIENER_FILT_TAP0_BITS)) |
| #define WIENER_FILT_TAP1_MAXV \ |
| (WIENER_FILT_TAP1_MINV -1 + (1 << WIENER_FILT_TAP1_BITS)) |
| #define WIENER_FILT_TAP2_MAXV \ |
| (WIENER_FILT_TAP2_MINV -1 + (1 << WIENER_FILT_TAP2_BITS)) |
| |
| typedef enum { |
| RESTORE_NONE, |
| RESTORE_BILATERAL, |
| RESTORE_WIENER, |
| } RestorationType; |
| |
| typedef struct { |
| RestorationType restoration_type; |
| int restoration_level; |
| int vfilter[RESTORATION_HALFWIN], hfilter[RESTORATION_HALFWIN]; |
| } RestorationInfo; |
| |
| typedef struct { |
| RestorationType restoration_type; |
| uint8_t *wx_lut[RESTORATION_WIN]; |
| uint8_t *wr_lut; |
| int vfilter[RESTORATION_WIN], hfilter[RESTORATION_WIN]; |
| } RestorationInternal; |
| |
| int vp10_restoration_level_bits(const struct VP10Common *const cm); |
| void vp10_loop_restoration_init(RestorationInternal *rst, |
| RestorationInfo *rsi, int kf); |
| void vp10_loop_restoration_frame(YV12_BUFFER_CONFIG *frame, |
| struct VP10Common *cm, |
| RestorationInfo *rsi, |
| int y_only, int partial_frame); |
| void vp10_loop_restoration_rows(YV12_BUFFER_CONFIG *frame, |
| struct VP10Common *cm, |
| int start_mi_row, int end_mi_row, |
| int y_only); |
| void vp10_loop_restoration_precal(); |
| #ifdef __cplusplus |
| } // extern "C" |
| #endif |
| |
| #endif // VP10_COMMON_RESTORATION_H_ |