Merge "vp9_pred_common: inline vp9_get_segment_id"
This commit is contained in:
Коммит
0ea304620c
|
@ -9,8 +9,6 @@
|
|||
* 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_pred_common.h"
|
||||
#include "vp9/common/vp9_seg_common.h"
|
||||
|
@ -362,20 +360,3 @@ int vp9_get_tx_size_context(const MACROBLOCKD *xd) {
|
|||
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 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
int vp9_get_segment_id(const VP9_COMMON *cm, const uint8_t *segment_ids,
|
||||
BLOCK_SIZE bsize, int mi_row, int mi_col);
|
||||
static INLINE int 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 = 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) {
|
||||
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,
|
|||
return 0; // Default for disabled segmentation
|
||||
|
||||
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) {
|
||||
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,
|
|||
if (cpi->oxcf.aq_mode != VARIANCE_AQ) {
|
||||
const uint8_t *const map = seg->update_map ? cpi->segmentation_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);
|
||||
|
||||
|
@ -678,7 +678,7 @@ static int choose_partitioning(VP9_COMP *cpi,
|
|||
if (cpi->oxcf.aq_mode == CYCLIC_REFRESH_AQ && cm->seg.enabled) {
|
||||
const uint8_t *const map = cm->seg.update_map ? cpi->segmentation_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)) {
|
||||
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,
|
|||
const uint8_t *const map = seg->update_map ? cpi->segmentation_map
|
||||
: cm->last_frame_seg_map;
|
||||
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
|
||||
// and then update the quantizer.
|
||||
|
@ -1237,7 +1237,7 @@ static void rd_pick_sb_modes(VP9_COMP *cpi,
|
|||
} else {
|
||||
const uint8_t *const map = cm->seg.update_map ? cpi->segmentation_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);
|
||||
} else if (aq_mode == COMPLEXITY_AQ) {
|
||||
|
@ -1247,7 +1247,7 @@ static void rd_pick_sb_modes(VP9_COMP *cpi,
|
|||
: cm->last_frame_seg_map;
|
||||
// If segment is boosted, use rdmult for that segment.
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -1698,7 +1698,7 @@ static void update_state_rt(VP9_COMP *cpi, ThreadData *td,
|
|||
cpi->oxcf.aq_mode == VARIANCE_AQ ) {
|
||||
const uint8_t *const map = seg->update_map ? cpi->segmentation_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 {
|
||||
// Setting segmentation map for cyclic_refresh.
|
||||
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,
|
|||
if (seg->enabled) {
|
||||
const uint8_t *const map = seg->update_map ? cpi->segmentation_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);
|
||||
}
|
||||
|
||||
|
@ -3568,7 +3568,7 @@ static void encode_nonrd_sb_row(VP9_COMP *cpi,
|
|||
if (seg->enabled) {
|
||||
const uint8_t *const map = seg->update_map ? cpi->segmentation_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);
|
||||
if (seg_skip) {
|
||||
partition_search_type = FIXED_PARTITION;
|
||||
|
|
|
@ -129,8 +129,8 @@ static void count_segs(const VP9_COMMON *cm, MACROBLOCKD *xd,
|
|||
if (cm->frame_type != KEY_FRAME) {
|
||||
const BLOCK_SIZE bsize = xd->mi[0]->mbmi.sb_type;
|
||||
// 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,
|
||||
bsize, mi_row, mi_col);
|
||||
const int pred_segment_id = get_segment_id(cm, cm->last_frame_seg_map,
|
||||
bsize, mi_row, mi_col);
|
||||
const int pred_flag = pred_segment_id == segment_id;
|
||||
const int pred_context = vp9_get_pred_context_seg_id(xd);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче