1/* 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11#include <assert.h> 12#include <limits.h> 13#include <math.h> 14#include <stdio.h> 15#include <stdlib.h> 16#include <string.h> 17 18#include "vpx_mem/vpx_mem.h" 19 20#include "vp9/common/vp9_alloccommon.h" 21#include "vp9/common/vp9_common.h" 22#include "vp9/common/vp9_entropymode.h" 23#include "vp9/common/vp9_quant_common.h" 24#include "vp9/common/vp9_seg_common.h" 25#include "vp9/common/vp9_systemdependent.h" 26 27#include "vp9/encoder/vp9_encodemv.h" 28#include "vp9/encoder/vp9_ratectrl.h" 29 30#define DEFAULT_KF_BOOST 2000 31#define DEFAULT_GF_BOOST 2000 32 33#define LIMIT_QRANGE_FOR_ALTREF_AND_KEY 1 34 35#define MIN_BPB_FACTOR 0.005 36#define MAX_BPB_FACTOR 50 37 38// Bits Per MB at different Q (Multiplied by 512) 39#define BPER_MB_NORMBITS 9 40 41// Tables relating active max Q to active min Q 42static int kf_low_motion_minq[QINDEX_RANGE]; 43static int kf_high_motion_minq[QINDEX_RANGE]; 44static int gf_low_motion_minq[QINDEX_RANGE]; 45static int gf_high_motion_minq[QINDEX_RANGE]; 46static int inter_minq[QINDEX_RANGE]; 47static int afq_low_motion_minq[QINDEX_RANGE]; 48static int afq_high_motion_minq[QINDEX_RANGE]; 49static int gf_high = 2000; 50static int gf_low = 400; 51static int kf_high = 5000; 52static int kf_low = 400; 53 54// Functions to compute the active minq lookup table entries based on a 55// formulaic approach to facilitate easier adjustment of the Q tables. 56// The formulae were derived from computing a 3rd order polynomial best 57// fit to the original data (after plotting real maxq vs minq (not q index)) 58static int get_minq_index(double maxq, double x3, double x2, double x1) { 59 int i; 60 const double minqtarget = MIN(((x3 * maxq + x2) * maxq + x1) * maxq, 61 maxq); 62 63 // Special case handling to deal with the step from q2.0 64 // down to lossless mode represented by q 1.0. 65 if (minqtarget <= 2.0) 66 return 0; 67 68 for (i = 0; i < QINDEX_RANGE; i++) 69 if (minqtarget <= vp9_convert_qindex_to_q(i)) 70 return i; 71 72 return QINDEX_RANGE - 1; 73} 74 75void vp9_rc_init_minq_luts() { 76 int i; 77 78 for (i = 0; i < QINDEX_RANGE; i++) { 79 const double maxq = vp9_convert_qindex_to_q(i); 80 81 kf_low_motion_minq[i] = get_minq_index(maxq, 0.000001, -0.0004, 0.15); 82 kf_high_motion_minq[i] = get_minq_index(maxq, 0.000002, -0.0012, 0.50); 83 gf_low_motion_minq[i] = get_minq_index(maxq, 0.0000015, -0.0009, 0.32); 84 gf_high_motion_minq[i] = get_minq_index(maxq, 0.0000021, -0.00125, 0.50); 85 afq_low_motion_minq[i] = get_minq_index(maxq, 0.0000015, -0.0009, 0.33); 86 afq_high_motion_minq[i] = get_minq_index(maxq, 0.0000021, -0.00125, 0.55); 87 inter_minq[i] = get_minq_index(maxq, 0.00000271, -0.00113, 0.75); 88 } 89} 90 91// These functions use formulaic calculations to make playing with the 92// quantizer tables easier. If necessary they can be replaced by lookup 93// tables if and when things settle down in the experimental bitstream 94double vp9_convert_qindex_to_q(int qindex) { 95 // Convert the index to a real Q value (scaled down to match old Q values) 96 return vp9_ac_quant(qindex, 0) / 4.0; 97} 98 99int vp9_rc_bits_per_mb(FRAME_TYPE frame_type, int qindex, 100 double correction_factor) { 101 const double q = vp9_convert_qindex_to_q(qindex); 102 int enumerator = frame_type == KEY_FRAME ? 3300000 : 2250000; 103 104 // q based adjustment to baseline enumerator 105 enumerator += (int)(enumerator * q) >> 12; 106 return (int)(0.5 + (enumerator * correction_factor / q)); 107} 108 109void vp9_save_coding_context(VP9_COMP *cpi) { 110 CODING_CONTEXT *const cc = &cpi->coding_context; 111 VP9_COMMON *cm = &cpi->common; 112 113 // Stores a snapshot of key state variables which can subsequently be 114 // restored with a call to vp9_restore_coding_context. These functions are 115 // intended for use in a re-code loop in vp9_compress_frame where the 116 // quantizer value is adjusted between loop iterations. 117 vp9_copy(cc->nmvjointcost, cpi->mb.nmvjointcost); 118 vp9_copy(cc->nmvcosts, cpi->mb.nmvcosts); 119 vp9_copy(cc->nmvcosts_hp, cpi->mb.nmvcosts_hp); 120 121 vp9_copy(cc->segment_pred_probs, cm->seg.pred_probs); 122 123 vpx_memcpy(cpi->coding_context.last_frame_seg_map_copy, 124 cm->last_frame_seg_map, (cm->mi_rows * cm->mi_cols)); 125 126 vp9_copy(cc->last_ref_lf_deltas, cm->lf.last_ref_deltas); 127 vp9_copy(cc->last_mode_lf_deltas, cm->lf.last_mode_deltas); 128 129 cc->fc = cm->fc; 130} 131 132void vp9_restore_coding_context(VP9_COMP *cpi) { 133 CODING_CONTEXT *const cc = &cpi->coding_context; 134 VP9_COMMON *cm = &cpi->common; 135 136 // Restore key state variables to the snapshot state stored in the 137 // previous call to vp9_save_coding_context. 138 vp9_copy(cpi->mb.nmvjointcost, cc->nmvjointcost); 139 vp9_copy(cpi->mb.nmvcosts, cc->nmvcosts); 140 vp9_copy(cpi->mb.nmvcosts_hp, cc->nmvcosts_hp); 141 142 vp9_copy(cm->seg.pred_probs, cc->segment_pred_probs); 143 144 vpx_memcpy(cm->last_frame_seg_map, 145 cpi->coding_context.last_frame_seg_map_copy, 146 (cm->mi_rows * cm->mi_cols)); 147 148 vp9_copy(cm->lf.last_ref_deltas, cc->last_ref_lf_deltas); 149 vp9_copy(cm->lf.last_mode_deltas, cc->last_mode_lf_deltas); 150 151 cm->fc = cc->fc; 152} 153 154static int estimate_bits_at_q(int frame_kind, int q, int mbs, 155 double correction_factor) { 156 const int bpm = (int)(vp9_rc_bits_per_mb(frame_kind, q, correction_factor)); 157 158 // Attempt to retain reasonable accuracy without overflow. The cutoff is 159 // chosen such that the maximum product of Bpm and MBs fits 31 bits. The 160 // largest Bpm takes 20 bits. 161 return (mbs > (1 << 11)) ? (bpm >> BPER_MB_NORMBITS) * mbs 162 : (bpm * mbs) >> BPER_MB_NORMBITS; 163} 164 165int vp9_rc_clamp_pframe_target_size(const VP9_COMP *const cpi, int target) { 166 const RATE_CONTROL *rc = &cpi->rc; 167 const int min_frame_target = MAX(rc->min_frame_bandwidth, 168 rc->av_per_frame_bandwidth >> 5); 169 if (target < min_frame_target) 170 target = min_frame_target; 171 if (cpi->refresh_golden_frame && rc->is_src_frame_alt_ref) { 172 // If there is an active ARF at this location use the minimum 173 // bits on this frame even if it is a constructed arf. 174 // The active maximum quantizer insures that an appropriate 175 // number of bits will be spent if needed for constructed ARFs. 176 target = min_frame_target; 177 } 178 // Clip the frame target to the maximum allowed value. 179 if (target > rc->max_frame_bandwidth) 180 target = rc->max_frame_bandwidth; 181 return target; 182} 183 184int vp9_rc_clamp_iframe_target_size(const VP9_COMP *const cpi, int target) { 185 const RATE_CONTROL *rc = &cpi->rc; 186 const VP9_CONFIG *oxcf = &cpi->oxcf; 187 if (oxcf->rc_max_intra_bitrate_pct) { 188 const int max_rate = rc->av_per_frame_bandwidth * 189 oxcf->rc_max_intra_bitrate_pct / 100; 190 target = MIN(target, max_rate); 191 } 192 if (target > rc->max_frame_bandwidth) 193 target = rc->max_frame_bandwidth; 194 return target; 195} 196 197 198// Update the buffer level for higher layers, given the encoded current layer. 199static void update_layer_buffer_level(VP9_COMP *const cpi, 200 int encoded_frame_size) { 201 int temporal_layer = 0; 202 int current_temporal_layer = cpi->svc.temporal_layer_id; 203 for (temporal_layer = current_temporal_layer + 1; 204 temporal_layer < cpi->svc.number_temporal_layers; ++temporal_layer) { 205 LAYER_CONTEXT *lc = &cpi->svc.layer_context[temporal_layer]; 206 RATE_CONTROL *lrc = &lc->rc; 207 int bits_off_for_this_layer = (int)(lc->target_bandwidth / lc->framerate - 208 encoded_frame_size); 209 lrc->bits_off_target += bits_off_for_this_layer; 210 211 // Clip buffer level to maximum buffer size for the layer. 212 lrc->bits_off_target = MIN(lrc->bits_off_target, lc->maximum_buffer_size); 213 lrc->buffer_level = lrc->bits_off_target; 214 } 215} 216 217// Update the buffer level: leaky bucket model. 218static void update_buffer_level(VP9_COMP *cpi, int encoded_frame_size) { 219 const VP9_COMMON *const cm = &cpi->common; 220 const VP9_CONFIG *oxcf = &cpi->oxcf; 221 RATE_CONTROL *const rc = &cpi->rc; 222 223 // Non-viewable frames are a special case and are treated as pure overhead. 224 if (!cm->show_frame) { 225 rc->bits_off_target -= encoded_frame_size; 226 } else { 227 rc->bits_off_target += rc->av_per_frame_bandwidth - encoded_frame_size; 228 } 229 230 // Clip the buffer level to the maximum specified buffer size. 231 rc->bits_off_target = MIN(rc->bits_off_target, oxcf->maximum_buffer_size); 232 rc->buffer_level = rc->bits_off_target; 233 234 if (cpi->use_svc && cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER) { 235 update_layer_buffer_level(cpi, encoded_frame_size); 236 } 237} 238 239int vp9_rc_drop_frame(VP9_COMP *cpi) { 240 const VP9_CONFIG *oxcf = &cpi->oxcf; 241 RATE_CONTROL *const rc = &cpi->rc; 242 243 if (!oxcf->drop_frames_water_mark) { 244 return 0; 245 } else { 246 if (rc->buffer_level < 0) { 247 // Always drop if buffer is below 0. 248 return 1; 249 } else { 250 // If buffer is below drop_mark, for now just drop every other frame 251 // (starting with the next frame) until it increases back over drop_mark. 252 int drop_mark = (int)(oxcf->drop_frames_water_mark * 253 oxcf->optimal_buffer_level / 100); 254 if ((rc->buffer_level > drop_mark) && 255 (rc->decimation_factor > 0)) { 256 --rc->decimation_factor; 257 } else if (rc->buffer_level <= drop_mark && 258 rc->decimation_factor == 0) { 259 rc->decimation_factor = 1; 260 } 261 if (rc->decimation_factor > 0) { 262 if (rc->decimation_count > 0) { 263 --rc->decimation_count; 264 return 1; 265 } else { 266 rc->decimation_count = rc->decimation_factor; 267 return 0; 268 } 269 } else { 270 rc->decimation_count = 0; 271 return 0; 272 } 273 } 274 } 275} 276 277static double get_rate_correction_factor(const VP9_COMP *cpi) { 278 if (cpi->common.frame_type == KEY_FRAME) { 279 return cpi->rc.key_frame_rate_correction_factor; 280 } else { 281 if ((cpi->refresh_alt_ref_frame || cpi->refresh_golden_frame) && 282 !(cpi->use_svc && cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER)) 283 return cpi->rc.gf_rate_correction_factor; 284 else 285 return cpi->rc.rate_correction_factor; 286 } 287} 288 289static void set_rate_correction_factor(VP9_COMP *cpi, double factor) { 290 if (cpi->common.frame_type == KEY_FRAME) { 291 cpi->rc.key_frame_rate_correction_factor = factor; 292 } else { 293 if ((cpi->refresh_alt_ref_frame || cpi->refresh_golden_frame) && 294 !(cpi->use_svc && cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER)) 295 cpi->rc.gf_rate_correction_factor = factor; 296 else 297 cpi->rc.rate_correction_factor = factor; 298 } 299} 300 301void vp9_rc_update_rate_correction_factors(VP9_COMP *cpi, int damp_var) { 302 const int q = cpi->common.base_qindex; 303 int correction_factor = 100; 304 double rate_correction_factor = get_rate_correction_factor(cpi); 305 double adjustment_limit; 306 307 int projected_size_based_on_q = 0; 308 309 // Clear down mmx registers to allow floating point in what follows 310 vp9_clear_system_state(); 311 312 // Work out how big we would have expected the frame to be at this Q given 313 // the current correction factor. 314 // Stay in double to avoid int overflow when values are large 315 projected_size_based_on_q = estimate_bits_at_q(cpi->common.frame_type, q, 316 cpi->common.MBs, 317 rate_correction_factor); 318 // Work out a size correction factor. 319 if (projected_size_based_on_q > 0) 320 correction_factor = (100 * cpi->rc.projected_frame_size) / 321 projected_size_based_on_q; 322 323 // More heavily damped adjustment used if we have been oscillating either side 324 // of target. 325 switch (damp_var) { 326 case 0: 327 adjustment_limit = 0.75; 328 break; 329 case 1: 330 adjustment_limit = 0.375; 331 break; 332 case 2: 333 default: 334 adjustment_limit = 0.25; 335 break; 336 } 337 338 if (correction_factor > 102) { 339 // We are not already at the worst allowable quality 340 correction_factor = 341 (int)(100 + ((correction_factor - 100) * adjustment_limit)); 342 rate_correction_factor = 343 ((rate_correction_factor * correction_factor) / 100); 344 345 // Keep rate_correction_factor within limits 346 if (rate_correction_factor > MAX_BPB_FACTOR) 347 rate_correction_factor = MAX_BPB_FACTOR; 348 } else if (correction_factor < 99) { 349 // We are not already at the best allowable quality 350 correction_factor = 351 (int)(100 - ((100 - correction_factor) * adjustment_limit)); 352 rate_correction_factor = 353 ((rate_correction_factor * correction_factor) / 100); 354 355 // Keep rate_correction_factor within limits 356 if (rate_correction_factor < MIN_BPB_FACTOR) 357 rate_correction_factor = MIN_BPB_FACTOR; 358 } 359 360 set_rate_correction_factor(cpi, rate_correction_factor); 361} 362 363 364int vp9_rc_regulate_q(const VP9_COMP *cpi, int target_bits_per_frame, 365 int active_best_quality, int active_worst_quality) { 366 const VP9_COMMON *const cm = &cpi->common; 367 int q = active_worst_quality; 368 int last_error = INT_MAX; 369 int i, target_bits_per_mb; 370 const double correction_factor = get_rate_correction_factor(cpi); 371 372 // Calculate required scaling factor based on target frame size and size of 373 // frame produced using previous Q. 374 if (target_bits_per_frame >= (INT_MAX >> BPER_MB_NORMBITS)) 375 // Case where we would overflow int 376 target_bits_per_mb = (target_bits_per_frame / cm->MBs) << BPER_MB_NORMBITS; 377 else 378 target_bits_per_mb = (target_bits_per_frame << BPER_MB_NORMBITS) / cm->MBs; 379 380 i = active_best_quality; 381 382 do { 383 const int bits_per_mb_at_this_q = (int)vp9_rc_bits_per_mb(cm->frame_type, i, 384 correction_factor); 385 386 if (bits_per_mb_at_this_q <= target_bits_per_mb) { 387 if ((target_bits_per_mb - bits_per_mb_at_this_q) <= last_error) 388 q = i; 389 else 390 q = i - 1; 391 392 break; 393 } else { 394 last_error = bits_per_mb_at_this_q - target_bits_per_mb; 395 } 396 } while (++i <= active_worst_quality); 397 398 return q; 399} 400 401static int get_active_quality(int q, int gfu_boost, int low, int high, 402 int *low_motion_minq, int *high_motion_minq) { 403 if (gfu_boost > high) { 404 return low_motion_minq[q]; 405 } else if (gfu_boost < low) { 406 return high_motion_minq[q]; 407 } else { 408 const int gap = high - low; 409 const int offset = high - gfu_boost; 410 const int qdiff = high_motion_minq[q] - low_motion_minq[q]; 411 const int adjustment = ((offset * qdiff) + (gap >> 1)) / gap; 412 return low_motion_minq[q] + adjustment; 413 } 414} 415 416static int calc_active_worst_quality_one_pass_vbr(const VP9_COMP *cpi) { 417 const RATE_CONTROL *const rc = &cpi->rc; 418 const unsigned int curr_frame = cpi->common.current_video_frame; 419 int active_worst_quality; 420 421 if (cpi->common.frame_type == KEY_FRAME) { 422 active_worst_quality = curr_frame == 0 ? rc->worst_quality 423 : rc->last_q[KEY_FRAME] * 2; 424 } else { 425 if (!rc->is_src_frame_alt_ref && 426 (cpi->refresh_golden_frame || cpi->refresh_alt_ref_frame)) { 427 active_worst_quality = curr_frame == 1 ? rc->last_q[KEY_FRAME] * 5 / 4 428 : rc->last_q[INTER_FRAME]; 429 } else { 430 active_worst_quality = curr_frame == 1 ? rc->last_q[KEY_FRAME] * 2 431 : rc->last_q[INTER_FRAME] * 2; 432 } 433 } 434 435 return MIN(active_worst_quality, rc->worst_quality); 436} 437 438// Adjust active_worst_quality level based on buffer level. 439static int calc_active_worst_quality_one_pass_cbr(const VP9_COMP *cpi) { 440 // Adjust active_worst_quality: If buffer is above the optimal/target level, 441 // bring active_worst_quality down depending on fullness of buffer. 442 // If buffer is below the optimal level, let the active_worst_quality go from 443 // ambient Q (at buffer = optimal level) to worst_quality level 444 // (at buffer = critical level). 445 const VP9_CONFIG *oxcf = &cpi->oxcf; 446 const RATE_CONTROL *rc = &cpi->rc; 447 // Buffer level below which we push active_worst to worst_quality. 448 int64_t critical_level = oxcf->optimal_buffer_level >> 2; 449 int64_t buff_lvl_step = 0; 450 int adjustment = 0; 451 int active_worst_quality; 452 if (cpi->common.frame_type == KEY_FRAME) 453 return rc->worst_quality; 454 if (cpi->common.current_video_frame > 1) 455 active_worst_quality = MIN(rc->worst_quality, 456 rc->avg_frame_qindex[INTER_FRAME] * 5 / 4); 457 else 458 active_worst_quality = MIN(rc->worst_quality, 459 rc->avg_frame_qindex[KEY_FRAME] * 3 / 2); 460 if (rc->buffer_level > oxcf->optimal_buffer_level) { 461 // Adjust down. 462 // Maximum limit for down adjustment, ~30%. 463 int max_adjustment_down = active_worst_quality / 3; 464 if (max_adjustment_down) { 465 buff_lvl_step = ((oxcf->maximum_buffer_size - 466 oxcf->optimal_buffer_level) / max_adjustment_down); 467 if (buff_lvl_step) 468 adjustment = (int)((rc->buffer_level - oxcf->optimal_buffer_level) / 469 buff_lvl_step); 470 active_worst_quality -= adjustment; 471 } 472 } else if (rc->buffer_level > critical_level) { 473 // Adjust up from ambient Q. 474 if (critical_level) { 475 buff_lvl_step = (oxcf->optimal_buffer_level - critical_level); 476 if (buff_lvl_step) { 477 adjustment = 478 (int)((rc->worst_quality - rc->avg_frame_qindex[INTER_FRAME]) * 479 (oxcf->optimal_buffer_level - rc->buffer_level) / 480 buff_lvl_step); 481 } 482 active_worst_quality = rc->avg_frame_qindex[INTER_FRAME] + adjustment; 483 } 484 } else { 485 // Set to worst_quality if buffer is below critical level. 486 active_worst_quality = rc->worst_quality; 487 } 488 return active_worst_quality; 489} 490 491static int rc_pick_q_and_bounds_one_pass_cbr(const VP9_COMP *cpi, 492 int *bottom_index, 493 int *top_index) { 494 const VP9_COMMON *const cm = &cpi->common; 495 const RATE_CONTROL *const rc = &cpi->rc; 496 int active_best_quality; 497 int active_worst_quality = calc_active_worst_quality_one_pass_cbr(cpi); 498 int q; 499 500 if (frame_is_intra_only(cm)) { 501 active_best_quality = rc->best_quality; 502 // Handle the special case for key frames forced when we have75 reached 503 // the maximum key frame interval. Here force the Q to a range 504 // based on the ambient Q to reduce the risk of popping. 505 if (rc->this_key_frame_forced) { 506 int qindex = rc->last_boosted_qindex; 507 double last_boosted_q = vp9_convert_qindex_to_q(qindex); 508 int delta_qindex = vp9_compute_qdelta(cpi, last_boosted_q, 509 (last_boosted_q * 0.75)); 510 active_best_quality = MAX(qindex + delta_qindex, rc->best_quality); 511 } else if (cm->current_video_frame > 0) { 512 // not first frame of one pass and kf_boost is set 513 double q_adj_factor = 1.0; 514 double q_val; 515 516 active_best_quality = get_active_quality(rc->avg_frame_qindex[KEY_FRAME], 517 rc->kf_boost, 518 kf_low, kf_high, 519 kf_low_motion_minq, 520 kf_high_motion_minq); 521 522 // Allow somewhat lower kf minq with small image formats. 523 if ((cm->width * cm->height) <= (352 * 288)) { 524 q_adj_factor -= 0.25; 525 } 526 527 // Convert the adjustment factor to a qindex delta 528 // on active_best_quality. 529 q_val = vp9_convert_qindex_to_q(active_best_quality); 530 active_best_quality += vp9_compute_qdelta(cpi, q_val, q_val * 531 q_adj_factor); 532 } 533 } else if (!rc->is_src_frame_alt_ref && 534 !cpi->use_svc && 535 (cpi->refresh_golden_frame || cpi->refresh_alt_ref_frame)) { 536 // Use the lower of active_worst_quality and recent 537 // average Q as basis for GF/ARF best Q limit unless last frame was 538 // a key frame. 539 if (rc->frames_since_key > 1 && 540 rc->avg_frame_qindex[INTER_FRAME] < active_worst_quality) { 541 q = rc->avg_frame_qindex[INTER_FRAME]; 542 } else { 543 q = active_worst_quality; 544 } 545 active_best_quality = get_active_quality( 546 q, rc->gfu_boost, gf_low, gf_high, 547 gf_low_motion_minq, gf_high_motion_minq); 548 } else { 549 // Use the lower of active_worst_quality and recent/average Q. 550 if (cm->current_video_frame > 1) { 551 if (rc->avg_frame_qindex[INTER_FRAME] < active_worst_quality) 552 active_best_quality = inter_minq[rc->avg_frame_qindex[INTER_FRAME]]; 553 else 554 active_best_quality = inter_minq[active_worst_quality]; 555 } else { 556 if (rc->avg_frame_qindex[KEY_FRAME] < active_worst_quality) 557 active_best_quality = inter_minq[rc->avg_frame_qindex[KEY_FRAME]]; 558 else 559 active_best_quality = inter_minq[active_worst_quality]; 560 } 561 } 562 563 // Clip the active best and worst quality values to limits 564 active_best_quality = clamp(active_best_quality, 565 rc->best_quality, rc->worst_quality); 566 active_worst_quality = clamp(active_worst_quality, 567 active_best_quality, rc->worst_quality); 568 569 *top_index = active_worst_quality; 570 *bottom_index = active_best_quality; 571 572#if LIMIT_QRANGE_FOR_ALTREF_AND_KEY 573 // Limit Q range for the adaptive loop. 574 if (cm->frame_type == KEY_FRAME && !rc->this_key_frame_forced) { 575 if (!(cm->current_video_frame == 0)) 576 *top_index = (active_worst_quality + active_best_quality * 3) / 4; 577 } 578#endif 579 // Special case code to try and match quality with forced key frames 580 if (cm->frame_type == KEY_FRAME && rc->this_key_frame_forced) { 581 q = rc->last_boosted_qindex; 582 } else { 583 q = vp9_rc_regulate_q(cpi, rc->this_frame_target, 584 active_best_quality, active_worst_quality); 585 if (q > *top_index) { 586 // Special case when we are targeting the max allowed rate 587 if (cpi->rc.this_frame_target >= cpi->rc.max_frame_bandwidth) 588 *top_index = q; 589 else 590 q = *top_index; 591 } 592 } 593 assert(*top_index <= rc->worst_quality && 594 *top_index >= rc->best_quality); 595 assert(*bottom_index <= rc->worst_quality && 596 *bottom_index >= rc->best_quality); 597 assert(q <= rc->worst_quality && q >= rc->best_quality); 598 return q; 599} 600 601static int rc_pick_q_and_bounds_one_pass_vbr(const VP9_COMP *cpi, 602 int *bottom_index, 603 int *top_index) { 604 const VP9_COMMON *const cm = &cpi->common; 605 const RATE_CONTROL *const rc = &cpi->rc; 606 const VP9_CONFIG *const oxcf = &cpi->oxcf; 607 int active_best_quality; 608 int active_worst_quality = calc_active_worst_quality_one_pass_vbr(cpi); 609 int q; 610 611 if (frame_is_intra_only(cm)) { 612 active_best_quality = rc->best_quality; 613#if !CONFIG_MULTIPLE_ARF 614 // Handle the special case for key frames forced when we have75 reached 615 // the maximum key frame interval. Here force the Q to a range 616 // based on the ambient Q to reduce the risk of popping. 617 if (rc->this_key_frame_forced) { 618 int qindex = rc->last_boosted_qindex; 619 double last_boosted_q = vp9_convert_qindex_to_q(qindex); 620 int delta_qindex = vp9_compute_qdelta(cpi, last_boosted_q, 621 (last_boosted_q * 0.75)); 622 active_best_quality = MAX(qindex + delta_qindex, rc->best_quality); 623 } else if (cm->current_video_frame > 0) { 624 // not first frame of one pass and kf_boost is set 625 double q_adj_factor = 1.0; 626 double q_val; 627 628 active_best_quality = get_active_quality(rc->avg_frame_qindex[KEY_FRAME], 629 rc->kf_boost, 630 kf_low, kf_high, 631 kf_low_motion_minq, 632 kf_high_motion_minq); 633 634 // Allow somewhat lower kf minq with small image formats. 635 if ((cm->width * cm->height) <= (352 * 288)) { 636 q_adj_factor -= 0.25; 637 } 638 639 // Convert the adjustment factor to a qindex delta 640 // on active_best_quality. 641 q_val = vp9_convert_qindex_to_q(active_best_quality); 642 active_best_quality += vp9_compute_qdelta(cpi, q_val, q_val * 643 q_adj_factor); 644 } 645#else 646 double current_q; 647 // Force the KF quantizer to be 30% of the active_worst_quality. 648 current_q = vp9_convert_qindex_to_q(active_worst_quality); 649 active_best_quality = active_worst_quality 650 + vp9_compute_qdelta(cpi, current_q, current_q * 0.3); 651#endif 652 } else if (!rc->is_src_frame_alt_ref && 653 (cpi->refresh_golden_frame || cpi->refresh_alt_ref_frame)) { 654 // Use the lower of active_worst_quality and recent 655 // average Q as basis for GF/ARF best Q limit unless last frame was 656 // a key frame. 657 if (rc->frames_since_key > 1 && 658 rc->avg_frame_qindex[INTER_FRAME] < active_worst_quality) { 659 q = rc->avg_frame_qindex[INTER_FRAME]; 660 } else { 661 q = rc->avg_frame_qindex[KEY_FRAME]; 662 } 663 // For constrained quality dont allow Q less than the cq level 664 if (oxcf->end_usage == USAGE_CONSTRAINED_QUALITY) { 665 if (q < cpi->cq_target_quality) 666 q = cpi->cq_target_quality; 667 if (rc->frames_since_key > 1) { 668 active_best_quality = get_active_quality(q, rc->gfu_boost, 669 gf_low, gf_high, 670 afq_low_motion_minq, 671 afq_high_motion_minq); 672 } else { 673 active_best_quality = get_active_quality(q, rc->gfu_boost, 674 gf_low, gf_high, 675 gf_low_motion_minq, 676 gf_high_motion_minq); 677 } 678 // Constrained quality use slightly lower active best. 679 active_best_quality = active_best_quality * 15 / 16; 680 681 } else if (oxcf->end_usage == USAGE_CONSTANT_QUALITY) { 682 if (!cpi->refresh_alt_ref_frame) { 683 active_best_quality = cpi->cq_target_quality; 684 } else { 685 if (rc->frames_since_key > 1) { 686 active_best_quality = get_active_quality( 687 q, rc->gfu_boost, gf_low, gf_high, 688 afq_low_motion_minq, afq_high_motion_minq); 689 } else { 690 active_best_quality = get_active_quality( 691 q, rc->gfu_boost, gf_low, gf_high, 692 gf_low_motion_minq, gf_high_motion_minq); 693 } 694 } 695 } else { 696 active_best_quality = get_active_quality( 697 q, rc->gfu_boost, gf_low, gf_high, 698 gf_low_motion_minq, gf_high_motion_minq); 699 } 700 } else { 701 if (oxcf->end_usage == USAGE_CONSTANT_QUALITY) { 702 active_best_quality = cpi->cq_target_quality; 703 } else { 704 // Use the lower of active_worst_quality and recent/average Q. 705 if (cm->current_video_frame > 1) 706 active_best_quality = inter_minq[rc->avg_frame_qindex[INTER_FRAME]]; 707 else 708 active_best_quality = inter_minq[rc->avg_frame_qindex[KEY_FRAME]]; 709 // For the constrained quality mode we don't want 710 // q to fall below the cq level. 711 if ((oxcf->end_usage == USAGE_CONSTRAINED_QUALITY) && 712 (active_best_quality < cpi->cq_target_quality)) { 713 // If we are strongly undershooting the target rate in the last 714 // frames then use the user passed in cq value not the auto 715 // cq value. 716 if (rc->rolling_actual_bits < rc->min_frame_bandwidth) 717 active_best_quality = oxcf->cq_level; 718 else 719 active_best_quality = cpi->cq_target_quality; 720 } 721 } 722 } 723 724 // Clip the active best and worst quality values to limits 725 active_best_quality = clamp(active_best_quality, 726 rc->best_quality, rc->worst_quality); 727 active_worst_quality = clamp(active_worst_quality, 728 active_best_quality, rc->worst_quality); 729 730 *top_index = active_worst_quality; 731 *bottom_index = active_best_quality; 732 733#if LIMIT_QRANGE_FOR_ALTREF_AND_KEY 734 // Limit Q range for the adaptive loop. 735 if (cm->frame_type == KEY_FRAME && !rc->this_key_frame_forced) { 736 if (!(cm->current_video_frame == 0)) 737 *top_index = (active_worst_quality + active_best_quality * 3) / 4; 738 } else if (!rc->is_src_frame_alt_ref && 739 (cpi->refresh_golden_frame || cpi->refresh_alt_ref_frame)) { 740 *top_index = (active_worst_quality + active_best_quality) / 2; 741 } 742#endif 743 if (oxcf->end_usage == USAGE_CONSTANT_QUALITY) { 744 q = active_best_quality; 745 // Special case code to try and match quality with forced key frames 746 } else if ((cm->frame_type == KEY_FRAME) && rc->this_key_frame_forced) { 747 q = rc->last_boosted_qindex; 748 } else { 749 q = vp9_rc_regulate_q(cpi, rc->this_frame_target, 750 active_best_quality, active_worst_quality); 751 if (q > *top_index) { 752 // Special case when we are targeting the max allowed rate 753 if (cpi->rc.this_frame_target >= cpi->rc.max_frame_bandwidth) 754 *top_index = q; 755 else 756 q = *top_index; 757 } 758 } 759#if CONFIG_MULTIPLE_ARF 760 // Force the quantizer determined by the coding order pattern. 761 if (cpi->multi_arf_enabled && (cm->frame_type != KEY_FRAME) && 762 cpi->oxcf.end_usage != USAGE_CONSTANT_QUALITY) { 763 double new_q; 764 double current_q = vp9_convert_qindex_to_q(active_worst_quality); 765 int level = cpi->this_frame_weight; 766 assert(level >= 0); 767 new_q = current_q * (1.0 - (0.2 * (cpi->max_arf_level - level))); 768 q = active_worst_quality + 769 vp9_compute_qdelta(cpi, current_q, new_q); 770 771 *bottom_index = q; 772 *top_index = q; 773 printf("frame:%d q:%d\n", cm->current_video_frame, q); 774 } 775#endif 776 assert(*top_index <= rc->worst_quality && 777 *top_index >= rc->best_quality); 778 assert(*bottom_index <= rc->worst_quality && 779 *bottom_index >= rc->best_quality); 780 assert(q <= rc->worst_quality && q >= rc->best_quality); 781 return q; 782} 783 784static int rc_pick_q_and_bounds_two_pass(const VP9_COMP *cpi, 785 int *bottom_index, 786 int *top_index) { 787 const VP9_COMMON *const cm = &cpi->common; 788 const RATE_CONTROL *const rc = &cpi->rc; 789 const VP9_CONFIG *const oxcf = &cpi->oxcf; 790 int active_best_quality; 791 int active_worst_quality = cpi->twopass.active_worst_quality; 792 int q; 793 794 if (frame_is_intra_only(cm)) { 795#if !CONFIG_MULTIPLE_ARF 796 // Handle the special case for key frames forced when we have75 reached 797 // the maximum key frame interval. Here force the Q to a range 798 // based on the ambient Q to reduce the risk of popping. 799 if (rc->this_key_frame_forced) { 800 int qindex = rc->last_boosted_qindex; 801 double last_boosted_q = vp9_convert_qindex_to_q(qindex); 802 int delta_qindex = vp9_compute_qdelta(cpi, last_boosted_q, 803 (last_boosted_q * 0.75)); 804 active_best_quality = MAX(qindex + delta_qindex, rc->best_quality); 805 } else { 806 // Not forced keyframe. 807 double q_adj_factor = 1.0; 808 double q_val; 809 // Baseline value derived from cpi->active_worst_quality and kf boost. 810 active_best_quality = get_active_quality(active_worst_quality, 811 rc->kf_boost, 812 kf_low, kf_high, 813 kf_low_motion_minq, 814 kf_high_motion_minq); 815 816 // Allow somewhat lower kf minq with small image formats. 817 if ((cm->width * cm->height) <= (352 * 288)) { 818 q_adj_factor -= 0.25; 819 } 820 821 // Make a further adjustment based on the kf zero motion measure. 822 q_adj_factor += 0.05 - (0.001 * (double)cpi->twopass.kf_zeromotion_pct); 823 824 // Convert the adjustment factor to a qindex delta 825 // on active_best_quality. 826 q_val = vp9_convert_qindex_to_q(active_best_quality); 827 active_best_quality += vp9_compute_qdelta(cpi, q_val, q_val * 828 q_adj_factor); 829 } 830#else 831 double current_q; 832 // Force the KF quantizer to be 30% of the active_worst_quality. 833 current_q = vp9_convert_qindex_to_q(active_worst_quality); 834 active_best_quality = active_worst_quality 835 + vp9_compute_qdelta(cpi, current_q, current_q * 0.3); 836#endif 837 } else if (!rc->is_src_frame_alt_ref && 838 (cpi->refresh_golden_frame || cpi->refresh_alt_ref_frame)) { 839 // Use the lower of active_worst_quality and recent 840 // average Q as basis for GF/ARF best Q limit unless last frame was 841 // a key frame. 842 if (rc->frames_since_key > 1 && 843 rc->avg_frame_qindex[INTER_FRAME] < active_worst_quality) { 844 q = rc->avg_frame_qindex[INTER_FRAME]; 845 } else { 846 q = active_worst_quality; 847 } 848 // For constrained quality dont allow Q less than the cq level 849 if (oxcf->end_usage == USAGE_CONSTRAINED_QUALITY) { 850 if (q < cpi->cq_target_quality) 851 q = cpi->cq_target_quality; 852 if (rc->frames_since_key > 1) { 853 active_best_quality = get_active_quality(q, rc->gfu_boost, 854 gf_low, gf_high, 855 afq_low_motion_minq, 856 afq_high_motion_minq); 857 } else { 858 active_best_quality = get_active_quality(q, rc->gfu_boost, 859 gf_low, gf_high, 860 gf_low_motion_minq, 861 gf_high_motion_minq); 862 } 863 // Constrained quality use slightly lower active best. 864 active_best_quality = active_best_quality * 15 / 16; 865 866 } else if (oxcf->end_usage == USAGE_CONSTANT_QUALITY) { 867 if (!cpi->refresh_alt_ref_frame) { 868 active_best_quality = cpi->cq_target_quality; 869 } else { 870 if (rc->frames_since_key > 1) { 871 active_best_quality = get_active_quality( 872 q, rc->gfu_boost, gf_low, gf_high, 873 afq_low_motion_minq, afq_high_motion_minq); 874 } else { 875 active_best_quality = get_active_quality( 876 q, rc->gfu_boost, gf_low, gf_high, 877 gf_low_motion_minq, gf_high_motion_minq); 878 } 879 } 880 } else { 881 active_best_quality = get_active_quality( 882 q, rc->gfu_boost, gf_low, gf_high, 883 gf_low_motion_minq, gf_high_motion_minq); 884 } 885 } else { 886 if (oxcf->end_usage == USAGE_CONSTANT_QUALITY) { 887 active_best_quality = cpi->cq_target_quality; 888 } else { 889 active_best_quality = inter_minq[active_worst_quality]; 890 891 // For the constrained quality mode we don't want 892 // q to fall below the cq level. 893 if ((oxcf->end_usage == USAGE_CONSTRAINED_QUALITY) && 894 (active_best_quality < cpi->cq_target_quality)) { 895 // If we are strongly undershooting the target rate in the last 896 // frames then use the user passed in cq value not the auto 897 // cq value. 898 if (rc->rolling_actual_bits < rc->min_frame_bandwidth) 899 active_best_quality = oxcf->cq_level; 900 else 901 active_best_quality = cpi->cq_target_quality; 902 } 903 } 904 } 905 906 // Clip the active best and worst quality values to limits. 907 active_best_quality = clamp(active_best_quality, 908 rc->best_quality, rc->worst_quality); 909 active_worst_quality = clamp(active_worst_quality, 910 active_best_quality, rc->worst_quality); 911 912 *top_index = active_worst_quality; 913 *bottom_index = active_best_quality; 914 915#if LIMIT_QRANGE_FOR_ALTREF_AND_KEY 916 // Limit Q range for the adaptive loop. 917 if (cm->frame_type == KEY_FRAME && !rc->this_key_frame_forced) { 918 *top_index = (active_worst_quality + active_best_quality * 3) / 4; 919 } else if (!rc->is_src_frame_alt_ref && 920 (oxcf->end_usage != USAGE_STREAM_FROM_SERVER) && 921 (cpi->refresh_golden_frame || cpi->refresh_alt_ref_frame)) { 922 *top_index = (active_worst_quality + active_best_quality) / 2; 923 } 924#endif 925 926 if (oxcf->end_usage == USAGE_CONSTANT_QUALITY) { 927 q = active_best_quality; 928 // Special case code to try and match quality with forced key frames. 929 } else if ((cm->frame_type == KEY_FRAME) && rc->this_key_frame_forced) { 930 q = rc->last_boosted_qindex; 931 } else { 932 q = vp9_rc_regulate_q(cpi, rc->this_frame_target, 933 active_best_quality, active_worst_quality); 934 if (q > *top_index) { 935 // Special case when we are targeting the max allowed rate. 936 if (rc->this_frame_target >= rc->max_frame_bandwidth) 937 *top_index = q; 938 else 939 q = *top_index; 940 } 941 } 942#if CONFIG_MULTIPLE_ARF 943 // Force the quantizer determined by the coding order pattern. 944 if (cpi->multi_arf_enabled && (cm->frame_type != KEY_FRAME) && 945 cpi->oxcf.end_usage != USAGE_CONSTANT_QUALITY) { 946 double new_q; 947 double current_q = vp9_convert_qindex_to_q(active_worst_quality); 948 int level = cpi->this_frame_weight; 949 assert(level >= 0); 950 new_q = current_q * (1.0 - (0.2 * (cpi->max_arf_level - level))); 951 q = active_worst_quality + 952 vp9_compute_qdelta(cpi, current_q, new_q); 953 954 *bottom_index = q; 955 *top_index = q; 956 printf("frame:%d q:%d\n", cm->current_video_frame, q); 957 } 958#endif 959 assert(*top_index <= rc->worst_quality && 960 *top_index >= rc->best_quality); 961 assert(*bottom_index <= rc->worst_quality && 962 *bottom_index >= rc->best_quality); 963 assert(q <= rc->worst_quality && q >= rc->best_quality); 964 return q; 965} 966 967int vp9_rc_pick_q_and_bounds(const VP9_COMP *cpi, 968 int *bottom_index, 969 int *top_index) { 970 int q; 971 if (cpi->pass == 0) { 972 if (cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER) 973 q = rc_pick_q_and_bounds_one_pass_cbr(cpi, bottom_index, top_index); 974 else 975 q = rc_pick_q_and_bounds_one_pass_vbr(cpi, bottom_index, top_index); 976 } else { 977 q = rc_pick_q_and_bounds_two_pass(cpi, bottom_index, top_index); 978 } 979 980 // Q of 0 is disabled because we force tx size to be 981 // 16x16... 982 if (cpi->sf.use_nonrd_pick_mode) { 983 if (q == 0) 984 q++; 985 if (cpi->sf.force_frame_boost == 1) 986 q -= cpi->sf.max_delta_qindex; 987 988 if (q < *bottom_index) 989 *bottom_index = q; 990 else if (q > *top_index) 991 *top_index = q; 992 } 993 return q; 994} 995 996void vp9_rc_compute_frame_size_bounds(const VP9_COMP *cpi, 997 int this_frame_target, 998 int *frame_under_shoot_limit, 999 int *frame_over_shoot_limit) { 1000 // Set-up bounds on acceptable frame size: 1001 if (cpi->oxcf.end_usage == USAGE_CONSTANT_QUALITY) { 1002 *frame_under_shoot_limit = 0; 1003 *frame_over_shoot_limit = INT_MAX; 1004 } else { 1005 int recode_tolerance = 1006 (cpi->sf.recode_tolerance * this_frame_target) / 100; 1007 1008 *frame_over_shoot_limit = this_frame_target + recode_tolerance; 1009 *frame_under_shoot_limit = this_frame_target - recode_tolerance; 1010 1011 // For very small rate targets where the fractional adjustment 1012 // may be tiny make sure there is at least a minimum range. 1013 *frame_over_shoot_limit += 200; 1014 *frame_under_shoot_limit -= 200; 1015 if (*frame_under_shoot_limit < 0) 1016 *frame_under_shoot_limit = 0; 1017 1018 // Clip to maximum allowed rate for a frame. 1019 if (*frame_over_shoot_limit > cpi->rc.max_frame_bandwidth) { 1020 *frame_over_shoot_limit = cpi->rc.max_frame_bandwidth; 1021 } 1022 } 1023} 1024 1025void vp9_rc_set_frame_target(VP9_COMP *cpi, int target) { 1026 const VP9_COMMON *const cm = &cpi->common; 1027 RATE_CONTROL *const rc = &cpi->rc; 1028 1029 rc->this_frame_target = target; 1030 // Target rate per SB64 (including partial SB64s. 1031 rc->sb64_target_rate = ((int64_t)rc->this_frame_target * 64 * 64) / 1032 (cm->width * cm->height); 1033} 1034 1035static void update_alt_ref_frame_stats(VP9_COMP *cpi) { 1036 // this frame refreshes means next frames don't unless specified by user 1037 cpi->rc.frames_since_golden = 0; 1038 1039#if CONFIG_MULTIPLE_ARF 1040 if (!cpi->multi_arf_enabled) 1041#endif 1042 // Clear the alternate reference update pending flag. 1043 cpi->rc.source_alt_ref_pending = 0; 1044 1045 // Set the alternate reference frame active flag 1046 cpi->rc.source_alt_ref_active = 1; 1047} 1048 1049static void update_golden_frame_stats(VP9_COMP *cpi) { 1050 RATE_CONTROL *const rc = &cpi->rc; 1051 1052 // Update the Golden frame usage counts. 1053 if (cpi->refresh_golden_frame) { 1054 // this frame refreshes means next frames don't unless specified by user 1055 rc->frames_since_golden = 0; 1056 1057 if (!rc->source_alt_ref_pending) 1058 rc->source_alt_ref_active = 0; 1059 1060 // Decrement count down till next gf 1061 if (rc->frames_till_gf_update_due > 0) 1062 rc->frames_till_gf_update_due--; 1063 1064 } else if (!cpi->refresh_alt_ref_frame) { 1065 // Decrement count down till next gf 1066 if (rc->frames_till_gf_update_due > 0) 1067 rc->frames_till_gf_update_due--; 1068 1069 rc->frames_since_golden++; 1070 } 1071} 1072 1073void vp9_rc_postencode_update(VP9_COMP *cpi, uint64_t bytes_used) { 1074 VP9_COMMON *const cm = &cpi->common; 1075 RATE_CONTROL *const rc = &cpi->rc; 1076 1077 cm->last_frame_type = cm->frame_type; 1078 // Update rate control heuristics 1079 rc->projected_frame_size = (int)(bytes_used << 3); 1080 1081 // Post encode loop adjustment of Q prediction. 1082 vp9_rc_update_rate_correction_factors( 1083 cpi, (cpi->sf.recode_loop >= ALLOW_RECODE_KFARFGF || 1084 cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER) ? 2 : 0); 1085 1086 // Keep a record of last Q and ambient average Q. 1087 if (cm->frame_type == KEY_FRAME) { 1088 rc->last_q[KEY_FRAME] = cm->base_qindex; 1089 rc->avg_frame_qindex[KEY_FRAME] = ROUND_POWER_OF_TWO( 1090 3 * rc->avg_frame_qindex[KEY_FRAME] + cm->base_qindex, 2); 1091 } else if (!rc->is_src_frame_alt_ref && 1092 (cpi->refresh_golden_frame || cpi->refresh_alt_ref_frame) && 1093 !(cpi->use_svc && cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER)) { 1094 rc->last_q[2] = cm->base_qindex; 1095 rc->avg_frame_qindex[2] = ROUND_POWER_OF_TWO( 1096 3 * rc->avg_frame_qindex[2] + cm->base_qindex, 2); 1097 } else { 1098 rc->last_q[INTER_FRAME] = cm->base_qindex; 1099 rc->avg_frame_qindex[INTER_FRAME] = ROUND_POWER_OF_TWO( 1100 3 * rc->avg_frame_qindex[INTER_FRAME] + cm->base_qindex, 2); 1101 rc->ni_frames++; 1102 rc->tot_q += vp9_convert_qindex_to_q(cm->base_qindex); 1103 rc->avg_q = rc->tot_q / (double)rc->ni_frames; 1104 1105 // Calculate the average Q for normal inter frames (not key or GFU frames). 1106 rc->ni_tot_qi += cm->base_qindex; 1107 rc->ni_av_qi = rc->ni_tot_qi / rc->ni_frames; 1108 } 1109 1110 // Keep record of last boosted (KF/KF/ARF) Q value. 1111 // If the current frame is coded at a lower Q then we also update it. 1112 // If all mbs in this group are skipped only update if the Q value is 1113 // better than that already stored. 1114 // This is used to help set quality in forced key frames to reduce popping 1115 if ((cm->base_qindex < rc->last_boosted_qindex) || 1116 ((cpi->static_mb_pct < 100) && 1117 ((cm->frame_type == KEY_FRAME) || cpi->refresh_alt_ref_frame || 1118 (cpi->refresh_golden_frame && !rc->is_src_frame_alt_ref)))) { 1119 rc->last_boosted_qindex = cm->base_qindex; 1120 } 1121 1122 update_buffer_level(cpi, rc->projected_frame_size); 1123 1124 // Rolling monitors of whether we are over or underspending used to help 1125 // regulate min and Max Q in two pass. 1126 if (cm->frame_type != KEY_FRAME) { 1127 rc->rolling_target_bits = ROUND_POWER_OF_TWO( 1128 rc->rolling_target_bits * 3 + rc->this_frame_target, 2); 1129 rc->rolling_actual_bits = ROUND_POWER_OF_TWO( 1130 rc->rolling_actual_bits * 3 + rc->projected_frame_size, 2); 1131 rc->long_rolling_target_bits = ROUND_POWER_OF_TWO( 1132 rc->long_rolling_target_bits * 31 + rc->this_frame_target, 5); 1133 rc->long_rolling_actual_bits = ROUND_POWER_OF_TWO( 1134 rc->long_rolling_actual_bits * 31 + rc->projected_frame_size, 5); 1135 } 1136 1137 // Actual bits spent 1138 rc->total_actual_bits += rc->projected_frame_size; 1139 rc->total_target_bits += (cm->show_frame ? rc->av_per_frame_bandwidth : 0); 1140 1141 rc->total_target_vs_actual = rc->total_actual_bits - rc->total_target_bits; 1142 1143 if (cpi->oxcf.play_alternate && cpi->refresh_alt_ref_frame && 1144 (cm->frame_type != KEY_FRAME)) 1145 // Update the alternate reference frame stats as appropriate. 1146 update_alt_ref_frame_stats(cpi); 1147 else 1148 // Update the Golden frame stats as appropriate. 1149 update_golden_frame_stats(cpi); 1150 1151 if (cm->frame_type == KEY_FRAME) 1152 rc->frames_since_key = 0; 1153 if (cm->show_frame) { 1154 rc->frames_since_key++; 1155 rc->frames_to_key--; 1156 } 1157} 1158 1159void vp9_rc_postencode_update_drop_frame(VP9_COMP *cpi) { 1160 // Update buffer level with zero size, update frame counters, and return. 1161 update_buffer_level(cpi, 0); 1162 cpi->common.last_frame_type = cpi->common.frame_type; 1163 cpi->rc.frames_since_key++; 1164 cpi->rc.frames_to_key--; 1165} 1166 1167static int test_for_kf_one_pass(VP9_COMP *cpi) { 1168 // Placeholder function for auto key frame 1169 return 0; 1170} 1171// Use this macro to turn on/off use of alt-refs in one-pass mode. 1172#define USE_ALTREF_FOR_ONE_PASS 1 1173 1174static int calc_pframe_target_size_one_pass_vbr(const VP9_COMP *const cpi) { 1175 static const int af_ratio = 10; 1176 const RATE_CONTROL *const rc = &cpi->rc; 1177 int target; 1178#if USE_ALTREF_FOR_ONE_PASS 1179 target = (!rc->is_src_frame_alt_ref && 1180 (cpi->refresh_golden_frame || cpi->refresh_alt_ref_frame)) ? 1181 (rc->av_per_frame_bandwidth * rc->baseline_gf_interval * af_ratio) / 1182 (rc->baseline_gf_interval + af_ratio - 1) : 1183 (rc->av_per_frame_bandwidth * rc->baseline_gf_interval) / 1184 (rc->baseline_gf_interval + af_ratio - 1); 1185#else 1186 target = rc->av_per_frame_bandwidth; 1187#endif 1188 return vp9_rc_clamp_pframe_target_size(cpi, target); 1189} 1190 1191static int calc_iframe_target_size_one_pass_vbr(const VP9_COMP *const cpi) { 1192 static const int kf_ratio = 25; 1193 const RATE_CONTROL *rc = &cpi->rc; 1194 int target = rc->av_per_frame_bandwidth * kf_ratio; 1195 return vp9_rc_clamp_iframe_target_size(cpi, target); 1196} 1197 1198void vp9_rc_get_one_pass_vbr_params(VP9_COMP *cpi) { 1199 VP9_COMMON *const cm = &cpi->common; 1200 RATE_CONTROL *const rc = &cpi->rc; 1201 int target; 1202 if (!cpi->refresh_alt_ref_frame && 1203 (cm->current_video_frame == 0 || 1204 (cm->frame_flags & FRAMEFLAGS_KEY) || 1205 rc->frames_to_key == 0 || 1206 (cpi->oxcf.auto_key && test_for_kf_one_pass(cpi)))) { 1207 cm->frame_type = KEY_FRAME; 1208 rc->this_key_frame_forced = cm->current_video_frame != 0 && 1209 rc->frames_to_key == 0; 1210 rc->frames_to_key = cpi->key_frame_frequency; 1211 rc->kf_boost = DEFAULT_KF_BOOST; 1212 rc->source_alt_ref_active = 0; 1213 } else { 1214 cm->frame_type = INTER_FRAME; 1215 } 1216 if (rc->frames_till_gf_update_due == 0) { 1217 rc->baseline_gf_interval = DEFAULT_GF_INTERVAL; 1218 rc->frames_till_gf_update_due = rc->baseline_gf_interval; 1219 // NOTE: frames_till_gf_update_due must be <= frames_to_key. 1220 if (rc->frames_till_gf_update_due > rc->frames_to_key) 1221 rc->frames_till_gf_update_due = rc->frames_to_key; 1222 cpi->refresh_golden_frame = 1; 1223 rc->source_alt_ref_pending = USE_ALTREF_FOR_ONE_PASS; 1224 rc->gfu_boost = DEFAULT_GF_BOOST; 1225 } 1226 if (cm->frame_type == KEY_FRAME) 1227 target = calc_iframe_target_size_one_pass_vbr(cpi); 1228 else 1229 target = calc_pframe_target_size_one_pass_vbr(cpi); 1230 vp9_rc_set_frame_target(cpi, target); 1231} 1232 1233static int calc_pframe_target_size_one_pass_cbr(const VP9_COMP *cpi) { 1234 const VP9_CONFIG *oxcf = &cpi->oxcf; 1235 const RATE_CONTROL *rc = &cpi->rc; 1236 const int64_t diff = oxcf->optimal_buffer_level - rc->buffer_level; 1237 const int64_t one_pct_bits = 1 + oxcf->optimal_buffer_level / 100; 1238 int min_frame_target = MAX(rc->av_per_frame_bandwidth >> 4, 1239 FRAME_OVERHEAD_BITS); 1240 int target = rc->av_per_frame_bandwidth; 1241 if (cpi->svc.number_temporal_layers > 1 && 1242 cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER) { 1243 // Note that for layers, av_per_frame_bandwidth is the cumulative 1244 // per-frame-bandwidth. For the target size of this frame, use the 1245 // layer average frame size (i.e., non-cumulative per-frame-bw). 1246 int current_temporal_layer = cpi->svc.temporal_layer_id; 1247 const LAYER_CONTEXT *lc = &cpi->svc.layer_context[current_temporal_layer]; 1248 target = lc->avg_frame_size; 1249 min_frame_target = MAX(lc->avg_frame_size >> 4, FRAME_OVERHEAD_BITS); 1250 } 1251 if (diff > 0) { 1252 // Lower the target bandwidth for this frame. 1253 const int pct_low = (int)MIN(diff / one_pct_bits, oxcf->under_shoot_pct); 1254 target -= (target * pct_low) / 200; 1255 } else if (diff < 0) { 1256 // Increase the target bandwidth for this frame. 1257 const int pct_high = (int)MIN(-diff / one_pct_bits, oxcf->over_shoot_pct); 1258 target += (target * pct_high) / 200; 1259 } 1260 return MAX(min_frame_target, target); 1261} 1262 1263static int calc_iframe_target_size_one_pass_cbr(const VP9_COMP *cpi) { 1264 const RATE_CONTROL *rc = &cpi->rc; 1265 int target; 1266 1267 if (cpi->common.current_video_frame == 0) { 1268 target = ((cpi->oxcf.starting_buffer_level / 2) > INT_MAX) 1269 ? INT_MAX : (int)(cpi->oxcf.starting_buffer_level / 2); 1270 } else { 1271 const int initial_boost = 32; 1272 int kf_boost = MAX(initial_boost, (int)(2 * cpi->output_framerate - 16)); 1273 if (rc->frames_since_key < cpi->output_framerate / 2) { 1274 kf_boost = (int)(kf_boost * rc->frames_since_key / 1275 (cpi->output_framerate / 2)); 1276 } 1277 target = ((16 + kf_boost) * rc->av_per_frame_bandwidth) >> 4; 1278 } 1279 return vp9_rc_clamp_iframe_target_size(cpi, target); 1280} 1281 1282void vp9_rc_get_svc_params(VP9_COMP *cpi) { 1283 VP9_COMMON *const cm = &cpi->common; 1284 RATE_CONTROL *const rc = &cpi->rc; 1285 int target = rc->av_per_frame_bandwidth; 1286 if ((cm->current_video_frame == 0) || 1287 (cm->frame_flags & FRAMEFLAGS_KEY) || 1288 (cpi->oxcf.auto_key && (rc->frames_since_key % 1289 cpi->key_frame_frequency == 0))) { 1290 cm->frame_type = KEY_FRAME; 1291 rc->source_alt_ref_active = 0; 1292 if (cpi->pass == 0 && cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER) { 1293 target = calc_iframe_target_size_one_pass_cbr(cpi); 1294 } 1295 } else { 1296 cm->frame_type = INTER_FRAME; 1297 if (cpi->pass == 0 && cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER) { 1298 target = calc_pframe_target_size_one_pass_cbr(cpi); 1299 } 1300 } 1301 vp9_rc_set_frame_target(cpi, target); 1302 rc->frames_till_gf_update_due = INT_MAX; 1303 rc->baseline_gf_interval = INT_MAX; 1304} 1305 1306void vp9_rc_get_one_pass_cbr_params(VP9_COMP *cpi) { 1307 VP9_COMMON *const cm = &cpi->common; 1308 RATE_CONTROL *const rc = &cpi->rc; 1309 int target; 1310 if ((cm->current_video_frame == 0 || 1311 (cm->frame_flags & FRAMEFLAGS_KEY) || 1312 rc->frames_to_key == 0 || 1313 (cpi->oxcf.auto_key && test_for_kf_one_pass(cpi)))) { 1314 cm->frame_type = KEY_FRAME; 1315 rc->this_key_frame_forced = cm->current_video_frame != 0 && 1316 rc->frames_to_key == 0; 1317 rc->frames_to_key = cpi->key_frame_frequency; 1318 rc->kf_boost = DEFAULT_KF_BOOST; 1319 rc->source_alt_ref_active = 0; 1320 target = calc_iframe_target_size_one_pass_cbr(cpi); 1321 } else { 1322 cm->frame_type = INTER_FRAME; 1323 target = calc_pframe_target_size_one_pass_cbr(cpi); 1324 } 1325 vp9_rc_set_frame_target(cpi, target); 1326 // Don't use gf_update by default in CBR mode. 1327 rc->frames_till_gf_update_due = INT_MAX; 1328 rc->baseline_gf_interval = INT_MAX; 1329} 1330