Commit f34deab2 authored by Debargha Mukherjee's avatar Debargha Mukherjee
Browse files

Adds compound wedge prediction modes

Incorporates wedge compound prediction modes.

Change-Id: Ie73b54b629105b9dcc5f3763be87f35b09ad2ec7
parent cf9c95c3
...@@ -45,6 +45,7 @@ typedef enum { ...@@ -45,6 +45,7 @@ typedef enum {
#endif // CONFIG_EXT_INTERP && SUPPORT_NONINTERPOLATING_FILTERS #endif // CONFIG_EXT_INTERP && SUPPORT_NONINTERPOLATING_FILTERS
#define MAXTXLEN 32 #define MAXTXLEN 32
#define CU_SIZE 64
static INLINE int is_inter_mode(PREDICTION_MODE mode) { static INLINE int is_inter_mode(PREDICTION_MODE mode) {
#if CONFIG_EXT_INTER #if CONFIG_EXT_INTER
...@@ -55,6 +56,23 @@ static INLINE int is_inter_mode(PREDICTION_MODE mode) { ...@@ -55,6 +56,23 @@ static INLINE int is_inter_mode(PREDICTION_MODE mode) {
} }
#if CONFIG_EXT_INTER #if CONFIG_EXT_INTER
#define WEDGE_BITS_SML 3
#define WEDGE_BITS_MED 4
#define WEDGE_BITS_BIG 5
#define WEDGE_NONE -1
#define WEDGE_WEIGHT_BITS 6
static INLINE int get_wedge_bits(BLOCK_SIZE sb_type) {
if (sb_type < BLOCK_8X8)
return 0;
if (sb_type <= BLOCK_8X8)
return WEDGE_BITS_SML;
else if (sb_type <= BLOCK_32X32)
return WEDGE_BITS_MED;
else
return WEDGE_BITS_BIG;
}
static INLINE int is_inter_singleref_mode(PREDICTION_MODE mode) { static INLINE int is_inter_singleref_mode(PREDICTION_MODE mode) {
return mode >= NEARESTMV && mode <= NEWFROMNEARMV; return mode >= NEARESTMV && mode <= NEWFROMNEARMV;
} }
...@@ -69,6 +87,11 @@ static INLINE int have_newmv_in_inter_mode(PREDICTION_MODE mode) { ...@@ -69,6 +87,11 @@ static INLINE int have_newmv_in_inter_mode(PREDICTION_MODE mode) {
mode == NEAREST_NEWMV || mode == NEW_NEARESTMV || mode == NEAREST_NEWMV || mode == NEW_NEARESTMV ||
mode == NEAR_NEWMV || mode == NEW_NEARMV); mode == NEAR_NEWMV || mode == NEW_NEARMV);
} }
#else
static INLINE int have_newmv_in_inter_mode(PREDICTION_MODE mode) {
return (mode == NEWMV);
}
#endif // CONFIG_EXT_INTER #endif // CONFIG_EXT_INTER
/* For keyframes, intra block modes are predicted by the (already decoded) /* For keyframes, intra block modes are predicted by the (already decoded)
...@@ -172,6 +195,12 @@ typedef struct { ...@@ -172,6 +195,12 @@ typedef struct {
#if CONFIG_EXT_INTER #if CONFIG_EXT_INTER
PREDICTION_MODE interintra_mode; PREDICTION_MODE interintra_mode;
PREDICTION_MODE interintra_uv_mode; PREDICTION_MODE interintra_uv_mode;
// TODO(debargha): Consolidate these flags
int use_wedge_interintra;
int interintra_wedge_index;
int interintra_uv_wedge_index;
int use_wedge_interinter;
int interinter_wedge_index;
#endif // CONFIG_EXT_INTER #endif // CONFIG_EXT_INTER
#if CONFIG_OBMC #if CONFIG_OBMC
...@@ -203,12 +232,6 @@ static INLINE int has_second_ref(const MB_MODE_INFO *mbmi) { ...@@ -203,12 +232,6 @@ static INLINE int has_second_ref(const MB_MODE_INFO *mbmi) {
return mbmi->ref_frame[1] > INTRA_FRAME; return mbmi->ref_frame[1] > INTRA_FRAME;
} }
#if CONFIG_OBMC
static INLINE int is_obmc_allowed(const MB_MODE_INFO *mbmi) {
return (mbmi->sb_type >= BLOCK_8X8);
}
#endif // CONFIG_OBMC
PREDICTION_MODE vp10_left_block_mode(const MODE_INFO *cur_mi, PREDICTION_MODE vp10_left_block_mode(const MODE_INFO *cur_mi,
const MODE_INFO *left_mi, int b); const MODE_INFO *left_mi, int b);
...@@ -647,6 +670,23 @@ static INLINE int is_interintra_pred(const MB_MODE_INFO *mbmi) { ...@@ -647,6 +670,23 @@ static INLINE int is_interintra_pred(const MB_MODE_INFO *mbmi) {
} }
#endif // CONFIG_EXT_INTER #endif // CONFIG_EXT_INTER
#if CONFIG_OBMC
static INLINE int is_obmc_allowed(const MB_MODE_INFO *mbmi) {
return (mbmi->sb_type >= BLOCK_8X8);
}
static INLINE int is_neighbor_overlappable(const MB_MODE_INFO *mbmi) {
#if CONFIG_EXT_INTER
return (is_inter_block(mbmi) &&
!(has_second_ref(mbmi) && get_wedge_bits(mbmi->sb_type) &&
mbmi->use_wedge_interinter) &&
!(is_interintra_pred(mbmi)));
#else
return (is_inter_block(mbmi));
#endif // CONFIG_EXT_INTER
}
#endif // CONFIG_OBMC
#ifdef __cplusplus #ifdef __cplusplus
} // extern "C" } // extern "C"
#endif #endif
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "vpx_mem/vpx_mem.h" #include "vpx_mem/vpx_mem.h"
#include "vp10/common/reconinter.h"
#include "vp10/common/onyxc_int.h" #include "vp10/common/onyxc_int.h"
#include "vp10/common/seg_common.h" #include "vp10/common/seg_common.h"
...@@ -190,8 +191,8 @@ static const vpx_prob default_drl_prob[DRL_MODE_CONTEXTS] = { ...@@ -190,8 +191,8 @@ static const vpx_prob default_drl_prob[DRL_MODE_CONTEXTS] = {
#if CONFIG_EXT_INTER #if CONFIG_EXT_INTER
static const vpx_prob default_new2mv_prob = 180; static const vpx_prob default_new2mv_prob = 180;
#endif #endif // CONFIG_EXT_INTER
#endif #endif // CONFIG_REF_MV
static const vpx_prob default_inter_mode_probs[INTER_MODE_CONTEXTS] static const vpx_prob default_inter_mode_probs[INTER_MODE_CONTEXTS]
[INTER_MODES - 1] = { [INTER_MODES - 1] = {
...@@ -230,6 +231,14 @@ static const vpx_prob default_inter_compound_mode_probs ...@@ -230,6 +231,14 @@ static const vpx_prob default_inter_compound_mode_probs
static const vpx_prob default_interintra_prob[BLOCK_SIZES] = { static const vpx_prob default_interintra_prob[BLOCK_SIZES] = {
192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
}; };
static const vpx_prob default_wedge_interintra_prob[BLOCK_SIZES] = {
192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
};
static const vpx_prob default_wedge_interinter_prob[BLOCK_SIZES] = {
192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
};
#endif // CONFIG_EXT_INTER #endif // CONFIG_EXT_INTER
#if CONFIG_OBMC #if CONFIG_OBMC
...@@ -1337,6 +1346,8 @@ static void init_mode_probs(FRAME_CONTEXT *fc) { ...@@ -1337,6 +1346,8 @@ static void init_mode_probs(FRAME_CONTEXT *fc) {
#if CONFIG_EXT_INTER #if CONFIG_EXT_INTER
vp10_copy(fc->inter_compound_mode_probs, default_inter_compound_mode_probs); vp10_copy(fc->inter_compound_mode_probs, default_inter_compound_mode_probs);
vp10_copy(fc->interintra_prob, default_interintra_prob); vp10_copy(fc->interintra_prob, default_interintra_prob);
vp10_copy(fc->wedge_interintra_prob, default_wedge_interintra_prob);
vp10_copy(fc->wedge_interinter_prob, default_wedge_interinter_prob);
#endif // CONFIG_EXT_INTER #endif // CONFIG_EXT_INTER
#if CONFIG_SUPERTX #if CONFIG_SUPERTX
vp10_copy(fc->supertx_prob, default_supertx_prob); vp10_copy(fc->supertx_prob, default_supertx_prob);
...@@ -1445,12 +1456,21 @@ void vp10_adapt_inter_frame_probs(VP10_COMMON *cm) { ...@@ -1445,12 +1456,21 @@ void vp10_adapt_inter_frame_probs(VP10_COMMON *cm) {
pre_fc->inter_compound_mode_probs[i], pre_fc->inter_compound_mode_probs[i],
counts->inter_compound_mode[i], counts->inter_compound_mode[i],
fc->inter_compound_mode_probs[i]); fc->inter_compound_mode_probs[i]);
for (i = 0; i < BLOCK_SIZES; ++i) { for (i = 0; i < BLOCK_SIZES; ++i) {
if (is_interintra_allowed_bsize(i)) if (is_interintra_allowed_bsize(i))
fc->interintra_prob[i] = mode_mv_merge_probs(pre_fc->interintra_prob[i], fc->interintra_prob[i] = mode_mv_merge_probs(pre_fc->interintra_prob[i],
counts->interintra[i]); counts->interintra[i]);
} }
for (i = 0; i < BLOCK_SIZES; ++i) {
if (is_interintra_allowed_bsize(i) && get_wedge_bits(i))
fc->wedge_interintra_prob[i] = mode_mv_merge_probs(
pre_fc->wedge_interintra_prob[i], counts->wedge_interintra[i]);
}
for (i = 0; i < BLOCK_SIZES; ++i) {
if (get_wedge_bits(i))
fc->wedge_interinter_prob[i] = mode_mv_merge_probs(
pre_fc->wedge_interinter_prob[i], counts->wedge_interinter[i]);
}
#endif // CONFIG_EXT_INTER #endif // CONFIG_EXT_INTER
for (i = 0; i < BLOCK_SIZE_GROUPS; i++) for (i = 0; i < BLOCK_SIZE_GROUPS; i++)
......
...@@ -74,13 +74,15 @@ typedef struct frame_contexts { ...@@ -74,13 +74,15 @@ typedef struct frame_contexts {
#if CONFIG_EXT_INTER #if CONFIG_EXT_INTER
vpx_prob new2mv_prob; vpx_prob new2mv_prob;
#endif // CONFIG_EXT_INTER #endif // CONFIG_EXT_INTER
#endif #endif // CONFIG_REF_MV
vpx_prob inter_mode_probs[INTER_MODE_CONTEXTS][INTER_MODES - 1]; vpx_prob inter_mode_probs[INTER_MODE_CONTEXTS][INTER_MODES - 1];
#if CONFIG_EXT_INTER #if CONFIG_EXT_INTER
vpx_prob inter_compound_mode_probs[INTER_MODE_CONTEXTS] vpx_prob inter_compound_mode_probs[INTER_MODE_CONTEXTS]
[INTER_COMPOUND_MODES - 1]; [INTER_COMPOUND_MODES - 1];
vpx_prob interintra_prob[BLOCK_SIZES]; vpx_prob interintra_prob[BLOCK_SIZES];
vpx_prob wedge_interintra_prob[BLOCK_SIZES];
vpx_prob wedge_interinter_prob[BLOCK_SIZES];
#endif // CONFIG_EXT_INTER #endif // CONFIG_EXT_INTER
#if CONFIG_OBMC #if CONFIG_OBMC
vpx_prob obmc_prob[BLOCK_SIZES]; vpx_prob obmc_prob[BLOCK_SIZES];
...@@ -143,6 +145,8 @@ typedef struct FRAME_COUNTS { ...@@ -143,6 +145,8 @@ typedef struct FRAME_COUNTS {
#if CONFIG_EXT_INTER #if CONFIG_EXT_INTER
unsigned int inter_compound_mode[INTER_MODE_CONTEXTS][INTER_COMPOUND_MODES]; unsigned int inter_compound_mode[INTER_MODE_CONTEXTS][INTER_COMPOUND_MODES];
unsigned int interintra[BLOCK_SIZES][2]; unsigned int interintra[BLOCK_SIZES][2];
unsigned int wedge_interintra[BLOCK_SIZES][2];
unsigned int wedge_interinter[BLOCK_SIZES][2];
#endif // CONFIG_EXT_INTER #endif // CONFIG_EXT_INTER
#if CONFIG_OBMC #if CONFIG_OBMC
unsigned int obmc[BLOCK_SIZES][2]; unsigned int obmc[BLOCK_SIZES][2];
......
...@@ -41,21 +41,32 @@ typedef enum BITSTREAM_PROFILE { ...@@ -41,21 +41,32 @@ typedef enum BITSTREAM_PROFILE {
MAX_PROFILES MAX_PROFILES
} BITSTREAM_PROFILE; } BITSTREAM_PROFILE;
#define BLOCK_4X4 0 #define BLOCK_4X4 0
#define BLOCK_4X8 1 #define BLOCK_4X8 1
#define BLOCK_8X4 2 #define BLOCK_8X4 2
#define BLOCK_8X8 3 #define BLOCK_8X8 3
#define BLOCK_8X16 4 #define BLOCK_8X16 4
#define BLOCK_16X8 5 #define BLOCK_16X8 5
#define BLOCK_16X16 6 #define BLOCK_16X16 6
#define BLOCK_16X32 7 #define BLOCK_16X32 7
#define BLOCK_32X16 8 #define BLOCK_32X16 8
#define BLOCK_32X32 9 #define BLOCK_32X32 9
#define BLOCK_32X64 10 #define BLOCK_32X64 10
#define BLOCK_64X32 11 #define BLOCK_64X32 11
#define BLOCK_64X64 12 #define BLOCK_64X64 12
#define BLOCK_SIZES 13
#define BLOCK_INVALID BLOCK_SIZES #if CONFIG_EXT_PARTITION
#define BLOCK_64X128 13
#define BLOCK_128X64 14
#define BLOCK_128X128 15
#define BLOCK_SIZES 16
#else
#define BLOCK_SIZES 13
#endif // CONFIG_EXT_PARTITION
#define BLOCK_INVALID (BLOCK_SIZES)
#define BLOCK_LARGEST (BLOCK_SIZES - 1)
typedef uint8_t BLOCK_SIZE; typedef uint8_t BLOCK_SIZE;
typedef enum PARTITION_TYPE { typedef enum PARTITION_TYPE {
......
This diff is collapsed.
...@@ -62,14 +62,14 @@ static INLINE void inter_predictor(const uint8_t *src, int src_stride, ...@@ -62,14 +62,14 @@ static INLINE void inter_predictor(const uint8_t *src, int src_stride,
} }
#if CONFIG_VP9_HIGHBITDEPTH #if CONFIG_VP9_HIGHBITDEPTH
static INLINE void high_inter_predictor(const uint8_t *src, int src_stride, static INLINE void highbd_inter_predictor(const uint8_t *src, int src_stride,
uint8_t *dst, int dst_stride, uint8_t *dst, int dst_stride,
const int subpel_x, const int subpel_x,
const int subpel_y, const int subpel_y,
const struct scale_factors *sf, const struct scale_factors *sf,
int w, int h, int ref, int w, int h, int ref,
const INTERP_FILTER interp_filter, const INTERP_FILTER interp_filter,
int xs, int ys, int bd) { int xs, int ys, int bd) {
InterpFilterParams interp_filter_params = InterpFilterParams interp_filter_params =
vp10_get_interp_filter_params(interp_filter); vp10_get_interp_filter_params(interp_filter);
if (interp_filter_params.taps == SUBPEL_TAPS) { if (interp_filter_params.taps == SUBPEL_TAPS) {
...@@ -105,6 +105,61 @@ static INLINE void high_inter_predictor(const uint8_t *src, int src_stride, ...@@ -105,6 +105,61 @@ static INLINE void high_inter_predictor(const uint8_t *src, int src_stride,
} }
#endif // CONFIG_VP9_HIGHBITDEPTH #endif // CONFIG_VP9_HIGHBITDEPTH
void build_inter_predictors(MACROBLOCKD *xd, int plane,
#if CONFIG_OBMC
int mi_col_offset, int mi_row_offset,
#endif // CONFIG_OBMC
int block,
int bw, int bh,
int x, int y, int w, int h,
#if CONFIG_SUPERTX && CONFIG_EXT_INTER
int wedge_offset_x, int wedge_offset_y,
#endif // CONFIG_SUPERTX && CONFIG_EXT_INTER
int mi_x, int mi_y);
static INLINE void vp10_make_inter_predictor(
const uint8_t *src,
int src_stride,
uint8_t *dst,
int dst_stride,
const int subpel_x,
const int subpel_y,
const struct scale_factors *sf,
int w, int h, int ref,
const INTERP_FILTER interp_filter,
int xs, int ys,
const MACROBLOCKD *xd) {
(void) xd;
#if CONFIG_VP9_HIGHBITDEPTH
if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH)
highbd_inter_predictor(src, src_stride, dst, dst_stride,
subpel_x, subpel_y, sf, w, h, ref,
interp_filter, xs, ys, xd->bd);
else
#endif // CONFIG_VP9_HIGHBITDEPTH
inter_predictor(src, src_stride, dst, dst_stride,
subpel_x, subpel_y, sf, w, h, ref,
interp_filter, xs, ys);
}
#if CONFIG_EXT_INTER
void vp10_make_masked_inter_predictor(
const uint8_t *pre,
int pre_stride,
uint8_t *dst,
int dst_stride,
const int subpel_x,
const int subpel_y,
const struct scale_factors *sf,
int w, int h,
const INTERP_FILTER interp_filter,
int xs, int ys,
#if CONFIG_SUPERTX
int plane, int wedge_offset_x, int wedge_offset_y,
#endif // CONFIG_SUPERTX
const MACROBLOCKD *xd);
#endif // CONFIG_EXT_INTER
static INLINE int round_mv_comp_q4(int value) { static INLINE int round_mv_comp_q4(int value) {
return (value < 0 ? value - 2 : value + 2) / 4; return (value < 0 ? value - 2 : value + 2) / 4;
} }
...@@ -114,10 +169,10 @@ static MV mi_mv_pred_q4(const MODE_INFO *mi, int idx) { ...@@ -114,10 +169,10 @@ static MV mi_mv_pred_q4(const MODE_INFO *mi, int idx) {
mi->bmi[1].as_mv[idx].as_mv.row + mi->bmi[1].as_mv[idx].as_mv.row +
mi->bmi[2].as_mv[idx].as_mv.row + mi->bmi[2].as_mv[idx].as_mv.row +
mi->bmi[3].as_mv[idx].as_mv.row), mi->bmi[3].as_mv[idx].as_mv.row),
round_mv_comp_q4(mi->bmi[0].as_mv[idx].as_mv.col + round_mv_comp_q4(mi->bmi[0].as_mv[idx].as_mv.col +
mi->bmi[1].as_mv[idx].as_mv.col + mi->bmi[1].as_mv[idx].as_mv.col +
mi->bmi[2].as_mv[idx].as_mv.col + mi->bmi[2].as_mv[idx].as_mv.col +
mi->bmi[3].as_mv[idx].as_mv.col) }; mi->bmi[3].as_mv[idx].as_mv.col) };
return res; return res;
} }
...@@ -183,15 +238,6 @@ static INLINE MV average_split_mvs(const struct macroblockd_plane *pd, ...@@ -183,15 +238,6 @@ static INLINE MV average_split_mvs(const struct macroblockd_plane *pd,
return res; return res;
} }
void build_inter_predictors(MACROBLOCKD *xd, int plane,
#if CONFIG_OBMC
int mi_col_offset, int mi_row_offset,
#endif // CONFIG_OBMC
int block,
int bw, int bh,
int x, int y, int w, int h,
int mi_x, int mi_y);
void vp10_build_inter_predictor_sub8x8(MACROBLOCKD *xd, int plane, void vp10_build_inter_predictor_sub8x8(MACROBLOCKD *xd, int plane,
int i, int ir, int ic, int i, int ir, int ic,
int mi_row, int mi_col); int mi_row, int mi_col);
...@@ -209,9 +255,21 @@ void vp10_build_inter_predictors_sb(MACROBLOCKD *xd, int mi_row, int mi_col, ...@@ -209,9 +255,21 @@ void vp10_build_inter_predictors_sb(MACROBLOCKD *xd, int mi_row, int mi_col,
BLOCK_SIZE bsize); BLOCK_SIZE bsize);
#if CONFIG_SUPERTX #if CONFIG_SUPERTX
void vp10_build_inter_predictors_sb_sub8x8(MACROBLOCKD *xd, void vp10_build_inter_predictors_sb_sub8x8_extend(
int mi_row, int mi_col, MACROBLOCKD *xd,
BLOCK_SIZE bsize, int block); #if CONFIG_EXT_INTER
int mi_row_ori, int mi_col_ori,
#endif // CONFIG_EXT_INTER
int mi_row, int mi_col,
BLOCK_SIZE bsize, int block);
void vp10_build_inter_predictors_sb_extend(
MACROBLOCKD *xd,
#if CONFIG_EXT_INTER
int mi_row_ori, int mi_col_ori,
#endif // CONFIG_EXT_INTER
int mi_row, int mi_col,
BLOCK_SIZE bsize);
struct macroblockd_plane; struct macroblockd_plane;
void vp10_build_masked_inter_predictor_complex( void vp10_build_masked_inter_predictor_complex(
MACROBLOCKD *xd, MACROBLOCKD *xd,
...@@ -219,7 +277,6 @@ void vp10_build_masked_inter_predictor_complex( ...@@ -219,7 +277,6 @@ void vp10_build_masked_inter_predictor_complex(
const struct macroblockd_plane *pd, int mi_row, int mi_col, const struct macroblockd_plane *pd, int mi_row, int mi_col,
int mi_row_ori, int mi_col_ori, BLOCK_SIZE bsize, BLOCK_SIZE top_bsize, int mi_row_ori, int mi_col_ori, BLOCK_SIZE bsize, BLOCK_SIZE top_bsize,
PARTITION_TYPE partition, int plane); PARTITION_TYPE partition, int plane);
#endif // CONFIG_SUPERTX #endif // CONFIG_SUPERTX
void vp10_build_inter_predictor(const uint8_t *src, int src_stride, void vp10_build_inter_predictor(const uint8_t *src, int src_stride,
...@@ -376,6 +433,15 @@ void vp10_build_obmc_inter_prediction(VP10_COMMON *cm, ...@@ -376,6 +433,15 @@ void vp10_build_obmc_inter_prediction(VP10_COMMON *cm,
#endif // CONFIG_OBMC #endif // CONFIG_OBMC
#if CONFIG_EXT_INTER #if CONFIG_EXT_INTER
#define MASK_MASTER_SIZE (2 * CU_SIZE)
#define MASK_MASTER_STRIDE (2 * CU_SIZE)
void vp10_init_wedge_masks();
const uint8_t *vp10_get_soft_mask(int wedge_index,
BLOCK_SIZE sb_type,
int h, int w);
void vp10_build_interintra_predictors(MACROBLOCKD *xd, void vp10_build_interintra_predictors(MACROBLOCKD *xd,
uint8_t *ypred, uint8_t *ypred,
uint8_t *upred, uint8_t *upred,
...@@ -398,6 +464,17 @@ void vp10_build_interintra_predictors_sbuv(MACROBLOCKD *xd, ...@@ -398,6 +464,17 @@ void vp10_build_interintra_predictors_sbuv(MACROBLOCKD *xd,
uint8_t *vpred, uint8_t *vpred,
int ustride, int vstride, int ustride, int vstride,
BLOCK_SIZE bsize); BLOCK_SIZE bsize);
// Encoder only
void vp10_build_inter_predictors_for_planes_single_buf(
MACROBLOCKD *xd, BLOCK_SIZE bsize,
int mi_row, int mi_col, int ref,
uint8_t *ext_dst[3], int ext_dst_stride[3]);
void vp10_build_wedge_inter_predictor_from_buf(
MACROBLOCKD *xd, BLOCK_SIZE bsize,
int mi_row, int mi_col,
uint8_t *ext_dst0[3], int ext_dst_stride0[3],
uint8_t *ext_dst1[3], int ext_dst_stride1[3]);
#endif // CONFIG_EXT_INTER #endif // CONFIG_EXT_INTER
#ifdef __cplusplus #ifdef __cplusplus
......
...@@ -412,6 +412,13 @@ void vp10_accumulate_frame_counts(VP10_COMMON *cm, FRAME_COUNTS *counts, ...@@ -412,6 +412,13 @@ void vp10_accumulate_frame_counts(VP10_COMMON *cm, FRAME_COUNTS *counts,
for (i = 0; i < BLOCK_SIZES; i++) for (i = 0; i < BLOCK_SIZES; i++)
for (j = 0; j < 2; j++) for (j = 0; j < 2; j++)
cm->counts.interintra[i][j] += counts->interintra[i][j]; cm->counts.interintra[i][j] += counts->interintra[i][j];
for (i = 0; i < BLOCK_SIZES; i++)
for (j = 0; j < 2; j++)
cm->counts.wedge_interintra[i][j] += counts->wedge_interintra[i][j];
for (i = 0; i < BLOCK_SIZES; i++)
for (j = 0; j < 2; j++)
cm->counts.wedge_interinter[i][j] += counts->wedge_interinter[i][j];
#endif // CONFIG_EXT_INTER #endif // CONFIG_EXT_INTER
for (i = 0; i < INTRA_INTER_CONTEXTS; i++) for (i = 0; i < INTRA_INTER_CONTEXTS; i++)
......
...@@ -12,7 +12,7 @@ struct macroblockd; ...@@ -12,7 +12,7 @@ struct macroblockd;
/* Encoder forward decls */ /* Encoder forward decls */
struct macroblock; struct macroblock;
struct vp9_variance_vtable; struct vp10_variance_vtable;
struct search_site_config; struct search_site_config;
struct mv; struct mv;
union int_mv; union int_mv;
...@@ -614,15 +614,15 @@ if (vpx_config("CONFIG_VP9_HIGHBITDEPTH") eq "yes") { ...@@ -614,15 +614,15 @@ if (vpx_config("CONFIG_VP9_HIGHBITDEPTH") eq "yes") {
# #
# Motion search # Motion search
# #
add_proto qw/int vp10_full_search_sad/, "const struct macroblock *x, const struct mv *ref_mv, int sad_per_bit, int distance, const struct vp9_variance_vtable *fn_ptr, const struct mv *center_mv, struct mv *best_mv"; add_proto qw/int vp10_full_search_sad/, "const struct macroblock *x, const struct mv *ref_mv, int sad_per_bit, int distance, const struct vp10_variance_vtable *fn_ptr, const struct mv *center_mv, struct mv *best_mv";
specialize qw/vp10_full_search_sad sse3 sse4_1/; specialize qw/vp10_full_search_sad sse3 sse4_1/;
$vp10_full_search_sad_sse3=vp10_full_search_sadx3; $vp10_full_search_sad_sse3=vp10_full_search_sadx3;
$vp10_full_search_sad_sse4_1=vp10_full_search_sadx8; $vp10_full_search_sad_sse4_1=vp10_full_search_sadx8;
add_proto qw/int vp10_diamond_search_sad/, "const struct macroblock *x, const struct search_site_config *cfg, struct mv *ref_mv, struct mv *best_mv, int search_param, int sad_per_bit, int *num00, const struct vp9_variance_vtable *fn_ptr, const struct mv *center_mv"; add_proto qw/int vp10_diamond_search_sad/, "const struct macroblock *x, const struct search_site_config *cfg, struct mv *ref_mv, struct mv *best_mv, int search_param, int sad_per_bit, int *num00, const struct vp10_variance_vtable *fn_ptr, const struct mv *center_mv";
specialize qw/vp10_diamond_search_sad/; specialize qw/vp10_diamond_search_sad/;
add_proto qw/int vp10_full_range_search/, "const struct macroblock *x, const struct search_site_config *cfg, struct mv *ref_mv, struct mv *best_mv, int search_param, int sad_per_bit, int *num00, const struct vp9_variance_vtable *fn_ptr, const struct mv *center_mv"; add_proto qw/int vp10_full_range_search/, "const struct macroblock *x, const struct search_site_config *cfg, struct mv *ref_mv, struct mv *best_mv, int search_param, int sad_per_bit, int *num00, const struct vp10_variance_vtable *fn_ptr, const struct mv *center_mv";
specialize qw/vp10_full_range_search/; specialize qw/vp10_full_range_search/;
add_proto qw/void vp10_temporal_filter_apply/, "uint8_t *frame1, unsigned int stride, uint8_t *frame2, unsigned int block_width, unsigned int block_height, int strength, int filter_weight, unsigned int *accumulator, uint16_t *count"; add_proto qw/void vp10_temporal_filter_apply/, "uint8_t *frame1, unsigned int stride, uint8_t *frame2, unsigned int block_width, unsigned int block_height, int strength, int filter_weight, unsigned int *accumulator, uint16_t *count";
......
This diff is collapsed.
...@@ -1185,10 +1185,11 @@ static void read_inter_block_mode_info(VP10Decoder *const pbi, ...@@ -1185,10 +1185,11 @@ static void read_inter_block_mode_info(VP10Decoder *const pbi,
} }
#if CONFIG_OBMC #if CONFIG_OBMC
mbmi->obmc = 0;
#if CONFIG_SUPERTX #if CONFIG_SUPERTX
if (!supertx_enabled) if (!supertx_enabled)
#endif // CONFIG_SUPERTX #endif // CONFIG_SUPERTX
mbmi->obmc = read_is_obmc_block(cm, xd, r); mbmi->obmc = read_is_obmc_block(cm, xd, r);
#endif // CONFIG_OBMC #endif // CONFIG_OBMC
#if CONFIG_REF_MV #if CONFIG_REF_MV
...@@ -1432,7 +1433,12 @@ static void read_inter_block_mode_info(VP10Decoder *const pbi, ...@@ -1432,7 +1433,12 @@ static void read_inter_block_mode_info(VP10Decoder *const pbi,
} }