Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Side by Side Diff: webrtc/video/vie_encoder.cc

Issue 2883963002: Periodically update codec bit/frame rate settings. (Closed)
Patch Set: cleanup Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC 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 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 if (source_) 188 if (source_)
189 source_->AddOrUpdateSink(vie_encoder_, sink_wants_); 189 source_->AddOrUpdateSink(vie_encoder_, sink_wants_);
190 } 190 }
191 191
192 rtc::VideoSinkWants GetActiveSinkWants() EXCLUSIVE_LOCKS_REQUIRED(&crit_) { 192 rtc::VideoSinkWants GetActiveSinkWants() EXCLUSIVE_LOCKS_REQUIRED(&crit_) {
193 rtc::VideoSinkWants wants = sink_wants_; 193 rtc::VideoSinkWants wants = sink_wants_;
194 // Clear any constraints from the current sink wants that don't apply to 194 // Clear any constraints from the current sink wants that don't apply to
195 // the used degradation_preference. 195 // the used degradation_preference.
196 switch (degradation_preference_) { 196 switch (degradation_preference_) {
197 case VideoSendStream::DegradationPreference::kBalanced: 197 case VideoSendStream::DegradationPreference::kBalanced:
198 FALLTHROUGH();
stefan-webrtc 2017/05/23 17:03:20 If we remove this I assume we should add a break i
sprang_webrtc 2017/05/24 09:07:07 FALLTHROUGH() macro is actually only there to prev
199 case VideoSendStream::DegradationPreference::kMaintainFramerate: 198 case VideoSendStream::DegradationPreference::kMaintainFramerate:
200 wants.max_framerate_fps = std::numeric_limits<int>::max(); 199 wants.max_framerate_fps = std::numeric_limits<int>::max();
201 break; 200 break;
202 case VideoSendStream::DegradationPreference::kMaintainResolution: 201 case VideoSendStream::DegradationPreference::kMaintainResolution:
203 wants.max_pixel_count = std::numeric_limits<int>::max(); 202 wants.max_pixel_count = std::numeric_limits<int>::max();
204 wants.target_pixel_count.reset(); 203 wants.target_pixel_count.reset();
205 break; 204 break;
206 case VideoSendStream::DegradationPreference::kDegradationDisabled: 205 case VideoSendStream::DegradationPreference::kDegradationDisabled:
207 wants.max_pixel_count = std::numeric_limits<int>::max(); 206 wants.max_pixel_count = std::numeric_limits<int>::max();
208 wants.target_pixel_count.reset(); 207 wants.target_pixel_count.reset();
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 LOG(LS_INFO) << "Dropping frame. Too large for target bitrate."; 668 LOG(LS_INFO) << "Dropping frame. Too large for target bitrate.";
670 AdaptDown(kQuality); 669 AdaptDown(kQuality);
671 ++initial_rampup_; 670 ++initial_rampup_;
672 return; 671 return;
673 } 672 }
674 initial_rampup_ = kMaxInitialFramedrop; 673 initial_rampup_ = kMaxInitialFramedrop;
675 674
676 int64_t now_ms = clock_->TimeInMilliseconds(); 675 int64_t now_ms = clock_->TimeInMilliseconds();
677 if (pending_encoder_reconfiguration_) { 676 if (pending_encoder_reconfiguration_) {
678 ReconfigureEncoder(); 677 ReconfigureEncoder();
678 last_parameters_update_ms_.emplace(now_ms);
679 } else if (!last_parameters_update_ms_ || 679 } else if (!last_parameters_update_ms_ ||
680 now_ms - *last_parameters_update_ms_ >= 680 now_ms - *last_parameters_update_ms_ >=
681 vcm::VCMProcessTimer::kDefaultProcessIntervalMs) { 681 vcm::VCMProcessTimer::kDefaultProcessIntervalMs) {
682 video_sender_.UpdateChannelParemeters(rate_allocator_.get(), 682 video_sender_.UpdateChannelParemeters(rate_allocator_.get(),
683 bitrate_observer_); 683 bitrate_observer_);
684 last_parameters_update_ms_.emplace(now_ms);
684 } 685 }
685 last_parameters_update_ms_.emplace(now_ms);
686 686
687 if (EncoderPaused()) { 687 if (EncoderPaused()) {
688 TraceFrameDropStart(); 688 TraceFrameDropStart();
689 return; 689 return;
690 } 690 }
691 TraceFrameDropEnd(); 691 TraceFrameDropEnd();
692 692
693 TRACE_EVENT_ASYNC_STEP0("webrtc", "Video", video_frame.render_time_ms(), 693 TRACE_EVENT_ASYNC_STEP0("webrtc", "Video", video_frame.render_time_ms(),
694 "Encode"); 694 "Encode");
695 695
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
797 last_frame_info_->pixel_count(), 797 last_frame_info_->pixel_count(),
798 stats_proxy_->GetStats().input_frame_rate, 798 stats_proxy_->GetStats().input_frame_rate,
799 AdaptationRequest::Mode::kAdaptDown}; 799 AdaptationRequest::Mode::kAdaptDown};
800 bool downgrade_requested = 800 bool downgrade_requested =
801 last_adaptation_request_ && 801 last_adaptation_request_ &&
802 last_adaptation_request_->mode_ == AdaptationRequest::Mode::kAdaptDown; 802 last_adaptation_request_->mode_ == AdaptationRequest::Mode::kAdaptDown;
803 803
804 int max_downgrades = 0; 804 int max_downgrades = 0;
805 switch (degradation_preference_) { 805 switch (degradation_preference_) {
806 case VideoSendStream::DegradationPreference::kBalanced: 806 case VideoSendStream::DegradationPreference::kBalanced:
807 FALLTHROUGH();
808 case VideoSendStream::DegradationPreference::kMaintainFramerate: 807 case VideoSendStream::DegradationPreference::kMaintainFramerate:
809 max_downgrades = kMaxCpuResolutionDowngrades; 808 max_downgrades = kMaxCpuResolutionDowngrades;
810 if (downgrade_requested && 809 if (downgrade_requested &&
811 adaptation_request.input_pixel_count_ >= 810 adaptation_request.input_pixel_count_ >=
812 last_adaptation_request_->input_pixel_count_) { 811 last_adaptation_request_->input_pixel_count_) {
813 // Don't request lower resolution if the current resolution is not 812 // Don't request lower resolution if the current resolution is not
814 // lower than the last time we asked for the resolution to be lowered. 813 // lower than the last time we asked for the resolution to be lowered.
815 return; 814 return;
816 } 815 }
817 break; 816 break;
(...skipping 16 matching lines...) Expand all
834 } 833 }
835 834
836 if (reason == kCpu) { 835 if (reason == kCpu) {
837 const int cpu_scale_counter = GetScaleCounters()[reason]; 836 const int cpu_scale_counter = GetScaleCounters()[reason];
838 if (cpu_scale_counter >= max_downgrades) 837 if (cpu_scale_counter >= max_downgrades)
839 return; 838 return;
840 } 839 }
841 840
842 switch (degradation_preference_) { 841 switch (degradation_preference_) {
843 case VideoSendStream::DegradationPreference::kBalanced: 842 case VideoSendStream::DegradationPreference::kBalanced:
844 FALLTHROUGH();
845 case VideoSendStream::DegradationPreference::kMaintainFramerate: 843 case VideoSendStream::DegradationPreference::kMaintainFramerate:
846 if (!source_proxy_->RequestResolutionLowerThan( 844 if (!source_proxy_->RequestResolutionLowerThan(
847 adaptation_request.input_pixel_count_)) { 845 adaptation_request.input_pixel_count_)) {
848 return; 846 return;
849 } 847 }
850 LOG(LS_INFO) << "Scaling down resolution."; 848 LOG(LS_INFO) << "Scaling down resolution.";
851 break; 849 break;
852 case VideoSendStream::DegradationPreference::kMaintainResolution: 850 case VideoSendStream::DegradationPreference::kMaintainResolution:
853 source_proxy_->RequestFramerateLowerThan( 851 source_proxy_->RequestFramerateLowerThan(
854 adaptation_request.framerate_fps_); 852 adaptation_request.framerate_fps_);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
889 AdaptationRequest adaptation_request = { 887 AdaptationRequest adaptation_request = {
890 last_frame_info_->pixel_count(), 888 last_frame_info_->pixel_count(),
891 stats_proxy_->GetStats().input_frame_rate, 889 stats_proxy_->GetStats().input_frame_rate,
892 AdaptationRequest::Mode::kAdaptUp}; 890 AdaptationRequest::Mode::kAdaptUp};
893 891
894 bool adapt_up_requested = 892 bool adapt_up_requested =
895 last_adaptation_request_ && 893 last_adaptation_request_ &&
896 last_adaptation_request_->mode_ == AdaptationRequest::Mode::kAdaptUp; 894 last_adaptation_request_->mode_ == AdaptationRequest::Mode::kAdaptUp;
897 switch (degradation_preference_) { 895 switch (degradation_preference_) {
898 case VideoSendStream::DegradationPreference::kBalanced: 896 case VideoSendStream::DegradationPreference::kBalanced:
899 FALLTHROUGH();
900 case VideoSendStream::DegradationPreference::kMaintainFramerate: 897 case VideoSendStream::DegradationPreference::kMaintainFramerate:
901 if (adapt_up_requested && 898 if (adapt_up_requested &&
902 adaptation_request.input_pixel_count_ <= 899 adaptation_request.input_pixel_count_ <=
903 last_adaptation_request_->input_pixel_count_) { 900 last_adaptation_request_->input_pixel_count_) {
904 // Don't request higher resolution if the current resolution is not 901 // Don't request higher resolution if the current resolution is not
905 // higher than the last time we asked for the resolution to be higher. 902 // higher than the last time we asked for the resolution to be higher.
906 return; 903 return;
907 } 904 }
908 break; 905 break;
909 case VideoSendStream::DegradationPreference::kMaintainResolution: 906 case VideoSendStream::DegradationPreference::kMaintainResolution:
910 // TODO(sprang): Don't request higher framerate if we are already at 907 // TODO(sprang): Don't request higher framerate if we are already at
911 // max requested fps? 908 // max requested fps?
912 break; 909 break;
913 case VideoSendStream::DegradationPreference::kDegradationDisabled: 910 case VideoSendStream::DegradationPreference::kDegradationDisabled:
914 return; 911 return;
915 } 912 }
916 913
917 // Decrease counter of how many times we have scaled down, for this 914 // Decrease counter of how many times we have scaled down, for this
918 // degradation preference mode and reason. 915 // degradation preference mode and reason.
919 IncrementScaleCounter(reason, -1); 916 IncrementScaleCounter(reason, -1);
920 917
921 // Get a sum of how many times have scaled down, in total, for this 918 // Get a sum of how many times have scaled down, in total, for this
922 // degradation preference mode. If it is 0, remove any restraints. 919 // degradation preference mode. If it is 0, remove any restraints.
923 const std::vector<int>& scale_counters = GetScaleCounters(); 920 const std::vector<int>& scale_counters = GetScaleCounters();
924 const int scale_sum = 921 const int scale_sum =
925 std::accumulate(scale_counters.begin(), scale_counters.end(), 0); 922 std::accumulate(scale_counters.begin(), scale_counters.end(), 0);
926 switch (degradation_preference_) { 923 switch (degradation_preference_) {
927 case VideoSendStream::DegradationPreference::kBalanced: 924 case VideoSendStream::DegradationPreference::kBalanced:
928 FALLTHROUGH();
929 case VideoSendStream::DegradationPreference::kMaintainFramerate: 925 case VideoSendStream::DegradationPreference::kMaintainFramerate:
930 if (scale_sum == 0) { 926 if (scale_sum == 0) {
931 LOG(LS_INFO) << "Removing resolution down-scaling setting."; 927 LOG(LS_INFO) << "Removing resolution down-scaling setting.";
932 source_proxy_->RequestHigherResolutionThan( 928 source_proxy_->RequestHigherResolutionThan(
933 std::numeric_limits<int>::max()); 929 std::numeric_limits<int>::max());
934 } else { 930 } else {
935 source_proxy_->RequestHigherResolutionThan( 931 source_proxy_->RequestHigherResolutionThan(
936 adaptation_request.input_pixel_count_); 932 adaptation_request.input_pixel_count_);
937 LOG(LS_INFO) << "Scaling up resolution."; 933 LOG(LS_INFO) << "Scaling up resolution.";
938 } 934 }
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
984 void ViEEncoder::IncrementScaleCounter(int reason, int delta) { 980 void ViEEncoder::IncrementScaleCounter(int reason, int delta) {
985 // Get the counters and validate. This may also lazily initialize the state. 981 // Get the counters and validate. This may also lazily initialize the state.
986 const std::vector<int>& counter = GetScaleCounters(); 982 const std::vector<int>& counter = GetScaleCounters();
987 if (delta < 0) { 983 if (delta < 0) {
988 RTC_DCHECK_GE(counter[reason], delta); 984 RTC_DCHECK_GE(counter[reason], delta);
989 } 985 }
990 scale_counters_[degradation_preference_][reason] += delta; 986 scale_counters_[degradation_preference_][reason] += delta;
991 } 987 }
992 988
993 } // namespace webrtc 989 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698