Commit 0ea30462 authored by James Zern's avatar James Zern Committed by Gerrit Code Review

Merge "vp9_pred_common: inline vp9_get_segment_id"

parents 95dc0821 e6add649
...@@ -9,8 +9,6 @@ ...@@ -9,8 +9,6 @@
* be found in the AUTHORS file in the root of the source tree. * be found in the AUTHORS file in the root of the source tree.
*/ */
#include <limits.h>
#include "vp9/common/vp9_common.h" #include "vp9/common/vp9_common.h"
#include "vp9/common/vp9_pred_common.h" #include "vp9/common/vp9_pred_common.h"
#include "vp9/common/vp9_seg_common.h" #include "vp9/common/vp9_seg_common.h"
...@@ -362,20 +360,3 @@ int vp9_get_tx_size_context(const MACROBLOCKD *xd) { ...@@ -362,20 +360,3 @@ int vp9_get_tx_size_context(const MACROBLOCKD *xd) {
return (above_ctx + left_ctx) > max_tx_size; return (above_ctx + left_ctx) > max_tx_size;
} }
int vp9_get_segment_id(const VP9_COMMON *cm, const uint8_t *segment_ids,
BLOCK_SIZE bsize, int mi_row, int mi_col) {
const int mi_offset = mi_row * cm->mi_cols + mi_col;
const int bw = num_8x8_blocks_wide_lookup[bsize];
const int bh = num_8x8_blocks_high_lookup[bsize];
const int xmis = MIN(cm->mi_cols - mi_col, bw);
const int ymis = MIN(cm->mi_rows - mi_row, bh);
int x, y, segment_id = INT_MAX;
for (y = 0; y < ymis; y++)
for (x = 0; x < xmis; x++)
segment_id = MIN(segment_id,
segment_ids[mi_offset + y * cm->mi_cols + x]);
assert(segment_id >= 0 && segment_id < MAX_SEGMENTS);
return segment_id;
}
...@@ -18,8 +18,24 @@ ...@@ -18,8 +18,24 @@
extern "C" { extern "C" {
#endif #endif
int vp9_get_segment_id(const VP9_COMMON *cm, const uint8_t *segment_ids, static INLINE int get_segment_id(const VP9_COMMON *cm,
BLOCK_SIZE bsize, int mi_row, int mi_col); const uint8_t *segment_ids,
BLOCK_SIZE bsize, int mi_row, int mi_col) {
const int mi_offset = mi_row * cm->mi_cols + mi_col;
const int bw = num_8x8_blocks_wide_lookup[bsize];
const int bh = num_8x8_blocks_high_lookup[bsize];
const int xmis = MIN(cm->mi_cols - mi_col, bw);
const int ymis = MIN(cm->mi_rows - mi_row, bh);
int x, y, segment_id = MAX_SEGMENTS;
for (y = 0; y < ymis; ++y)
for (x = 0; x < xmis; ++x)
segment_id = MIN(segment_id,
segment_ids[mi_offset + y * cm->mi_cols + x]);
assert(segment_id >= 0 && segment_id < MAX_SEGMENTS);
return segment_id;
}
static INLINE int vp9_get_pred_context_seg_id(const MACROBLOCKD *xd) { static INLINE int vp9_get_pred_context_seg_id(const MACROBLOCKD *xd) {
const MODE_INFO *const above_mi = xd->above_mi; const MODE_INFO *const above_mi = xd->above_mi;
......
...@@ -155,7 +155,7 @@ static int read_inter_segment_id(VP9_COMMON *const cm, MACROBLOCKD *const xd, ...@@ -155,7 +155,7 @@ static int read_inter_segment_id(VP9_COMMON *const cm, MACROBLOCKD *const xd,
return 0; // Default for disabled segmentation return 0; // Default for disabled segmentation
predicted_segment_id = cm->last_frame_seg_map ? predicted_segment_id = cm->last_frame_seg_map ?
vp9_get_segment_id(cm, cm->last_frame_seg_map, bsize, mi_row, mi_col) : 0; get_segment_id(cm, cm->last_frame_seg_map, bsize, mi_row, mi_col) : 0;
if (!seg->update_map) { if (!seg->update_map) {
copy_segment_id(cm, cm->last_frame_seg_map, cm->current_frame_seg_map, copy_segment_id(cm, cm->last_frame_seg_map, cm->current_frame_seg_map,
......
...@@ -224,7 +224,7 @@ static void set_offsets(VP9_COMP *cpi, const TileInfo *const tile, ...@@ -224,7 +224,7 @@ static void set_offsets(VP9_COMP *cpi, const TileInfo *const tile,
if (cpi->oxcf.aq_mode != VARIANCE_AQ) { if (cpi->oxcf.aq_mode != VARIANCE_AQ) {
const uint8_t *const map = seg->update_map ? cpi->segmentation_map const uint8_t *const map = seg->update_map ? cpi->segmentation_map
: cm->last_frame_seg_map; : cm->last_frame_seg_map;
mbmi->segment_id = vp9_get_segment_id(cm, map, bsize, mi_row, mi_col); mbmi->segment_id = get_segment_id(cm, map, bsize, mi_row, mi_col);
} }
vp9_init_plane_quantizers(cpi, x); vp9_init_plane_quantizers(cpi, x);
...@@ -678,7 +678,7 @@ static int choose_partitioning(VP9_COMP *cpi, ...@@ -678,7 +678,7 @@ static int choose_partitioning(VP9_COMP *cpi,
if (cpi->oxcf.aq_mode == CYCLIC_REFRESH_AQ && cm->seg.enabled) { if (cpi->oxcf.aq_mode == CYCLIC_REFRESH_AQ && cm->seg.enabled) {
const uint8_t *const map = cm->seg.update_map ? cpi->segmentation_map : const uint8_t *const map = cm->seg.update_map ? cpi->segmentation_map :
cm->last_frame_seg_map; cm->last_frame_seg_map;
segment_id = vp9_get_segment_id(cm, map, BLOCK_64X64, mi_row, mi_col); segment_id = get_segment_id(cm, map, BLOCK_64X64, mi_row, mi_col);
if (cyclic_refresh_segment_id_boosted(segment_id)) { if (cyclic_refresh_segment_id_boosted(segment_id)) {
int q = vp9_get_qindex(&cm->seg, segment_id, cm->base_qindex); int q = vp9_get_qindex(&cm->seg, segment_id, cm->base_qindex);
...@@ -1002,7 +1002,7 @@ static void update_state(VP9_COMP *cpi, ThreadData *td, ...@@ -1002,7 +1002,7 @@ static void update_state(VP9_COMP *cpi, ThreadData *td,
const uint8_t *const map = seg->update_map ? cpi->segmentation_map const uint8_t *const map = seg->update_map ? cpi->segmentation_map
: cm->last_frame_seg_map; : cm->last_frame_seg_map;
mi_addr->mbmi.segment_id = mi_addr->mbmi.segment_id =
vp9_get_segment_id(cm, map, bsize, mi_row, mi_col); get_segment_id(cm, map, bsize, mi_row, mi_col);
} }
// Else for cyclic refresh mode update the segment map, set the segment id // Else for cyclic refresh mode update the segment map, set the segment id
// and then update the quantizer. // and then update the quantizer.
...@@ -1237,7 +1237,7 @@ static void rd_pick_sb_modes(VP9_COMP *cpi, ...@@ -1237,7 +1237,7 @@ static void rd_pick_sb_modes(VP9_COMP *cpi,
} else { } else {
const uint8_t *const map = cm->seg.update_map ? cpi->segmentation_map const uint8_t *const map = cm->seg.update_map ? cpi->segmentation_map
: cm->last_frame_seg_map; : cm->last_frame_seg_map;
mbmi->segment_id = vp9_get_segment_id(cm, map, bsize, mi_row, mi_col); mbmi->segment_id = get_segment_id(cm, map, bsize, mi_row, mi_col);
} }
x->rdmult = set_segment_rdmult(cpi, x, mbmi->segment_id); x->rdmult = set_segment_rdmult(cpi, x, mbmi->segment_id);
} else if (aq_mode == COMPLEXITY_AQ) { } else if (aq_mode == COMPLEXITY_AQ) {
...@@ -1247,7 +1247,7 @@ static void rd_pick_sb_modes(VP9_COMP *cpi, ...@@ -1247,7 +1247,7 @@ static void rd_pick_sb_modes(VP9_COMP *cpi,
: cm->last_frame_seg_map; : cm->last_frame_seg_map;
// If segment is boosted, use rdmult for that segment. // If segment is boosted, use rdmult for that segment.
if (cyclic_refresh_segment_id_boosted( if (cyclic_refresh_segment_id_boosted(
vp9_get_segment_id(cm, map, bsize, mi_row, mi_col))) get_segment_id(cm, map, bsize, mi_row, mi_col)))
x->rdmult = vp9_cyclic_refresh_get_rdmult(cpi->cyclic_refresh); x->rdmult = vp9_cyclic_refresh_get_rdmult(cpi->cyclic_refresh);
} }
...@@ -1698,7 +1698,7 @@ static void update_state_rt(VP9_COMP *cpi, ThreadData *td, ...@@ -1698,7 +1698,7 @@ static void update_state_rt(VP9_COMP *cpi, ThreadData *td,
cpi->oxcf.aq_mode == VARIANCE_AQ ) { cpi->oxcf.aq_mode == VARIANCE_AQ ) {
const uint8_t *const map = seg->update_map ? cpi->segmentation_map const uint8_t *const map = seg->update_map ? cpi->segmentation_map
: cm->last_frame_seg_map; : cm->last_frame_seg_map;
mbmi->segment_id = vp9_get_segment_id(cm, map, bsize, mi_row, mi_col); mbmi->segment_id = get_segment_id(cm, map, bsize, mi_row, mi_col);
} else { } else {
// Setting segmentation map for cyclic_refresh. // Setting segmentation map for cyclic_refresh.
vp9_cyclic_refresh_update_segment(cpi, mbmi, mi_row, mi_col, bsize, vp9_cyclic_refresh_update_segment(cpi, mbmi, mi_row, mi_col, bsize,
...@@ -2799,7 +2799,7 @@ static void encode_rd_sb_row(VP9_COMP *cpi, ...@@ -2799,7 +2799,7 @@ static void encode_rd_sb_row(VP9_COMP *cpi,
if (seg->enabled) { if (seg->enabled) {
const uint8_t *const map = seg->update_map ? cpi->segmentation_map const uint8_t *const map = seg->update_map ? cpi->segmentation_map
: cm->last_frame_seg_map; : cm->last_frame_seg_map;
int segment_id = vp9_get_segment_id(cm, map, BLOCK_64X64, mi_row, mi_col); int segment_id = get_segment_id(cm, map, BLOCK_64X64, mi_row, mi_col);
seg_skip = segfeature_active(seg, segment_id, SEG_LVL_SKIP); seg_skip = segfeature_active(seg, segment_id, SEG_LVL_SKIP);
} }
...@@ -3568,7 +3568,7 @@ static void encode_nonrd_sb_row(VP9_COMP *cpi, ...@@ -3568,7 +3568,7 @@ static void encode_nonrd_sb_row(VP9_COMP *cpi,
if (seg->enabled) { if (seg->enabled) {
const uint8_t *const map = seg->update_map ? cpi->segmentation_map const uint8_t *const map = seg->update_map ? cpi->segmentation_map
: cm->last_frame_seg_map; : cm->last_frame_seg_map;
int segment_id = vp9_get_segment_id(cm, map, BLOCK_64X64, mi_row, mi_col); int segment_id = get_segment_id(cm, map, BLOCK_64X64, mi_row, mi_col);
seg_skip = segfeature_active(seg, segment_id, SEG_LVL_SKIP); seg_skip = segfeature_active(seg, segment_id, SEG_LVL_SKIP);
if (seg_skip) { if (seg_skip) {
partition_search_type = FIXED_PARTITION; partition_search_type = FIXED_PARTITION;
......
...@@ -129,8 +129,8 @@ static void count_segs(const VP9_COMMON *cm, MACROBLOCKD *xd, ...@@ -129,8 +129,8 @@ static void count_segs(const VP9_COMMON *cm, MACROBLOCKD *xd,
if (cm->frame_type != KEY_FRAME) { if (cm->frame_type != KEY_FRAME) {
const BLOCK_SIZE bsize = xd->mi[0]->mbmi.sb_type; const BLOCK_SIZE bsize = xd->mi[0]->mbmi.sb_type;
// Test to see if the segment id matches the predicted value. // Test to see if the segment id matches the predicted value.
const int pred_segment_id = vp9_get_segment_id(cm, cm->last_frame_seg_map, const int pred_segment_id = get_segment_id(cm, cm->last_frame_seg_map,
bsize, mi_row, mi_col); bsize, mi_row, mi_col);
const int pred_flag = pred_segment_id == segment_id; const int pred_flag = pred_segment_id == segment_id;
const int pred_context = vp9_get_pred_context_seg_id(xd); const int pred_context = vp9_get_pred_context_seg_id(xd);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment