cm->reference_mode = reference_mode;
cm->interp_filter = interp_filter;
- if (cpi->oxcf.mode == MODE_REALTIME)
+ if (cpi->sf.super_fast_rtc)
encode_rtc_frame_internal(cpi);
else
encode_frame_internal(cpi);
}
}
} else {
- encode_rtc_frame_internal(cpi);
+ if (cpi->sf.super_fast_rtc)
+ encode_rtc_frame_internal(cpi);
+ else
+ encode_frame_internal(cpi);
}
}
const int mi_height = num_8x8_blocks_high_lookup[bsize];
x->skip_recode = !x->select_txfm_size && mbmi->sb_type >= BLOCK_8X8 &&
(cpi->oxcf.aq_mode != COMPLEXITY_AQ) &&
- cpi->oxcf.mode != MODE_REALTIME;
+ !cpi->sf.super_fast_rtc;
x->skip_optimize = ctx->is_coded;
ctx->is_coded = 1;
x->use_lp32x32fdct = cpi->sf.use_lp32x32fdct;
}
sf->use_fast_lpf_pick = 2;
}
+ if (speed >= 6) {
+ sf->super_fast_rtc = 1;
+ }
}
void vp9_set_speed_features(VP9_COMP *cpi) {
sf->use_fast_coef_updates = 0;
sf->using_small_partition_info = 0;
sf->mode_skip_start = MAX_MODES; // Mode index at which mode skip mask set
+ sf->super_fast_rtc = 0;
switch (cpi->oxcf.mode) {
case MODE_BESTQUALITY:
case MODE_FIRSTPASS:
case MODE_GOODQUALITY:
case MODE_SECONDPASS:
- set_good_speed_feature(cm, sf, speed);
- break;
+ set_good_speed_feature(cm, sf, speed);
break;
case MODE_REALTIME:
set_rt_speed_feature(cm, sf, speed);
vpx_usec_timer_start(&timer);
- if (cpi->oxcf.mode == MODE_REALTIME)
- lf->filter_level = 4;
- else
- vp9_pick_filter_level(cpi->Source, cpi, cpi->sf.use_fast_lpf_pick);
+ vp9_pick_filter_level(cpi->Source, cpi, cpi->sf.use_fast_lpf_pick);
vpx_usec_timer_mark(&timer);
cpi->time_pick_lpf += vpx_usec_timer_elapsed(&timer);
if (cpi->sf.recode_loop != 0) {
vp9_save_coding_context(cpi);
cpi->dummy_packing = 1;
- if (cpi->oxcf.mode != MODE_REALTIME)
+ if (!cpi->sf.super_fast_rtc)
vp9_pack_bitstream(cpi, dest, size);
cpi->rc.projected_frame_size = (*size) << 3;
// JBB : This is realtime mode. In real time mode the first frame
// should be larger. Q of 0 is disabled because we force tx size to be
// 16x16...
- if (cpi->oxcf.mode == MODE_REALTIME) {
+ if (cpi->sf.super_fast_rtc) {
if (cpi->common.current_video_frame == 0)
q /= 3;
// This feature limits the number of coefficients updates we actually do
// by only looking at counts from 1/2 the bands.
int use_fast_coef_updates; // 0: 2-loop, 1: 1-loop, 2: 1-loop reduced
+
+ // This flag control the use of the new super fast rtc mode
+ int super_fast_rtc;
} SPEED_FEATURES;
typedef struct VP9_COMP {
fill_token_costs(x->token_costs, cm->fc.coef_probs);
- if (cpi->oxcf.mode != MODE_REALTIME) {
+ if (!cpi->sf.super_fast_rtc) {
for (i = 0; i < PARTITION_CONTEXTS; i++)
vp9_cost_tokens(x->partition_cost[i], get_partition_probs(cm, i),
vp9_partition_tree);
if (i == 0)
x->pred_sse[ref] = sse;
- if (cpi->oxcf.mode == MODE_REALTIME) {
+ if (cpi->sf.super_fast_rtc) {
dist_sum += (int)sse;
} else {
int rate;
for (i = 0; i < MAX_MB_PLANE; i++)
xd->plane[i].pre[0] = backup_yv12[i];
}
- return;
}
static void joint_motion_search(VP9_COMP *cpi, MACROBLOCK *x,