summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vp9/common/vp9_alloccommon.c1
-rw-r--r--vp9/common/vp9_entropymv.c4
-rw-r--r--vp9/common/vp9_entropymv.h8
-rw-r--r--vp9/common/vp9_onyxc_int.h1
-rw-r--r--vp9/common/vp9_reconintra4x4.c211
-rw-r--r--vp9/decoder/vp9_decodemv.c38
-rw-r--r--vp9/decoder/vp9_decodframe.c3
-rw-r--r--vp9/encoder/vp9_bitstream.c31
-rw-r--r--vp9/encoder/vp9_encodeframe.c54
-rw-r--r--vp9/encoder/vp9_encodemv.c8
-rw-r--r--vp9/encoder/vp9_onyx_if.c62
-rw-r--r--vp9/encoder/vp9_rdopt.c153
-rw-r--r--vp9/encoder/vp9_tokenize.c12
13 files changed, 234 insertions, 352 deletions
diff --git a/vp9/common/vp9_alloccommon.c b/vp9/common/vp9_alloccommon.c
index 48f9be1b3..0628a88b7 100644
--- a/vp9/common/vp9_alloccommon.c
+++ b/vp9/common/vp9_alloccommon.c
@@ -179,7 +179,6 @@ void vp9_create_common(VP9_COMMON *oci) {
vp9_default_bmode_probs(oci->fc.bmode_prob);
oci->txfm_mode = ONLY_4X4;
- oci->mb_no_coeff_skip = 1;
oci->comp_pred_mode = HYBRID_PREDICTION;
oci->no_lpf = 0;
oci->filter_type = NORMAL_LOOPFILTER;
diff --git a/vp9/common/vp9_entropymv.c b/vp9/common/vp9_entropymv.c
index fa8eacc10..fe3667725 100644
--- a/vp9/common/vp9_entropymv.c
+++ b/vp9/common/vp9_entropymv.c
@@ -212,10 +212,10 @@ void vp9_increment_nmv(const MV *mv, const MV *ref, nmv_context_counts *mvctx,
const MV_JOINT_TYPE type = vp9_get_mv_joint(*mv);
mvctx->joints[type]++;
usehp = usehp && vp9_use_nmv_hp(ref);
- if (type == MV_JOINT_HZVNZ || type == MV_JOINT_HNZVNZ)
+ if (mv_joint_vertical(type))
increment_nmv_component_count(mv->row, &mvctx->comps[0], 1, usehp);
- if (type == MV_JOINT_HNZVZ || type == MV_JOINT_HNZVNZ)
+ if (mv_joint_horizontal(type))
increment_nmv_component_count(mv->col, &mvctx->comps[1], 1, usehp);
}
diff --git a/vp9/common/vp9_entropymv.h b/vp9/common/vp9_entropymv.h
index 3521a520c..715b5bb2b 100644
--- a/vp9/common/vp9_entropymv.h
+++ b/vp9/common/vp9_entropymv.h
@@ -45,6 +45,14 @@ typedef enum {
MV_JOINT_HNZVNZ = 3, /* Both components nonzero */
} MV_JOINT_TYPE;
+static INLINE int mv_joint_vertical(MV_JOINT_TYPE type) {
+ return type == MV_JOINT_HZVNZ || type == MV_JOINT_HNZVNZ;
+}
+
+static INLINE int mv_joint_horizontal(MV_JOINT_TYPE type) {
+ return type == MV_JOINT_HNZVZ || type == MV_JOINT_HNZVNZ;
+}
+
extern const vp9_tree_index vp9_mv_joint_tree[2 * MV_JOINTS - 2];
extern struct vp9_token vp9_mv_joint_encodings[MV_JOINTS];
diff --git a/vp9/common/vp9_onyxc_int.h b/vp9/common/vp9_onyxc_int.h
index c7ca67efe..71a430341 100644
--- a/vp9/common/vp9_onyxc_int.h
+++ b/vp9/common/vp9_onyxc_int.h
@@ -220,7 +220,6 @@ typedef struct VP9Common {
/* profile settings */
int experimental;
- int mb_no_coeff_skip;
TXFM_MODE txfm_mode;
COMPPREDMODE_TYPE comp_pred_mode;
int no_lpf;
diff --git a/vp9/common/vp9_reconintra4x4.c b/vp9/common/vp9_reconintra4x4.c
index f1ecd33dc..a0700010b 100644
--- a/vp9/common/vp9_reconintra4x4.c
+++ b/vp9/common/vp9_reconintra4x4.c
@@ -195,12 +195,7 @@ void vp9_intra4x4_predict(MACROBLOCKD *xd,
if (have_top) {
uint8_t *above_ptr = *(x->base_dst) + x->dst - x->dst_stride;
-
- if (have_left) {
- top_left = above_ptr[-1];
- } else {
- top_left = 127;
- }
+ top_left = have_left ? above_ptr[-1] : 127;
above[0] = above_ptr[0];
above[1] = above_ptr[1];
@@ -270,13 +265,11 @@ void vp9_intra4x4_predict(MACROBLOCKD *xd,
expected_dc += left[i];
}
- expected_dc = (expected_dc + 4) >> 3;
+ expected_dc = ROUND_POWER_OF_TWO(expected_dc, 3);
for (r = 0; r < 4; r++) {
- for (c = 0; c < 4; c++) {
+ for (c = 0; c < 4; c++)
predictor[c] = expected_dc;
- }
-
predictor += ps;
}
}
@@ -284,210 +277,160 @@ void vp9_intra4x4_predict(MACROBLOCKD *xd,
case B_TM_PRED: {
/* prediction similar to true_motion prediction */
for (r = 0; r < 4; r++) {
- for (c = 0; c < 4; c++) {
+ for (c = 0; c < 4; c++)
predictor[c] = clip_pixel(above[c] - top_left + left[r]);
- }
-
predictor += ps;
}
}
break;
-
- case B_V_PRED: {
- unsigned int ap[4];
-
- ap[0] = above[0];
- ap[1] = above[1];
- ap[2] = above[2];
- ap[3] = above[3];
-
+ case B_V_PRED:
for (r = 0; r < 4; r++) {
- for (c = 0; c < 4; c++) {
- predictor[c] = ap[c];
- }
-
+ for (c = 0; c < 4; c++)
+ predictor[c] = above[c];
predictor += ps;
}
- }
- break;
-
- case B_H_PRED: {
- unsigned int lp[4];
-
- lp[0] = left[0];
- lp[1] = left[1];
- lp[2] = left[2];
- lp[3] = left[3];
-
+ break;
+ case B_H_PRED:
for (r = 0; r < 4; r++) {
- for (c = 0; c < 4; c++) {
- predictor[c] = lp[r];
- }
-
+ for (c = 0; c < 4; c++)
+ predictor[c] = left[r];
predictor += ps;
}
- }
- break;
+ break;
case B_D45_PRED: {
- uint8_t *ptr = above;
+ uint8_t *p = above;
- predictor[0 * ps + 0] = (ptr[0] + ptr[1] * 2 + ptr[2] + 2) >> 2;
+ predictor[0 * ps + 0] = ROUND_POWER_OF_TWO(p[0] + p[1] * 2 + p[2], 2);
predictor[0 * ps + 1] =
- predictor[1 * ps + 0] = (ptr[1] + ptr[2] * 2 + ptr[3] + 2) >> 2;
+ predictor[1 * ps + 0] = ROUND_POWER_OF_TWO(p[1] + p[2] * 2 + p[3], 2);
predictor[0 * ps + 2] =
predictor[1 * ps + 1] =
- predictor[2 * ps + 0] = (ptr[2] + ptr[3] * 2 + ptr[4] + 2) >> 2;
+ predictor[2 * ps + 0] = ROUND_POWER_OF_TWO(p[2] + p[3] * 2 + p[4], 2);
predictor[0 * ps + 3] =
predictor[1 * ps + 2] =
predictor[2 * ps + 1] =
- predictor[3 * ps + 0] = (ptr[3] + ptr[4] * 2 + ptr[5] + 2) >> 2;
+ predictor[3 * ps + 0] =
+ ROUND_POWER_OF_TWO(p[3] + p[4] * 2 + p[5], 2);
predictor[1 * ps + 3] =
predictor[2 * ps + 2] =
- predictor[3 * ps + 1] = (ptr[4] + ptr[5] * 2 + ptr[6] + 2) >> 2;
+ predictor[3 * ps + 1] = ROUND_POWER_OF_TWO(p[4] + p[5] * 2 + p[6], 2);
predictor[2 * ps + 3] =
- predictor[3 * ps + 2] = (ptr[5] + ptr[6] * 2 + ptr[7] + 2) >> 2;
- predictor[3 * ps + 3] = (ptr[6] + ptr[7] * 2 + ptr[7] + 2) >> 2;
+ predictor[3 * ps + 2] = ROUND_POWER_OF_TWO(p[5] + p[6] * 2 + p[7], 2);
+ predictor[3 * ps + 3] = ROUND_POWER_OF_TWO(p[6] + p[7] * 2 + p[7], 2);
}
break;
case B_D135_PRED: {
- uint8_t pp[9];
-
- pp[0] = left[3];
- pp[1] = left[2];
- pp[2] = left[1];
- pp[3] = left[0];
- pp[4] = top_left;
- pp[5] = above[0];
- pp[6] = above[1];
- pp[7] = above[2];
- pp[8] = above[3];
+ uint8_t p[9] = { left[3], left[2], left[1], left[0],
+ top_left,
+ above[0], above[1], above[2], above[3] };
- predictor[3 * ps + 0] = (pp[0] + pp[1] * 2 + pp[2] + 2) >> 2;
+ predictor[3 * ps + 0] = ROUND_POWER_OF_TWO(p[0] + p[1] * 2 + p[2], 2);
predictor[3 * ps + 1] =
- predictor[2 * ps + 0] = (pp[1] + pp[2] * 2 + pp[3] + 2) >> 2;
+ predictor[2 * ps + 0] = ROUND_POWER_OF_TWO(p[1] + p[2] * 2 + p[3], 2);
predictor[3 * ps + 2] =
predictor[2 * ps + 1] =
- predictor[1 * ps + 0] = (pp[2] + pp[3] * 2 + pp[4] + 2) >> 2;
+ predictor[1 * ps + 0] = ROUND_POWER_OF_TWO(p[2] + p[3] * 2 + p[4], 2);
predictor[3 * ps + 3] =
predictor[2 * ps + 2] =
predictor[1 * ps + 1] =
- predictor[0 * ps + 0] = (pp[3] + pp[4] * 2 + pp[5] + 2) >> 2;
+ predictor[0 * ps + 0] =
+ ROUND_POWER_OF_TWO(p[3] + p[4] * 2 + p[5], 2);
predictor[2 * ps + 3] =
predictor[1 * ps + 2] =
- predictor[0 * ps + 1] = (pp[4] + pp[5] * 2 + pp[6] + 2) >> 2;
+ predictor[0 * ps + 1] = ROUND_POWER_OF_TWO(p[4] + p[5] * 2 + p[6], 2);
predictor[1 * ps + 3] =
- predictor[0 * ps + 2] = (pp[5] + pp[6] * 2 + pp[7] + 2) >> 2;
- predictor[0 * ps + 3] = (pp[6] + pp[7] * 2 + pp[8] + 2) >> 2;
+ predictor[0 * ps + 2] = ROUND_POWER_OF_TWO(p[5] + p[6] * 2 + p[7], 2);
+ predictor[0 * ps + 3] = ROUND_POWER_OF_TWO(p[6] + p[7] * 2 + p[8], 2);
}
break;
case B_D117_PRED: {
- uint8_t pp[9];
+ uint8_t p[9] = { left[3], left[2], left[1], left[0],
+ top_left,
+ above[0], above[1], above[2], above[3] };
- pp[0] = left[3];
- pp[1] = left[2];
- pp[2] = left[1];
- pp[3] = left[0];
- pp[4] = top_left;
- pp[5] = above[0];
- pp[6] = above[1];
- pp[7] = above[2];
- pp[8] = above[3];
-
- predictor[3 * ps + 0] = (pp[1] + pp[2] * 2 + pp[3] + 2) >> 2;
- predictor[2 * ps + 0] = (pp[2] + pp[3] * 2 + pp[4] + 2) >> 2;
+ predictor[3 * ps + 0] = ROUND_POWER_OF_TWO(p[1] + p[2] * 2 + p[3], 2);
+ predictor[2 * ps + 0] = ROUND_POWER_OF_TWO(p[2] + p[3] * 2 + p[4], 2);
predictor[3 * ps + 1] =
- predictor[1 * ps + 0] = (pp[3] + pp[4] * 2 + pp[5] + 2) >> 2;
+ predictor[1 * ps + 0] = ROUND_POWER_OF_TWO(p[3] + p[4] * 2 + p[5], 2);
predictor[2 * ps + 1] =
- predictor[0 * ps + 0] = (pp[4] + pp[5] + 1) >> 1;
+ predictor[0 * ps + 0] = ROUND_POWER_OF_TWO(p[4] + p[5], 1);
predictor[3 * ps + 2] =
- predictor[1 * ps + 1] = (pp[4] + pp[5] * 2 + pp[6] + 2) >> 2;
+ predictor[1 * ps + 1] = ROUND_POWER_OF_TWO(p[4] + p[5] * 2 + p[6], 2);
predictor[2 * ps + 2] =
- predictor[0 * ps + 1] = (pp[5] + pp[6] + 1) >> 1;
+ predictor[0 * ps + 1] = ROUND_POWER_OF_TWO(p[5] + p[6], 1);
predictor[3 * ps + 3] =
- predictor[1 * ps + 2] = (pp[5] + pp[6] * 2 + pp[7] + 2) >> 2;
+ predictor[1 * ps + 2] = ROUND_POWER_OF_TWO(p[5] + p[6] * 2 + p[7], 2);
predictor[2 * ps + 3] =
- predictor[0 * ps + 2] = (pp[6] + pp[7] + 1) >> 1;
- predictor[1 * ps + 3] = (pp[6] + pp[7] * 2 + pp[8] + 2) >> 2;
- predictor[0 * ps + 3] = (pp[7] + pp[8] + 1) >> 1;
+ predictor[0 * ps + 2] = ROUND_POWER_OF_TWO(p[6] + p[7], 1);
+ predictor[1 * ps + 3] = ROUND_POWER_OF_TWO(p[6] + p[7] * 2 + p[8], 2);
+ predictor[0 * ps + 3] = ROUND_POWER_OF_TWO(p[7] + p[8], 1);
}
break;
case B_D63_PRED: {
- uint8_t *pp = above;
+ uint8_t *p = above;
- predictor[0 * ps + 0] = (pp[0] + pp[1] + 1) >> 1;
- predictor[1 * ps + 0] = (pp[0] + pp[1] * 2 + pp[2] + 2) >> 2;
+ predictor[0 * ps + 0] = ROUND_POWER_OF_TWO(p[0] + p[1], 1);
+ predictor[1 * ps + 0] = ROUND_POWER_OF_TWO(p[0] + p[1] * 2 + p[2], 2);
predictor[2 * ps + 0] =
- predictor[0 * ps + 1] = (pp[1] + pp[2] + 1) >> 1;
+ predictor[0 * ps + 1] = ROUND_POWER_OF_TWO(p[1] + p[2], 1);
predictor[1 * ps + 1] =
- predictor[3 * ps + 0] = (pp[1] + pp[2] * 2 + pp[3] + 2) >> 2;
+ predictor[3 * ps + 0] = ROUND_POWER_OF_TWO(p[1] + p[2] * 2 + p[3], 2);
predictor[2 * ps + 1] =
- predictor[0 * ps + 2] = (pp[2] + pp[3] + 1) >> 1;
+ predictor[0 * ps + 2] = ROUND_POWER_OF_TWO(p[2] + p[3], 1);
predictor[3 * ps + 1] =
- predictor[1 * ps + 2] = (pp[2] + pp[3] * 2 + pp[4] + 2) >> 2;
+ predictor[1 * ps + 2] = ROUND_POWER_OF_TWO(p[2] + p[3] * 2 + p[4], 2);
predictor[0 * ps + 3] =
- predictor[2 * ps + 2] = (pp[3] + pp[4] + 1) >> 1;
+ predictor[2 * ps + 2] = ROUND_POWER_OF_TWO(p[3] + p[4], 1);
predictor[1 * ps + 3] =
- predictor[3 * ps + 2] = (pp[3] + pp[4] * 2 + pp[5] + 2) >> 2;
- predictor[2 * ps + 3] = (pp[4] + pp[5] * 2 + pp[6] + 2) >> 2;
- predictor[3 * ps + 3] = (pp[5] + pp[6] * 2 + pp[7] + 2) >> 2;
+ predictor[3 * ps + 2] = ROUND_POWER_OF_TWO(p[3] + p[4] * 2 + p[5], 2);
+ predictor[2 * ps + 3] = ROUND_POWER_OF_TWO(p[4] + p[5] * 2 + p[6], 2);
+ predictor[3 * ps + 3] = ROUND_POWER_OF_TWO(p[5] + p[6] * 2 + p[7], 2);
}
break;
-
case B_D153_PRED: {
- uint8_t pp[9];
-
- pp[0] = left[3];
- pp[1] = left[2];
- pp[2] = left[1];
- pp[3] = left[0];
- pp[4] = top_left;
- pp[5] = above[0];
- pp[6] = above[1];
- pp[7] = above[2];
- pp[8] = above[3];
+ uint8_t p[9] = { left[3], left[2], left[1], left[0],
+ top_left,
+ above[0], above[1], above[2], above[3] };
-
- predictor[3 * ps + 0] = (pp[0] + pp[1] + 1) >> 1;
- predictor[3 * ps + 1] = (pp[0] + pp[1] * 2 + pp[2] + 2) >> 2;
+ predictor[3 * ps + 0] = ROUND_POWER_OF_TWO(p[0] + p[1], 1);
+ predictor[3 * ps + 1] = ROUND_POWER_OF_TWO(p[0] + p[1] * 2 + p[2], 2);
predictor[2 * ps + 0] =
- predictor[3 * ps + 2] = (pp[1] + pp[2] + 1) >> 1;
+ predictor[3 * ps + 2] = ROUND_POWER_OF_TWO(p[1] + p[2], 1);
predictor[2 * ps + 1] =
- predictor[3 * ps + 3] = (pp[1] + pp[2] * 2 + pp[3] + 2) >> 2;
+ predictor[3 * ps + 3] = ROUND_POWER_OF_TWO(p[1] + p[2] * 2 + p[3], 2);
predictor[2 * ps + 2] =
- predictor[1 * ps + 0] = (pp[2] + pp[3] + 1) >> 1;
+ predictor[1 * ps + 0] = ROUND_POWER_OF_TWO(p[2] + p[3], 1);
predictor[2 * ps + 3] =
- predictor[1 * ps + 1] = (pp[2] + pp[3] * 2 + pp[4] + 2) >> 2;
+ predictor[1 * ps + 1] = ROUND_POWER_OF_TWO(p[2] + p[3] * 2 + p[4], 2);
predictor[1 * ps + 2] =
- predictor[0 * ps + 0] = (pp[3] + pp[4] + 1) >> 1;
+ predictor[0 * ps + 0] = ROUND_POWER_OF_TWO(p[3] + p[4], 1);
predictor[1 * ps + 3] =
- predictor[0 * ps + 1] = (pp[3] + pp[4] * 2 + pp[5] + 2) >> 2;
- predictor[0 * ps + 2] = (pp[4] + pp[5] * 2 + pp[6] + 2) >> 2;
- predictor[0 * ps + 3] = (pp[5] + pp[6] * 2 + pp[7] + 2) >> 2;
+ predictor[0 * ps + 1] = ROUND_POWER_OF_TWO(p[3] + p[4] * 2 + p[5], 2);
+ predictor[0 * ps + 2] = ROUND_POWER_OF_TWO(p[4] + p[5] * 2 + p[6], 2);
+ predictor[0 * ps + 3] = ROUND_POWER_OF_TWO(p[5] + p[6] * 2 + p[7], 2);
}
break;
-
-
case B_D27_PRED: {
- uint8_t *pp = left;
- predictor[0 * ps + 0] = (pp[0] + pp[1] + 1) >> 1;
- predictor[0 * ps + 1] = (pp[0] + pp[1] * 2 + pp[2] + 2) >> 2;
+ uint8_t *p = left;
+ predictor[0 * ps + 0] = ROUND_POWER_OF_TWO(p[0] + p[1], 1);
+ predictor[0 * ps + 1] = ROUND_POWER_OF_TWO(p[0] + p[1] * 2 + p[2], 2);
predictor[0 * ps + 2] =
- predictor[1 * ps + 0] = (pp[1] + pp[2] + 1) >> 1;
+ predictor[1 * ps + 0] = ROUND_POWER_OF_TWO(p[1] + p[2], 1);
predictor[0 * ps + 3] =
- predictor[1 * ps + 1] = (pp[1] + pp[2] * 2 + pp[3] + 2) >> 2;
+ predictor[1 * ps + 1] = ROUND_POWER_OF_TWO(p[1] + p[2] * 2 + p[3], 2);
predictor[1 * ps + 2] =
- predictor[2 * ps + 0] = (pp[2] + pp[3] + 1) >> 1;
+ predictor[2 * ps + 0] = ROUND_POWER_OF_TWO(p[2] + p[3], 1);
predictor[1 * ps + 3] =
- predictor[2 * ps + 1] = (pp[2] + pp[3] * 2 + pp[3] + 2) >> 2;
+ predictor[2 * ps + 1] = ROUND_POWER_OF_TWO(p[2] + p[3] * 2 + p[3], 2);
predictor[2 * ps + 2] =
predictor[2 * ps + 3] =
predictor[3 * ps + 0] =
predictor[3 * ps + 1] =
predictor[3 * ps + 2] =
- predictor[3 * ps + 3] = pp[3];
+ predictor[3 * ps + 3] = p[3];
}
break;
diff --git a/vp9/decoder/vp9_decodemv.c b/vp9/decoder/vp9_decodemv.c
index 7ea02086e..109eff85f 100644
--- a/vp9/decoder/vp9_decodemv.c
+++ b/vp9/decoder/vp9_decodemv.c
@@ -153,15 +153,11 @@ static void kfread_modes(VP9D_COMP *pbi,
}
}
- m->mbmi.mb_skip_coeff = 0;
- if (pbi->common.mb_no_coeff_skip &&
- (!vp9_segfeature_active(&pbi->mb, m->mbmi.segment_id, SEG_LVL_SKIP))) {
+ m->mbmi.mb_skip_coeff = vp9_segfeature_active(&pbi->mb, m->mbmi.segment_id,
+ SEG_LVL_SKIP);
+ if (!m->mbmi.mb_skip_coeff)
m->mbmi.mb_skip_coeff = vp9_read(bc, vp9_get_pred_prob(cm, &pbi->mb,
PRED_MBSKIP));
- } else {
- m->mbmi.mb_skip_coeff = vp9_segfeature_active(&pbi->mb, m->mbmi.segment_id,
- SEG_LVL_SKIP);
- }
y_mode = m->mbmi.sb_type ?
read_kf_sb_ymode(bc,
@@ -273,10 +269,10 @@ static void read_nmv(vp9_reader *r, MV *mv, const MV *ref,
const MV_JOINT_TYPE j = treed_read(r, vp9_mv_joint_tree, mvctx->joints);
mv->row = mv->col = 0;
- if (j == MV_JOINT_HZVNZ || j == MV_JOINT_HNZVNZ)
+ if (mv_joint_vertical(j))
mv->row = read_nmv_component(r, ref->row, &mvctx->comps[0]);
- if (j == MV_JOINT_HNZVZ || j == MV_JOINT_HNZVNZ)
+ if (mv_joint_horizontal(j))
mv->col = read_nmv_component(r, ref->col, &mvctx->comps[1]);
}
@@ -284,11 +280,11 @@ static void read_nmv_fp(vp9_reader *r, MV *mv, const MV *ref,
const nmv_context *mvctx, int usehp) {
const MV_JOINT_TYPE j = vp9_get_mv_joint(*mv);
usehp = usehp && vp9_use_nmv_hp(ref);
- if (j == MV_JOINT_HZVNZ || j == MV_JOINT_HNZVNZ)
+ if (mv_joint_vertical(j))
mv->row = read_nmv_component_fp(r, mv->row, ref->row, &mvctx->comps[0],
usehp);
- if (j == MV_JOINT_HNZVZ || j == MV_JOINT_HNZVNZ)
+ if (mv_joint_horizontal(j))
mv->col = read_nmv_component_fp(r, mv->col, ref->col, &mvctx->comps[1],
usehp);
}
@@ -693,15 +689,10 @@ static void read_mb_modes_mv(VP9D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi,
// Read the macroblock segment id.
read_mb_segment_id(pbi, mb_row, mb_col, bc);
- if (pbi->common.mb_no_coeff_skip &&
- (!vp9_segfeature_active(xd, mbmi->segment_id, SEG_LVL_SKIP))) {
- // Read the macroblock coeff skip flag if this feature is in use,
- // else default to 0
+ mbmi->mb_skip_coeff = vp9_segfeature_active(xd, mbmi->segment_id,
+ SEG_LVL_SKIP);
+ if (!mbmi->mb_skip_coeff)
mbmi->mb_skip_coeff = vp9_read(bc, vp9_get_pred_prob(cm, xd, PRED_MBSKIP));
- } else {
- mbmi->mb_skip_coeff = vp9_segfeature_active(xd, mbmi->segment_id,
- SEG_LVL_SKIP);
- }
// Read the reference frame
mbmi->ref_frame = read_ref_frame(pbi, bc, mbmi->segment_id);
@@ -1119,13 +1110,12 @@ static void read_mb_modes_mv(VP9D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi,
void vp9_decode_mode_mvs_init(VP9D_COMP* const pbi, vp9_reader *r) {
VP9_COMMON *cm = &pbi->common;
+ int k;
+ // TODO(jkoleszar): does this clear more than MBSKIP_CONTEXTS? Maybe remove.
vpx_memset(cm->mbskip_pred_probs, 0, sizeof(cm->mbskip_pred_probs));
- if (pbi->common.mb_no_coeff_skip) {
- int k;
- for (k = 0; k < MBSKIP_CONTEXTS; ++k)
- cm->mbskip_pred_probs[k] = vp9_read_prob(r);
- }
+ for (k = 0; k < MBSKIP_CONTEXTS; ++k)
+ cm->mbskip_pred_probs[k] = vp9_read_prob(r);
mb_mode_mv_init(pbi, r);
}
diff --git a/vp9/decoder/vp9_decodframe.c b/vp9/decoder/vp9_decodframe.c
index f5e5b0ae4..6e32198d8 100644
--- a/vp9/decoder/vp9_decodframe.c
+++ b/vp9/decoder/vp9_decodframe.c
@@ -1638,8 +1638,7 @@ int vp9_decode_frame(VP9D_COMP *pbi, const uint8_t **p_data_end) {
vpx_memset(xd->plane[1].qcoeff, 0, sizeof(xd->plane[1].qcoeff));
vpx_memset(xd->plane[2].qcoeff, 0, sizeof(xd->plane[2].qcoeff));
- // Read the mb_no_coeff_skip flag
- pc->mb_no_coeff_skip = vp9_read_bit(&header_bc);
+ vp9_read_bit(&header_bc); // unused
vp9_decode_mode_mvs_init(pbi, &header_bc);
diff --git a/vp9/encoder/vp9_bitstream.c b/vp9/encoder/vp9_bitstream.c
index c2ae957c8..406bfd219 100644
--- a/vp9/encoder/vp9_bitstream.c
+++ b/vp9/encoder/vp9_bitstream.c
@@ -801,9 +801,7 @@ static void pack_inter_mode_mvs(VP9_COMP *cpi, MODE_INFO *m,
}
}
- if (!pc->mb_no_coeff_skip) {
- skip_coeff = 0;
- } else if (vp9_segfeature_active(xd, segment_id, SEG_LVL_SKIP)) {
+ if (vp9_segfeature_active(xd, segment_id, SEG_LVL_SKIP)) {
skip_coeff = 1;
} else {
skip_coeff = m->mbmi.mb_skip_coeff;
@@ -996,8 +994,8 @@ static void pack_inter_mode_mvs(VP9_COMP *cpi, MODE_INFO *m,
(rf != INTRA_FRAME && !(mode == SPLITMV &&
mi->partitioning == PARTITIONING_4X4))) &&
pc->txfm_mode == TX_MODE_SELECT &&
- !((pc->mb_no_coeff_skip && skip_coeff) ||
- (vp9_segfeature_active(xd, segment_id, SEG_LVL_SKIP)))) {
+ !(skip_coeff || vp9_segfeature_active(xd, segment_id,
+ SEG_LVL_SKIP))) {
TX_SIZE sz = mi->txfm_size;
// FIXME(rbultje) code ternary symbol once all experiments are merged
vp9_write(bc, sz != TX_4X4, pc->prob_tx[0]);
@@ -1024,9 +1022,7 @@ static void write_mb_modes_kf(const VP9_COMP *cpi,
write_mb_segid(bc, &m->mbmi, xd);
}
- if (!c->mb_no_coeff_skip) {
- skip_coeff = 0;
- } else if (vp9_segfeature_active(xd, segment_id, SEG_LVL_SKIP)) {
+ if (vp9_segfeature_active(xd, segment_id, SEG_LVL_SKIP)) {
skip_coeff = 1;
} else {
skip_coeff = m->mbmi.mb_skip_coeff;
@@ -1074,8 +1070,7 @@ static void write_mb_modes_kf(const VP9_COMP *cpi,
write_uv_mode(bc, m->mbmi.uv_mode, c->kf_uv_mode_prob[ym]);
if (ym <= I8X8_PRED && c->txfm_mode == TX_MODE_SELECT &&
- !((c->mb_no_coeff_skip && skip_coeff) ||
- (vp9_segfeature_active(xd, segment_id, SEG_LVL_SKIP)))) {
+ !(skip_coeff || vp9_segfeature_active(xd, segment_id, SEG_LVL_SKIP))) {
TX_SIZE sz = m->mbmi.txfm_size;
// FIXME(rbultje) code ternary symbol once all experiments are merged
vp9_write(bc, sz != TX_4X4, c->prob_tx[0]);
@@ -2600,8 +2595,7 @@ void vp9_pack_bitstream(VP9_COMP *cpi, unsigned char *dest,
}
}
- // signal here is multi token partition is enabled
- // vp9_write_literal(&header_bc, pc->multi_token_partition, 2);
+ // TODO(jkoleszar): remove these unused bits
vp9_write_literal(&header_bc, 0, 2);
// Frame Q baseline quantizer index
@@ -2828,15 +2822,12 @@ void vp9_pack_bitstream(VP9_COMP *cpi, unsigned char *dest,
active_section = 2;
#endif
- // Write out the mb_no_coeff_skip flag
- vp9_write_bit(&header_bc, pc->mb_no_coeff_skip);
- if (pc->mb_no_coeff_skip) {
- int k;
+ // TODO(jkoleszar): remove this unused bit
+ vp9_write_bit(&header_bc, 1);
- vp9_update_skip_probs(cpi);
- for (k = 0; k < MBSKIP_CONTEXTS; ++k) {
- vp9_write_literal(&header_bc, pc->mbskip_pred_probs[k], 8);
- }
+ vp9_update_skip_probs(cpi);
+ for (i = 0; i < MBSKIP_CONTEXTS; ++i) {
+ vp9_write_literal(&header_bc, pc->mbskip_pred_probs[i], 8);
}
if (pc->frame_type == KEY_FRAME) {
diff --git a/vp9/encoder/vp9_encodeframe.c b/vp9/encoder/vp9_encodeframe.c
index 139672553..b76baf588 100644
--- a/vp9/encoder/vp9_encodeframe.c
+++ b/vp9/encoder/vp9_encodeframe.c
@@ -1348,7 +1348,6 @@ static void reset_skip_txfm_size_sb(VP9_COMP *cpi, MODE_INFO *mi,
MB_MODE_INFO *const mbmi = &mi->mbmi;
if (mbmi->txfm_size > txfm_max) {
- VP9_COMMON *const cm = &cpi->common;
MACROBLOCK *const x = &cpi->mb;
MACROBLOCKD *const xd = &x->e_mbd;
const int segment_id = mbmi->segment_id;
@@ -1357,8 +1356,8 @@ static void reset_skip_txfm_size_sb(VP9_COMP *cpi, MODE_INFO *mi,
const int xmbs = MIN(bw, mb_cols_left);
xd->mode_info_context = mi;
- assert((vp9_segfeature_active(xd, segment_id, SEG_LVL_SKIP)) ||
- (cm->mb_no_coeff_skip && get_skip_flag(mi, mis, ymbs, xmbs)));
+ assert(vp9_segfeature_active(xd, segment_id, SEG_LVL_SKIP) ||
+ get_skip_flag(mi, mis, ymbs, xmbs));
set_txfm_flag(mi, mis, ymbs, xmbs, txfm_max);
}
}
@@ -1961,10 +1960,6 @@ static void encode_macroblock(VP9_COMP *cpi, TOKENEXTRA **t,
if (!x->skip) {
vp9_encode_inter16x16(cm, x, mb_row, mb_col);
- // Clear mb_skip_coeff if mb_no_coeff_skip is not set
- if (!cpi->common.mb_no_coeff_skip)
- mbmi->mb_skip_coeff = 0;
-
} else {
vp9_build_inter16x16_predictors_mb(xd,
xd->dst.y_buffer,
@@ -2046,27 +2041,20 @@ static void encode_macroblock(VP9_COMP *cpi, TOKENEXTRA **t,
} else {
// FIXME(rbultje): not tile-aware (mi - 1)
- int mb_skip_context = cpi->common.mb_no_coeff_skip ?
- (mi - 1)->mbmi.mb_skip_coeff + (mi - mis)->mbmi.mb_skip_coeff : 0;
-
- if (cm->mb_no_coeff_skip) {
- mbmi->mb_skip_coeff = 1;
- if (output_enabled)
- cpi->skip_true_count[mb_skip_context]++;
- vp9_reset_sb_tokens_context(xd, BLOCK_SIZE_MB16X16);
- } else {
- vp9_stuff_mb(cpi, xd, t, !output_enabled);
- mbmi->mb_skip_coeff = 0;
- if (output_enabled)
- cpi->skip_false_count[mb_skip_context]++;
- }
+ int mb_skip_context =
+ (mi - 1)->mbmi.mb_skip_coeff + (mi - mis)->mbmi.mb_skip_coeff;
+
+ mbmi->mb_skip_coeff = 1;
+ if (output_enabled)
+ cpi->skip_true_count[mb_skip_context]++;
+ vp9_reset_sb_tokens_context(xd, BLOCK_SIZE_MB16X16);
}
if (output_enabled) {
int segment_id = mbmi->segment_id;
if (cpi->common.txfm_mode == TX_MODE_SELECT &&
- !((cpi->common.mb_no_coeff_skip && mbmi->mb_skip_coeff) ||
- (vp9_segfeature_active(&x->e_mbd, segment_id, SEG_LVL_SKIP)))) {
+ !(mbmi->mb_skip_coeff ||
+ vp9_segfeature_active(&x->e_mbd, segment_id, SEG_LVL_SKIP))) {
assert(mbmi->txfm_size <= TX_16X16);
if (mbmi->mode != I4X4_PRED && mbmi->mode != I8X8_PRED &&
mbmi->mode != SPLITMV) {
@@ -2279,19 +2267,13 @@ static void encode_superblock(VP9_COMP *cpi, TOKENEXTRA **t,
vp9_tokenize_sb(cpi, &x->e_mbd, t, !output_enabled, bsize);
} else {
// FIXME(rbultje): not tile-aware (mi - 1)
- int mb_skip_context = cpi->common.mb_no_coeff_skip ?
- (mi - 1)->mbmi.mb_skip_coeff + (mi - mis)->mbmi.mb_skip_coeff : 0;
+ int mb_skip_context =
+ (mi - 1)->mbmi.mb_skip_coeff + (mi - mis)->mbmi.mb_skip_coeff;
xd->mode_info_context->mbmi.mb_skip_coeff = 1;
- if (cm->mb_no_coeff_skip) {
- if (output_enabled)
- cpi->skip_true_count[mb_skip_context]++;
- vp9_reset_sb_tokens_context(xd, bsize);
- } else {
- vp9_stuff_sb(cpi, xd, t, !output_enabled, bsize);
- if (output_enabled)
- cpi->skip_false_count[mb_skip_context]++;
- }
+ if (output_enabled)
+ cpi->skip_true_count[mb_skip_context]++;
+ vp9_reset_sb_tokens_context(xd, bsize);
}
// copy skip flag on all mb_mode_info contexts in this SB
@@ -2304,8 +2286,8 @@ static void encode_superblock(VP9_COMP *cpi, TOKENEXTRA **t,
if (output_enabled) {
if (cm->txfm_mode == TX_MODE_SELECT &&
- !((cm->mb_no_coeff_skip && mi->mbmi.mb_skip_coeff) ||
- (vp9_segfeature_active(xd, segment_id, SEG_LVL_SKIP)))) {
+ !(mi->mbmi.mb_skip_coeff ||
+ vp9_segfeature_active(xd, segment_id, SEG_LVL_SKIP))) {
if (bsize >= BLOCK_SIZE_SB32X32) {
cpi->txfm_count_32x32p[mi->mbmi.txfm_size]++;
} else {
diff --git a/vp9/encoder/vp9_encodemv.c b/vp9/encoder/vp9_encodemv.c
index 918a0bd7d..7c0b3ddeb 100644
--- a/vp9/encoder/vp9_encodemv.c
+++ b/vp9/encoder/vp9_encodemv.c
@@ -561,10 +561,10 @@ void vp9_encode_nmv(vp9_writer* const bc, const MV* const mv,
MV_JOINT_TYPE j = vp9_get_mv_joint(*mv);
write_token(bc, vp9_mv_joint_tree, mvctx->joints,
vp9_mv_joint_encodings + j);
- if (j == MV_JOINT_HZVNZ || j == MV_JOINT_HNZVNZ) {
+ if (mv_joint_vertical(j)) {
encode_nmv_component(bc, mv->row, ref->col, &mvctx->comps[0]);
}
- if (j == MV_JOINT_HNZVZ || j == MV_JOINT_HNZVNZ) {
+ if (mv_joint_horizontal(j)) {
encode_nmv_component(bc, mv->col, ref->col, &mvctx->comps[1]);
}
}
@@ -574,10 +574,10 @@ void vp9_encode_nmv_fp(vp9_writer* const bc, const MV* const mv,
int usehp) {
MV_JOINT_TYPE j = vp9_get_mv_joint(*mv);
usehp = usehp && vp9_use_nmv_hp(ref);
- if (j == MV_JOINT_HZVNZ || j == MV_JOINT_HNZVNZ) {
+ if (mv_joint_vertical(j)) {
encode_nmv_component_fp(bc, mv->row, ref->row, &mvctx->comps[0], usehp);
}
- if (j == MV_JOINT_HNZVZ || j == MV_JOINT_HNZVNZ) {
+ if (mv_joint_horizontal(j)) {
encode_nmv_component_fp(bc, mv->col, ref->col, &mvctx->comps[1], usehp);
}
}
diff --git a/vp9/encoder/vp9_onyx_if.c b/vp9/encoder/vp9_onyx_if.c
index 48a08dff4..7499cbeb6 100644
--- a/vp9/encoder/vp9_onyx_if.c
+++ b/vp9/encoder/vp9_onyx_if.c
@@ -2989,43 +2989,41 @@ static void encode_frame_to_data_rate(VP9_COMP *cpi,
vp9_set_quantizer(cpi, q);
if (loop_count == 0) {
+ int k;
// setup skip prob for costing in mode/mv decision
- if (cpi->common.mb_no_coeff_skip) {
- int k;
- for (k = 0; k < MBSKIP_CONTEXTS; k++)
- cm->mbskip_pred_probs[k] = cpi->base_skip_false_prob[q][k];
-
- if (cm->frame_type != KEY_FRAME) {
- if (cpi->refresh_alt_ref_frame) {
- for (k = 0; k < MBSKIP_CONTEXTS; k++) {
- if (cpi->last_skip_false_probs[2][k] != 0)
- cm->mbskip_pred_probs[k] = cpi->last_skip_false_probs[2][k];
- }
- } else if (cpi->refresh_golden_frame) {
- for (k = 0; k < MBSKIP_CONTEXTS; k++) {
- if (cpi->last_skip_false_probs[1][k] != 0)
- cm->mbskip_pred_probs[k] = cpi->last_skip_false_probs[1][k];
- }
- } else {
- int k;
- for (k = 0; k < MBSKIP_CONTEXTS; k++) {
- if (cpi->last_skip_false_probs[0][k] != 0)
- cm->mbskip_pred_probs[k] = cpi->last_skip_false_probs[0][k];
- }
+ for (k = 0; k < MBSKIP_CONTEXTS; k++)
+ cm->mbskip_pred_probs[k] = cpi->base_skip_false_prob[q][k];
+
+ if (cm->frame_type != KEY_FRAME) {
+ if (cpi->refresh_alt_ref_frame) {
+ for (k = 0; k < MBSKIP_CONTEXTS; k++) {
+ if (cpi->last_skip_false_probs[2][k] != 0)
+ cm->mbskip_pred_probs[k] = cpi->last_skip_false_probs[2][k];
+ }
+ } else if (cpi->refresh_golden_frame) {
+ for (k = 0; k < MBSKIP_CONTEXTS; k++) {
+ if (cpi->last_skip_false_probs[1][k] != 0)
+ cm->mbskip_pred_probs[k] = cpi->last_skip_false_probs[1][k];
+ }
+ } else {
+ int k;
+ for (k = 0; k < MBSKIP_CONTEXTS; k++) {
+ if (cpi->last_skip_false_probs[0][k] != 0)
+ cm->mbskip_pred_probs[k] = cpi->last_skip_false_probs[0][k];
}
+ }
- // as this is for cost estimate, let's make sure it does not
- // get extreme either way
- {
- int k;
- for (k = 0; k < MBSKIP_CONTEXTS; ++k) {
- cm->mbskip_pred_probs[k] = clamp(cm->mbskip_pred_probs[k],
- 5, 250);
+ // as this is for cost estimate, let's make sure it does not
+ // get extreme either way
+ {
+ int k;
+ for (k = 0; k < MBSKIP_CONTEXTS; ++k) {
+ cm->mbskip_pred_probs[k] = clamp(cm->mbskip_pred_probs[k],
+ 5, 250);
- if (cpi->is_src_frame_alt_ref)
- cm->mbskip_pred_probs[k] = 1;
- }
+ if (cpi->is_src_frame_alt_ref)
+ cm->mbskip_pred_probs[k] = 1;
}
}
}
diff --git a/vp9/encoder/vp9_rdopt.c b/vp9/encoder/vp9_rdopt.c
index 711461aed..4b59fa17e 100644
--- a/vp9/encoder/vp9_rdopt.c
+++ b/vp9/encoder/vp9_rdopt.c
@@ -566,10 +566,10 @@ static void choose_txfm_size_from_rd(VP9_COMP *cpi, MACROBLOCK *x,
VP9_COMMON *const cm = &cpi->common;
MACROBLOCKD *const xd = &x->e_mbd;
MB_MODE_INFO *const mbmi = &xd->mode_info_context->mbmi;
- vp9_prob skip_prob = cm->mb_no_coeff_skip ?
- vp9_get_pred_prob(cm, xd, PRED_MBSKIP) : 128;
+ vp9_prob skip_prob = vp9_get_pred_prob(cm, xd, PRED_MBSKIP);
int64_t rd[TX_SIZE_MAX_SB][2];
int n, m;
+ int s0, s1;
for (n = TX_4X4; n <= max_txfm_size; n++) {
r[n][1] = r[n][0];
@@ -581,25 +581,16 @@ static void choose_txfm_size_from_rd(VP9_COMP *cpi, MACROBLOCK *x,
}
}
- if (cm->mb_no_coeff_skip) {
- int s0, s1;
+ assert(skip_prob > 0);
+ s0 = vp9_cost_bit(skip_prob, 0);
+ s1 = vp9_cost_bit(skip_prob, 1);
- assert(skip_prob > 0);
- s0 = vp9_cost_bit(skip_prob, 0);
- s1 = vp9_cost_bit(skip_prob, 1);
-
- for (n = TX_4X4; n <= max_txfm_size; n++) {
- if (s[n]) {
- rd[n][0] = rd[n][1] = RDCOST(x->rdmult, x->rddiv, s1, d[n]);
- } else {
- rd[n][0] = RDCOST(x->rdmult, x->rddiv, r[n][0] + s0, d[n]);
- rd[n][1] = RDCOST(x->rdmult, x->rddiv, r[n][1] + s0, d[n]);
- }
- }
- } else {
- for (n = TX_4X4; n <= max_txfm_size; n++) {
- rd[n][0] = RDCOST(x->rdmult, x->rddiv, r[n][0], d[n]);
- rd[n][1] = RDCOST(x->rdmult, x->rddiv, r[n][1], d[n]);
+ for (n = TX_4X4; n <= max_txfm_size; n++) {
+ if (s[n]) {
+ rd[n][0] = rd[n][1] = RDCOST(x->rdmult, x->rddiv, s1, d[n]);
+ } else {
+ rd[n][0] = RDCOST(x->rdmult, x->rddiv, r[n][0] + s0, d[n]);
+ rd[n][1] = RDCOST(x->rdmult, x->rddiv, r[n][1] + s0, d[n]);
}
}
@@ -3862,44 +3853,41 @@ static void rd_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
// because there are no non zero coefficients and make any
// necessary adjustment for rate. Ignore if skip is coded at
// segment level as the cost wont have been added in.
- if (cpi->common.mb_no_coeff_skip) {
- int mb_skip_allowed;
+ int mb_skip_allowed;
- // Is Mb level skip allowed (i.e. not coded at segment level).
- mb_skip_allowed = !vp9_segfeature_active(xd, segment_id, SEG_LVL_SKIP);
+ // Is Mb level skip allowed (i.e. not coded at segment level).
+ mb_skip_allowed = !vp9_segfeature_active(xd, segment_id, SEG_LVL_SKIP);
- if (skippable) {
- mbmi->mb_skip_coeff = 1;
+ if (skippable) {
+ mbmi->mb_skip_coeff = 1;
- // Back out the coefficient coding costs
- rate2 -= (rate_y + rate_uv);
- // for best_yrd calculation
- rate_uv = 0;
+ // Back out the coefficient coding costs
+ rate2 -= (rate_y + rate_uv);
+ // for best_yrd calculation
+ rate_uv = 0;
- if (mb_skip_allowed) {
- int prob_skip_cost;
+ if (mb_skip_allowed) {
+ int prob_skip_cost;
- // Cost the skip mb case
- vp9_prob skip_prob =
- vp9_get_pred_prob(cm, &x->e_mbd, PRED_MBSKIP);
+ // Cost the skip mb case
+ vp9_prob skip_prob =
+ vp9_get_pred_prob(cm, &x->e_mbd, PRED_MBSKIP);
- if (skip_prob) {
- prob_skip_cost = vp9_cost_bit(skip_prob, 1);
- rate2 += prob_skip_cost;
- other_cost += prob_skip_cost;
- }
- }
- }
- // Add in the cost of the no skip flag.
- else {
- mbmi->mb_skip_coeff = 0;
- if (mb_skip_allowed) {
- int prob_skip_cost = vp9_cost_bit(
- vp9_get_pred_prob(cm, &x->e_mbd, PRED_MBSKIP), 0);
+ if (skip_prob) {
+ prob_skip_cost = vp9_cost_bit(skip_prob, 1);
rate2 += prob_skip_cost;
other_cost += prob_skip_cost;
}
}
+ } else {
+ // Add in the cost of the no skip flag.
+ mbmi->mb_skip_coeff = 0;
+ if (mb_skip_allowed) {
+ int prob_skip_cost = vp9_cost_bit(
+ vp9_get_pred_prob(cm, &x->e_mbd, PRED_MBSKIP), 0);
+ rate2 += prob_skip_cost;
+ other_cost += prob_skip_cost;
+ }
}
// Calculate the final RD estimate for this mode.
@@ -4089,8 +4077,7 @@ static void rd_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
mbmi->ref_frame = ALTREF_FRAME;
mbmi->mv[0].as_int = 0;
mbmi->uv_mode = DC_PRED;
- mbmi->mb_skip_coeff =
- (cpi->common.mb_no_coeff_skip) ? 1 : 0;
+ mbmi->mb_skip_coeff = 1;
mbmi->partitioning = 0;
set_scale_factors(xd, mbmi->ref_frame, mbmi->second_ref_frame,
scale_factor);
@@ -4176,16 +4163,15 @@ void vp9_rd_pick_intra_mode_sb(VP9_COMP *cpi, MACROBLOCK *x,
rd_pick_intra_sbuv_mode(cpi, x, &rate_uv, &rate_uv_tokenonly,
&dist_uv, &uv_skip, bsize);
- if (cpi->common.mb_no_coeff_skip && y_skip && uv_skip) {
+ if (y_skip && uv_skip) {
*returnrate = rate_y + rate_uv - rate_y_tokenonly - rate_uv_tokenonly +
vp9_cost_bit(vp9_get_pred_prob(cm, xd, PRED_MBSKIP), 1);
*returndist = dist_y + (dist_uv >> 2);
memset(ctx->txfm_rd_diff, 0,
sizeof(x->sb32_context[xd->sb_index].txfm_rd_diff));
} else {
- *returnrate = rate_y + rate_uv;
- if (cpi->common.mb_no_coeff_skip)
- *returnrate += vp9_cost_bit(vp9_get_pred_prob(cm, xd, PRED_MBSKIP), 0);
+ *returnrate = rate_y + rate_uv +
+ vp9_cost_bit(vp9_get_pred_prob(cm, xd, PRED_MBSKIP), 0);
*returndist = dist_y + (dist_uv >> 2);
for (i = 0; i < NB_TXFM_MODES; i++) {
ctx->txfm_rd_diff[i] = err - txfm_cache[i];
@@ -4237,7 +4223,7 @@ void vp9_rd_pick_intra_mode(VP9_COMP *cpi, MACROBLOCK *x,
BLOCK_SIZE_MB16X16, txfm_cache[1]);
mode16x16 = mbmi->mode;
txfm_size_16x16 = mbmi->txfm_size;
- if (cpi->common.mb_no_coeff_skip && y_intra16x16_skippable &&
+ if (y_intra16x16_skippable &&
((cm->txfm_mode == ONLY_4X4 && uv_intra_skippable[TX_4X4]) ||
(cm->txfm_mode != ONLY_4X4 && uv_intra_skippable[TX_8X8]))) {
error16x16 -= RDCOST(x->rdmult, x->rddiv, rate16x16_tokenonly, 0);
@@ -4269,7 +4255,7 @@ void vp9_rd_pick_intra_mode(VP9_COMP *cpi, MACROBLOCK *x,
}
mbmi->mb_skip_coeff = 0;
- if (cpi->common.mb_no_coeff_skip && y_intra16x16_skippable &&
+ if (y_intra16x16_skippable &&
((cm->txfm_mode == ONLY_4X4 && uv_intra_skippable[TX_4X4]) ||
(cm->txfm_mode != ONLY_4X4 && uv_intra_skippable[TX_8X8]))) {
mbmi->mb_skip_coeff = 1;
@@ -4295,8 +4281,7 @@ void vp9_rd_pick_intra_mode(VP9_COMP *cpi, MACROBLOCK *x,
dist = dist16x16 + (distuv[mbmi->txfm_size != TX_4X4] >> 2);
mbmi->uv_mode = modeuv[mbmi->txfm_size != TX_4X4];
}
- if (cpi->common.mb_no_coeff_skip)
- rate += vp9_cost_bit(vp9_get_pred_prob(cm, xd, PRED_MBSKIP), 0);
+ rate += vp9_cost_bit(vp9_get_pred_prob(cm, xd, PRED_MBSKIP), 0);
} else {
if (error4x4 < error8x8) {
rate = rateuv[TX_4X4] + rate4x4;
@@ -4311,8 +4296,7 @@ void vp9_rd_pick_intra_mode(VP9_COMP *cpi, MACROBLOCK *x,
rate = rate8x8 + rateuv[TX_4X4];
dist = dist8x8 + (distuv[TX_4X4] >> 2);
}
- if (cpi->common.mb_no_coeff_skip)
- rate += vp9_cost_bit(vp9_get_pred_prob(cm, xd, PRED_MBSKIP), 0);
+ rate += vp9_cost_bit(vp9_get_pred_prob(cm, xd, PRED_MBSKIP), 0);
}
for (i = 0; i < NB_TXFM_MODES; i++) {
@@ -4595,39 +4579,36 @@ int64_t vp9_rd_pick_inter_mode_sb(VP9_COMP *cpi, MACROBLOCK *x,
// because there are no non zero coefficients and make any
// necessary adjustment for rate. Ignore if skip is coded at
// segment level as the cost wont have been added in.
- if (cpi->common.mb_no_coeff_skip) {
- int mb_skip_allowed;
+ int mb_skip_allowed;
- // Is Mb level skip allowed (i.e. not coded at segment level).
- mb_skip_allowed = !vp9_segfeature_active(xd, segment_id, SEG_LVL_SKIP);
+ // Is Mb level skip allowed (i.e. not coded at segment level).
+ mb_skip_allowed = !vp9_segfeature_active(xd, segment_id, SEG_LVL_SKIP);
- if (skippable) {
- // Back out the coefficient coding costs
- rate2 -= (rate_y + rate_uv);
- // for best_yrd calculation
- rate_uv = 0;
+ if (skippable) {
+ // Back out the coefficient coding costs
+ rate2 -= (rate_y + rate_uv);
+ // for best_yrd calculation
+ rate_uv = 0;
- if (mb_skip_allowed) {
- int prob_skip_cost;
+ if (mb_skip_allowed) {
+ int prob_skip_cost;
- // Cost the skip mb case
- vp9_prob skip_prob =
- vp9_get_pred_prob(cm, xd, PRED_MBSKIP);
+ // Cost the skip mb case
+ vp9_prob skip_prob =
+ vp9_get_pred_prob(cm, xd, PRED_MBSKIP);
- if (skip_prob) {
- prob_skip_cost = vp9_cost_bit(skip_prob, 1);
- rate2 += prob_skip_cost;
- other_cost += prob_skip_cost;
- }
+ if (skip_prob) {
+ prob_skip_cost = vp9_cost_bit(skip_prob, 1);
+ rate2 += prob_skip_cost;
+ other_cost += prob_skip_cost;
}
}
+ } else if (mb_skip_allowed) {
// Add in the cost of the no skip flag.
- else if (mb_skip_allowed) {
- int prob_skip_cost = vp9_cost_bit(vp9_get_pred_prob(cm, xd,
- PRED_MBSKIP), 0);
- rate2 += prob_skip_cost;
- other_cost += prob_skip_cost;
- }
+ int prob_skip_cost = vp9_cost_bit(vp9_get_pred_prob(cm, xd,
+ PRED_MBSKIP), 0);
+ rate2 += prob_skip_cost;
+ other_cost += prob_skip_cost;
}
// Calculate the final RD estimate for this mode.
@@ -4795,7 +4776,7 @@ int64_t vp9_rd_pick_inter_mode_sb(VP9_COMP *cpi, MACROBLOCK *x,
mbmi->second_ref_frame = INTRA_FRAME;
mbmi->mv[0].as_int = 0;
mbmi->uv_mode = DC_PRED;
- mbmi->mb_skip_coeff = (cpi->common.mb_no_coeff_skip) ? 1 : 0;
+ mbmi->mb_skip_coeff = 1;
mbmi->partitioning = 0;
mbmi->txfm_size = cm->txfm_mode == TX_MODE_SELECT ?
TX_32X32 : cm->txfm_mode;
diff --git a/vp9/encoder/vp9_tokenize.c b/vp9/encoder/vp9_tokenize.c
index 3095d6421..6c44ebdd9 100644
--- a/vp9/encoder/vp9_tokenize.c
+++ b/vp9/encoder/vp9_tokenize.c
@@ -397,11 +397,7 @@ void vp9_tokenize_sb(VP9_COMP *cpi,
if (mbmi->mb_skip_coeff) {
if (!dry_run)
cpi->skip_true_count[mb_skip_context] += skip_inc;
- if (!cm->mb_no_coeff_skip) {
- vp9_stuff_sb(cpi, xd, t, dry_run, bsize);
- } else {
- vp9_reset_sb_tokens_context(xd, bsize);
- }
+ vp9_reset_sb_tokens_context(xd, bsize);
if (dry_run)
*t = t_backup;
return;
@@ -490,11 +486,7 @@ void vp9_tokenize_mb(VP9_COMP *cpi,
if (xd->mode_info_context->mbmi.mb_skip_coeff) {
if (!dry_run)
cpi->skip_true_count[mb_skip_context] += skip_inc;
- if (!cpi->common.mb_no_coeff_skip) {
- vp9_stuff_mb(cpi, xd, t, dry_run);
- } else {
- vp9_reset_sb_tokens_context(xd, BLOCK_SIZE_MB16X16);
- }
+ vp9_reset_sb_tokens_context(xd, BLOCK_SIZE_MB16X16);
if (dry_run)
*t = t_backup;