Implied skip is 0 for intra blocks

Skip flag is removed from the bitstream for all blocks coded in intra
mode. Very minor coding gain in derf and stdhd sets (0.048 and 0.1)

Change-Id: I79f03300f16d6fa84ce54405cafecab8a021cd7d
This commit is contained in:
Pieter Kapsenberg 2015-05-28 17:09:52 -07:00
parent b71176b477
commit ec1e91847c
5 changed files with 50 additions and 7 deletions

1
configure vendored
View File

@ -300,6 +300,7 @@ EXPERIMENT_LIST="
new_inter
bitstream_fixes
newmvref
misc_entropy
"
CONFIG_LIST="
external_build

View File

@ -196,11 +196,19 @@ static int read_inter_segment_id(VP9_COMMON *const cm, MACROBLOCKD *const xd,
set_segment_id(cm, bsize, mi_row, mi_col, segment_id);
return segment_id;
}
#if CONFIG_MISC_ENTROPY
static int read_skip(VP9_COMMON *cm, const MACROBLOCKD *xd,
int segment_id, vp9_reader *r) {
int segment_id, int is_inter, vp9_reader *r) {
#else
static int read_skip(VP9_COMMON *cm, const MACROBLOCKD *xd,
int segment_id, vp9_reader *r) {
#endif
if (vp9_segfeature_active(&cm->seg, segment_id, SEG_LVL_SKIP)) {
return 1;
#if CONFIG_MISC_ENTROPY
} else if (!is_inter) {
return 0;
#endif
} else {
const int ctx = vp9_get_skip_context(xd);
const int skip = vp9_read(r, cm->fc.skip_probs[ctx]);
@ -260,7 +268,11 @@ static void read_intra_frame_mode_info(VP9_COMMON *const cm,
#endif // CONFIG_INTRABC
mbmi->segment_id = read_intra_segment_id(cm, xd, mi_row, mi_col, r);
#if CONFIG_MISC_ENTROPY
mbmi->skip = 0;
#else
mbmi->skip = read_skip(cm, xd, mbmi->segment_id, r);
#endif
#if CONFIG_PALETTE
if (bsize >= BLOCK_8X8 && cm->allow_palette_mode) {
int palette_ctx = 0;
@ -1344,11 +1356,16 @@ static void read_inter_frame_mode_info(VP9_COMMON *const cm,
#if CONFIG_SUPERTX
if (!supertx_enabled) {
#endif
#if !CONFIG_MISC_ENTROPY
mbmi->skip = read_skip(cm, xd, mbmi->segment_id, r);
#endif
#if CONFIG_COPY_MODE
if (mbmi->copy_mode == NOREF)
#endif
inter_block = read_is_inter_block(cm, xd, mbmi->segment_id, r);
#if CONFIG_MISC_ENTROPY
mbmi->skip = read_skip(cm, xd, mbmi->segment_id, inter_block, r);
#endif
#if CONFIG_PALETTE
mbmi->palette_enabled[0] = 0;

View File

@ -190,11 +190,20 @@ static void write_selected_tx_size(const VP9_COMMON *cm,
}
}
}
#if CONFIG_MISC_ENTROPY
static int write_skip(const VP9_COMMON *cm, const MACROBLOCKD *xd,
int segment_id, const MODE_INFO *mi, vp9_writer *w) {
int segment_id, const MODE_INFO *mi, int is_inter,
vp9_writer *w) {
#else
static int write_skip(const VP9_COMMON *cm, const MACROBLOCKD *xd,
int segment_id, const MODE_INFO *mi, vp9_writer *w) {
#endif
if (vp9_segfeature_active(&cm->seg, segment_id, SEG_LVL_SKIP)) {
return 1;
#if CONFIG_MISC_ENTROPY
} else if (!is_inter && cm->frame_type == INTER_FRAME) {
return 0;
#endif
} else {
const int skip = mi->mbmi.skip;
vp9_write(w, skip, vp9_get_skip_prob(cm, xd));
@ -454,14 +463,16 @@ static void pack_inter_mode_mvs(VP9_COMP *cpi, const MODE_INFO *mi,
write_segment_id(w, seg, segment_id);
}
}
#if CONFIG_SUPERTX
if (supertx_enabled)
skip = mbmi->skip;
else
skip = write_skip(cm, xd, segment_id, mi, w);
#else
#if !CONFIG_MISC_ENTROPY
skip = write_skip(cm, xd, segment_id, mi, w);
#endif
#endif // CONFIG_SUPERTX
#if CONFIG_SUPERTX
@ -476,6 +487,10 @@ static void pack_inter_mode_mvs(VP9_COMP *cpi, const MODE_INFO *mi,
}
#endif
#if CONFIG_MISC_ENTROPY
skip = write_skip(cm, xd, segment_id, mi, is_inter, w);
#endif
#if CONFIG_PALETTE
if (!is_inter && bsize >= BLOCK_8X8 && cm->allow_palette_mode) {
int n, i, j, k, rows, cols, palette_ctx, color_ctx;
@ -862,9 +877,9 @@ static void write_mb_modes_kf(const VP9_COMMON *cm,
if (seg->update_map)
write_segment_id(w, seg, mbmi->segment_id);
#if !CONFIG_MISC_ENTROPY
write_skip(cm, xd, mbmi->segment_id, mi, w);
#endif
#if CONFIG_PALETTE
if (bsize >= BLOCK_8X8 && cm->allow_palette_mode) {
int n, m1, m2, i, j, k, rows, cols, palette_ctx, color_ctx;

View File

@ -5185,7 +5185,11 @@ static void encode_superblock(VP9_COMP *cpi, TOKENEXTRA **t, int output_enabled,
#endif // CONFIG_INTRABC
) {
int plane;
#if CONFIG_MISC_ENTROPY
mbmi->skip = 0;
#else
mbmi->skip = 1;
#endif
for (plane = 0; plane < MAX_MB_PLANE; ++plane)
vp9_encode_intra_block_plane(x, MAX(bsize, BLOCK_8X8), plane);
if (output_enabled)

View File

@ -530,6 +530,9 @@ void vp9_tokenize_sb(VP9_COMP *cpi, TOKENEXTRA **t, int dry_run,
struct tokenize_b_args arg = {cpi, xd, t};
if (mbmi->skip) {
if (!dry_run)
#if CONFIG_MISC_ENTROPY
if (is_inter_block(mbmi))
#endif
cm->counts.skip[ctx][1] += skip_inc;
reset_skip_context(xd, bsize);
if (dry_run)
@ -538,6 +541,9 @@ void vp9_tokenize_sb(VP9_COMP *cpi, TOKENEXTRA **t, int dry_run,
}
if (!dry_run) {
#if CONFIG_MISC_ENTROPY
if (is_inter_block(mbmi))
#endif
cm->counts.skip[ctx][0] += skip_inc;
#if CONFIG_TX_SKIP
if (mbmi->tx_skip[0] && FOR_SCREEN_CONTENT)