Chromium Code Reviews| 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 |