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

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

Issue 2541303003: Wire up BitrateAllocation to be sent as RTCP TargetBitrate (Closed)
Patch Set: Created 4 years 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/payload_router_unittest.cc ('k') | webrtc/video/vie_encoder.h » ('j') | 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) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 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 #include "webrtc/video/video_send_stream.h" 10 #include "webrtc/video/video_send_stream.h"
11 11
12 #include <algorithm> 12 #include <algorithm>
13 #include <cmath> 13 #include <cmath>
14 #include <sstream> 14 #include <sstream>
15 #include <string> 15 #include <string>
16 #include <utility> 16 #include <utility>
17 #include <vector> 17 #include <vector>
18 18
19 #include "webrtc/common_types.h" 19 #include "webrtc/common_types.h"
20 #include "webrtc/common_video/include/video_bitrate_allocator.h"
20 #include "webrtc/base/checks.h" 21 #include "webrtc/base/checks.h"
21 #include "webrtc/base/file.h" 22 #include "webrtc/base/file.h"
22 #include "webrtc/base/logging.h" 23 #include "webrtc/base/logging.h"
23 #include "webrtc/base/trace_event.h" 24 #include "webrtc/base/trace_event.h"
24 #include "webrtc/base/weak_ptr.h" 25 #include "webrtc/base/weak_ptr.h"
25 #include "webrtc/modules/bitrate_controller/include/bitrate_controller.h" 26 #include "webrtc/modules/bitrate_controller/include/bitrate_controller.h"
26 #include "webrtc/modules/congestion_controller/include/congestion_controller.h" 27 #include "webrtc/modules/congestion_controller/include/congestion_controller.h"
27 #include "webrtc/modules/pacing/packet_router.h" 28 #include "webrtc/modules/pacing/packet_router.h"
28 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h" 29 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h"
29 #include "webrtc/modules/utility/include/process_thread.h" 30 #include "webrtc/modules/utility/include/process_thread.h"
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 // VideoSendStreamImpl implements internal::VideoSendStream. 283 // VideoSendStreamImpl implements internal::VideoSendStream.
283 // It is created and destroyed on |worker_queue|. The intent is to decrease the 284 // It is created and destroyed on |worker_queue|. The intent is to decrease the
284 // need for locking and to ensure methods are called in sequence. 285 // need for locking and to ensure methods are called in sequence.
285 // Public methods except |DeliverRtcp| must be called on |worker_queue|. 286 // Public methods except |DeliverRtcp| must be called on |worker_queue|.
286 // DeliverRtcp is called on the libjingle worker thread or a network thread. 287 // DeliverRtcp is called on the libjingle worker thread or a network thread.
287 // An encoder may deliver frames through the EncodedImageCallback on an 288 // An encoder may deliver frames through the EncodedImageCallback on an
288 // arbitrary thread. 289 // arbitrary thread.
289 class VideoSendStreamImpl : public webrtc::BitrateAllocatorObserver, 290 class VideoSendStreamImpl : public webrtc::BitrateAllocatorObserver,
290 public webrtc::OverheadObserver, 291 public webrtc::OverheadObserver,
291 public webrtc::VCMProtectionCallback, 292 public webrtc::VCMProtectionCallback,
292 public ViEEncoder::EncoderSink { 293 public ViEEncoder::EncoderSink,
294 public VideoBitrateAllocationObserver {
293 public: 295 public:
294 VideoSendStreamImpl(SendStatisticsProxy* stats_proxy, 296 VideoSendStreamImpl(SendStatisticsProxy* stats_proxy,
295 rtc::TaskQueue* worker_queue, 297 rtc::TaskQueue* worker_queue,
296 CallStats* call_stats, 298 CallStats* call_stats,
297 CongestionController* congestion_controller, 299 CongestionController* congestion_controller,
298 PacketRouter* packet_router, 300 PacketRouter* packet_router,
299 BitrateAllocator* bitrate_allocator, 301 BitrateAllocator* bitrate_allocator,
300 SendDelayStats* send_delay_stats, 302 SendDelayStats* send_delay_stats,
301 VieRemb* remb, 303 VieRemb* remb,
302 ViEEncoder* vie_encoder, 304 ViEEncoder* vie_encoder,
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 int min_transmit_bitrate_bps) override; 352 int min_transmit_bitrate_bps) override;
351 353
352 // Implements EncodedImageCallback. The implementation routes encoded frames 354 // Implements EncodedImageCallback. The implementation routes encoded frames
353 // to the |payload_router_| and |config.pre_encode_callback| if set. 355 // to the |payload_router_| and |config.pre_encode_callback| if set.
354 // Called on an arbitrary encoder callback thread. 356 // Called on an arbitrary encoder callback thread.
355 EncodedImageCallback::Result OnEncodedImage( 357 EncodedImageCallback::Result OnEncodedImage(
356 const EncodedImage& encoded_image, 358 const EncodedImage& encoded_image,
357 const CodecSpecificInfo* codec_specific_info, 359 const CodecSpecificInfo* codec_specific_info,
358 const RTPFragmentationHeader* fragmentation) override; 360 const RTPFragmentationHeader* fragmentation) override;
359 361
362 // Implements VideoBitrateAllocationObserver.
363 void OnBitrateAllocationUpdated(const BitrateAllocation& allocation) override;
364
360 void ConfigureProtection(); 365 void ConfigureProtection();
361 void ConfigureSsrcs(); 366 void ConfigureSsrcs();
362 void SignalEncoderTimedOut(); 367 void SignalEncoderTimedOut();
363 void SignalEncoderActive(); 368 void SignalEncoderActive();
364 369
365 SendStatisticsProxy* const stats_proxy_; 370 SendStatisticsProxy* const stats_proxy_;
366 const VideoSendStream::Config* const config_; 371 const VideoSendStream::Config* const config_;
367 std::map<uint32_t, RtpState> suspended_ssrcs_; 372 std::map<uint32_t, RtpState> suspended_ssrcs_;
368 373
369 ProcessThread* module_process_thread_; 374 ProcessThread* module_process_thread_;
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
591 const std::map<uint32_t, RtpState>& suspended_ssrcs) 596 const std::map<uint32_t, RtpState>& suspended_ssrcs)
592 : worker_queue_(worker_queue), 597 : worker_queue_(worker_queue),
593 thread_sync_event_(false /* manual_reset */, false), 598 thread_sync_event_(false /* manual_reset */, false),
594 stats_proxy_(Clock::GetRealTimeClock(), 599 stats_proxy_(Clock::GetRealTimeClock(),
595 config, 600 config,
596 encoder_config.content_type), 601 encoder_config.content_type),
597 config_(std::move(config)) { 602 config_(std::move(config)) {
598 vie_encoder_.reset(new ViEEncoder( 603 vie_encoder_.reset(new ViEEncoder(
599 num_cpu_cores, &stats_proxy_, config_.encoder_settings, 604 num_cpu_cores, &stats_proxy_, config_.encoder_settings,
600 config_.pre_encode_callback, config_.post_encode_callback)); 605 config_.pre_encode_callback, config_.post_encode_callback));
601
602 worker_queue_->PostTask(std::unique_ptr<rtc::QueuedTask>(new ConstructionTask( 606 worker_queue_->PostTask(std::unique_ptr<rtc::QueuedTask>(new ConstructionTask(
603 &send_stream_, &thread_sync_event_, &stats_proxy_, vie_encoder_.get(), 607 &send_stream_, &thread_sync_event_, &stats_proxy_, vie_encoder_.get(),
604 module_process_thread, call_stats, congestion_controller, packet_router, 608 module_process_thread, call_stats, congestion_controller, packet_router,
605 bitrate_allocator, send_delay_stats, remb, event_log, &config_, 609 bitrate_allocator, send_delay_stats, remb, event_log, &config_,
606 encoder_config.max_bitrate_bps, suspended_ssrcs))); 610 encoder_config.max_bitrate_bps, suspended_ssrcs)));
607 611
608 // Wait for ConstructionTask to complete so that |send_stream_| can be used. 612 // Wait for ConstructionTask to complete so that |send_stream_| can be used.
609 // |module_process_thread| must be registered and deregistered on the thread 613 // |module_process_thread| must be registered and deregistered on the thread
610 // it was created on. 614 // it was created on.
611 thread_sync_event_.Wait(rtc::Event::kForever); 615 thread_sync_event_.Wait(rtc::Event::kForever);
612 send_stream_->RegisterProcessThread(module_process_thread); 616 send_stream_->RegisterProcessThread(module_process_thread);
613 617 vie_encoder_->SetBitrateObserver(send_stream_.get());
614 vie_encoder_->RegisterProcessThread(module_process_thread); 618 vie_encoder_->RegisterProcessThread(module_process_thread);
615 619
616 ReconfigureVideoEncoder(std::move(encoder_config)); 620 ReconfigureVideoEncoder(std::move(encoder_config));
617 } 621 }
618 622
619 VideoSendStream::~VideoSendStream() { 623 VideoSendStream::~VideoSendStream() {
620 RTC_DCHECK_RUN_ON(&thread_checker_); 624 RTC_DCHECK_RUN_ON(&thread_checker_);
621 RTC_DCHECK(!send_stream_); 625 RTC_DCHECK(!send_stream_);
622 } 626 }
623 627
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
842 } 846 }
843 847
844 void VideoSendStreamImpl::DeRegisterProcessThread() { 848 void VideoSendStreamImpl::DeRegisterProcessThread() {
845 RTC_DCHECK_RUN_ON(&module_process_thread_checker_); 849 RTC_DCHECK_RUN_ON(&module_process_thread_checker_);
846 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) 850 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_)
847 module_process_thread_->DeRegisterModule(rtp_rtcp); 851 module_process_thread_->DeRegisterModule(rtp_rtcp);
848 } 852 }
849 853
850 VideoSendStreamImpl::~VideoSendStreamImpl() { 854 VideoSendStreamImpl::~VideoSendStreamImpl() {
851 RTC_DCHECK_RUN_ON(worker_queue_); 855 RTC_DCHECK_RUN_ON(worker_queue_);
852 RTC_DCHECK(!payload_router_.active()) 856 RTC_DCHECK(!payload_router_.IsActive())
853 << "VideoSendStreamImpl::Stop not called"; 857 << "VideoSendStreamImpl::Stop not called";
854 LOG(LS_INFO) << "~VideoSendStreamInternal: " << config_->ToString(); 858 LOG(LS_INFO) << "~VideoSendStreamInternal: " << config_->ToString();
855 859
856 rtp_rtcp_modules_[0]->SetREMBStatus(false); 860 rtp_rtcp_modules_[0]->SetREMBStatus(false);
857 remb_->RemoveRembSender(rtp_rtcp_modules_[0]); 861 remb_->RemoveRembSender(rtp_rtcp_modules_[0]);
858 862
859 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { 863 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) {
860 packet_router_->RemoveRtpModule(rtp_rtcp); 864 packet_router_->RemoveRtpModule(rtp_rtcp);
861 delete rtp_rtcp; 865 delete rtp_rtcp;
862 } 866 }
863 } 867 }
864 868
865 bool VideoSendStreamImpl::DeliverRtcp(const uint8_t* packet, size_t length) { 869 bool VideoSendStreamImpl::DeliverRtcp(const uint8_t* packet, size_t length) {
866 // Runs on a network thread. 870 // Runs on a network thread.
867 RTC_DCHECK(!worker_queue_->IsCurrent()); 871 RTC_DCHECK(!worker_queue_->IsCurrent());
868 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) 872 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_)
869 rtp_rtcp->IncomingRtcpPacket(packet, length); 873 rtp_rtcp->IncomingRtcpPacket(packet, length);
870 return true; 874 return true;
871 } 875 }
872 876
873 void VideoSendStreamImpl::Start() { 877 void VideoSendStreamImpl::Start() {
874 RTC_DCHECK_RUN_ON(worker_queue_); 878 RTC_DCHECK_RUN_ON(worker_queue_);
875 LOG(LS_INFO) << "VideoSendStream::Start"; 879 LOG(LS_INFO) << "VideoSendStream::Start";
876 if (payload_router_.active()) 880 if (payload_router_.IsActive())
877 return; 881 return;
878 TRACE_EVENT_INSTANT0("webrtc", "VideoSendStream::Start"); 882 TRACE_EVENT_INSTANT0("webrtc", "VideoSendStream::Start");
879 payload_router_.set_active(true); 883 payload_router_.SetActive(true);
880 884
881 bitrate_allocator_->AddObserver( 885 bitrate_allocator_->AddObserver(
882 this, encoder_min_bitrate_bps_, encoder_max_bitrate_bps_, 886 this, encoder_min_bitrate_bps_, encoder_max_bitrate_bps_,
883 max_padding_bitrate_, !config_->suspend_below_min_bitrate); 887 max_padding_bitrate_, !config_->suspend_below_min_bitrate);
884 888
885 // Start monitoring encoder activity. 889 // Start monitoring encoder activity.
886 { 890 {
887 rtc::CritScope lock(&encoder_activity_crit_sect_); 891 rtc::CritScope lock(&encoder_activity_crit_sect_);
888 RTC_DCHECK(!check_encoder_activity_task_); 892 RTC_DCHECK(!check_encoder_activity_task_);
889 check_encoder_activity_task_ = new CheckEncoderActivityTask(weak_ptr_); 893 check_encoder_activity_task_ = new CheckEncoderActivityTask(weak_ptr_);
890 worker_queue_->PostDelayedTask( 894 worker_queue_->PostDelayedTask(
891 std::unique_ptr<rtc::QueuedTask>(check_encoder_activity_task_), 895 std::unique_ptr<rtc::QueuedTask>(check_encoder_activity_task_),
892 CheckEncoderActivityTask::kEncoderTimeOutMs); 896 CheckEncoderActivityTask::kEncoderTimeOutMs);
893 } 897 }
894 898
895 vie_encoder_->SendKeyFrame(); 899 vie_encoder_->SendKeyFrame();
896 } 900 }
897 901
898 void VideoSendStreamImpl::Stop() { 902 void VideoSendStreamImpl::Stop() {
899 RTC_DCHECK_RUN_ON(worker_queue_); 903 RTC_DCHECK_RUN_ON(worker_queue_);
900 LOG(LS_INFO) << "VideoSendStream::Stop"; 904 LOG(LS_INFO) << "VideoSendStream::Stop";
901 if (!payload_router_.active()) 905 if (!payload_router_.IsActive())
902 return; 906 return;
903 TRACE_EVENT_INSTANT0("webrtc", "VideoSendStream::Stop"); 907 TRACE_EVENT_INSTANT0("webrtc", "VideoSendStream::Stop");
904 payload_router_.set_active(false); 908 payload_router_.SetActive(false);
905 bitrate_allocator_->RemoveObserver(this); 909 bitrate_allocator_->RemoveObserver(this);
906 { 910 {
907 rtc::CritScope lock(&encoder_activity_crit_sect_); 911 rtc::CritScope lock(&encoder_activity_crit_sect_);
908 check_encoder_activity_task_->Stop(); 912 check_encoder_activity_task_->Stop();
909 check_encoder_activity_task_ = nullptr; 913 check_encoder_activity_task_ = nullptr;
910 } 914 }
911 vie_encoder_->OnBitrateUpdated(0, 0, 0); 915 vie_encoder_->OnBitrateUpdated(0, 0, 0);
912 stats_proxy_->OnSetEncoderTargetRate(0); 916 stats_proxy_->OnSetEncoderTargetRate(0);
913 } 917 }
914 918
915 void VideoSendStreamImpl::SignalEncoderTimedOut() { 919 void VideoSendStreamImpl::SignalEncoderTimedOut() {
916 RTC_DCHECK_RUN_ON(worker_queue_); 920 RTC_DCHECK_RUN_ON(worker_queue_);
917 // If the encoder has not produced anything the last kEncoderTimeOutMs and it 921 // If the encoder has not produced anything the last kEncoderTimeOutMs and it
918 // is supposed to, deregister as BitrateAllocatorObserver. This can happen 922 // is supposed to, deregister as BitrateAllocatorObserver. This can happen
919 // if a camera stops producing frames. 923 // if a camera stops producing frames.
920 if (encoder_target_rate_bps_ > 0) { 924 if (encoder_target_rate_bps_ > 0) {
921 LOG(LS_INFO) << "SignalEncoderTimedOut, Encoder timed out."; 925 LOG(LS_INFO) << "SignalEncoderTimedOut, Encoder timed out.";
922 bitrate_allocator_->RemoveObserver(this); 926 bitrate_allocator_->RemoveObserver(this);
923 } 927 }
924 } 928 }
925 929
930 void VideoSendStreamImpl::OnBitrateAllocationUpdated(
931 const BitrateAllocation& allocation) {
932 payload_router_.OnBitrateAllocationUpdated(allocation);
933 }
934
926 void VideoSendStreamImpl::SignalEncoderActive() { 935 void VideoSendStreamImpl::SignalEncoderActive() {
927 RTC_DCHECK_RUN_ON(worker_queue_); 936 RTC_DCHECK_RUN_ON(worker_queue_);
928 LOG(LS_INFO) << "SignalEncoderActive, Encoder is active."; 937 LOG(LS_INFO) << "SignalEncoderActive, Encoder is active.";
929 bitrate_allocator_->AddObserver( 938 bitrate_allocator_->AddObserver(
930 this, encoder_min_bitrate_bps_, encoder_max_bitrate_bps_, 939 this, encoder_min_bitrate_bps_, encoder_max_bitrate_bps_,
931 max_padding_bitrate_, !config_->suspend_below_min_bitrate); 940 max_padding_bitrate_, !config_->suspend_below_min_bitrate);
932 } 941 }
933 942
934 void VideoSendStreamImpl::OnEncoderConfigurationChanged( 943 void VideoSendStreamImpl::OnEncoderConfigurationChanged(
935 std::vector<VideoStream> streams, 944 std::vector<VideoStream> streams,
(...skipping 22 matching lines...) Expand all
958 for (size_t i = streams.size(); i < config_->rtp.ssrcs.size(); ++i) { 967 for (size_t i = streams.size(); i < config_->rtp.ssrcs.size(); ++i) {
959 stats_proxy_->OnInactiveSsrc(config_->rtp.ssrcs[i]); 968 stats_proxy_->OnInactiveSsrc(config_->rtp.ssrcs[i]);
960 } 969 }
961 970
962 size_t number_of_temporal_layers = 971 size_t number_of_temporal_layers =
963 streams.back().temporal_layer_thresholds_bps.size() + 1; 972 streams.back().temporal_layer_thresholds_bps.size() + 1;
964 protection_bitrate_calculator_.SetEncodingData( 973 protection_bitrate_calculator_.SetEncodingData(
965 streams[0].width, streams[0].height, number_of_temporal_layers, 974 streams[0].width, streams[0].height, number_of_temporal_layers,
966 config_->rtp.max_packet_size); 975 config_->rtp.max_packet_size);
967 976
968 if (payload_router_.active()) { 977 if (payload_router_.IsActive()) {
969 // The send stream is started already. Update the allocator with new bitrate 978 // The send stream is started already. Update the allocator with new bitrate
970 // limits. 979 // limits.
971 bitrate_allocator_->AddObserver( 980 bitrate_allocator_->AddObserver(
972 this, encoder_min_bitrate_bps_, encoder_max_bitrate_bps_, 981 this, encoder_min_bitrate_bps_, encoder_max_bitrate_bps_,
973 max_padding_bitrate_, !config_->suspend_below_min_bitrate); 982 max_padding_bitrate_, !config_->suspend_below_min_bitrate);
974 } 983 }
975 } 984 }
976 985
977 EncodedImageCallback::Result VideoSendStreamImpl::OnEncodedImage( 986 EncodedImageCallback::Result VideoSendStreamImpl::OnEncodedImage(
978 const EncodedImage& encoded_image, 987 const EncodedImage& encoded_image,
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
1167 rtp_rtcp->SetRTCPStatus(state == kNetworkUp ? config_->rtp.rtcp_mode 1176 rtp_rtcp->SetRTCPStatus(state == kNetworkUp ? config_->rtp.rtcp_mode
1168 : RtcpMode::kOff); 1177 : RtcpMode::kOff);
1169 } 1178 }
1170 } 1179 }
1171 1180
1172 uint32_t VideoSendStreamImpl::OnBitrateUpdated(uint32_t bitrate_bps, 1181 uint32_t VideoSendStreamImpl::OnBitrateUpdated(uint32_t bitrate_bps,
1173 uint8_t fraction_loss, 1182 uint8_t fraction_loss,
1174 int64_t rtt, 1183 int64_t rtt,
1175 int64_t probing_interval_ms) { 1184 int64_t probing_interval_ms) {
1176 RTC_DCHECK_RUN_ON(worker_queue_); 1185 RTC_DCHECK_RUN_ON(worker_queue_);
1177 RTC_DCHECK(payload_router_.active()) 1186 RTC_DCHECK(payload_router_.IsActive())
1178 << "VideoSendStream::Start has not been called."; 1187 << "VideoSendStream::Start has not been called.";
1179 1188
1180 if (webrtc::field_trial::FindFullName("WebRTC-SendSideBwe-WithOverhead") == 1189 if (webrtc::field_trial::FindFullName("WebRTC-SendSideBwe-WithOverhead") ==
1181 "Enabled") { 1190 "Enabled") {
1182 // Substract overhead from bitrate. 1191 // Substract overhead from bitrate.
1183 rtc::CritScope lock(&overhead_bytes_per_packet_crit_); 1192 rtc::CritScope lock(&overhead_bytes_per_packet_crit_);
1184 int packets_per_second = 1193 int packets_per_second =
1185 std::ceil(bitrate_bps / (8 * (config_->rtp.max_packet_size + 1194 std::ceil(bitrate_bps / (8 * (config_->rtp.max_packet_size +
1186 transport_overhead_bytes_per_packet_))); 1195 transport_overhead_bytes_per_packet_)));
1187 uint32_t overhead_bps = static_cast<uint32_t>( 1196 uint32_t overhead_bps = static_cast<uint32_t>(
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
1261 const uint16_t mtu = static_cast<uint16_t>( 1270 const uint16_t mtu = static_cast<uint16_t>(
1262 config_->rtp.max_packet_size + transport_overhead_bytes_per_packet); 1271 config_->rtp.max_packet_size + transport_overhead_bytes_per_packet);
1263 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { 1272 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) {
1264 rtp_rtcp->SetTransportOverhead(transport_overhead_bytes_per_packet); 1273 rtp_rtcp->SetTransportOverhead(transport_overhead_bytes_per_packet);
1265 rtp_rtcp->SetMaxTransferUnit(mtu); 1274 rtp_rtcp->SetMaxTransferUnit(mtu);
1266 } 1275 }
1267 } 1276 }
1268 1277
1269 } // namespace internal 1278 } // namespace internal
1270 } // namespace webrtc 1279 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/video/payload_router_unittest.cc ('k') | webrtc/video/vie_encoder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698