Index: webrtc/voice_engine/channel.h |
diff --git a/webrtc/voice_engine/channel.h b/webrtc/voice_engine/channel.h |
index f26fdb23d46cf16beb6e65022b210ad90f334bf7..38ec522e9a65de16874782ce649b3685915f3205 100644 |
--- a/webrtc/voice_engine/channel.h |
+++ b/webrtc/voice_engine/channel.h |
@@ -11,13 +11,17 @@ |
#ifndef WEBRTC_VOICE_ENGINE_CHANNEL_H_ |
#define WEBRTC_VOICE_ENGINE_CHANNEL_H_ |
+#include "webrtc/base/criticalsection.h" |
#include "webrtc/base/scoped_ptr.h" |
+#include "webrtc/call/congestion_controller.h" |
#include "webrtc/common_audio/resampler/include/push_resampler.h" |
#include "webrtc/common_types.h" |
#include "webrtc/modules/audio_coding/include/audio_coding_module.h" |
#include "webrtc/modules/audio_conference_mixer/include/audio_conference_mixer_defines.h" |
#include "webrtc/modules/audio_processing/rms_level.h" |
#include "webrtc/modules/bitrate_controller/include/bitrate_controller.h" |
+#include "webrtc/modules/pacing/paced_sender.h" |
+#include "webrtc/modules/pacing/packet_router.h" |
#include "webrtc/modules/rtp_rtcp/include/remote_ntp_time_estimator.h" |
#include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h" |
#include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h" |
@@ -73,6 +77,64 @@ class StatisticsProxy; |
class TransmitMixer; |
class VoERtcpObserver; |
+class PacketSenderProxy : public RtpPacketSender, |
the sun
2015/11/30 12:37:20
You can put this class in an anonymous namespace i
stefan-webrtc
2015/11/30 15:22:02
Done.
|
+ public TransportFeedbackObserver, |
+ public TransportSequenceNumberAllocator { |
+ public: |
+ void SetCongestionControlObjects( |
+ RtpPacketSender* rtp_packet_sender, |
+ TransportFeedbackObserver* transport_feedback_observer, |
+ TransportSequenceNumberAllocator* seq_num_allocator) { |
+ rtc::CritScope lock(&crit_); |
+ packet_sender_ = rtp_packet_sender; |
+ feedback_observer_ = transport_feedback_observer; |
+ seq_num_allocator_ = seq_num_allocator; |
+ } |
+ |
+ // Implements RtpPacketSender. |
+ void InsertPacket(Priority priority, |
+ uint32_t ssrc, |
+ uint16_t sequence_number, |
+ int64_t capture_time_ms, |
+ size_t bytes, |
+ bool retransmission) override { |
+ rtc::CritScope lock(&crit_); |
+ if (packet_sender_ == nullptr) |
the sun
2015/11/30 12:37:20
Looks like you have a crash bug here; packet_sende
stefan-webrtc
2015/11/30 15:22:02
Definitely could crash here, good catch.
|
+ return; |
+ packet_sender_->InsertPacket(priority, ssrc, sequence_number, |
+ capture_time_ms, bytes, retransmission); |
+ } |
+ |
+ // Implements TransportFeedbackObserver. |
+ void AddPacket(uint16_t sequence_number, |
the sun
2015/11/30 12:37:20
I don't see where this is called from? Where is it
stefan-webrtc
2015/11/30 15:22:02
Here: https://code.google.com/p/chromium/codesearc
the sun
2015/12/01 10:25:36
Yes, but I don't see how transport_feedback_observ
stefan-webrtc
2015/12/01 16:19:33
Gooood catch. :)
It would have been caught later
the sun
2015/12/01 16:48:23
Is it possible to add a test? At some level?
stefan-webrtc
2015/12/02 16:14:17
It is, but it requires setting up a call and monit
stefan-webrtc
2015/12/02 16:17:39
https://code.google.com/p/chromium/codesearch#chro
|
+ size_t length, |
+ bool was_paced) override { |
+ rtc::CritScope lock(&crit_); |
+ if (feedback_observer_ == nullptr) |
+ return; |
+ feedback_observer_->AddPacket(sequence_number, length, was_paced); |
+ } |
+ void OnTransportFeedback(const rtcp::TransportFeedback& feedback) override { |
+ rtc::CritScope lock(&crit_); |
+ if (feedback_observer_ == nullptr) |
+ return; |
+ feedback_observer_->OnTransportFeedback(feedback); |
+ } |
+ |
+ // Implements TransportSequenceNumberAllocator. |
+ uint16_t AllocateSequenceNumber() override { |
+ rtc::CritScope lock(&crit_); |
+ RTC_DCHECK(seq_num_allocator_); |
+ return seq_num_allocator_->AllocateSequenceNumber(); |
+ } |
+ |
+ private: |
+ rtc::CriticalSection crit_; |
the sun
2015/11/30 12:37:20
So what are the threads this can be called on? Ple
stefan-webrtc
2015/11/30 15:22:02
Done.
|
+ RtpPacketSender* packet_sender_ GUARDED_BY(&crit_); |
+ TransportFeedbackObserver* feedback_observer_ GUARDED_BY(&crit_); |
+ TransportSequenceNumberAllocator* seq_num_allocator_ GUARDED_BY(&crit_); |
+}; |
+ |
// Helper class to simplify locking scheme for members that are accessed from |
// multiple threads. |
// Example: a member can be set on thread T1 and read by an internal audio |
@@ -321,6 +383,13 @@ public: |
int SetReceiveAudioLevelIndicationStatus(bool enable, unsigned char id); |
int SetSendAbsoluteSenderTimeStatus(bool enable, unsigned char id); |
int SetReceiveAbsoluteSenderTimeStatus(bool enable, unsigned char id); |
+ void SetSendTransportSequenceNumber(int id); |
+ |
+ void SetCongestionControlObjects( |
+ RtpPacketSender* rtp_packet_sender, |
+ TransportFeedbackObserver* transport_feedback_observer, |
+ PacketRouter* packet_router); |
+ |
void SetRTCPStatus(bool enable); |
int GetRTCPStatus(bool& enabled); |
int SetRTCP_CNAME(const char cName[256]); |
@@ -584,6 +653,9 @@ private: |
// An associated send channel. |
rtc::scoped_ptr<CriticalSectionWrapper> assoc_send_channel_lock_; |
ChannelOwner associate_send_channel_ GUARDED_BY(assoc_send_channel_lock_); |
+ |
+ rtc::scoped_ptr<PacketSenderProxy> packet_sender_proxy_; |
+ PacketRouter* packet_router_; |
}; |
} // namespace voe |