summaryrefslogtreecommitdiff
path: root/vp9/decoder/vp9_decodframe.c
diff options
context:
space:
mode:
Diffstat (limited to 'vp9/decoder/vp9_decodframe.c')
-rw-r--r--vp9/decoder/vp9_decodframe.c49
1 files changed, 11 insertions, 38 deletions
diff --git a/vp9/decoder/vp9_decodframe.c b/vp9/decoder/vp9_decodframe.c
index 2f702433b..43e5d02e7 100644
--- a/vp9/decoder/vp9_decodframe.c
+++ b/vp9/decoder/vp9_decodframe.c
@@ -187,25 +187,12 @@ static void skip_recon_sb(VP9D_COMP *pbi, MACROBLOCKD *xd,
int mb_row, int mb_col,
BLOCK_SIZE_TYPE bsize) {
MODE_INFO *m = xd->mode_info_context;
- BLOCK_SIZE_TYPE sb_type = m->mbmi.sb_type;
- if (xd->mode_info_context->mbmi.ref_frame == INTRA_FRAME) {
+ if (m->mbmi.ref_frame == INTRA_FRAME) {
vp9_build_intra_predictors_sbuv_s(xd, bsize);
vp9_build_intra_predictors_sby_s(xd, bsize);
} else {
- if (sb_type == BLOCK_SIZE_SB64X64) {
- vp9_build_inter64x64_predictors_sb(xd, mb_row, mb_col);
- } else if (sb_type == BLOCK_SIZE_SB32X32) {
- vp9_build_inter32x32_predictors_sb(xd, mb_row, mb_col);
- } else {
- vp9_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,
- mb_row, mb_col);
- }
+ vp9_build_inter_predictors_sb(xd, mb_row, mb_col, bsize);
}
#if CONFIG_CODE_NONZEROCOUNT
vpx_memset(m->mbmi.nzcs, 0, 384 * sizeof(m->mbmi.nzcs[0]));
@@ -703,19 +690,12 @@ static void decode_sb(VP9D_COMP *pbi, MACROBLOCKD *xd, int mb_row, int mb_col,
return;
}
- // TODO(jingning): need to combine inter predictor functions and
- // make them block size independent.
// generate prediction
if (xd->mode_info_context->mbmi.ref_frame == INTRA_FRAME) {
vp9_build_intra_predictors_sby_s(xd, bsize);
vp9_build_intra_predictors_sbuv_s(xd, bsize);
} else {
- if (bsize == BLOCK_SIZE_SB64X64) {
- vp9_build_inter64x64_predictors_sb(xd, mb_row, mb_col);
- } else {
- assert(bsize == BLOCK_SIZE_SB32X32);
- vp9_build_inter32x32_predictors_sb(xd, mb_row, mb_col);
- }
+ vp9_build_inter_predictors_sb(xd, mb_row, mb_col, bsize);
}
// dequantization and idct
@@ -864,10 +844,8 @@ static int get_delta_q(vp9_reader *r, int *dq) {
const int old_value = *dq;
if (vp9_read_bit(r)) { // Update bit
- int value = vp9_read_literal(r, 4);
- if (vp9_read_bit(r)) // Sign bit
- value = -value;
- *dq = value;
+ const int value = vp9_read_literal(r, 4);
+ *dq = vp9_read_and_apply_sign(r, value);
}
// Trigger a quantizer update if the delta-q value has changed
@@ -1252,9 +1230,8 @@ static void setup_segmentation(VP9_COMMON *pc, MACROBLOCKD *xd, vp9_reader *r) {
if (feature_enabled) {
vp9_enable_segfeature(xd, i, j);
data = vp9_decode_unsigned_max(r, vp9_seg_feature_data_max(j));
- if (vp9_is_segfeature_signed(j) && vp9_read_bit(r)) {
- data = -data;
- }
+ if (vp9_is_segfeature_signed(j))
+ data = vp9_read_and_apply_sign(r, data);
}
vp9_set_segdata(xd, i, j, data);
}
@@ -1303,19 +1280,15 @@ static void setup_loopfilter(VP9_COMMON *pc, MACROBLOCKD *xd, vp9_reader *r) {
for (i = 0; i < MAX_REF_LF_DELTAS; i++) {
if (vp9_read_bit(r)) {
- int value = vp9_read_literal(r, 6);
- if (vp9_read_bit(r))
- value = -value;
- xd->ref_lf_deltas[i] = value;
+ const int value = vp9_read_literal(r, 6);
+ xd->ref_lf_deltas[i] = vp9_read_and_apply_sign(r, value);
}
}
for (i = 0; i < MAX_MODE_LF_DELTAS; i++) {
if (vp9_read_bit(r)) {
- int value = vp9_read_literal(r, 6);
- if (vp9_read_bit(r))
- value = -value;
- xd->mode_lf_deltas[i] = value;
+ const int value = vp9_read_literal(r, 6);
+ xd->mode_lf_deltas[i] = vp9_read_and_apply_sign(r, value);
}
}
}