Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(106)

Unified Diff: source/libvpx/vp9/encoder/vp9_encodeframe.c

Issue 998593002: libvpx: Pull from upstream (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/libvpx.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « source/libvpx/test/vp9_ethread_test.cc ('k') | source/libvpx/vp9/encoder/vp9_mcomp.c » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: source/libvpx/vp9/encoder/vp9_encodeframe.c
diff --git a/source/libvpx/vp9/encoder/vp9_encodeframe.c b/source/libvpx/vp9/encoder/vp9_encodeframe.c
index 4949997db7574a16dd4fb88c36de49a3b3794b60..933b049d4842decfdf76890c2a75c1982ae52d70 100644
--- a/source/libvpx/vp9/encoder/vp9_encodeframe.c
+++ b/source/libvpx/vp9/encoder/vp9_encodeframe.c
@@ -588,6 +588,7 @@ static void choose_partitioning(VP9_COMP *cpi,
bsize = BLOCK_32X32;
y_sad = vp9_int_pro_motion_estimation(cpi, x, bsize);
+ x->pred_mv[LAST_FRAME] = mbmi->mv[0].as_mv;
#endif
vp9_build_inter_predictors_sb(xd, mi_row, mi_col, BLOCK_64X64);
@@ -2696,10 +2697,12 @@ static void encode_rd_sb_row(VP9_COMP *cpi,
// Code each SB in the row
for (mi_col = tile_info->mi_col_start; mi_col < tile_info->mi_col_end;
mi_col += MI_BLOCK_SIZE) {
+ const struct segmentation *const seg = &cm->seg;
int dummy_rate;
int64_t dummy_dist;
RD_COST dummy_rdc;
int i;
+ int seg_skip = 0;
const int idx_str = cm->mi_stride * mi_row + mi_col;
MODE_INFO *mi = cm->mi + idx_str;
@@ -2719,11 +2722,19 @@ static void encode_rd_sb_row(VP9_COMP *cpi,
vp9_zero(x->pred_mv);
td->pc_root->index = 0;
+ 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);
+ seg_skip = vp9_segfeature_active(seg, segment_id, SEG_LVL_SKIP);
+ }
+
x->source_variance = UINT_MAX;
- if (sf->partition_search_type == FIXED_PARTITION) {
+ if (sf->partition_search_type == FIXED_PARTITION || seg_skip) {
+ const BLOCK_SIZE bsize =
+ seg_skip ? BLOCK_64X64 : sf->always_this_block_size;
set_offsets(cpi, tile_info, x, mi_row, mi_col, BLOCK_64X64);
- set_fixed_partitioning(cpi, tile_info, mi, mi_row, mi_col,
- sf->always_this_block_size);
+ set_fixed_partitioning(cpi, tile_info, mi, mi_row, mi_col, bsize);
rd_use_partition(cpi, td, tile_data, mi, tp, mi_row, mi_col,
BLOCK_64X64, &dummy_rate, &dummy_dist, 1, td->pc_root);
} else if (cpi->partition_search_skippable_frame) {
@@ -3448,18 +3459,31 @@ static void encode_nonrd_sb_row(VP9_COMP *cpi,
// Code each SB in the row
for (mi_col = tile_info->mi_col_start; mi_col < tile_info->mi_col_end;
mi_col += MI_BLOCK_SIZE) {
+ const struct segmentation *const seg = &cm->seg;
RD_COST dummy_rdc;
const int idx_str = cm->mi_stride * mi_row + mi_col;
MODE_INFO *mi = cm->mi + idx_str;
- BLOCK_SIZE bsize;
+ PARTITION_SEARCH_TYPE partition_search_type = sf->partition_search_type;
+ BLOCK_SIZE bsize = BLOCK_64X64;
+ int seg_skip = 0;
x->source_variance = UINT_MAX;
vp9_zero(x->pred_mv);
vp9_rd_cost_init(&dummy_rdc);
x->color_sensitivity[0] = 0;
x->color_sensitivity[1] = 0;
+ 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);
+ seg_skip = vp9_segfeature_active(seg, segment_id, SEG_LVL_SKIP);
+ if (seg_skip) {
+ partition_search_type = FIXED_PARTITION;
+ }
+ }
+
// Set the partition type of the 64X64 block
- switch (sf->partition_search_type) {
+ switch (partition_search_type) {
case VAR_BASED_PARTITION:
// TODO(jingning, marpan): The mode decision and encoding process
// support both intra and inter sub8x8 block coding for RTC mode.
@@ -3475,9 +3499,8 @@ static void encode_nonrd_sb_row(VP9_COMP *cpi,
BLOCK_64X64, 1, &dummy_rdc, td->pc_root);
break;
case FIXED_PARTITION:
- bsize = sf->partition_search_type == FIXED_PARTITION ?
- sf->always_this_block_size :
- get_nonrd_var_based_fixed_partition(cpi, x, mi_row, mi_col);
+ if (!seg_skip)
+ bsize = sf->always_this_block_size;
set_fixed_partitioning(cpi, tile_info, mi, mi_row, mi_col, bsize);
nonrd_use_partition(cpi, td, tile_data, mi, tp, mi_row, mi_col,
BLOCK_64X64, 1, &dummy_rdc, td->pc_root);
@@ -3766,7 +3789,7 @@ static void encode_frame_internal(VP9_COMP *cpi) {
vp9_frame_init_quantizer(cpi);
vp9_initialize_rd_consts(cpi);
- vp9_initialize_me_consts(cpi, cm->base_qindex);
+ vp9_initialize_me_consts(cpi, x, cm->base_qindex);
init_encode_frame_mb_context(cpi);
cm->use_prev_frame_mvs = !cm->error_resilient_mode &&
cm->width == cm->last_width &&
« no previous file with comments | « source/libvpx/test/vp9_ethread_test.cc ('k') | source/libvpx/vp9/encoder/vp9_mcomp.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698