Set ChannelReceive transport at construction time.

Followup to cl https://webrtc-review.googlesource.com/c/src/+/103640.
Set the rtcp_send_transport at construction time, delete
RegisterTransport, and the proxying of transport methods.

In addition, delete the unused RtcpRtpStats argument from the
constructor.

Bug: webrtc:9801
Change-Id: I80f25bc08dc2130386053568ddce4ef91654caeb
Reviewed-on: https://webrtc-review.googlesource.com/c/103803
Commit-Queue: Niels Moller <nisse@webrtc.org>
Reviewed-by: Fredrik Solenberg <solenberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#25010}
This commit is contained in:
Niels Möller
2018-10-05 11:28:38 +02:00
committed by Commit Bot
parent 6c966eaf17
commit ae4237e5db
9 changed files with 23 additions and 56 deletions

View File

@ -73,7 +73,7 @@ std::unique_ptr<voe::ChannelReceiveProxy> CreateChannelAndProxy(
return absl::make_unique<voe::ChannelReceiveProxy>(
absl::make_unique<voe::ChannelReceive>(
module_process_thread, internal_audio_state->audio_device_module(),
nullptr /* RtcpRttStats */, event_log, config.rtp.remote_ssrc,
config.rtcp_send_transport, event_log, config.rtp.remote_ssrc,
config.jitter_buffer_max_packets,
config.jitter_buffer_fast_accelerate, config.decoder_factory,
config.codec_pair_id, config.frame_decryptor));
@ -109,13 +109,12 @@ AudioReceiveStream::AudioReceiveStream(
RTC_DCHECK(receiver_controller);
RTC_DCHECK(packet_router);
RTC_DCHECK(config.decoder_factory);
RTC_DCHECK(config.rtcp_send_transport);
RTC_DCHECK(audio_state_);
RTC_DCHECK(channel_proxy_);
module_process_thread_checker_.DetachFromThread();
channel_proxy_->RegisterTransport(config.rtcp_send_transport);
// Configure bandwidth estimation.
channel_proxy_->RegisterReceiverCongestionControlObjects(packet_router);
@ -131,7 +130,6 @@ AudioReceiveStream::~AudioReceiveStream() {
RTC_LOG(LS_INFO) << "~AudioReceiveStream: " << config_.rtp.remote_ssrc;
Stop();
channel_proxy_->DisassociateSendChannel();
channel_proxy_->RegisterTransport(nullptr);
channel_proxy_->ResetReceiverCongestionControlObjects();
}

View File

@ -25,6 +25,7 @@
#include "modules/rtp_rtcp/source/byte_io.h"
#include "test/gtest.h"
#include "test/mock_audio_decoder_factory.h"
#include "test/mock_transport.h"
namespace webrtc {
namespace test {
@ -89,7 +90,6 @@ struct ConfigHelper {
.Times(1);
EXPECT_CALL(*channel_proxy_, ResetReceiverCongestionControlObjects())
.Times(1);
EXPECT_CALL(*channel_proxy_, RegisterTransport(nullptr)).Times(2);
EXPECT_CALL(*channel_proxy_, DisassociateSendChannel()).Times(1);
EXPECT_CALL(*channel_proxy_, SetReceiveCodecs(_))
.WillRepeatedly(Invoke([](const std::map<int, SdpAudioFormat>& codecs) {
@ -103,6 +103,7 @@ struct ConfigHelper {
RtpExtension(RtpExtension::kAudioLevelUri, kAudioLevelId));
stream_config_.rtp.extensions.push_back(RtpExtension(
RtpExtension::kTransportSequenceNumberUri, kTransportSequenceNumberId));
stream_config_.rtcp_send_transport = &rtcp_send_transport_;
stream_config_.decoder_factory =
new rtc::RefCountedObject<MockAudioDecoderFactory>;
}
@ -150,6 +151,7 @@ struct ConfigHelper {
AudioReceiveStream::Config stream_config_;
testing::StrictMock<MockChannelReceiveProxy>* channel_proxy_ = nullptr;
RtpStreamReceiverController rtp_stream_receiver_controller_;
MockTransport rtcp_send_transport_;
};
void BuildOneByteExtension(std::vector<uint8_t>::iterator it,

View File

@ -52,30 +52,6 @@ constexpr int kVoiceEngineMaxMinPlayoutDelayMs = 10000;
} // namespace
bool ChannelReceive::SendRtp(const uint8_t* data,
size_t len,
const PacketOptions& options) {
RTC_NOTREACHED();
return false;
}
bool ChannelReceive::SendRtcp(const uint8_t* data, size_t len) {
rtc::CritScope cs(&_callbackCritSect);
if (_transportPtr == NULL) {
RTC_DLOG(LS_ERROR)
<< "ChannelReceive::SendRtcp() failed to send RTCP packet due to"
<< " invalid transport object";
return false;
}
int n = _transportPtr->SendRtcp(data, len);
if (n < 0) {
RTC_DLOG(LS_ERROR) << "ChannelReceive::SendRtcp() transmission failed";
return false;
}
return true;
}
int32_t ChannelReceive::OnReceivedPayloadData(
const uint8_t* payloadData,
size_t payloadSize,
@ -223,7 +199,7 @@ int ChannelReceive::PreferredSampleRate() const {
ChannelReceive::ChannelReceive(
ProcessThread* module_process_thread,
AudioDeviceModule* audio_device_module,
RtcpRttStats* rtcp_rtt_stats,
Transport* rtcp_send_transport,
RtcEventLog* rtc_event_log,
uint32_t remote_ssrc,
size_t jitter_buffer_max_packets,
@ -244,7 +220,6 @@ ChannelReceive::ChannelReceive(
capture_start_ntp_time_ms_(-1),
_moduleProcessThreadPtr(module_process_thread),
_audioDeviceModulePtr(audio_device_module),
_transportPtr(NULL),
_outputGain(1.0f),
associated_send_channel_(nullptr),
frame_decryptor_(frame_decryptor) {
@ -263,11 +238,13 @@ ChannelReceive::ChannelReceive(
rtp_receive_statistics_->EnableRetransmitDetection(remote_ssrc_, true);
RtpRtcp::Configuration configuration;
configuration.audio = true;
configuration.outgoing_transport = this;
// TODO(nisse): Also set receiver_only = true, but that seems to break RTT
// estimation, resulting in test failures for
// PeerConnectionIntegrationTest.GetCaptureStartNtpTimeWithOldStatsApi
configuration.outgoing_transport = rtcp_send_transport;
configuration.receive_statistics = rtp_receive_statistics_.get();
configuration.event_log = event_log_;
configuration.rtt_stats = rtcp_rtt_stats;
_rtpRtcpModule.reset(RtpRtcp::CreateRtpRtcp(configuration));
_rtpRtcpModule->SetSendingMediaStatus(false);
@ -377,11 +354,6 @@ void ChannelReceive::SetReceiveCodecs(
audio_coding_->SetReceiveCodecs(codecs);
}
void ChannelReceive::RegisterTransport(Transport* transport) {
rtc::CritScope cs(&_callbackCritSect);
_transportPtr = transport;
}
// TODO(nisse): Move receive logic up to AudioReceiveStream.
void ChannelReceive::OnRtpPacket(const RtpPacketReceived& packet) {
int64_t now_ms = rtc::TimeMillis();

View File

@ -102,12 +102,12 @@ class ChannelReceiveState {
State state_;
};
class ChannelReceive : public RtpData, public Transport {
class ChannelReceive : public RtpData {
public:
// Used for receive streams.
ChannelReceive(ProcessThread* module_process_thread,
AudioDeviceModule* audio_device_module,
RtcpRttStats* rtcp_rtt_stats,
Transport* rtcp_send_transport,
RtcEventLog* rtc_event_log,
uint32_t remote_ssrc,
size_t jitter_buffer_max_packets,
@ -130,8 +130,6 @@ class ChannelReceive : public RtpData, public Transport {
// Codecs
int32_t GetRecCodec(CodecInst& codec); // NOLINT
// Network
void RegisterTransport(Transport* transport);
// TODO(nisse, solenberg): Delete when VoENetwork is deleted.
int32_t ReceivedRTCPPacket(const uint8_t* data, size_t length);
void OnRtpPacket(const RtpPacketReceived& packet);
@ -170,12 +168,6 @@ class ChannelReceive : public RtpData, public Transport {
size_t payloadSize,
const WebRtcRTPHeader* rtpHeader) override;
// From Transport (called by the RTP/RTCP module)
bool SendRtp(const uint8_t* data,
size_t len,
const PacketOptions& packet_options) override;
bool SendRtcp(const uint8_t* data, size_t len) override;
// From AudioMixer::Source.
AudioMixer::Source::AudioFrameInfo GetAudioFrameWithInfo(
int sample_rate_hz,
@ -254,7 +246,6 @@ class ChannelReceive : public RtpData, public Transport {
// uses
ProcessThread* _moduleProcessThreadPtr;
AudioDeviceModule* _audioDeviceModulePtr;
Transport* _transportPtr; // WebRtc socket or external transport
float _outputGain RTC_GUARDED_BY(volume_settings_critsect_);
// An associated send channel.

View File

@ -51,11 +51,6 @@ CallReceiveStatistics ChannelReceiveProxy::GetRTCPStatistics() const {
return stats;
}
void ChannelReceiveProxy::RegisterTransport(Transport* transport) {
RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
channel_->RegisterTransport(transport);
}
bool ChannelReceiveProxy::ReceivedRTCPPacket(const uint8_t* packet,
size_t length) {
// May be called on either worker thread or network thread.

View File

@ -50,7 +50,6 @@ class ChannelReceiveProxy : public RtpPacketSinkInterface {
virtual void SetLocalSSRC(uint32_t ssrc);
virtual void SetNACKStatus(bool enable, int max_packets);
virtual CallReceiveStatistics GetRTCPStatistics() const;
virtual void RegisterTransport(Transport* transport);
virtual bool ReceivedRTCPPacket(const uint8_t* packet, size_t length);
virtual void RegisterReceiverCongestionControlObjects(

View File

@ -39,7 +39,6 @@ class MockChannelReceiveProxy : public voe::ChannelReceiveProxy {
MOCK_CONST_METHOD0(GetTotalOutputDuration, double());
MOCK_CONST_METHOD0(GetDelayEstimate, uint32_t());
MOCK_METHOD1(SetSink, void(AudioSinkInterface* sink));
MOCK_METHOD1(RegisterTransport, void(Transport* transport));
MOCK_METHOD1(OnRtpPacket, void(const RtpPacketReceived& packet));
MOCK_METHOD2(ReceivedRTCPPacket, bool(const uint8_t* packet, size_t length));
MOCK_METHOD1(SetChannelOutputVolumeScaling, void(float scaling));

View File

@ -39,6 +39,7 @@
#include "test/frame_generator.h"
#include "test/frame_generator_capturer.h"
#include "test/gtest.h"
#include "test/null_transport.h"
#include "test/rtp_rtcp_observer.h"
#include "test/single_threaded_task_queue.h"
#include "test/testsupport/fileutils.h"
@ -163,6 +164,7 @@ void CallPerfTest::TestAudioVideoSync(FecMode fec,
std::unique_ptr<test::PacketTransport> audio_send_transport;
std::unique_ptr<test::PacketTransport> video_send_transport;
std::unique_ptr<test::PacketTransport> receive_transport;
test::NullTransport rtcp_send_transport;
AudioSendStream* audio_send_stream;
AudioReceiveStream* audio_receive_stream;
@ -250,6 +252,7 @@ void CallPerfTest::TestAudioVideoSync(FecMode fec,
AudioReceiveStream::Config audio_recv_config;
audio_recv_config.rtp.remote_ssrc = kAudioSendSsrc;
audio_recv_config.rtp.local_ssrc = kAudioRecvSsrc;
audio_recv_config.rtcp_send_transport = &rtcp_send_transport;
audio_recv_config.sync_group = kSyncGroup;
audio_recv_config.decoder_factory = audio_decoder_factory_;
audio_recv_config.decoder_map = {

View File

@ -72,7 +72,9 @@ TEST(CallTest, CreateDestroy_AudioSendStream) {
TEST(CallTest, CreateDestroy_AudioReceiveStream) {
CallHelper call;
AudioReceiveStream::Config config;
MockTransport rtcp_send_transport;
config.rtp.remote_ssrc = 42;
config.rtcp_send_transport = &rtcp_send_transport;
config.decoder_factory =
new rtc::RefCountedObject<webrtc::MockAudioDecoderFactory>();
AudioReceiveStream* stream = call->CreateAudioReceiveStream(config);
@ -105,6 +107,8 @@ TEST(CallTest, CreateDestroy_AudioSendStreams) {
TEST(CallTest, CreateDestroy_AudioReceiveStreams) {
CallHelper call;
AudioReceiveStream::Config config;
MockTransport rtcp_send_transport;
config.rtcp_send_transport = &rtcp_send_transport;
config.decoder_factory =
new rtc::RefCountedObject<webrtc::MockAudioDecoderFactory>();
std::list<AudioReceiveStream*> streams;
@ -129,8 +133,10 @@ TEST(CallTest, CreateDestroy_AudioReceiveStreams) {
TEST(CallTest, CreateDestroy_AssociateAudioSendReceiveStreams_RecvFirst) {
CallHelper call;
AudioReceiveStream::Config recv_config;
MockTransport rtcp_send_transport;
recv_config.rtp.remote_ssrc = 42;
recv_config.rtp.local_ssrc = 777;
recv_config.rtcp_send_transport = &rtcp_send_transport;
recv_config.decoder_factory =
new rtc::RefCountedObject<webrtc::MockAudioDecoderFactory>();
AudioReceiveStream* recv_stream = call->CreateAudioReceiveStream(recv_config);
@ -160,8 +166,10 @@ TEST(CallTest, CreateDestroy_AssociateAudioSendReceiveStreams_SendFirst) {
EXPECT_NE(send_stream, nullptr);
AudioReceiveStream::Config recv_config;
MockTransport rtcp_send_transport;
recv_config.rtp.remote_ssrc = 42;
recv_config.rtp.local_ssrc = 777;
recv_config.rtcp_send_transport = &rtcp_send_transport;
recv_config.decoder_factory =
new rtc::RefCountedObject<webrtc::MockAudioDecoderFactory>();
AudioReceiveStream* recv_stream = call->CreateAudioReceiveStream(recv_config);