Commit 29e4d7e8 authored by Ronald S. Bultje's avatar Ronald S. Bultje
Browse files

Merge dualpred (compound prediction) experiment.

Change-Id: Ieaaa07c50eae41118596197f6a4d848135946e41
parent d90f0eb4
......@@ -217,7 +217,6 @@ HAVE_LIST="
unistd_h
"
EXPERIMENT_LIST="
dualpred
extend_qrange
segmentation
segfeatures
......
......@@ -212,9 +212,7 @@ void vp8_create_common(VP8_COMMON *oci)
vp8_default_bmode_probs(oci->fc.bmode_prob);
oci->mb_no_coeff_skip = 1;
#if CONFIG_DUALPRED
oci->dual_pred_mode = HYBRID_PREDICTION;
#endif /* CONFIG_DUALPRED */
oci->no_lpf = 0;
oci->filter_type = NORMAL_LOOPFILTER;
oci->use_bilinear_mc_filter = 0;
......
......@@ -176,15 +176,11 @@ typedef enum
typedef struct
{
MB_PREDICTION_MODE mode, uv_mode;
MV_REFERENCE_FRAME ref_frame;
MV_REFERENCE_FRAME ref_frame, second_ref_frame;
#if CONFIG_T8X8
TX_SIZE txfm_size;
#endif
int_mv mv;
#if CONFIG_DUALPRED
MV_REFERENCE_FRAME second_ref_frame;
int_mv second_mv;
#endif
int_mv mv, second_mv;
unsigned char partitioning;
unsigned char mb_skip_coeff; /* does this mb has coefficients at all, 1=no coefficients, 0=need decode tokens */
unsigned char need_to_clamp_mvs;
......@@ -242,11 +238,9 @@ typedef struct MacroBlockD
int fullpixel_mask;
YV12_BUFFER_CONFIG pre; /* Filtered copy of previous frame reconstruction */
#if CONFIG_DUALPRED
struct {
uint8_t *y_buffer, *u_buffer, *v_buffer;
} second_pre;
#endif /* CONFIG_DUALPRED */
YV12_BUFFER_CONFIG dst;
MODE_INFO *prev_mode_info_context;
......@@ -310,10 +304,8 @@ typedef struct MacroBlockD
vp8_subpix_fn_t subpixel_predict8x4;
vp8_subpix_fn_t subpixel_predict8x8;
vp8_subpix_fn_t subpixel_predict16x16;
#if CONFIG_DUALPRED
vp8_subpix_fn_t subpixel_predict_avg8x8;
vp8_subpix_fn_t subpixel_predict_avg16x16;
#endif /* CONFIG_DUALPRED */
void *current_bc;
......
......@@ -221,7 +221,6 @@ static void filter_block2d_second_pass
}
}
#if CONFIG_DUALPRED
/*
* The only functional difference between filter_block2d_second_pass()
* and this function is that filter_block2d_second_pass() does a sixtap
......@@ -299,7 +298,6 @@ static void filter_block2d_second_pass_avg
output_ptr += output_pitch;
}
}
#endif /* CONFIG_DUALPRED */
static void filter_block2d
(
......@@ -368,7 +366,6 @@ void vp8_sixtap_predict8x8_c
}
#if CONFIG_DUALPRED
void vp8_sixtap_predict_avg8x8_c
(
unsigned char *src_ptr,
......@@ -394,7 +391,6 @@ void vp8_sixtap_predict_avg8x8_c
/* then filter verticaly... */
filter_block2d_second_pass_avg(FData + 8*(INTERP_EXTEND-1), dst_ptr, dst_pitch, 8, 8, 8, 8, VFilter);
}
#endif /* CONFIG_DUALPRED */
void vp8_sixtap_predict8x4_c
(
......@@ -452,7 +448,6 @@ void vp8_sixtap_predict16x16_c
}
#if CONFIG_DUALPRED
void vp8_sixtap_predict_avg16x16_c
(
unsigned char *src_ptr,
......@@ -479,7 +474,6 @@ void vp8_sixtap_predict_avg16x16_c
filter_block2d_second_pass_avg(FData + 16*(INTERP_EXTEND-1), dst_ptr, dst_pitch,
16, 16, 16, 16, VFilter);
}
#endif /* CONFIG_DUALPRED */
/****************************************************************************
*
......@@ -584,7 +578,6 @@ static void filter_block2d_bil_second_pass
}
}
#if CONFIG_DUALPRED
/*
* As before for filter_block2d_second_pass_avg(), the functional difference
* between filter_block2d_bil_second_pass() and filter_block2d_bil_second_pass_avg()
......@@ -623,7 +616,6 @@ static void filter_block2d_bil_second_pass_avg
dst_ptr += dst_pitch;
}
}
#endif /* CONFIG_DUALPRED */
/****************************************************************************
*
......@@ -670,7 +662,6 @@ static void filter_block2d_bil
filter_block2d_bil_second_pass(FData, dst_ptr, dst_pitch, Height, Width, VFilter);
}
#if CONFIG_DUALPRED
static void filter_block2d_bil_avg
(
unsigned char *src_ptr,
......@@ -691,7 +682,6 @@ static void filter_block2d_bil_avg
/* then 1-D vertically... */
filter_block2d_bil_second_pass_avg(FData, dst_ptr, dst_pitch, Height, Width, VFilter);
}
#endif /* CONFIG_DUALPRED */
void vp8_bilinear_predict4x4_c
(
......@@ -751,7 +741,6 @@ void vp8_bilinear_predict8x8_c
}
#if CONFIG_DUALPRED
void vp8_bilinear_predict_avg8x8_c
(
unsigned char *src_ptr,
......@@ -771,7 +760,6 @@ void vp8_bilinear_predict_avg8x8_c
filter_block2d_bil_avg(src_ptr, dst_ptr, src_pixels_per_line,
dst_pitch, HFilter, VFilter, 8, 8);
}
#endif /* CONFIG_DUALPRED */
void vp8_bilinear_predict8x4_c
(
......@@ -812,7 +800,6 @@ void vp8_bilinear_predict16x16_c
filter_block2d_bil(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 16, 16);
}
#if CONFIG_DUALPRED
void vp8_bilinear_predict_avg16x16_c
(
unsigned char *src_ptr,
......@@ -832,4 +819,3 @@ void vp8_bilinear_predict_avg16x16_c
filter_block2d_bil_avg(src_ptr, dst_ptr, src_pixels_per_line,
dst_pitch, HFilter, VFilter, 16, 16);
}
#endif /* CONFIG_DUALPRED */
......@@ -84,10 +84,8 @@ void vp8_machine_specific_config(VP8_COMMON *ctx)
#endif
rtcd->recon.copy16x16 = vp8_copy_mem16x16_c;
rtcd->recon.copy8x8 = vp8_copy_mem8x8_c;
#if CONFIG_DUALPRED
rtcd->recon.avg16x16 = vp8_avg_mem16x16_c;
rtcd->recon.avg8x8 = vp8_avg_mem8x8_c;
#endif /* CONFIG_DUALPRED */
rtcd->recon.copy8x4 = vp8_copy_mem8x4_c;
rtcd->recon.recon = vp8_recon_b_c;
rtcd->recon.recon_uv = vp8_recon_uv_b_c;
......@@ -112,18 +110,14 @@ void vp8_machine_specific_config(VP8_COMMON *ctx)
rtcd->subpix.sixtap16x16 = vp8_sixtap_predict16x16_c;
rtcd->subpix.sixtap8x8 = vp8_sixtap_predict8x8_c;
#if CONFIG_DUALPRED
rtcd->subpix.sixtap_avg16x16 = vp8_sixtap_predict_avg16x16_c;
rtcd->subpix.sixtap_avg8x8 = vp8_sixtap_predict_avg8x8_c;
#endif /* CONFIG_DUALPRED */
rtcd->subpix.sixtap8x4 = vp8_sixtap_predict8x4_c;
rtcd->subpix.sixtap4x4 = vp8_sixtap_predict_c;
rtcd->subpix.bilinear16x16 = vp8_bilinear_predict16x16_c;
rtcd->subpix.bilinear8x8 = vp8_bilinear_predict8x8_c;
#if CONFIG_DUALPRED
rtcd->subpix.bilinear_avg16x16 = vp8_bilinear_predict_avg16x16_c;
rtcd->subpix.bilinear_avg8x8 = vp8_bilinear_predict_avg8x8_c;
#endif /* CONFIG_DUALPRED */
rtcd->subpix.bilinear8x4 = vp8_bilinear_predict8x4_c;
rtcd->subpix.bilinear4x4 = vp8_bilinear_predict4x4_c;
......
......@@ -42,9 +42,7 @@ void vp8_initialize_common(void);
#define MAX_PARTITIONS 9
#if CONFIG_DUALPRED
#define DUAL_PRED_CONTEXTS 2
#endif /* CONFIG_DUALPRED */
typedef struct frame_contexts
{
......@@ -84,7 +82,6 @@ typedef enum
BILINEAR = 1
} INTERPOLATIONFILTERTYPE;
#if CONFIG_DUALPRED
typedef enum
{
SINGLE_PREDICTION_ONLY = 0,
......@@ -92,7 +89,6 @@ typedef enum
HYBRID_PREDICTION = 2,
NB_PREDICTION_TYPES = 3,
} DUALPREDMODE_TYPE;
#endif /* CONFIG_DUALPRED */
typedef struct VP8_COMMON_RTCD
{
......@@ -151,9 +147,7 @@ typedef struct VP8Common
/* profile settings */
int experimental;
int mb_no_coeff_skip;
#if CONFIG_DUALPRED
DUALPREDMODE_TYPE dual_pred_mode;
#endif /* CONFIG_DUALPRED */
int no_lpf;
int use_bilinear_mc_filter;
int full_pixel;
......@@ -237,9 +231,7 @@ typedef struct VP8Common
vp8_prob ref_pred_probs[PREDICTION_PROBS];
vp8_prob mod_refprobs[MAX_REF_FRAMES][PREDICTION_PROBS];
#if CONFIG_DUALPRED
vp8_prob prob_dualpred[DUAL_PRED_CONTEXTS];
#endif /* CONFIG_DUALPRED */
FRAME_CONTEXT lfc_a; /* last alt ref entropy */
FRAME_CONTEXT lfc; /* last frame entropy */
......
......@@ -49,7 +49,6 @@ extern prototype_copy_block(vp8_recon_copy16x16);
#endif
extern prototype_copy_block(vp8_recon_copy8x8);
#if CONFIG_DUALPRED
#ifndef vp8_recon_avg16x16
#define vp8_recon_avg16x16 vp8_avg_mem16x16_c
#endif
......@@ -59,7 +58,6 @@ extern prototype_copy_block(vp8_recon_avg16x16);
#define vp8_recon_avg8x8 vp8_avg_mem8x8_c
#endif
extern prototype_copy_block(vp8_recon_avg8x8);
#endif /* CONFIG_DUALPRED */
#ifndef vp8_recon_copy8x4
#define vp8_recon_copy8x4 vp8_copy_mem8x4_c
......@@ -160,10 +158,8 @@ typedef struct vp8_recon_rtcd_vtable
{
vp8_copy_block_fn_t copy16x16;
vp8_copy_block_fn_t copy8x8;
#if CONFIG_DUALPRED
vp8_copy_block_fn_t avg16x16;
vp8_copy_block_fn_t avg8x8;
#endif /* CONFIG_DUALPRED */
vp8_copy_block_fn_t copy8x4;
vp8_recon_fn_t recon;
vp8_recon_fn_t recon_uv;
......
......@@ -62,7 +62,6 @@ void vp8_copy_mem16x16_c(
}
#if CONFIG_DUALPRED
void vp8_avg_mem16x16_c(
unsigned char *src,
int src_stride,
......@@ -84,7 +83,6 @@ void vp8_avg_mem16x16_c(
dst += dst_stride;
}
}
#endif /* CONFIG_DUALPRED */
void vp8_copy_mem8x8_c(
unsigned char *src,
......@@ -116,7 +114,6 @@ void vp8_copy_mem8x8_c(
}
#if CONFIG_DUALPRED
void vp8_avg_mem8x8_c(
unsigned char *src,
int src_stride,
......@@ -138,7 +135,6 @@ void vp8_avg_mem8x8_c(
dst += dst_stride;
}
}
#endif /* CONFIG_DUALPRED */
void vp8_copy_mem8x4_c(
unsigned char *src,
......@@ -478,7 +474,6 @@ void vp8_build_inter16x16_predictors_mb(MACROBLOCKD *x,
}
#if CONFIG_DUALPRED
/*
* This function should be called after an initial call to
* vp8_build_inter16x16_predictors_mb() or _mby()/_mbuv().
......@@ -544,7 +539,6 @@ void vp8_build_2nd_inter16x16_predictors_mb(MACROBLOCKD *x,
RECON_INVOKE(&x->rtcd->recon, avg8x8)(vptr, pre_stride, dst_v, dst_uvstride);
}
}
#endif /* CONFIG_DUALPRED */
static void build_inter4x4_predictors_mb(MACROBLOCKD *x)
{
......@@ -665,7 +659,7 @@ void vp8_build_inter_predictors_mb(MACROBLOCKD *x)
{
vp8_build_inter16x16_predictors_mb(x, x->predictor, &x->predictor[256],
&x->predictor[320], 16, 8);
#if CONFIG_DUALPRED
if (x->mode_info_context->mbmi.second_ref_frame)
{
/* 256 = offset of U plane in Y+U+V buffer;
......@@ -675,7 +669,6 @@ void vp8_build_inter_predictors_mb(MACROBLOCKD *x)
&x->predictor[256],
&x->predictor[320], 16, 8);
}
#endif /* CONFIG_DUALPRED */
}
else
{
......
......@@ -34,7 +34,6 @@ extern prototype_subpixel_predict(vp8_subpix_sixtap16x16);
#endif
extern prototype_subpixel_predict(vp8_subpix_sixtap8x8);
#if CONFIG_DUALPRED
#ifndef vp8_subpix_sixtap_avg16x16
#define vp8_subpix_sixtap_avg16x16 vp8_sixtap_predict_avg16x16_c
#endif
......@@ -44,8 +43,6 @@ extern prototype_subpixel_predict(vp8_subpix_sixtap_avg16x16);
#define vp8_subpix_sixtap_avg8x8 vp8_sixtap_predict_avg8x8_c
#endif
extern prototype_subpixel_predict(vp8_subpix_sixtap_avg8x8);
#endif /* CONFIG_DUALPRED */
#ifndef vp8_subpix_sixtap8x4
#define vp8_subpix_sixtap8x4 vp8_sixtap_predict8x4_c
#endif
......@@ -66,7 +63,6 @@ extern prototype_subpixel_predict(vp8_subpix_bilinear16x16);
#endif
extern prototype_subpixel_predict(vp8_subpix_bilinear8x8);
#if CONFIG_DUALPRED
#ifndef vp8_subpix_bilinear_avg16x16
#define vp8_subpix_bilinear_avg16x16 vp8_bilinear_predict_avg16x16_c
#endif
......@@ -76,7 +72,6 @@ extern prototype_subpixel_predict(vp8_subpix_bilinear_avg16x16);
#define vp8_subpix_bilinear_avg8x8 vp8_bilinear_predict_avg8x8_c
#endif
extern prototype_subpixel_predict(vp8_subpix_bilinear_avg8x8);
#endif /* CONFIG_DUALPRED */
#ifndef vp8_subpix_bilinear8x4
#define vp8_subpix_bilinear8x4 vp8_bilinear_predict8x4_c
......@@ -93,18 +88,14 @@ typedef struct
{
vp8_subpix_fn_t sixtap16x16;
vp8_subpix_fn_t sixtap8x8;
#if CONFIG_DUALPRED
vp8_subpix_fn_t sixtap_avg16x16;
vp8_subpix_fn_t sixtap_avg8x8;
#endif /* CONFIG_DUALPRED */
vp8_subpix_fn_t sixtap8x4;
vp8_subpix_fn_t sixtap4x4;
vp8_subpix_fn_t bilinear16x16;
vp8_subpix_fn_t bilinear8x8;
#if CONFIG_DUALPRED
vp8_subpix_fn_t bilinear_avg16x16;
vp8_subpix_fn_t bilinear_avg8x8;
#endif /* CONFIG_DUALPRED */
vp8_subpix_fn_t bilinear8x4;
vp8_subpix_fn_t bilinear4x4;
} vp8_subpix_rtcd_vtable_t;
......
......@@ -416,7 +416,6 @@ static void mb_mode_mv_init(VP8D_COMP *pbi)
// frame prediction fails.
compute_mod_refprobs( cm );
#if CONFIG_DUALPRED
pbi->common.dual_pred_mode = vp8_read(bc, 128);
if (cm->dual_pred_mode)
cm->dual_pred_mode += vp8_read(bc, 128);
......@@ -426,7 +425,6 @@ static void mb_mode_mv_init(VP8D_COMP *pbi)
for ( i = 0; i < DUAL_PRED_CONTEXTS; i++ )
cm->prob_dualpred[i] = (vp8_prob)vp8_read_literal(bc, 8);
}
#endif /* CONFIG_DUALPRED */
if (vp8_read_bit(bc))
{
......@@ -541,9 +539,7 @@ static void read_mb_modes_mv(VP8D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi,
mb_to_top_edge -= LEFT_TOP_MARGIN;
mb_to_bottom_edge += RIGHT_BOTTOM_MARGIN;
mbmi->need_to_clamp_mvs = 0;
#if CONFIG_DUALPRED
mbmi->second_ref_frame = 0;
#endif /* CONFIG_DUALPRED */
/* Distance of Mb to the various image edges.
* These specified to 8th pel as they are always compared to MV values that are in 1/8th pel units
*/
......@@ -732,7 +728,6 @@ static void read_mb_modes_mv(VP8D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi,
propagate_mv: /* same MV throughout */
#if CONFIG_DUALPRED
if ( cm->dual_pred_mode == DUAL_PREDICTION_ONLY ||
(cm->dual_pred_mode == HYBRID_PREDICTION &&
vp8_read(bc, get_pred_prob( cm, xd, PRED_DUAL ))) )
......@@ -776,7 +771,6 @@ static void read_mb_modes_mv(VP8D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi,
break;
}
}
#endif /* CONFIG_DUALPRED */
#if CONFIG_ERROR_CONCEALMENT
if(pbi->ec_enabled)
......
......@@ -134,14 +134,13 @@ static void skip_recon_mb(VP8D_COMP *pbi, MACROBLOCKD *xd)
vp8_build_inter16x16_predictors_mb(xd, xd->dst.y_buffer,
xd->dst.u_buffer, xd->dst.v_buffer,
xd->dst.y_stride, xd->dst.uv_stride);
#if CONFIG_DUALPRED
if (xd->mode_info_context->mbmi.second_ref_frame)
{
vp8_build_2nd_inter16x16_predictors_mb(xd, xd->dst.y_buffer,
xd->dst.u_buffer, xd->dst.v_buffer,
xd->dst.y_stride, xd->dst.uv_stride);
}
#endif /* CONFIG_DUALPRED */
}
#ifdef DEC_DEBUG
if (dec_debug) {
......@@ -571,7 +570,6 @@ decode_sb_row(VP8D_COMP *pbi, VP8_COMMON *pc, int mbrow, MACROBLOCKD *xd)
xd->pre.u_buffer = pc->yv12_fb[ref_fb_idx].u_buffer +recon_uvoffset;
xd->pre.v_buffer = pc->yv12_fb[ref_fb_idx].v_buffer +recon_uvoffset;
#if CONFIG_DUALPRED
if (xd->mode_info_context->mbmi.second_ref_frame)
{
int second_ref_fb_idx;
......@@ -592,7 +590,6 @@ decode_sb_row(VP8D_COMP *pbi, VP8_COMMON *pc, int mbrow, MACROBLOCKD *xd)
xd->second_pre.v_buffer =
pc->yv12_fb[second_ref_fb_idx].v_buffer + recon_uvoffset;
}
#endif /* CONFIG_DUALPRED */
if (xd->mode_info_context->mbmi.ref_frame != INTRA_FRAME)
{
......@@ -697,7 +694,6 @@ decode_mb_row(VP8D_COMP *pbi, VP8_COMMON *pc, int mb_row, MACROBLOCKD *xd)
xd->pre.u_buffer = pc->yv12_fb[ref_fb_idx].u_buffer + recon_uvoffset;
xd->pre.v_buffer = pc->yv12_fb[ref_fb_idx].v_buffer + recon_uvoffset;
#if CONFIG_DUALPRED
if (xd->mode_info_context->mbmi.second_ref_frame)
{
int second_ref_fb_idx;
......@@ -714,7 +710,6 @@ decode_mb_row(VP8D_COMP *pbi, VP8_COMMON *pc, int mb_row, MACROBLOCKD *xd)
xd->second_pre.u_buffer = pc->yv12_fb[second_ref_fb_idx].u_buffer + recon_uvoffset;
xd->second_pre.v_buffer = pc->yv12_fb[second_ref_fb_idx].v_buffer + recon_uvoffset;
}
#endif /* CONFIG_DUALPRED */
if (xd->mode_info_context->mbmi.ref_frame != INTRA_FRAME)
{
......@@ -964,10 +959,8 @@ static void init_frame(VP8D_COMP *pbi)
xd->subpixel_predict8x4 = SUBPIX_INVOKE(RTCD_VTABLE(subpix), sixtap8x4);
xd->subpixel_predict8x8 = SUBPIX_INVOKE(RTCD_VTABLE(subpix), sixtap8x8);
xd->subpixel_predict16x16 = SUBPIX_INVOKE(RTCD_VTABLE(subpix), sixtap16x16);
#if CONFIG_DUALPRED
xd->subpixel_predict_avg8x8 = SUBPIX_INVOKE(RTCD_VTABLE(subpix), sixtap_avg8x8);
xd->subpixel_predict_avg16x16 = SUBPIX_INVOKE(RTCD_VTABLE(subpix), sixtap_avg16x16);
#endif /* CONFIG_DUALPRED */
}
else
{
......@@ -975,10 +968,8 @@ static void init_frame(VP8D_COMP *pbi)
xd->subpixel_predict8x4 = SUBPIX_INVOKE(RTCD_VTABLE(subpix), bilinear8x4);
xd->subpixel_predict8x8 = SUBPIX_INVOKE(RTCD_VTABLE(subpix), bilinear8x8);
xd->subpixel_predict16x16 = SUBPIX_INVOKE(RTCD_VTABLE(subpix), bilinear16x16);
#if CONFIG_DUALPRED
xd->subpixel_predict_avg8x8 = SUBPIX_INVOKE(RTCD_VTABLE(subpix), bilinear_avg8x8);
xd->subpixel_predict_avg16x16 = SUBPIX_INVOKE(RTCD_VTABLE(subpix), bilinear_avg16x16);
#endif /* CONFIG_DUALPRED */
}
if (pbi->decoded_key_frame && pbi->ec_enabled && !pbi->ec_active)
......
......@@ -49,10 +49,8 @@ static void setup_decoding_thread_data(VP8D_COMP *pbi, MACROBLOCKD *xd, MB_ROW_D
mbd->subpixel_predict8x4 = xd->subpixel_predict8x4;
mbd->subpixel_predict8x8 = xd->subpixel_predict8x8;
mbd->subpixel_predict16x16 = xd->subpixel_predict16x16;
#if CONFIG_DUALPRED
mbd->subpixel_predict_avg8x8 = xd->subpixel_predict_avg8x8;
mbd->subpixel_predict_avg16x16 = xd->subpixel_predict_avg16x16;
#endif /* CONFIG_DUALPRED */
mbd->mode_info_context = pc->mi + pc->mode_info_stride * (i + 1);
mbd->mode_info_stride = pc->mode_info_stride;
......
......@@ -967,9 +967,7 @@ static void pack_inter_mode_mvs(VP8_COMP *const cpi)
const MV_CONTEXT *mvc = pc->fc.mvc;
MACROBLOCKD *xd = &cpi->mb.e_mbd;
#if CONFIG_DUALPRED
int i;
#endif
int pred_context;
MODE_INFO *m = pc->mi;
......@@ -1022,7 +1020,6 @@ static void pack_inter_mode_mvs(VP8_COMP *const cpi)
vp8_write_literal(w, pc->prob_last_coded, 8);
vp8_write_literal(w, pc->prob_gf_coded, 8);
#if CONFIG_DUALPRED
if (cpi->common.dual_pred_mode == HYBRID_PREDICTION)
{
vp8_write(w, 1, 128);
......@@ -1052,7 +1049,6 @@ static void pack_inter_mode_mvs(VP8_COMP *const cpi)
vp8_write(w, 1, 128);
vp8_write(w, 0, 128);
}
#endif /* CONFIG_DUALPRED */
update_mbintra_mode_probs(cpi);
......@@ -1220,7 +1216,7 @@ static void pack_inter_mode_mvs(VP8_COMP *const cpi)
#endif
write_mv(w, &mi->mv.as_mv, &best_mv, mvc);
#if CONFIG_DUALPRED
if (cpi->common.dual_pred_mode == HYBRID_PREDICTION)
{
vp8_write(w,
......@@ -1239,7 +1235,6 @@ static void pack_inter_mode_mvs(VP8_COMP *const cpi)
cpi->common.ref_frame_sign_bias);
write_mv(w, &mi->second_mv.as_mv, &best_mv, mvc);
}
#endif /* CONFIG_DUALPRED */
break;
case SPLITMV:
......@@ -1288,14 +1283,12 @@ static void pack_inter_mode_mvs(VP8_COMP *const cpi)
}
break;
default:
#if CONFIG_DUALPRED
if (cpi->common.dual_pred_mode == HYBRID_PREDICTION)
{
vp8_write(w,
mi->second_ref_frame != INTRA_FRAME,
get_pred_prob( pc, xd, PRED_DUAL ) );
}
#endif /* CONFIG_DUALPRED */
break;
}
}
......@@ -1326,9 +1319,7 @@ static void pack_inter_mode_mvs(VP8_COMP *const cpi)
const MV_CONTEXT *mvc = pc->fc.mvc;
MACROBLOCKD *xd = &cpi->mb.e_mbd;
#if CONFIG_DUALPRED
int i;
#endif
int pred_context;
......@@ -1378,7 +1369,6 @@ static void pack_inter_mode_mvs(VP8_COMP *const cpi)
vp8_write_literal(w, pc->prob_last_coded, 8);
vp8_write_literal(w, pc->prob_gf_coded, 8);
#if CONFIG_DUALPRED
if (cpi->common.dual_pred_mode == HYBRID_PREDICTION)
{
vp8_write(w, 1, 128);
......@@ -1408,7 +1398,6 @@ static void pack_inter_mode_mvs(VP8_COMP *const cpi)
vp8_write(w, 1, 128);
vp8_write(w, 0, 128);
}
#endif /* CONFIG_DUALPRED */
update_mbintra_mode_probs(cpi);
......@@ -1556,7 +1545,7 @@ static void pack_inter_mode_mvs(VP8_COMP *const cpi)
#endif
write_mv(w, &mi->mv.as_mv, &best_mv, mvc);
#if CONFIG_DUALPRED
if (cpi->common.dual_pred_mode == HYBRID_PREDICTION)
{
vp8_write(w, mi->second_ref_frame != INTRA_FRAME,
......@@ -1574,7 +1563,6 @@ static void pack_inter_mode_mvs(VP8_COMP *const cpi)
cpi->common.ref_frame_sign_bias);
write_mv(w, &mi->second_mv.as_mv, &best_mv, mvc);
}
#endif /* CONFIG_DUALPRED */
break;
case SPLITMV:
{
......@@ -1622,13 +1610,11 @@ static void pack_inter_mode_mvs(VP8_COMP *const cpi)
}
break;
default:
#if CONFIG_DUALPRED
if (cpi->common.dual_pred_mode == HYBRID_PREDICTION)
{
vp8_write(w, mi->second_ref_frame != INTRA_FRAME,
get_pred_prob( pc, xd, PRED_DUAL ) );
}
#endif /* CONFIG_DUALPRED */
break;
}
}
......
......@@ -1214,12 +1214,10 @@ static void encode_frame_internal(VP8_COMP *cpi)
&cpi->common.rtcd.subpix, sixtap8x8);
xd->subpixel_predict16x16 = SUBPIX_INVOKE(
&cpi->common.rtcd.subpix, sixtap16x16);
#if CONFIG_DUALPRED
xd->subpixel_predict_avg8x8 = SUBPIX_INVOKE(
&cpi->common.rtcd.subpix, sixtap_avg8x8);
xd->subpixel_predict_avg16x16 = SUBPIX_INVOKE(
&cpi->common.rtcd.subpix, sixtap_avg16x16);
#endif /* CONFIG_DUALPRED */
}
else
{
......@@ -1231,12 +1229,10 @@ static void encode_frame_internal(VP8_COMP *cpi)
&cpi->common.rtcd.subpix, bilinear8x8);
xd->subpixel_predict16x16 = SUBPIX_INVOKE(
&cpi->common.rtcd.subpix, bilinear16x16);
#if CONFIG_DUALPRED
xd->subpixel_predict_avg8x8 = SUBPIX_INVOKE(
&cpi->common.rtcd.subpix, bilinear_avg8x8);
xd->subpixel_predict_avg16x16 = SUBPIX_INVOKE(
&cpi->common.rtcd.subpix, bilinear_avg16x16);
#endif /* CONFIG_DUALPRED */
}
// Reset frame count of inter 0,0 motion vector usage.
......@@ -1276,11 +1272,10 @@ static void encode_frame_internal(VP8_COMP *cpi)
// re-initencode frame context.
init_encode_frame_mb_context(cpi);
#if CONFIG_DUALPRED