ratectrl.h (23367B)
1 /* 2 * Copyright (c) 2016, Alliance for Open Media. All rights reserved. 3 * 4 * This source code is subject to the terms of the BSD 2 Clause License and 5 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License 6 * was not distributed with this source code in the LICENSE file, you can 7 * obtain it at www.aomedia.org/license/software. If the Alliance for Open 8 * Media Patent License 1.0 was not distributed with this source code in the 9 * PATENTS file, you can obtain it at www.aomedia.org/license/patent. 10 */ 11 12 #ifndef AOM_AV1_ENCODER_RATECTRL_H_ 13 #define AOM_AV1_ENCODER_RATECTRL_H_ 14 15 #include "aom/aom_codec.h" 16 #include "aom/aom_integer.h" 17 18 #include "aom_ports/mem.h" 19 20 #include "av1/common/av1_common_int.h" 21 #include "av1/common/blockd.h" 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 /*!\cond */ 28 29 // Bits Per MB at different Q (Multiplied by 512) 30 #define BPER_MB_NORMBITS 9 31 32 // Use this macro to turn on/off use of alt-refs in one-pass mode. 33 #define USE_ALTREF_FOR_ONE_PASS 1 34 35 // Threshold used to define if a KF group is static (e.g. a slide show). 36 // Essentially, this means that no frame in the group has more than 1% of MBs 37 // that are not marked as coded with 0,0 motion in the first pass. 38 #define STATIC_KF_GROUP_THRESH 99 39 #define STATIC_KF_GROUP_FLOAT_THRESH 0.99 40 41 // The maximum duration of a GF group that is static (e.g. a slide show). 42 #define MAX_STATIC_GF_GROUP_LENGTH 250 43 44 #define MIN_GF_INTERVAL 4 45 #define MAX_GF_INTERVAL 32 46 #define FIXED_GF_INTERVAL 16 47 #define MAX_GF_LENGTH_LAP 16 48 49 #define FIXED_GF_INTERVAL_RT 80 50 #define MAX_GF_INTERVAL_RT 160 51 52 #define MAX_NUM_GF_INTERVALS 15 53 54 #define MAX_ARF_LAYERS 6 55 // #define STRICT_RC 56 57 #define DEFAULT_KF_BOOST_RT 2300 58 #define DEFAULT_GF_BOOST_RT 2000 59 60 // A passive rate control strategy for screen content type in real-time mode. 61 // When it is turned on, the compression performance is improved by 62 // 7.8% (overall_psnr), 5.0% (VMAF) on average. Some clips see gains 63 // over 20% on metric. 64 // The downside is that it does not guarantee frame size. 65 // Since RT mode has a tight restriction on buffer overflow control, we 66 // turn it off by default. 67 #define RT_PASSIVE_STRATEGY 0 68 #define MAX_Q_HISTORY 1000 69 70 typedef struct { 71 int resize_width; 72 int resize_height; 73 uint8_t superres_denom; 74 } size_params_type; 75 76 enum { 77 INTER_NORMAL, 78 GF_ARF_LOW, 79 GF_ARF_STD, 80 KF_STD, 81 RATE_FACTOR_LEVELS 82 } UENUM1BYTE(RATE_FACTOR_LEVEL); 83 84 enum { 85 KF_UPDATE, 86 LF_UPDATE, 87 GF_UPDATE, 88 ARF_UPDATE, 89 OVERLAY_UPDATE, 90 INTNL_OVERLAY_UPDATE, // Internal Overlay Frame 91 INTNL_ARF_UPDATE, // Internal Altref Frame 92 FRAME_UPDATE_TYPES 93 } UENUM1BYTE(FRAME_UPDATE_TYPE); 94 95 enum { 96 REFBUF_RESET, // Clear reference frame buffer 97 REFBUF_UPDATE, // Refresh reference frame buffer 98 REFBUF_STATES 99 } UENUM1BYTE(REFBUF_STATE); 100 101 typedef enum { 102 NO_RESIZE = 0, 103 DOWN_THREEFOUR = 1, // From orig to 3/4. 104 DOWN_ONEHALF = 2, // From orig or 3/4 to 1/2. 105 UP_THREEFOUR = -1, // From 1/2 to 3/4. 106 UP_ORIG = -2, // From 1/2 or 3/4 to orig. 107 } RESIZE_ACTION; 108 109 typedef enum { ORIG = 0, THREE_QUARTER = 1, ONE_HALF = 2 } RESIZE_STATE; 110 111 #define MAX_FIRSTPASS_ANALYSIS_FRAMES 150 112 typedef enum region_types { 113 STABLE_REGION = 0, 114 HIGH_VAR_REGION = 1, 115 SCENECUT_REGION = 2, 116 BLENDING_REGION = 3, 117 } REGION_TYPES; 118 119 typedef struct regions { 120 int start; 121 int last; 122 double avg_noise_var; 123 double avg_cor_coeff; 124 double avg_sr_fr_ratio; 125 double avg_intra_err; 126 double avg_coded_err; 127 REGION_TYPES type; 128 } REGIONS; 129 130 /*!\endcond */ 131 /*! 132 * \brief Rate Control parameters and status 133 */ 134 typedef struct { 135 // Rate targetting variables 136 137 /*! 138 * Baseline target rate for frame before adjustment for previous under or 139 * over shoot. 140 */ 141 int base_frame_target; 142 /*! 143 * Target rate for frame after adjustment for previous under or over shoot. 144 */ 145 int this_frame_target; // Actual frame target after rc adjustment. 146 147 /*! 148 * Projected size for current frame 149 */ 150 int projected_frame_size; 151 152 /*! 153 * Bit size of transform coefficient for current frame. 154 */ 155 int coefficient_size; 156 157 /*! 158 * Super block rate target used with some adaptive quantization strategies. 159 */ 160 int sb64_target_rate; 161 162 /*! 163 * Number of frames since the last ARF / GF. 164 */ 165 int frames_since_golden; 166 167 /*! 168 * Number of frames till the next ARF / GF is due. 169 */ 170 int frames_till_gf_update_due; 171 172 /*! 173 * Number of determined gf groups left 174 */ 175 int intervals_till_gf_calculate_due; 176 177 /*!\cond */ 178 int min_gf_interval; 179 int max_gf_interval; 180 int static_scene_max_gf_interval; 181 /*!\endcond */ 182 /*! 183 * Frames before the next key frame 184 */ 185 int frames_to_key; 186 /*!\cond */ 187 int frames_since_key; 188 int frames_to_fwd_kf; 189 int is_src_frame_alt_ref; 190 int sframe_due; 191 192 int high_source_sad; 193 int high_motion_content_screen_rtc; 194 uint64_t avg_source_sad; 195 uint64_t prev_avg_source_sad; 196 uint64_t frame_source_sad; 197 uint64_t frame_spatial_variance; 198 int static_since_last_scene_change; 199 int last_encoded_size_keyframe; 200 int last_target_size_keyframe; 201 int frames_since_scene_change; 202 int perc_spatial_flat_blocks; 203 int num_col_blscroll_last_tl0; 204 int num_row_blscroll_last_tl0; 205 206 int avg_frame_bandwidth; // Average frame size target for clip 207 int min_frame_bandwidth; // Minimum allocation used for any frame 208 int max_frame_bandwidth; // Maximum burst rate allowed for a frame. 209 int prev_avg_frame_bandwidth; 210 211 int ni_av_qi; 212 int ni_tot_qi; 213 214 int decimation_factor; 215 int decimation_count; 216 int prev_frame_is_dropped; 217 int drop_count_consec; 218 int max_consec_drop; 219 int force_max_q; 220 int postencode_drop; 221 222 /*! 223 * Frame number for encoded frames (non-dropped). 224 * Use for setting the rtc reference structure. 225 */ 226 unsigned int frame_number_encoded; 227 228 /*!\endcond */ 229 /*! 230 * User specified maximum Q allowed for current frame 231 */ 232 int worst_quality; 233 /*! 234 * User specified minimum Q allowed for current frame 235 */ 236 int best_quality; 237 238 /*!\cond */ 239 240 // rate control history for last frame(1) and the frame before(2). 241 // -1: overshoot 242 // 1: undershoot 243 // 0: not initialized. 244 int rc_1_frame; 245 int rc_2_frame; 246 int q_1_frame; 247 int q_2_frame; 248 249 /*!\endcond */ 250 /*! 251 * Proposed maximum allowed Q for current frame 252 */ 253 int active_worst_quality; 254 255 /*!\cond */ 256 // Track amount of low motion in scene 257 int avg_frame_low_motion; 258 int cnt_zeromv; 259 260 // signals if number of blocks with motion is high 261 int percent_blocks_with_motion; 262 263 // signals percentage of 16x16 blocks that are inactive, via active_maps 264 int percent_blocks_inactive; 265 266 // Maximum value of source sad across all blocks of frame. 267 uint64_t max_block_source_sad; 268 269 // For dynamic resize, 1 pass cbr. 270 RESIZE_STATE resize_state; 271 int resize_avg_qp; 272 int resize_buffer_underflow; 273 int resize_count; 274 275 // Flag to disable content related qp adjustment. 276 int rtc_external_ratectrl; 277 278 // Stores fast_extra_bits of the current frame. 279 int frame_level_fast_extra_bits; 280 281 double frame_level_rate_correction_factors[RATE_FACTOR_LEVELS]; 282 283 int frame_num_last_gf_refresh; 284 285 int prev_coded_width; 286 int prev_coded_height; 287 288 // The ratio used for inter frames in bit estimation. 289 // TODO(yunqing): if golden frame is treated differently (e.g. gf_cbr_boost_ 290 // pct > THR), consider to add bit_est_ratio_g for golden frames. 291 int bit_est_ratio; 292 293 // Whether to use a fixed qp for the frame, bypassing internal rate control. 294 // This flag will reset to 0 after every frame. 295 int use_external_qp_one_pass; 296 /*!\endcond */ 297 } RATE_CONTROL; 298 299 /*! 300 * \brief Primary Rate Control parameters and status 301 */ 302 typedef struct { 303 // Sub-gop level Rate targetting variables 304 305 /*! 306 * Target bit budget for the current GF / ARF group of frame. 307 */ 308 int64_t gf_group_bits; 309 310 /*! 311 * Boost factor used to calculate the extra bits allocated to the key frame 312 */ 313 int kf_boost; 314 315 /*! 316 * Boost factor used to calculate the extra bits allocated to ARFs and GFs 317 */ 318 int gfu_boost; 319 320 /*! 321 * Stores the determined gf group lengths for a set of gf groups 322 */ 323 int gf_intervals[MAX_NUM_GF_INTERVALS]; 324 325 /*! 326 * The current group's index into gf_intervals[] 327 */ 328 int cur_gf_index; 329 330 /*!\cond */ 331 int num_regions; 332 333 REGIONS regions[MAX_FIRSTPASS_ANALYSIS_FRAMES]; 334 int regions_offset; // offset of regions from the last keyframe 335 int frames_till_regions_update; 336 337 int baseline_gf_interval; 338 339 int constrained_gf_group; 340 341 int this_key_frame_forced; 342 343 int next_key_frame_forced; 344 /*!\endcond */ 345 346 /*! 347 * Initial buffuer level in ms for CBR / low delay encoding 348 */ 349 int64_t starting_buffer_level; 350 351 /*! 352 * Optimum / target buffuer level in ms for CBR / low delay encoding 353 */ 354 int64_t optimal_buffer_level; 355 356 /*! 357 * Maximum target buffuer level in ms for CBR / low delay encoding 358 */ 359 int64_t maximum_buffer_size; 360 361 /*! 362 * Q index used for ALT frame 363 */ 364 int arf_q; 365 366 /*!\cond */ 367 float_t arf_boost_factor; 368 369 int base_layer_qp; 370 371 // Total number of stats used only for kf_boost calculation. 372 int num_stats_used_for_kf_boost; 373 374 // Total number of stats used only for gfu_boost calculation. 375 int num_stats_used_for_gfu_boost; 376 377 // Total number of stats required by gfu_boost calculation. 378 int num_stats_required_for_gfu_boost; 379 380 int enable_scenecut_detection; 381 382 int use_arf_in_this_kf_group; 383 384 int ni_frames; 385 386 double tot_q; 387 /*!\endcond */ 388 389 /*! 390 * Q used for last boosted (non leaf) frame 391 */ 392 int last_kf_qindex; 393 394 /*! 395 * Average of q index of previous encoded frames in a sequence. 396 */ 397 int avg_frame_qindex[FRAME_TYPES]; 398 399 #if CONFIG_FPMT_TEST 400 /*! 401 * Temporary variable used in simulating the delayed update of 402 * active_best_quality. 403 */ 404 int temp_active_best_quality[MAX_ARF_LAYERS + 1]; 405 406 /*! 407 * Temporary variable used in simulating the delayed update of 408 * last_boosted_qindex. 409 */ 410 int temp_last_boosted_qindex; 411 412 /*! 413 * Temporary variable used in simulating the delayed update of 414 * avg_q. 415 */ 416 double temp_avg_q; 417 418 /*! 419 * Temporary variable used in simulating the delayed update of 420 * last_q. 421 */ 422 int temp_last_q[FRAME_TYPES]; 423 424 /*! 425 * Temporary variable used in simulating the delayed update of 426 * projected_frame_size. 427 */ 428 int temp_projected_frame_size; 429 430 /*! 431 * Temporary variable used in simulating the delayed update of 432 * total_actual_bits. 433 */ 434 int64_t temp_total_actual_bits; 435 436 /*! 437 * Temporary variable used in simulating the delayed update of 438 * buffer_level. 439 */ 440 int64_t temp_buffer_level; 441 442 /*! 443 * Temporary variable used in simulating the delayed update of 444 * vbr_bits_off_target. 445 */ 446 int64_t temp_vbr_bits_off_target; 447 448 /*! 449 * Temporary variable used in simulating the delayed update of 450 * vbr_bits_off_target_fast. 451 */ 452 int64_t temp_vbr_bits_off_target_fast; 453 454 /*! 455 * Temporary variable used in simulating the delayed update of 456 * rate_correction_factors. 457 */ 458 double temp_rate_correction_factors[RATE_FACTOR_LEVELS]; 459 460 /*! 461 * Temporary variable used in simulating the delayed update of 462 * rate_error_estimate. 463 */ 464 int temp_rate_error_estimate; 465 466 /*! 467 * Temporary variable used in simulating the delayed update of 468 * rolling_arf_group_target_bits. 469 */ 470 int temp_rolling_arf_group_target_bits; 471 472 /*! 473 * Temporary variable used in simulating the delayed update of 474 * rolling_arf_group_actual_bits;. 475 */ 476 int temp_rolling_arf_group_actual_bits; 477 478 /*! 479 * Temporary variable used in simulating the delayed update of 480 * bits_left;. 481 */ 482 int64_t temp_bits_left; 483 484 /*! 485 * Temporary variable used in simulating the delayed update of 486 * extend_minq. 487 */ 488 int temp_extend_minq; 489 490 /*! 491 * Temporary variable used in simulating the delayed update of 492 * extend_maxq. 493 */ 494 int temp_extend_maxq; 495 496 #endif 497 /*! 498 * Proposed minimum allowed Q different layers in a coding pyramid 499 */ 500 int active_best_quality[MAX_ARF_LAYERS + 1]; 501 502 /*! 503 * Q used for last boosted (non leaf) frame (GF/KF/ARF) 504 */ 505 int last_boosted_qindex; 506 507 /*! 508 * Average Q value of previous inter frames 509 */ 510 double avg_q; 511 512 /*! 513 * Q used on last encoded frame of the given type. 514 */ 515 int last_q[FRAME_TYPES]; 516 517 /*! 518 * Correction factors used to adjust the q estimate for a given target rate 519 * in the encode loop. 520 */ 521 double rate_correction_factors[RATE_FACTOR_LEVELS]; 522 523 /*! 524 * Current total consumed bits. 525 */ 526 int64_t total_actual_bits; 527 528 /*! 529 * Current total target bits. 530 */ 531 int64_t total_target_bits; 532 533 /*! 534 * Current buffer level. 535 */ 536 int64_t buffer_level; 537 538 /*! 539 * PCT rc error. 540 */ 541 int rate_error_estimate; 542 543 /*! 544 * Error bits available from previously encoded frames. 545 */ 546 int64_t vbr_bits_off_target; 547 548 /*! 549 * Error bits available from previously encoded frames undershoot. 550 */ 551 int64_t vbr_bits_off_target_fast; 552 553 /*! 554 * Total bits deviated from the average frame target, from previously 555 * encoded frames. 556 */ 557 int64_t bits_off_target; 558 559 /*! 560 * Rolling monitor target bits updated based on current frame target size. 561 */ 562 int rolling_target_bits; 563 564 /*! 565 * Rolling monitor actual bits updated based on current frame final projected 566 * size. 567 */ 568 int rolling_actual_bits; 569 570 /*! 571 * The history of qindex for each frame. 572 * Only used when RT_PASSIVE_STRATEGY = 1. 573 */ 574 int q_history[MAX_Q_HISTORY]; 575 } PRIMARY_RATE_CONTROL; 576 577 /*!\cond */ 578 579 struct AV1_COMP; 580 struct AV1EncoderConfig; 581 struct GF_GROUP; 582 583 void av1_primary_rc_init(const struct AV1EncoderConfig *oxcf, 584 PRIMARY_RATE_CONTROL *p_rc); 585 586 void av1_rc_init(const struct AV1EncoderConfig *oxcf, RATE_CONTROL *rc); 587 588 int av1_estimate_bits_at_q(const struct AV1_COMP *cpi, int q, 589 double correction_factor); 590 591 double av1_convert_qindex_to_q(int qindex, aom_bit_depth_t bit_depth); 592 593 // Converts a Q value to a qindex. 594 int av1_convert_q_to_qindex(double q, aom_bit_depth_t bit_depth); 595 596 void av1_rc_init_minq_luts(void); 597 598 int av1_rc_get_default_min_gf_interval(int width, int height, double framerate); 599 600 // Generally at the high level, the following flow is expected 601 // to be enforced for rate control: 602 // First call per frame, one of: 603 // av1_get_one_pass_rt_params() 604 // av1_get_second_pass_params() 605 // depending on the usage to set the rate control encode parameters desired. 606 // 607 // Then, call encode_frame_to_data_rate() to perform the 608 // actual encode. This function will in turn call encode_frame() 609 // one or more times, followed by: 610 // av1_rc_postencode_update_drop_frame() 611 // 612 // The majority of rate control parameters are only expected 613 // to be set in the av1_get_..._params() functions and 614 // updated during the av1_rc_postencode_update...() functions. 615 // The only exceptions are av1_rc_drop_frame() and 616 // av1_rc_update_rate_correction_factors() functions. 617 618 // Functions to set parameters for encoding before the actual 619 // encode_frame_to_data_rate() function. 620 struct EncodeFrameInput; 621 622 // Post encode update of the rate control parameters based 623 // on bytes used 624 void av1_rc_postencode_update(struct AV1_COMP *cpi, uint64_t bytes_used); 625 // Post encode update of the rate control parameters for dropped frames 626 void av1_rc_postencode_update_drop_frame(struct AV1_COMP *cpi); 627 628 /*!\endcond */ 629 /*!\brief Updates the rate correction factor linking Q to output bits 630 * 631 * This function updates the Q rate correction factor after an encode 632 * cycle depending on whether we overshot or undershot the target rate. 633 * 634 * \ingroup rate_control 635 * \param[in] cpi Top level encoder instance structure 636 * \param[in] is_encode_stage Indicates if recode loop or post-encode 637 * \param[in] width Frame width 638 * \param[in] height Frame height 639 * 640 * \remark Updates the relevant rate correction factor in cpi->rc 641 */ 642 void av1_rc_update_rate_correction_factors(struct AV1_COMP *cpi, 643 int is_encode_stage, int width, 644 int height); 645 /*!\cond */ 646 647 // Decide if we should drop this frame: For 1-pass CBR. 648 // Changes only the decimation count in the rate control structure 649 int av1_rc_drop_frame(struct AV1_COMP *cpi); 650 651 // Computes frame size bounds. 652 void av1_rc_compute_frame_size_bounds(const struct AV1_COMP *cpi, 653 int this_frame_target, 654 int *frame_under_shoot_limit, 655 int *frame_over_shoot_limit); 656 657 /*!\endcond */ 658 659 /*!\brief Picks q and q bounds given the rate control parameters in \c cpi->rc. 660 * 661 * \ingroup rate_control 662 * \param[in] cpi Top level encoder structure 663 * \param[in] width Coded frame width 664 * \param[in] height Coded frame height 665 * \param[in] gf_index Index of this frame in the golden frame group 666 * \param[out] bottom_index Bottom bound for q index (best quality) 667 * \param[out] top_index Top bound for q index (worst quality) 668 * \return Returns selected q index to be used for encoding this frame. 669 * Also, updates \c rc->arf_q. 670 */ 671 int av1_rc_pick_q_and_bounds(struct AV1_COMP *cpi, int width, int height, 672 int gf_index, int *bottom_index, int *top_index); 673 674 /*!\brief Estimates q to achieve a target bits per frame 675 * 676 * \ingroup rate_control 677 * \param[in] cpi Top level encoder instance structure 678 * \param[in] target_bits_per_frame Frame rate target 679 * \param[in] active_worst_quality Max Q allowed 680 * \param[in] active_best_quality Min Q allowed 681 * \param[in] width Frame width 682 * \param[in] height Frame height 683 * 684 * \return Returns a q index value 685 */ 686 int av1_rc_regulate_q(const struct AV1_COMP *cpi, int target_bits_per_frame, 687 int active_best_quality, int active_worst_quality, 688 int width, int height); 689 690 /*!\cond */ 691 // Estimates bits per mb for a given qindex and correction factor. 692 int av1_rc_bits_per_mb(const struct AV1_COMP *cpi, FRAME_TYPE frame_type, 693 int qindex, double correction_factor, 694 int accurate_estimate); 695 696 // Find q_index corresponding to desired_q, within [best_qindex, worst_qindex]. 697 // To be precise, 'q_index' is the smallest integer, for which the corresponding 698 // q >= desired_q. 699 // If no such q index is found, returns 'worst_qindex'. 700 int av1_find_qindex(double desired_q, aom_bit_depth_t bit_depth, 701 int best_qindex, int worst_qindex); 702 703 // Computes a q delta (in "q index" terms) to get from a starting q value 704 // to a target q value 705 int av1_compute_qdelta(const RATE_CONTROL *rc, double qstart, double qtarget, 706 aom_bit_depth_t bit_depth); 707 708 // Computes a q delta (in "q index" terms) to get from a starting q value 709 // to a value that should equate to the given rate ratio. 710 int av1_compute_qdelta_by_rate(const struct AV1_COMP *cpi, 711 FRAME_TYPE frame_type, int qindex, 712 double rate_target_ratio); 713 714 void av1_rc_update_framerate(struct AV1_COMP *cpi, int width, int height); 715 716 void av1_set_target_rate(struct AV1_COMP *cpi, int width, int height); 717 718 int av1_resize_one_pass_cbr(struct AV1_COMP *cpi); 719 720 void av1_rc_set_frame_target(struct AV1_COMP *cpi, int target, int width, 721 int height); 722 723 void av1_adjust_gf_refresh_qp_one_pass_rt(struct AV1_COMP *cpi); 724 725 void av1_set_rtc_reference_structure_one_layer(struct AV1_COMP *cpi, 726 int gf_update); 727 728 /*!\endcond */ 729 /*!\brief Calculates how many bits to use for a P frame in one pass vbr 730 * 731 * \ingroup rate_control 732 * \callgraph 733 * \callergraph 734 * 735 * \param[in] cpi Top level encoder structure 736 * \param[in] frame_update_type Type of frame 737 * 738 * \return Returns the target number of bits for this frame. 739 */ 740 int av1_calc_pframe_target_size_one_pass_vbr( 741 const struct AV1_COMP *const cpi, FRAME_UPDATE_TYPE frame_update_type); 742 743 /*!\brief Calculates how many bits to use for an i frame in one pass vbr 744 * 745 * \ingroup rate_control 746 * \callgraph 747 * \callergraph 748 * 749 * \param[in] cpi Top level encoder structure 750 * 751 * \return Returns the target number of bits for this frame. 752 */ 753 int av1_calc_iframe_target_size_one_pass_vbr(const struct AV1_COMP *const cpi); 754 755 /*!\brief Calculates how many bits to use for a P frame in one pass cbr 756 * 757 * \ingroup rate_control 758 * \callgraph 759 * \callergraph 760 * 761 * \param[in] cpi Top level encoder structure 762 * \param[in] frame_update_type Type of frame 763 * 764 * \return Returns the target number of bits for this frame. 765 */ 766 int av1_calc_pframe_target_size_one_pass_cbr( 767 const struct AV1_COMP *cpi, FRAME_UPDATE_TYPE frame_update_type); 768 769 /*!\brief Calculates how many bits to use for an i frame in one pass cbr 770 * 771 * \ingroup rate_control 772 * \callgraph 773 * \callergraph 774 * 775 * \param[in] cpi Top level encoder structure 776 * 777 * \return Returns the target number of bits for this frame. 778 */ 779 int av1_calc_iframe_target_size_one_pass_cbr(const struct AV1_COMP *cpi); 780 781 /*!\brief Setup the rate control parameters for 1 pass real-time mode. 782 * 783 * - Sets the frame type and target frame size. 784 * - Sets the GF update. 785 * - Checks for scene change. 786 * - Sets the reference prediction structure for 1 layers (non-SVC). 787 * - Resets and updates are done for SVC. 788 * 789 * \ingroup rate_control 790 * \param[in] cpi Top level encoder structure 791 * \param[in] frame_type Encoder frame type 792 * \param[in] frame_input Current and last input source frames 793 * \param[in] frame_flags Encoder frame flags 794 * 795 * \remark Nothing is returned. Instead the settings computed in this 796 * function are set in: \c frame_params, \c cpi->common, \c cpi->rc, 797 * \c cpi->svc. 798 */ 799 void av1_get_one_pass_rt_params(struct AV1_COMP *cpi, 800 FRAME_TYPE *const frame_type, 801 const struct EncodeFrameInput *frame_input, 802 unsigned int frame_flags); 803 804 /*!\brief Increase q on expected encoder overshoot, for CBR mode. 805 * 806 * Handles the case when encoder is expected to create a large frame: 807 * - q is increased to value closer to \c cpi->rc.worst_quality 808 * - avg_frame_qindex is reset 809 * - buffer levels are reset 810 * - rate correction factor is adjusted 811 * 812 * \ingroup rate_control 813 * \param[in] cpi Top level encoder structure 814 * \param[in] q Current q index 815 * 816 * \return q is returned, and updates are done to \c cpi->rc. 817 */ 818 int av1_encodedframe_overshoot_cbr(struct AV1_COMP *cpi, int *q); 819 820 /*!\brief Check if frame should be dropped, for RTC mode. 821 * 822 * \ingroup rate_control 823 * \param[in] cpi Top level encoder structure 824 * \param[in,out] size Size of encoded frame 825 * 826 * \return 1 if frame is to be dropped, 0 otherwise (no drop). 827 * Set cpi->rc.force_max_q if frame is to be dropped, and updates are 828 * made to rate control parameters. *size is set to 0 when this 829 * function returns 1 (frame is dropped). 830 */ 831 int av1_postencode_drop_cbr(struct AV1_COMP *cpi, size_t *size); 832 833 #ifdef __cplusplus 834 } // extern "C" 835 #endif 836 837 #endif // AOM_AV1_ENCODER_RATECTRL_H_