OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. | 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
417 return high_motion_minq[q]; | 417 return high_motion_minq[q]; |
418 } else { | 418 } else { |
419 const int gap = high - low; | 419 const int gap = high - low; |
420 const int offset = high - gfu_boost; | 420 const int offset = high - gfu_boost; |
421 const int qdiff = high_motion_minq[q] - low_motion_minq[q]; | 421 const int qdiff = high_motion_minq[q] - low_motion_minq[q]; |
422 const int adjustment = ((offset * qdiff) + (gap >> 1)) / gap; | 422 const int adjustment = ((offset * qdiff) + (gap >> 1)) / gap; |
423 return low_motion_minq[q] + adjustment; | 423 return low_motion_minq[q] + adjustment; |
424 } | 424 } |
425 } | 425 } |
426 | 426 |
| 427 static int get_kf_active_quality(const RATE_CONTROL *const rc, int q) { |
| 428 return get_active_quality(q, rc->kf_boost, kf_low, kf_high, |
| 429 kf_low_motion_minq, kf_high_motion_minq); |
| 430 } |
| 431 |
| 432 static int get_gf_active_quality(const RATE_CONTROL *const rc, int q) { |
| 433 return get_active_quality(q, rc->gfu_boost, gf_low, gf_high, |
| 434 arfgf_low_motion_minq, arfgf_high_motion_minq); |
| 435 } |
| 436 |
427 static int calc_active_worst_quality_one_pass_vbr(const VP9_COMP *cpi) { | 437 static int calc_active_worst_quality_one_pass_vbr(const VP9_COMP *cpi) { |
428 const RATE_CONTROL *const rc = &cpi->rc; | 438 const RATE_CONTROL *const rc = &cpi->rc; |
429 const unsigned int curr_frame = cpi->common.current_video_frame; | 439 const unsigned int curr_frame = cpi->common.current_video_frame; |
430 int active_worst_quality; | 440 int active_worst_quality; |
431 | 441 |
432 if (cpi->common.frame_type == KEY_FRAME) { | 442 if (cpi->common.frame_type == KEY_FRAME) { |
433 active_worst_quality = curr_frame == 0 ? rc->worst_quality | 443 active_worst_quality = curr_frame == 0 ? rc->worst_quality |
434 : rc->last_q[KEY_FRAME] * 2; | 444 : rc->last_q[KEY_FRAME] * 2; |
435 } else { | 445 } else { |
436 if (!rc->is_src_frame_alt_ref && | 446 if (!rc->is_src_frame_alt_ref && |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
516 int qindex = rc->last_boosted_qindex; | 526 int qindex = rc->last_boosted_qindex; |
517 double last_boosted_q = vp9_convert_qindex_to_q(qindex); | 527 double last_boosted_q = vp9_convert_qindex_to_q(qindex); |
518 int delta_qindex = vp9_compute_qdelta(rc, last_boosted_q, | 528 int delta_qindex = vp9_compute_qdelta(rc, last_boosted_q, |
519 (last_boosted_q * 0.75)); | 529 (last_boosted_q * 0.75)); |
520 active_best_quality = MAX(qindex + delta_qindex, rc->best_quality); | 530 active_best_quality = MAX(qindex + delta_qindex, rc->best_quality); |
521 } else if (cm->current_video_frame > 0) { | 531 } else if (cm->current_video_frame > 0) { |
522 // not first frame of one pass and kf_boost is set | 532 // not first frame of one pass and kf_boost is set |
523 double q_adj_factor = 1.0; | 533 double q_adj_factor = 1.0; |
524 double q_val; | 534 double q_val; |
525 | 535 |
526 active_best_quality = get_active_quality(rc->avg_frame_qindex[KEY_FRAME], | 536 active_best_quality = |
527 rc->kf_boost, | 537 get_kf_active_quality(rc, rc->avg_frame_qindex[KEY_FRAME]); |
528 kf_low, kf_high, | |
529 kf_low_motion_minq, | |
530 kf_high_motion_minq); | |
531 | 538 |
532 // Allow somewhat lower kf minq with small image formats. | 539 // Allow somewhat lower kf minq with small image formats. |
533 if ((cm->width * cm->height) <= (352 * 288)) { | 540 if ((cm->width * cm->height) <= (352 * 288)) { |
534 q_adj_factor -= 0.25; | 541 q_adj_factor -= 0.25; |
535 } | 542 } |
536 | 543 |
537 // Convert the adjustment factor to a qindex delta | 544 // Convert the adjustment factor to a qindex delta |
538 // on active_best_quality. | 545 // on active_best_quality. |
539 q_val = vp9_convert_qindex_to_q(active_best_quality); | 546 q_val = vp9_convert_qindex_to_q(active_best_quality); |
540 active_best_quality += vp9_compute_qdelta(rc, q_val, | 547 active_best_quality += vp9_compute_qdelta(rc, q_val, |
541 q_val * q_adj_factor); | 548 q_val * q_adj_factor); |
542 } | 549 } |
543 } else if (!rc->is_src_frame_alt_ref && | 550 } else if (!rc->is_src_frame_alt_ref && |
544 !cpi->use_svc && | 551 !cpi->use_svc && |
545 (cpi->refresh_golden_frame || cpi->refresh_alt_ref_frame)) { | 552 (cpi->refresh_golden_frame || cpi->refresh_alt_ref_frame)) { |
546 // Use the lower of active_worst_quality and recent | 553 // Use the lower of active_worst_quality and recent |
547 // average Q as basis for GF/ARF best Q limit unless last frame was | 554 // average Q as basis for GF/ARF best Q limit unless last frame was |
548 // a key frame. | 555 // a key frame. |
549 if (rc->frames_since_key > 1 && | 556 if (rc->frames_since_key > 1 && |
550 rc->avg_frame_qindex[INTER_FRAME] < active_worst_quality) { | 557 rc->avg_frame_qindex[INTER_FRAME] < active_worst_quality) { |
551 q = rc->avg_frame_qindex[INTER_FRAME]; | 558 q = rc->avg_frame_qindex[INTER_FRAME]; |
552 } else { | 559 } else { |
553 q = active_worst_quality; | 560 q = active_worst_quality; |
554 } | 561 } |
555 active_best_quality = get_active_quality( | 562 active_best_quality = get_gf_active_quality(rc, q); |
556 q, rc->gfu_boost, gf_low, gf_high, | |
557 arfgf_low_motion_minq, arfgf_high_motion_minq); | |
558 } else { | 563 } else { |
559 // Use the lower of active_worst_quality and recent/average Q. | 564 // Use the lower of active_worst_quality and recent/average Q. |
560 if (cm->current_video_frame > 1) { | 565 if (cm->current_video_frame > 1) { |
561 if (rc->avg_frame_qindex[INTER_FRAME] < active_worst_quality) | 566 if (rc->avg_frame_qindex[INTER_FRAME] < active_worst_quality) |
562 active_best_quality = rtc_minq[rc->avg_frame_qindex[INTER_FRAME]]; | 567 active_best_quality = rtc_minq[rc->avg_frame_qindex[INTER_FRAME]]; |
563 else | 568 else |
564 active_best_quality = rtc_minq[active_worst_quality]; | 569 active_best_quality = rtc_minq[active_worst_quality]; |
565 } else { | 570 } else { |
566 if (rc->avg_frame_qindex[KEY_FRAME] < active_worst_quality) | 571 if (rc->avg_frame_qindex[KEY_FRAME] < active_worst_quality) |
567 active_best_quality = rtc_minq[rc->avg_frame_qindex[KEY_FRAME]]; | 572 active_best_quality = rtc_minq[rc->avg_frame_qindex[KEY_FRAME]]; |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
650 int qindex = rc->last_boosted_qindex; | 655 int qindex = rc->last_boosted_qindex; |
651 double last_boosted_q = vp9_convert_qindex_to_q(qindex); | 656 double last_boosted_q = vp9_convert_qindex_to_q(qindex); |
652 int delta_qindex = vp9_compute_qdelta(rc, last_boosted_q, | 657 int delta_qindex = vp9_compute_qdelta(rc, last_boosted_q, |
653 last_boosted_q * 0.75); | 658 last_boosted_q * 0.75); |
654 active_best_quality = MAX(qindex + delta_qindex, rc->best_quality); | 659 active_best_quality = MAX(qindex + delta_qindex, rc->best_quality); |
655 } else { | 660 } else { |
656 // not first frame of one pass and kf_boost is set | 661 // not first frame of one pass and kf_boost is set |
657 double q_adj_factor = 1.0; | 662 double q_adj_factor = 1.0; |
658 double q_val; | 663 double q_val; |
659 | 664 |
660 active_best_quality = get_active_quality(rc->avg_frame_qindex[KEY_FRAME], | 665 active_best_quality = |
661 rc->kf_boost, | 666 get_kf_active_quality(rc, rc->avg_frame_qindex[KEY_FRAME]); |
662 kf_low, kf_high, | |
663 kf_low_motion_minq, | |
664 kf_high_motion_minq); | |
665 | 667 |
666 // Allow somewhat lower kf minq with small image formats. | 668 // Allow somewhat lower kf minq with small image formats. |
667 if ((cm->width * cm->height) <= (352 * 288)) { | 669 if ((cm->width * cm->height) <= (352 * 288)) { |
668 q_adj_factor -= 0.25; | 670 q_adj_factor -= 0.25; |
669 } | 671 } |
670 | 672 |
671 // Convert the adjustment factor to a qindex delta | 673 // Convert the adjustment factor to a qindex delta |
672 // on active_best_quality. | 674 // on active_best_quality. |
673 q_val = vp9_convert_qindex_to_q(active_best_quality); | 675 q_val = vp9_convert_qindex_to_q(active_best_quality); |
674 active_best_quality += vp9_compute_qdelta(rc, q_val, | 676 active_best_quality += vp9_compute_qdelta(rc, q_val, |
675 q_val * q_adj_factor); | 677 q_val * q_adj_factor); |
676 } | 678 } |
677 } else if (!rc->is_src_frame_alt_ref && | 679 } else if (!rc->is_src_frame_alt_ref && |
678 (cpi->refresh_golden_frame || cpi->refresh_alt_ref_frame)) { | 680 (cpi->refresh_golden_frame || cpi->refresh_alt_ref_frame)) { |
679 // Use the lower of active_worst_quality and recent | 681 // Use the lower of active_worst_quality and recent |
680 // average Q as basis for GF/ARF best Q limit unless last frame was | 682 // average Q as basis for GF/ARF best Q limit unless last frame was |
681 // a key frame. | 683 // a key frame. |
682 if (rc->frames_since_key > 1 && | 684 if (rc->frames_since_key > 1 && |
683 rc->avg_frame_qindex[INTER_FRAME] < active_worst_quality) { | 685 rc->avg_frame_qindex[INTER_FRAME] < active_worst_quality) { |
684 q = rc->avg_frame_qindex[INTER_FRAME]; | 686 q = rc->avg_frame_qindex[INTER_FRAME]; |
685 } else { | 687 } else { |
686 q = rc->avg_frame_qindex[KEY_FRAME]; | 688 q = rc->avg_frame_qindex[KEY_FRAME]; |
687 } | 689 } |
688 // For constrained quality dont allow Q less than the cq level | 690 // For constrained quality dont allow Q less than the cq level |
689 if (oxcf->rc_mode == VPX_CQ) { | 691 if (oxcf->rc_mode == VPX_CQ) { |
690 if (q < cq_level) | 692 if (q < cq_level) |
691 q = cq_level; | 693 q = cq_level; |
692 | 694 |
693 active_best_quality = get_active_quality(q, rc->gfu_boost, | 695 active_best_quality = get_gf_active_quality(rc, q); |
694 gf_low, gf_high, | |
695 arfgf_low_motion_minq, | |
696 arfgf_high_motion_minq); | |
697 | 696 |
698 // Constrained quality use slightly lower active best. | 697 // Constrained quality use slightly lower active best. |
699 active_best_quality = active_best_quality * 15 / 16; | 698 active_best_quality = active_best_quality * 15 / 16; |
700 | 699 |
701 } else if (oxcf->rc_mode == VPX_Q) { | 700 } else if (oxcf->rc_mode == VPX_Q) { |
702 if (!cpi->refresh_alt_ref_frame) { | 701 if (!cpi->refresh_alt_ref_frame) { |
703 active_best_quality = cq_level; | 702 active_best_quality = cq_level; |
704 } else { | 703 } else { |
705 active_best_quality = get_active_quality( | 704 active_best_quality = get_gf_active_quality(rc, q); |
706 q, rc->gfu_boost, gf_low, gf_high, | |
707 arfgf_low_motion_minq, arfgf_high_motion_minq); | |
708 } | 705 } |
709 } else { | 706 } else { |
710 active_best_quality = get_active_quality( | 707 active_best_quality = get_gf_active_quality(rc, q); |
711 q, rc->gfu_boost, gf_low, gf_high, | |
712 arfgf_low_motion_minq, arfgf_high_motion_minq); | |
713 } | 708 } |
714 } else { | 709 } else { |
715 if (oxcf->rc_mode == VPX_Q) { | 710 if (oxcf->rc_mode == VPX_Q) { |
716 active_best_quality = cq_level; | 711 active_best_quality = cq_level; |
717 } else { | 712 } else { |
718 // Use the lower of active_worst_quality and recent/average Q. | 713 // Use the lower of active_worst_quality and recent/average Q. |
719 if (cm->current_video_frame > 1) | 714 if (cm->current_video_frame > 1) |
720 active_best_quality = inter_minq[rc->avg_frame_qindex[INTER_FRAME]]; | 715 active_best_quality = inter_minq[rc->avg_frame_qindex[INTER_FRAME]]; |
721 else | 716 else |
722 active_best_quality = inter_minq[rc->avg_frame_qindex[KEY_FRAME]]; | 717 active_best_quality = inter_minq[rc->avg_frame_qindex[KEY_FRAME]]; |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
803 int qindex = rc->last_boosted_qindex; | 798 int qindex = rc->last_boosted_qindex; |
804 double last_boosted_q = vp9_convert_qindex_to_q(qindex); | 799 double last_boosted_q = vp9_convert_qindex_to_q(qindex); |
805 int delta_qindex = vp9_compute_qdelta(rc, last_boosted_q, | 800 int delta_qindex = vp9_compute_qdelta(rc, last_boosted_q, |
806 last_boosted_q * 0.75); | 801 last_boosted_q * 0.75); |
807 active_best_quality = MAX(qindex + delta_qindex, rc->best_quality); | 802 active_best_quality = MAX(qindex + delta_qindex, rc->best_quality); |
808 } else { | 803 } else { |
809 // Not forced keyframe. | 804 // Not forced keyframe. |
810 double q_adj_factor = 1.0; | 805 double q_adj_factor = 1.0; |
811 double q_val; | 806 double q_val; |
812 // Baseline value derived from cpi->active_worst_quality and kf boost. | 807 // Baseline value derived from cpi->active_worst_quality and kf boost. |
813 active_best_quality = get_active_quality(active_worst_quality, | 808 active_best_quality = get_kf_active_quality(rc, active_worst_quality); |
814 rc->kf_boost, | |
815 kf_low, kf_high, | |
816 kf_low_motion_minq, | |
817 kf_high_motion_minq); | |
818 | 809 |
819 // Allow somewhat lower kf minq with small image formats. | 810 // Allow somewhat lower kf minq with small image formats. |
820 if ((cm->width * cm->height) <= (352 * 288)) { | 811 if ((cm->width * cm->height) <= (352 * 288)) { |
821 q_adj_factor -= 0.25; | 812 q_adj_factor -= 0.25; |
822 } | 813 } |
823 | 814 |
824 // Make a further adjustment based on the kf zero motion measure. | 815 // Make a further adjustment based on the kf zero motion measure. |
825 q_adj_factor += 0.05 - (0.001 * (double)cpi->twopass.kf_zeromotion_pct); | 816 q_adj_factor += 0.05 - (0.001 * (double)cpi->twopass.kf_zeromotion_pct); |
826 | 817 |
827 // Convert the adjustment factor to a qindex delta | 818 // Convert the adjustment factor to a qindex delta |
(...skipping 11 matching lines...) Expand all Loading... |
839 rc->avg_frame_qindex[INTER_FRAME] < active_worst_quality) { | 830 rc->avg_frame_qindex[INTER_FRAME] < active_worst_quality) { |
840 q = rc->avg_frame_qindex[INTER_FRAME]; | 831 q = rc->avg_frame_qindex[INTER_FRAME]; |
841 } else { | 832 } else { |
842 q = active_worst_quality; | 833 q = active_worst_quality; |
843 } | 834 } |
844 // For constrained quality dont allow Q less than the cq level | 835 // For constrained quality dont allow Q less than the cq level |
845 if (oxcf->rc_mode == VPX_CQ) { | 836 if (oxcf->rc_mode == VPX_CQ) { |
846 if (q < cq_level) | 837 if (q < cq_level) |
847 q = cq_level; | 838 q = cq_level; |
848 | 839 |
849 active_best_quality = get_active_quality(q, rc->gfu_boost, | 840 active_best_quality = get_gf_active_quality(rc, q); |
850 gf_low, gf_high, | |
851 arfgf_low_motion_minq, | |
852 arfgf_high_motion_minq); | |
853 | 841 |
854 // Constrained quality use slightly lower active best. | 842 // Constrained quality use slightly lower active best. |
855 active_best_quality = active_best_quality * 15 / 16; | 843 active_best_quality = active_best_quality * 15 / 16; |
856 | 844 |
857 } else if (oxcf->rc_mode == VPX_Q) { | 845 } else if (oxcf->rc_mode == VPX_Q) { |
858 if (!cpi->refresh_alt_ref_frame) { | 846 if (!cpi->refresh_alt_ref_frame) { |
859 active_best_quality = cq_level; | 847 active_best_quality = cq_level; |
860 } else { | 848 } else { |
861 active_best_quality = get_active_quality( | 849 active_best_quality = get_gf_active_quality(rc, q); |
862 q, rc->gfu_boost, gf_low, gf_high, | |
863 arfgf_low_motion_minq, arfgf_high_motion_minq); | |
864 } | 850 } |
865 } else { | 851 } else { |
866 active_best_quality = get_active_quality( | 852 active_best_quality = get_gf_active_quality(rc, q); |
867 q, rc->gfu_boost, gf_low, gf_high, | |
868 arfgf_low_motion_minq, arfgf_high_motion_minq); | |
869 } | 853 } |
870 } else { | 854 } else { |
871 if (oxcf->rc_mode == VPX_Q) { | 855 if (oxcf->rc_mode == VPX_Q) { |
872 active_best_quality = cq_level; | 856 active_best_quality = cq_level; |
873 } else { | 857 } else { |
874 active_best_quality = inter_minq[active_worst_quality]; | 858 active_best_quality = inter_minq[active_worst_quality]; |
875 | 859 |
876 // For the constrained quality mode we don't want | 860 // For the constrained quality mode we don't want |
877 // q to fall below the cq level. | 861 // q to fall below the cq level. |
878 if ((oxcf->rc_mode == VPX_CQ) && | 862 if ((oxcf->rc_mode == VPX_CQ) && |
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1090 rc->long_rolling_actual_bits = ROUND_POWER_OF_TWO( | 1074 rc->long_rolling_actual_bits = ROUND_POWER_OF_TWO( |
1091 rc->long_rolling_actual_bits * 31 + rc->projected_frame_size, 5); | 1075 rc->long_rolling_actual_bits * 31 + rc->projected_frame_size, 5); |
1092 } | 1076 } |
1093 | 1077 |
1094 // Actual bits spent | 1078 // Actual bits spent |
1095 rc->total_actual_bits += rc->projected_frame_size; | 1079 rc->total_actual_bits += rc->projected_frame_size; |
1096 rc->total_target_bits += cm->show_frame ? rc->avg_frame_bandwidth : 0; | 1080 rc->total_target_bits += cm->show_frame ? rc->avg_frame_bandwidth : 0; |
1097 | 1081 |
1098 rc->total_target_vs_actual = rc->total_actual_bits - rc->total_target_bits; | 1082 rc->total_target_vs_actual = rc->total_actual_bits - rc->total_target_bits; |
1099 | 1083 |
1100 if (is_altref_enabled(oxcf) && cpi->refresh_alt_ref_frame && | 1084 if (is_altref_enabled(cpi) && cpi->refresh_alt_ref_frame && |
1101 (cm->frame_type != KEY_FRAME)) | 1085 (cm->frame_type != KEY_FRAME)) |
1102 // Update the alternate reference frame stats as appropriate. | 1086 // Update the alternate reference frame stats as appropriate. |
1103 update_alt_ref_frame_stats(cpi); | 1087 update_alt_ref_frame_stats(cpi); |
1104 else | 1088 else |
1105 // Update the Golden frame stats as appropriate. | 1089 // Update the Golden frame stats as appropriate. |
1106 update_golden_frame_stats(cpi); | 1090 update_golden_frame_stats(cpi); |
1107 | 1091 |
1108 if (cm->frame_type == KEY_FRAME) | 1092 if (cm->frame_type == KEY_FRAME) |
1109 rc->frames_since_key = 0; | 1093 rc->frames_since_key = 0; |
1110 if (cm->show_frame) { | 1094 if (cm->show_frame) { |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1342 // Convert the q target to an index | 1326 // Convert the q target to an index |
1343 for (i = rc->best_quality; i < rc->worst_quality; ++i) { | 1327 for (i = rc->best_quality; i < rc->worst_quality; ++i) { |
1344 target_index = i; | 1328 target_index = i; |
1345 if (vp9_rc_bits_per_mb(frame_type, i, 1.0) <= target_bits_per_mb ) | 1329 if (vp9_rc_bits_per_mb(frame_type, i, 1.0) <= target_bits_per_mb ) |
1346 break; | 1330 break; |
1347 } | 1331 } |
1348 | 1332 |
1349 return target_index - qindex; | 1333 return target_index - qindex; |
1350 } | 1334 } |
1351 | 1335 |
1352 void vp9_rc_set_gf_max_interval(const VP9EncoderConfig *const oxcf, | 1336 void vp9_rc_set_gf_max_interval(const VP9_COMP *const cpi, |
1353 RATE_CONTROL *const rc) { | 1337 RATE_CONTROL *const rc) { |
| 1338 const VP9EncoderConfig *const oxcf = &cpi->oxcf; |
1354 // Set Maximum gf/arf interval | 1339 // Set Maximum gf/arf interval |
1355 rc->max_gf_interval = 16; | 1340 rc->max_gf_interval = 16; |
1356 | 1341 |
1357 // Extended interval for genuinely static scenes | 1342 // Extended interval for genuinely static scenes |
1358 rc->static_scene_max_gf_interval = oxcf->key_freq >> 1; | 1343 rc->static_scene_max_gf_interval = oxcf->key_freq >> 1; |
1359 if (rc->static_scene_max_gf_interval > (MAX_LAG_BUFFERS * 2)) | 1344 if (rc->static_scene_max_gf_interval > (MAX_LAG_BUFFERS * 2)) |
1360 rc->static_scene_max_gf_interval = MAX_LAG_BUFFERS * 2; | 1345 rc->static_scene_max_gf_interval = MAX_LAG_BUFFERS * 2; |
1361 | 1346 |
1362 if (is_altref_enabled(oxcf)) { | 1347 if (is_altref_enabled(cpi)) { |
1363 if (rc->static_scene_max_gf_interval > oxcf->lag_in_frames - 1) | 1348 if (rc->static_scene_max_gf_interval > oxcf->lag_in_frames - 1) |
1364 rc->static_scene_max_gf_interval = oxcf->lag_in_frames - 1; | 1349 rc->static_scene_max_gf_interval = oxcf->lag_in_frames - 1; |
1365 } | 1350 } |
1366 | 1351 |
1367 if (rc->max_gf_interval > rc->static_scene_max_gf_interval) | 1352 if (rc->max_gf_interval > rc->static_scene_max_gf_interval) |
1368 rc->max_gf_interval = rc->static_scene_max_gf_interval; | 1353 rc->max_gf_interval = rc->static_scene_max_gf_interval; |
1369 } | 1354 } |
1370 | 1355 |
1371 void vp9_rc_update_framerate(VP9_COMP *cpi) { | 1356 void vp9_rc_update_framerate(VP9_COMP *cpi) { |
1372 const VP9_COMMON *const cm = &cpi->common; | 1357 const VP9_COMMON *const cm = &cpi->common; |
(...skipping 12 matching lines...) Expand all Loading... |
1385 // can support decode of 1080P content up to a bitrate of MAX_MB_RATE bits | 1370 // can support decode of 1080P content up to a bitrate of MAX_MB_RATE bits |
1386 // per 16x16 MB (averaged over a frame). However this limit is extended if | 1371 // per 16x16 MB (averaged over a frame). However this limit is extended if |
1387 // a very high rate is given on the command line or the the rate cannnot | 1372 // a very high rate is given on the command line or the the rate cannnot |
1388 // be acheived because of a user specificed max q (e.g. when the user | 1373 // be acheived because of a user specificed max q (e.g. when the user |
1389 // specifies lossless encode. | 1374 // specifies lossless encode. |
1390 vbr_max_bits = (int)(((int64_t)rc->avg_frame_bandwidth * | 1375 vbr_max_bits = (int)(((int64_t)rc->avg_frame_bandwidth * |
1391 oxcf->two_pass_vbrmax_section) / 100); | 1376 oxcf->two_pass_vbrmax_section) / 100); |
1392 rc->max_frame_bandwidth = MAX(MAX((cm->MBs * MAX_MB_RATE), MAXRATE_1080P), | 1377 rc->max_frame_bandwidth = MAX(MAX((cm->MBs * MAX_MB_RATE), MAXRATE_1080P), |
1393 vbr_max_bits); | 1378 vbr_max_bits); |
1394 | 1379 |
1395 vp9_rc_set_gf_max_interval(oxcf, rc); | 1380 vp9_rc_set_gf_max_interval(cpi, rc); |
1396 } | 1381 } |
OLD | NEW |