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

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtp_sender.cc

Issue 1329083005: Add TransportFeedback adapter, adapting remote feedback to bwe estiamtor (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Bad merge, test issue 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
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 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 uint32_t ssrc_; 97 uint32_t ssrc_;
98 }; 98 };
99 99
100 RTPSender::RTPSender(int32_t id, 100 RTPSender::RTPSender(int32_t id,
101 bool audio, 101 bool audio,
102 Clock* clock, 102 Clock* clock,
103 Transport* transport, 103 Transport* transport,
104 RtpAudioFeedback* audio_feedback, 104 RtpAudioFeedback* audio_feedback,
105 PacedSender* paced_sender, 105 PacedSender* paced_sender,
106 PacketRouter* packet_router, 106 PacketRouter* packet_router,
107 SendTimeObserver* send_time_observer, 107 TransportFeedbackObserver* transport_feedback_observer,
108 BitrateStatisticsObserver* bitrate_callback, 108 BitrateStatisticsObserver* bitrate_callback,
109 FrameCountObserver* frame_count_observer, 109 FrameCountObserver* frame_count_observer,
110 SendSideDelayObserver* send_side_delay_observer) 110 SendSideDelayObserver* send_side_delay_observer)
111 : clock_(clock), 111 : clock_(clock),
112 // TODO(holmer): Remove this conversion when we remove the use of 112 // TODO(holmer): Remove this conversion when we remove the use of
113 // TickTime. 113 // TickTime.
114 clock_delta_ms_(clock_->TimeInMilliseconds() - 114 clock_delta_ms_(clock_->TimeInMilliseconds() -
115 TickTime::MillisecondTimestamp()), 115 TickTime::MillisecondTimestamp()),
116 bitrates_(new BitrateAggregator(bitrate_callback)), 116 bitrates_(new BitrateAggregator(bitrate_callback)),
117 total_bitrate_sent_(clock, bitrates_->total_bitrate_observer()), 117 total_bitrate_sent_(clock, bitrates_->total_bitrate_observer()),
118 id_(id), 118 id_(id),
119 audio_configured_(audio), 119 audio_configured_(audio),
120 audio_(audio ? new RTPSenderAudio(id, clock, this, audio_feedback) 120 audio_(audio ? new RTPSenderAudio(id, clock, this, audio_feedback)
121 : nullptr), 121 : nullptr),
122 video_(audio ? nullptr : new RTPSenderVideo(clock, this)), 122 video_(audio ? nullptr : new RTPSenderVideo(clock, this)),
123 paced_sender_(paced_sender), 123 paced_sender_(paced_sender),
124 packet_router_(packet_router), 124 packet_router_(packet_router),
125 send_time_observer_(send_time_observer), 125 transport_feedback_observer_(transport_feedback_observer),
126 last_capture_time_ms_sent_(0), 126 last_capture_time_ms_sent_(0),
127 send_critsect_(CriticalSectionWrapper::CreateCriticalSection()), 127 send_critsect_(CriticalSectionWrapper::CreateCriticalSection()),
128 transport_(transport), 128 transport_(transport),
129 sending_media_(true), // Default to sending media. 129 sending_media_(true), // Default to sending media.
130 max_payload_length_(IP_PACKET_SIZE - 28), // Default is IP-v4/UDP. 130 max_payload_length_(IP_PACKET_SIZE - 28), // Default is IP-v4/UDP.
131 packet_over_head_(28), 131 packet_over_head_(28),
132 payload_type_(-1), 132 payload_type_(-1),
133 payload_type_map_(), 133 payload_type_map_(),
134 rtp_header_extension_map_(), 134 rtp_header_extension_map_(),
135 transmission_time_offset_(0), 135 transmission_time_offset_(0),
(...skipping 533 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 669
670 uint16_t transport_seq = 0; 670 uint16_t transport_seq = 0;
671 if (using_transport_seq) { 671 if (using_transport_seq) {
672 transport_seq = 672 transport_seq =
673 UpdateTransportSequenceNumber(padding_packet, length, rtp_header); 673 UpdateTransportSequenceNumber(padding_packet, length, rtp_header);
674 } 674 }
675 675
676 if (!SendPacketToNetwork(padding_packet, length)) 676 if (!SendPacketToNetwork(padding_packet, length))
677 break; 677 break;
678 678
679 if (using_transport_seq) 679 if (using_transport_seq && transport_feedback_observer_) {
680 send_time_observer_->OnPacketSent(transport_seq, now_ms); 680 transport_feedback_observer_->OnPacketSent(
681 PacketInfo(0, now_ms, transport_seq, length, true));
682 }
681 683
682 bytes_sent += padding_bytes_in_packet; 684 bytes_sent += padding_bytes_in_packet;
683 UpdateRtpStats(padding_packet, length, rtp_header, over_rtx, false); 685 UpdateRtpStats(padding_packet, length, rtp_header, over_rtx, false);
684 } 686 }
685 687
686 return bytes_sent; 688 return bytes_sent;
687 } 689 }
688 690
689 void RTPSender::SetStorePacketsStatus(bool enable, uint16_t number_to_store) { 691 void RTPSender::SetStorePacketsStatus(bool enable, uint16_t number_to_store) {
690 packet_history_.SetStorePacketsStatus(enable, number_to_store); 692 packet_history_.SetStorePacketsStatus(enable, number_to_store);
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
912 buffer_to_send_ptr = data_buffer_rtx; 914 buffer_to_send_ptr = data_buffer_rtx;
913 } 915 }
914 916
915 int64_t now_ms = clock_->TimeInMilliseconds(); 917 int64_t now_ms = clock_->TimeInMilliseconds();
916 int64_t diff_ms = now_ms - capture_time_ms; 918 int64_t diff_ms = now_ms - capture_time_ms;
917 UpdateTransmissionTimeOffset(buffer_to_send_ptr, length, rtp_header, 919 UpdateTransmissionTimeOffset(buffer_to_send_ptr, length, rtp_header,
918 diff_ms); 920 diff_ms);
919 UpdateAbsoluteSendTime(buffer_to_send_ptr, length, rtp_header, now_ms); 921 UpdateAbsoluteSendTime(buffer_to_send_ptr, length, rtp_header, now_ms);
920 922
921 uint16_t transport_seq = 0; 923 uint16_t transport_seq = 0;
924 // TODO(sprang): Potentially too much overhead in IsRegistered()?
922 bool using_transport_seq = rtp_header_extension_map_.IsRegistered( 925 bool using_transport_seq = rtp_header_extension_map_.IsRegistered(
923 kRtpExtensionTransportSequenceNumber) && 926 kRtpExtensionTransportSequenceNumber) &&
924 packet_router_; 927 packet_router_ && !is_retransmit;
925 if (using_transport_seq) { 928 if (using_transport_seq) {
926 transport_seq = 929 transport_seq =
927 UpdateTransportSequenceNumber(buffer_to_send_ptr, length, rtp_header); 930 UpdateTransportSequenceNumber(buffer_to_send_ptr, length, rtp_header);
928 } 931 }
929 932
930 bool ret = SendPacketToNetwork(buffer_to_send_ptr, length); 933 bool ret = SendPacketToNetwork(buffer_to_send_ptr, length);
931 if (ret) { 934 if (ret) {
932 CriticalSectionScoped lock(send_critsect_.get()); 935 CriticalSectionScoped lock(send_critsect_.get());
933 media_has_been_sent_ = true; 936 media_has_been_sent_ = true;
934 } 937 }
935 if (using_transport_seq) 938 if (using_transport_seq && transport_feedback_observer_) {
936 send_time_observer_->OnPacketSent(transport_seq, now_ms); 939 transport_feedback_observer_->OnPacketSent(
940 PacketInfo(0, now_ms, transport_seq, length, true));
941 }
937 UpdateRtpStats(buffer_to_send_ptr, length, rtp_header, send_over_rtx, 942 UpdateRtpStats(buffer_to_send_ptr, length, rtp_header, send_over_rtx,
938 is_retransmit); 943 is_retransmit);
939 return ret; 944 return ret;
940 } 945 }
941 946
942 void RTPSender::UpdateRtpStats(const uint8_t* buffer, 947 void RTPSender::UpdateRtpStats(const uint8_t* buffer,
943 size_t packet_length, 948 size_t packet_length,
944 const RTPHeader& header, 949 const RTPHeader& header,
945 bool is_rtx, 950 bool is_rtx,
946 bool is_retransmit) { 951 bool is_retransmit) {
(...skipping 950 matching lines...) Expand 10 before | Expand all | Expand 10 after
1897 CriticalSectionScoped lock(send_critsect_.get()); 1902 CriticalSectionScoped lock(send_critsect_.get());
1898 1903
1899 RtpState state; 1904 RtpState state;
1900 state.sequence_number = sequence_number_rtx_; 1905 state.sequence_number = sequence_number_rtx_;
1901 state.start_timestamp = start_timestamp_; 1906 state.start_timestamp = start_timestamp_;
1902 1907
1903 return state; 1908 return state;
1904 } 1909 }
1905 1910
1906 } // namespace webrtc 1911 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698