History

Rename i by frames_to_key in find_next_key_frame

angiebird committed 7 years ago

Commit 19f3b9c1 parent c68e75b1 file · +45 −40Browse files

Unified · Split

vp9/encoder/vp9_firstpass.c+45−40
@@ -3098,51 +3098,56 @@ static void find_next_key_frame(VP9_COMP *cpi, int kf_show_idx) { · 3097 unmodified lines
30983098 // Initialize the decay rates for the recent frames to check
30993099 for (j = 0; j < FRAMES_TO_CHECK_DECAY; ++j) recent_loop_decay[j] = 1.0;
31003100
3101− // Find the next keyframe.
3102− if (!oxcf->auto_key) {
3103− rc->frames_to_key = first_pass_info->num_frames - kf_show_idx;
3104− rc->frames_to_key = VPXMIN(oxcf->key_freq, rc->frames_to_key);
3105− } else {
3106− int i = 0;
3107− while (kf_show_idx + i + 1 < first_pass_info->num_frames &&
3108− rc->frames_to_key < cpi->oxcf.key_freq) {
3109− // Provided that we are not at the end of the file...
3110− if (kf_show_idx + i + 2 < first_pass_info->num_frames) {
3111− double loop_decay_rate;
3112− const FIRSTPASS_STATS *next_frame =
3113− fps_get_frame_stats(first_pass_info, kf_show_idx + i + 2);
3114−
3115− // Check for a scene cut.
3116− if (test_candidate_kf(first_pass_info, kf_show_idx + i + 1)) break;
3117−
3118− // How fast is the prediction quality decaying?
3119− loop_decay_rate =
3120− get_prediction_decay_rate(&cpi->frame_info, next_frame);
3121−
3122− // We want to know something about the recent past... rather than
3123− // as used elsewhere where we are concerned with decay in prediction
3124− // quality since the last GF or KF.
3125− recent_loop_decay[i % FRAMES_TO_CHECK_DECAY] = loop_decay_rate;
3126− decay_accumulator = 1.0;
3127− for (j = 0; j < FRAMES_TO_CHECK_DECAY; ++j)
3128− decay_accumulator *= recent_loop_decay[j];
3129−
3130− // Special check for transition or high motion followed by a
3131− // static scene.
3132− if (i > rc->min_gf_interval && loop_decay_rate >= 0.999 &&
3133− decay_accumulator < 0.9) {
3134− int still_interval = oxcf->key_freq - i;
3135− // TODO(angiebird): Figure out why we use "+1" here
3136− int show_idx = kf_show_idx + i + 1;
3137− if (check_transition_to_still(first_pass_info, show_idx,
3138− still_interval)) {
3101+ {
3102+ int frames_to_key;
3103+ int max_frames_to_key = first_pass_info->num_frames - kf_show_idx;
3104+ max_frames_to_key = VPXMIN(max_frames_to_key, oxcf->key_freq);
3105+ // Find the next keyframe.
3106+ if (!oxcf->auto_key) {
3107+ frames_to_key = max_frames_to_key;
3108+ } else {
3109+ frames_to_key = 1;
3110+ while (frames_to_key < max_frames_to_key) {
3111+ // Provided that we are not at the end of the file...
3112+ if (kf_show_idx + frames_to_key + 1 < first_pass_info->num_frames) {
3113+ double loop_decay_rate;
3114+ const FIRSTPASS_STATS *next_frame = fps_get_frame_stats(
3115+ first_pass_info, kf_show_idx + frames_to_key + 1);
3116+
3117+ // Check for a scene cut.
3118+ if (test_candidate_kf(first_pass_info, kf_show_idx + frames_to_key))
31393119 break;
3120+
3121+ // How fast is the prediction quality decaying?
3122+ loop_decay_rate =
3123+ get_prediction_decay_rate(&cpi->frame_info, next_frame);
3124+
3125+ // We want to know something about the recent past... rather than
3126+ // as used elsewhere where we are concerned with decay in prediction
3127+ // quality since the last GF or KF.
3128+ recent_loop_decay[(frames_to_key - 1) % FRAMES_TO_CHECK_DECAY] =
3129+ loop_decay_rate;
3130+ decay_accumulator = 1.0;
3131+ for (j = 0; j < FRAMES_TO_CHECK_DECAY; ++j)
3132+ decay_accumulator *= recent_loop_decay[j];
3133+
3134+ // Special check for transition or high motion followed by a
3135+ // static scene.
3136+ if ((frames_to_key - 1) > rc->min_gf_interval &&
3137+ loop_decay_rate >= 0.999 && decay_accumulator < 0.9) {
3138+ int still_interval = oxcf->key_freq - (frames_to_key - 1);
3139+ // TODO(angiebird): Figure out why we use "+1" here
3140+ int show_idx = kf_show_idx + frames_to_key;
3141+ if (check_transition_to_still(first_pass_info, show_idx,
3142+ still_interval)) {
3143+ break;
3144+ }
31403145 }
31413146 }
3147+ ++frames_to_key;
31423148 }
3143− ++rc->frames_to_key;
3144− ++i;
31453149 }
3150+ rc->frames_to_key = frames_to_key;
31463151 }
31473152
31483153 // If there is a max kf interval set by the user we must obey it.

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t