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

Unified Diff: webrtc/voice_engine/channel.h

Issue 1479023002: Prepare the AudioSendStream to be hooked up to send-side BWE. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fix GN bots. Created 5 years, 1 month 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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698