1ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang/* 2ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * 4ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * Use of this source code is governed by a BSD-style license 5ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * that can be found in the LICENSE file in the root of the source 6ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * tree. An additional intellectual property rights grant can be found 7ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * in the file PATENTS. All contributing project authors may 8ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * be found in the AUTHORS file in the root of the source tree. 9ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang */ 10ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 11ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#ifndef VP9_COMMON_VP9_RECONINTER_H_ 12ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#define VP9_COMMON_VP9_RECONINTER_H_ 13ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 14ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include "vpx/vpx_integer.h" 15ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include "vp9/common/vp9_onyxc_int.h" 16ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 17b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#ifdef __cplusplus 18b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianextern "C" { 19b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#endif 20b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 211184aebb761cbeac9124c37189a80a1a58f04b6bhkuangvoid vp9_build_inter_predictors_sby(MACROBLOCKD *xd, int mi_row, int mi_col, 221184aebb761cbeac9124c37189a80a1a58f04b6bhkuang BLOCK_SIZE bsize); 23ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 241184aebb761cbeac9124c37189a80a1a58f04b6bhkuangvoid vp9_build_inter_predictors_sbuv(MACROBLOCKD *xd, int mi_row, int mi_col, 251184aebb761cbeac9124c37189a80a1a58f04b6bhkuang BLOCK_SIZE bsize); 26ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 271184aebb761cbeac9124c37189a80a1a58f04b6bhkuangvoid vp9_build_inter_predictors_sb(MACROBLOCKD *xd, int mi_row, int mi_col, 281184aebb761cbeac9124c37189a80a1a58f04b6bhkuang BLOCK_SIZE bsize); 29ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 30b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianvoid vp9_dec_build_inter_predictors_sb(MACROBLOCKD *xd, int mi_row, int mi_col, 31b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian BLOCK_SIZE bsize); 32ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 33ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangvoid vp9_build_inter_predictor(const uint8_t *src, int src_stride, 34ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang uint8_t *dst, int dst_stride, 35f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang const MV *mv_q3, 36b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian const struct scale_factors *sf, 37ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang int w, int h, int do_avg, 38b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian const InterpKernel *kernel, 39b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian enum mv_precision precision, 40b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int x, int y); 41b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 42b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianstatic INLINE int scaled_buffer_offset(int x_offset, int y_offset, int stride, 43b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian const struct scale_factors *sf) { 44b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian const int x = sf ? sf->scale_value_x(x_offset, sf) : x_offset; 45b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian const int y = sf ? sf->scale_value_y(y_offset, sf) : y_offset; 46ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang return y * stride + x; 47ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} 48ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 49b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianstatic INLINE void setup_pred_plane(struct buf_2d *dst, 50b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian uint8_t *src, int stride, 51b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int mi_row, int mi_col, 52b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian const struct scale_factors *scale, 53b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int subsampling_x, int subsampling_y) { 54ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang const int x = (MI_SIZE * mi_col) >> subsampling_x; 55ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang const int y = (MI_SIZE * mi_row) >> subsampling_y; 56ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang dst->buf = src + scaled_buffer_offset(x, y, stride, scale); 57ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang dst->stride = stride; 58ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} 59ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 60b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianvoid vp9_setup_dst_planes(MACROBLOCKD *xd, const YV12_BUFFER_CONFIG *src, 61b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int mi_row, int mi_col); 62ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 63b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianvoid vp9_setup_pre_planes(MACROBLOCKD *xd, int idx, 64b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian const YV12_BUFFER_CONFIG *src, int mi_row, int mi_col, 65b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian const struct scale_factors *sf); 66ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 67b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#ifdef __cplusplus 68b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian} // extern "C" 69b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#endif 70ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 71ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#endif // VP9_COMMON_VP9_RECONINTER_H_ 72