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

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

Issue 1343783006: Simplify BitrateAllocator::AddBitrateObserver. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: fix test Created 5 years, 3 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
« no previous file with comments | « webrtc/video_engine/vie_encoder.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
11 #include "webrtc/video_engine/vie_encoder.h" 11 #include "webrtc/video_engine/vie_encoder.h"
12 12
13 #include <assert.h> 13 #include <assert.h>
14 14
15 #include <algorithm> 15 #include <algorithm>
16 16
17 #include "webrtc/base/checks.h" 17 #include "webrtc/base/checks.h"
18 #include "webrtc/common_video/interface/video_image.h" 18 #include "webrtc/common_video/interface/video_image.h"
19 #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h" 19 #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
20 #include "webrtc/frame_callback.h" 20 #include "webrtc/frame_callback.h"
21 #include "webrtc/modules/bitrate_controller/include/bitrate_controller.h"
21 #include "webrtc/modules/pacing/include/paced_sender.h" 22 #include "webrtc/modules/pacing/include/paced_sender.h"
22 #include "webrtc/modules/utility/interface/process_thread.h" 23 #include "webrtc/modules/utility/interface/process_thread.h"
23 #include "webrtc/modules/video_coding/codecs/interface/video_codec_interface.h" 24 #include "webrtc/modules/video_coding/codecs/interface/video_codec_interface.h"
24 #include "webrtc/modules/video_coding/main/interface/video_coding.h" 25 #include "webrtc/modules/video_coding/main/interface/video_coding.h"
25 #include "webrtc/modules/video_coding/main/interface/video_coding_defines.h" 26 #include "webrtc/modules/video_coding/main/interface/video_coding_defines.h"
26 #include "webrtc/modules/video_coding/main/source/encoded_frame.h" 27 #include "webrtc/modules/video_coding/main/source/encoded_frame.h"
27 #include "webrtc/system_wrappers/interface/clock.h" 28 #include "webrtc/system_wrappers/interface/clock.h"
28 #include "webrtc/system_wrappers/interface/critical_section_wrapper.h" 29 #include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
29 #include "webrtc/system_wrappers/interface/logging.h" 30 #include "webrtc/system_wrappers/interface/logging.h"
30 #include "webrtc/system_wrappers/interface/metrics.h" 31 #include "webrtc/system_wrappers/interface/metrics.h"
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 owner_->OnNetworkChanged(bitrate_bps, fraction_lost, rtt); 99 owner_->OnNetworkChanged(bitrate_bps, fraction_lost, rtt);
99 } 100 }
100 private: 101 private:
101 ViEEncoder* owner_; 102 ViEEncoder* owner_;
102 }; 103 };
103 104
104 ViEEncoder::ViEEncoder(int32_t channel_id, 105 ViEEncoder::ViEEncoder(int32_t channel_id,
105 uint32_t number_of_cores, 106 uint32_t number_of_cores,
106 ProcessThread& module_process_thread, 107 ProcessThread& module_process_thread,
107 PacedSender* pacer, 108 PacedSender* pacer,
108 BitrateAllocator* bitrate_allocator, 109 BitrateAllocator* bitrate_allocator)
109 BitrateController* bitrate_controller)
110 : channel_id_(channel_id), 110 : channel_id_(channel_id),
111 number_of_cores_(number_of_cores), 111 number_of_cores_(number_of_cores),
112 vpm_(VideoProcessingModule::Create(ViEModuleId(-1, channel_id))), 112 vpm_(VideoProcessingModule::Create(ViEModuleId(-1, channel_id))),
113 qm_callback_(new QMVideoSettingsCallback(vpm_.get())), 113 qm_callback_(new QMVideoSettingsCallback(vpm_.get())),
114 vcm_(VideoCodingModule::Create(Clock::GetRealTimeClock(), 114 vcm_(VideoCodingModule::Create(Clock::GetRealTimeClock(),
115 this, 115 this,
116 qm_callback_.get())), 116 qm_callback_.get())),
117 send_payload_router_(NULL), 117 send_payload_router_(NULL),
118 callback_cs_(CriticalSectionWrapper::CreateCriticalSection()), 118 callback_cs_(CriticalSectionWrapper::CreateCriticalSection()),
119 data_cs_(CriticalSectionWrapper::CreateCriticalSection()), 119 data_cs_(CriticalSectionWrapper::CreateCriticalSection()),
120 pacer_(pacer), 120 pacer_(pacer),
121 bitrate_allocator_(bitrate_allocator), 121 bitrate_allocator_(bitrate_allocator),
122 bitrate_controller_(bitrate_controller),
123 time_of_last_frame_activity_ms_(0), 122 time_of_last_frame_activity_ms_(0),
124 simulcast_enabled_(false), 123 simulcast_enabled_(false),
125 min_transmit_bitrate_kbps_(0), 124 min_transmit_bitrate_kbps_(0),
126 last_observed_bitrate_bps_(0), 125 last_observed_bitrate_bps_(0),
127 target_delay_ms_(0), 126 target_delay_ms_(0),
128 network_is_transmitting_(true), 127 network_is_transmitting_(true),
129 encoder_paused_(false), 128 encoder_paused_(false),
130 encoder_paused_and_dropped_frame_(false), 129 encoder_paused_and_dropped_frame_(false),
131 fec_enabled_(false), 130 fec_enabled_(false),
132 nack_enabled_(false), 131 nack_enabled_(false),
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 return -1; 261 return -1;
263 } 262 }
264 263
265 { 264 {
266 CriticalSectionScoped cs(data_cs_.get()); 265 CriticalSectionScoped cs(data_cs_.get());
267 simulcast_enabled_ = video_codec.numberOfSimulcastStreams > 1; 266 simulcast_enabled_ = video_codec.numberOfSimulcastStreams > 1;
268 } 267 }
269 268
270 // Add a bitrate observer to the allocator and update the start, max and 269 // Add a bitrate observer to the allocator and update the start, max and
271 // min bitrates of the bitrate controller as needed. 270 // min bitrates of the bitrate controller as needed.
272 int allocated_bitrate_bps; 271 int allocated_bitrate_bps = bitrate_allocator_->AddBitrateObserver(
273 int new_bwe_candidate_bps = bitrate_allocator_->AddBitrateObserver( 272 bitrate_observer_.get(), video_codec.minBitrate * 1000,
274 bitrate_observer_.get(), video_codec.startBitrate * 1000, 273 video_codec.maxBitrate * 1000);
275 video_codec.minBitrate * 1000, video_codec.maxBitrate * 1000,
276 &allocated_bitrate_bps);
277
278 // Only set the start/min/max bitrate of the bitrate controller if the start
279 // bitrate is greater than zero. The new API sets these via the channel group
280 // and passes a zero start bitrate to SetSendCodec.
281 // TODO(holmer): Remove this when the new API has been launched.
282 if (video_codec.startBitrate > 0) {
283 if (new_bwe_candidate_bps > 0) {
284 uint32_t current_bwe_bps = 0;
285 bitrate_controller_->AvailableBandwidth(&current_bwe_bps);
286 bitrate_controller_->SetStartBitrate(std::max(
287 static_cast<uint32_t>(new_bwe_candidate_bps), current_bwe_bps));
288 }
289
290 int new_bwe_min_bps = 0;
291 int new_bwe_max_bps = 0;
292 bitrate_allocator_->GetMinMaxBitrateSumBps(&new_bwe_min_bps,
293 &new_bwe_max_bps);
294 bitrate_controller_->SetMinMaxBitrate(new_bwe_min_bps, new_bwe_max_bps);
295 }
296 274
297 webrtc::VideoCodec modified_video_codec = video_codec; 275 webrtc::VideoCodec modified_video_codec = video_codec;
298 modified_video_codec.startBitrate = allocated_bitrate_bps / 1000; 276 modified_video_codec.startBitrate = allocated_bitrate_bps / 1000;
299 277
300 size_t max_data_payload_length = send_payload_router_->MaxPayloadLength(); 278 size_t max_data_payload_length = send_payload_router_->MaxPayloadLength();
301 if (vcm_->RegisterSendCodec(&modified_video_codec, number_of_cores_, 279 if (vcm_->RegisterSendCodec(&modified_video_codec, number_of_cores_,
302 static_cast<uint32_t>(max_data_payload_length)) != 280 static_cast<uint32_t>(max_data_payload_length)) !=
303 VCM_OK) { 281 VCM_OK) {
304 return -1; 282 return -1;
305 } 283 }
(...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after
809 const uint32_t width, 787 const uint32_t width,
810 const uint32_t height) { 788 const uint32_t height) {
811 return vpm_->SetTargetResolution(width, height, frame_rate); 789 return vpm_->SetTargetResolution(width, height, frame_rate);
812 } 790 }
813 791
814 void QMVideoSettingsCallback::SetTargetFramerate(int frame_rate) { 792 void QMVideoSettingsCallback::SetTargetFramerate(int frame_rate) {
815 vpm_->SetTargetFramerate(frame_rate); 793 vpm_->SetTargetFramerate(frame_rate);
816 } 794 }
817 795
818 } // namespace webrtc 796 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/video_engine/vie_encoder.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698