1233d2500723e5594f3e7c70896ffeeef32b9c950ywan/* 2233d2500723e5594f3e7c70896ffeeef32b9c950ywan * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3233d2500723e5594f3e7c70896ffeeef32b9c950ywan * 4233d2500723e5594f3e7c70896ffeeef32b9c950ywan * Use of this source code is governed by a BSD-style license 5233d2500723e5594f3e7c70896ffeeef32b9c950ywan * that can be found in the LICENSE file in the root of the source 6233d2500723e5594f3e7c70896ffeeef32b9c950ywan * tree. An additional intellectual property rights grant can be found 7233d2500723e5594f3e7c70896ffeeef32b9c950ywan * in the file PATENTS. All contributing project authors may 8233d2500723e5594f3e7c70896ffeeef32b9c950ywan * be found in the AUTHORS file in the root of the source tree. 9233d2500723e5594f3e7c70896ffeeef32b9c950ywan */ 10233d2500723e5594f3e7c70896ffeeef32b9c950ywan 11233d2500723e5594f3e7c70896ffeeef32b9c950ywan 12233d2500723e5594f3e7c70896ffeeef32b9c950ywan#ifndef VP8_COMMON_LOOPFILTER_H_ 13233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define VP8_COMMON_LOOPFILTER_H_ 14233d2500723e5594f3e7c70896ffeeef32b9c950ywan 15233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "vpx_ports/mem.h" 16233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "vpx_config.h" 17233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "vp8_rtcd.h" 18233d2500723e5594f3e7c70896ffeeef32b9c950ywan 19233d2500723e5594f3e7c70896ffeeef32b9c950ywan#ifdef __cplusplus 20233d2500723e5594f3e7c70896ffeeef32b9c950ywanextern "C" { 21233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 22233d2500723e5594f3e7c70896ffeeef32b9c950ywan 23233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define MAX_LOOP_FILTER 63 24233d2500723e5594f3e7c70896ffeeef32b9c950ywan/* fraction of total macroblock rows to be used in fast filter level picking */ 25233d2500723e5594f3e7c70896ffeeef32b9c950ywan/* has to be > 2 */ 26233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define PARTIAL_FRAME_FRACTION 8 27233d2500723e5594f3e7c70896ffeeef32b9c950ywan 28233d2500723e5594f3e7c70896ffeeef32b9c950ywantypedef enum 29233d2500723e5594f3e7c70896ffeeef32b9c950ywan{ 30233d2500723e5594f3e7c70896ffeeef32b9c950ywan NORMAL_LOOPFILTER = 0, 31233d2500723e5594f3e7c70896ffeeef32b9c950ywan SIMPLE_LOOPFILTER = 1 32233d2500723e5594f3e7c70896ffeeef32b9c950ywan} LOOPFILTERTYPE; 33233d2500723e5594f3e7c70896ffeeef32b9c950ywan 34233d2500723e5594f3e7c70896ffeeef32b9c950ywan#if ARCH_ARM 35233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define SIMD_WIDTH 1 36233d2500723e5594f3e7c70896ffeeef32b9c950ywan#else 37233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define SIMD_WIDTH 16 38233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 39233d2500723e5594f3e7c70896ffeeef32b9c950ywan 40233d2500723e5594f3e7c70896ffeeef32b9c950ywan/* Need to align this structure so when it is declared and 41233d2500723e5594f3e7c70896ffeeef32b9c950ywan * passed it can be loaded into vector registers. 42233d2500723e5594f3e7c70896ffeeef32b9c950ywan */ 43233d2500723e5594f3e7c70896ffeeef32b9c950ywantypedef struct 44233d2500723e5594f3e7c70896ffeeef32b9c950ywan{ 45233d2500723e5594f3e7c70896ffeeef32b9c950ywan DECLARE_ALIGNED(SIMD_WIDTH, unsigned char, mblim[MAX_LOOP_FILTER + 1][SIMD_WIDTH]); 46233d2500723e5594f3e7c70896ffeeef32b9c950ywan DECLARE_ALIGNED(SIMD_WIDTH, unsigned char, blim[MAX_LOOP_FILTER + 1][SIMD_WIDTH]); 47233d2500723e5594f3e7c70896ffeeef32b9c950ywan DECLARE_ALIGNED(SIMD_WIDTH, unsigned char, lim[MAX_LOOP_FILTER + 1][SIMD_WIDTH]); 48233d2500723e5594f3e7c70896ffeeef32b9c950ywan DECLARE_ALIGNED(SIMD_WIDTH, unsigned char, hev_thr[4][SIMD_WIDTH]); 49233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned char lvl[4][4][4]; 50233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned char hev_thr_lut[2][MAX_LOOP_FILTER + 1]; 51233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned char mode_lf_lut[10]; 52233d2500723e5594f3e7c70896ffeeef32b9c950ywan} loop_filter_info_n; 53233d2500723e5594f3e7c70896ffeeef32b9c950ywan 54233d2500723e5594f3e7c70896ffeeef32b9c950ywantypedef struct loop_filter_info 55233d2500723e5594f3e7c70896ffeeef32b9c950ywan{ 56233d2500723e5594f3e7c70896ffeeef32b9c950ywan const unsigned char * mblim; 57233d2500723e5594f3e7c70896ffeeef32b9c950ywan const unsigned char * blim; 58233d2500723e5594f3e7c70896ffeeef32b9c950ywan const unsigned char * lim; 59233d2500723e5594f3e7c70896ffeeef32b9c950ywan const unsigned char * hev_thr; 60233d2500723e5594f3e7c70896ffeeef32b9c950ywan} loop_filter_info; 61233d2500723e5594f3e7c70896ffeeef32b9c950ywan 62233d2500723e5594f3e7c70896ffeeef32b9c950ywan 63233d2500723e5594f3e7c70896ffeeef32b9c950ywantypedef void loop_filter_uvfunction 64233d2500723e5594f3e7c70896ffeeef32b9c950ywan( 65233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned char *u, /* source pointer */ 66233d2500723e5594f3e7c70896ffeeef32b9c950ywan int p, /* pitch */ 67233d2500723e5594f3e7c70896ffeeef32b9c950ywan const unsigned char *blimit, 68233d2500723e5594f3e7c70896ffeeef32b9c950ywan const unsigned char *limit, 69233d2500723e5594f3e7c70896ffeeef32b9c950ywan const unsigned char *thresh, 70233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned char *v 71233d2500723e5594f3e7c70896ffeeef32b9c950ywan); 72233d2500723e5594f3e7c70896ffeeef32b9c950ywan 73233d2500723e5594f3e7c70896ffeeef32b9c950ywan/* assorted loopfilter functions which get used elsewhere */ 74233d2500723e5594f3e7c70896ffeeef32b9c950ywanstruct VP8Common; 75233d2500723e5594f3e7c70896ffeeef32b9c950ywanstruct macroblockd; 76233d2500723e5594f3e7c70896ffeeef32b9c950ywanstruct modeinfo; 77233d2500723e5594f3e7c70896ffeeef32b9c950ywan 78233d2500723e5594f3e7c70896ffeeef32b9c950ywanvoid vp8_loop_filter_init(struct VP8Common *cm); 79233d2500723e5594f3e7c70896ffeeef32b9c950ywan 80233d2500723e5594f3e7c70896ffeeef32b9c950ywanvoid vp8_loop_filter_frame_init(struct VP8Common *cm, 81233d2500723e5594f3e7c70896ffeeef32b9c950ywan struct macroblockd *mbd, 82233d2500723e5594f3e7c70896ffeeef32b9c950ywan int default_filt_lvl); 83233d2500723e5594f3e7c70896ffeeef32b9c950ywan 84233d2500723e5594f3e7c70896ffeeef32b9c950ywanvoid vp8_loop_filter_frame(struct VP8Common *cm, struct macroblockd *mbd, 85233d2500723e5594f3e7c70896ffeeef32b9c950ywan int frame_type); 86233d2500723e5594f3e7c70896ffeeef32b9c950ywan 87233d2500723e5594f3e7c70896ffeeef32b9c950ywanvoid vp8_loop_filter_partial_frame(struct VP8Common *cm, 88233d2500723e5594f3e7c70896ffeeef32b9c950ywan struct macroblockd *mbd, 89233d2500723e5594f3e7c70896ffeeef32b9c950ywan int default_filt_lvl); 90233d2500723e5594f3e7c70896ffeeef32b9c950ywan 91233d2500723e5594f3e7c70896ffeeef32b9c950ywanvoid vp8_loop_filter_frame_yonly(struct VP8Common *cm, 92233d2500723e5594f3e7c70896ffeeef32b9c950ywan struct macroblockd *mbd, 93233d2500723e5594f3e7c70896ffeeef32b9c950ywan int default_filt_lvl); 94233d2500723e5594f3e7c70896ffeeef32b9c950ywan 95233d2500723e5594f3e7c70896ffeeef32b9c950ywanvoid vp8_loop_filter_update_sharpness(loop_filter_info_n *lfi, 96233d2500723e5594f3e7c70896ffeeef32b9c950ywan int sharpness_lvl); 97233d2500723e5594f3e7c70896ffeeef32b9c950ywan 98233d2500723e5594f3e7c70896ffeeef32b9c950ywanvoid vp8_loop_filter_row_normal(struct VP8Common *cm, 99233d2500723e5594f3e7c70896ffeeef32b9c950ywan struct modeinfo *mode_info_context, 100233d2500723e5594f3e7c70896ffeeef32b9c950ywan int mb_row, int post_ystride, int post_uvstride, 101233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned char *y_ptr, unsigned char *u_ptr, 102233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned char *v_ptr); 103233d2500723e5594f3e7c70896ffeeef32b9c950ywan 104233d2500723e5594f3e7c70896ffeeef32b9c950ywanvoid vp8_loop_filter_row_simple(struct VP8Common *cm, 105233d2500723e5594f3e7c70896ffeeef32b9c950ywan struct modeinfo *mode_info_context, 106233d2500723e5594f3e7c70896ffeeef32b9c950ywan int mb_row, int post_ystride, int post_uvstride, 107233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned char *y_ptr, unsigned char *u_ptr, 108233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned char *v_ptr); 109233d2500723e5594f3e7c70896ffeeef32b9c950ywan#ifdef __cplusplus 110233d2500723e5594f3e7c70896ffeeef32b9c950ywan} // extern "C" 111233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 112233d2500723e5594f3e7c70896ffeeef32b9c950ywan 113233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif // VP8_COMMON_LOOPFILTER_H_ 114