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 14da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian#include "vp9/common/vp9_filter.h" 15ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include "vp9/common/vp9_onyxc_int.h" 16da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian#include "vpx/vpx_integer.h" 17da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian#include "vpx_dsp/vpx_filter.h" 18ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 192ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian#ifdef __cplusplus 202ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanianextern "C" { 212ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian#endif 222ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian 23da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanianstatic INLINE void inter_predictor(const uint8_t *src, int src_stride, 24da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian uint8_t *dst, int dst_stride, 25da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian const int subpel_x, 26da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian const int subpel_y, 27da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian const struct scale_factors *sf, 28da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian int w, int h, int ref, 29da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian const InterpKernel *kernel, 30da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian int xs, int ys) { 31da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian sf->predict[subpel_x != 0][subpel_y != 0][ref]( 32da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian src, src_stride, dst, dst_stride, 33da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian kernel[subpel_x], xs, kernel[subpel_y], ys, w, h); 34da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian} 35da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian 36da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian#if CONFIG_VP9_HIGHBITDEPTH 37da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanianvoid high_inter_predictor(const uint8_t *src, int src_stride, 38da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian uint8_t *dst, int dst_stride, 39da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian const int subpel_x, 40da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian const int subpel_y, 41da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian const struct scale_factors *sf, 42da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian int w, int h, int ref, 43da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian const InterpKernel *kernel, 44da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian int xs, int ys, int bd); 45da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian#endif // CONFIG_VP9_HIGHBITDEPTH 46da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian 47da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh VenkatasubramanianMV average_split_mvs(const struct macroblockd_plane *pd, const MODE_INFO *mi, 48da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian int ref, int block); 49da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian 50da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh VenkatasubramanianMV clamp_mv_to_umv_border_sb(const MACROBLOCKD *xd, const MV *src_mv, 51da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian int bw, int bh, int ss_x, int ss_y); 52da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian 531184aebb761cbeac9124c37189a80a1a58f04b6bhkuangvoid vp9_build_inter_predictors_sby(MACROBLOCKD *xd, int mi_row, int mi_col, 541184aebb761cbeac9124c37189a80a1a58f04b6bhkuang BLOCK_SIZE bsize); 55ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 56da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanianvoid vp9_build_inter_predictors_sbp(MACROBLOCKD *xd, int mi_row, int mi_col, 57da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian BLOCK_SIZE bsize, int plane); 58da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian 591184aebb761cbeac9124c37189a80a1a58f04b6bhkuangvoid vp9_build_inter_predictors_sbuv(MACROBLOCKD *xd, int mi_row, int mi_col, 601184aebb761cbeac9124c37189a80a1a58f04b6bhkuang BLOCK_SIZE bsize); 61ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 621184aebb761cbeac9124c37189a80a1a58f04b6bhkuangvoid vp9_build_inter_predictors_sb(MACROBLOCKD *xd, int mi_row, int mi_col, 631184aebb761cbeac9124c37189a80a1a58f04b6bhkuang BLOCK_SIZE bsize); 64ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 65ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangvoid vp9_build_inter_predictor(const uint8_t *src, int src_stride, 66ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang uint8_t *dst, int dst_stride, 67f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang const MV *mv_q3, 682ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian const struct scale_factors *sf, 69ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang int w, int h, int do_avg, 702ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian const InterpKernel *kernel, 712ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian enum mv_precision precision, 722ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian int x, int y); 732ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian 74da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian#if CONFIG_VP9_HIGHBITDEPTH 75da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanianvoid vp9_highbd_build_inter_predictor(const uint8_t *src, int src_stride, 76da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian uint8_t *dst, int dst_stride, 77da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian const MV *mv_q3, 78da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian const struct scale_factors *sf, 79da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian int w, int h, int do_avg, 80da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian const InterpKernel *kernel, 81da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian enum mv_precision precision, 82da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian int x, int y, int bd); 83da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian#endif 84da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian 852ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanianstatic INLINE int scaled_buffer_offset(int x_offset, int y_offset, int stride, 862ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian const struct scale_factors *sf) { 872ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian const int x = sf ? sf->scale_value_x(x_offset, sf) : x_offset; 882ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian const int y = sf ? sf->scale_value_y(y_offset, sf) : y_offset; 89ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang return y * stride + x; 90ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} 91ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 922ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanianstatic INLINE void setup_pred_plane(struct buf_2d *dst, 932ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian uint8_t *src, int stride, 942ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian int mi_row, int mi_col, 952ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian const struct scale_factors *scale, 962ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian int subsampling_x, int subsampling_y) { 97ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang const int x = (MI_SIZE * mi_col) >> subsampling_x; 98ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang const int y = (MI_SIZE * mi_row) >> subsampling_y; 99ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang dst->buf = src + scaled_buffer_offset(x, y, stride, scale); 100ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang dst->stride = stride; 101ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} 102ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 103ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid vp9_setup_dst_planes(struct macroblockd_plane planes[MAX_MB_PLANE], 104ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian const YV12_BUFFER_CONFIG *src, 1052ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian int mi_row, int mi_col); 106ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 1072ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanianvoid vp9_setup_pre_planes(MACROBLOCKD *xd, int idx, 1082ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian const YV12_BUFFER_CONFIG *src, int mi_row, int mi_col, 1092ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian const struct scale_factors *sf); 110ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 1112ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian#ifdef __cplusplus 1122ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian} // extern "C" 1132ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian#endif 114ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 115ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#endif // VP9_COMMON_VP9_RECONINTER_H_ 116