Index: webrtc/video/video_send_stream_tests.cc |
diff --git a/webrtc/video/video_send_stream_tests.cc b/webrtc/video/video_send_stream_tests.cc |
index 40aaf32ea86603106e022a9e416d4858590e9cae..92e3b7317964aed2f89a9435151012fe569876e1 100644 |
--- a/webrtc/video/video_send_stream_tests.cc |
+++ b/webrtc/video/video_send_stream_tests.cc |
@@ -120,7 +120,7 @@ TEST_F(VideoSendStreamTest, SupportsCName) { |
} |
} test; |
- RunBaseTest(&test); |
+ RunBaseTest(&test, FakeNetworkPipe::Config()); |
} |
TEST_F(VideoSendStreamTest, SupportsAbsoluteSendTime) { |
@@ -159,7 +159,7 @@ TEST_F(VideoSendStreamTest, SupportsAbsoluteSendTime) { |
} |
} test; |
- RunBaseTest(&test); |
+ RunBaseTest(&test, FakeNetworkPipe::Config()); |
} |
TEST_F(VideoSendStreamTest, SupportsTransmissionTimeOffset) { |
@@ -204,7 +204,7 @@ TEST_F(VideoSendStreamTest, SupportsTransmissionTimeOffset) { |
test::DelayedEncoder encoder_; |
} test; |
- RunBaseTest(&test); |
+ RunBaseTest(&test, FakeNetworkPipe::Config()); |
} |
TEST_F(VideoSendStreamTest, SupportsTransportWideSequenceNumbers) { |
@@ -247,7 +247,7 @@ TEST_F(VideoSendStreamTest, SupportsTransportWideSequenceNumbers) { |
test::FakeEncoder encoder_; |
} test; |
- RunBaseTest(&test); |
+ RunBaseTest(&test, FakeNetworkPipe::Config()); |
} |
class FakeReceiveStatistics : public NullReceiveStatistics { |
@@ -311,11 +311,9 @@ TEST_F(VideoSendStreamTest, SupportsFec) { |
public: |
FecObserver() |
: SendTest(kDefaultTimeoutMs), |
- transport_adapter_(SendTransport()), |
send_count_(0), |
received_media_(false), |
received_fec_(false) { |
- transport_adapter_.Enable(); |
} |
private: |
@@ -330,7 +328,7 @@ TEST_F(VideoSendStreamTest, SupportsFec) { |
kSendSsrcs[0], header.sequenceNumber, send_count_ / 2, 127); |
RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), |
&lossy_receive_stats, nullptr, |
- &transport_adapter_); |
+ transport_adapter_.get()); |
rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); |
rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); |
@@ -367,6 +365,9 @@ TEST_F(VideoSendStreamTest, SupportsFec) { |
void ModifyConfigs(VideoSendStream::Config* send_config, |
std::vector<VideoReceiveStream::Config>* receive_configs, |
VideoEncoderConfig* encoder_config) override { |
+ transport_adapter_.reset( |
+ new internal::TransportAdapter(send_config->send_transport)); |
+ transport_adapter_->Enable(); |
send_config->rtp.fec.red_payload_type = kRedPayloadType; |
send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; |
} |
@@ -375,13 +376,13 @@ TEST_F(VideoSendStreamTest, SupportsFec) { |
EXPECT_TRUE(Wait()) << "Timed out waiting for FEC and media packets."; |
} |
- internal::TransportAdapter transport_adapter_; |
+ rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_; |
int send_count_; |
bool received_media_; |
bool received_fec_; |
} test; |
- RunBaseTest(&test); |
+ RunBaseTest(&test, FakeNetworkPipe::Config()); |
} |
void VideoSendStreamTest::TestNackRetransmission( |
@@ -392,12 +393,10 @@ void VideoSendStreamTest::TestNackRetransmission( |
explicit NackObserver(uint32_t retransmit_ssrc, |
uint8_t retransmit_payload_type) |
: SendTest(kDefaultTimeoutMs), |
- transport_adapter_(SendTransport()), |
send_count_(0), |
retransmit_ssrc_(retransmit_ssrc), |
retransmit_payload_type_(retransmit_payload_type), |
nacked_sequence_number_(-1) { |
- transport_adapter_.Enable(); |
} |
private: |
@@ -411,7 +410,7 @@ void VideoSendStreamTest::TestNackRetransmission( |
nacked_sequence_number_ = nack_sequence_number; |
NullReceiveStatistics null_stats; |
RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), &null_stats, |
- nullptr, &transport_adapter_); |
+ nullptr, transport_adapter_.get()); |
rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); |
rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); |
@@ -445,6 +444,9 @@ void VideoSendStreamTest::TestNackRetransmission( |
void ModifyConfigs(VideoSendStream::Config* send_config, |
std::vector<VideoReceiveStream::Config>* receive_configs, |
VideoEncoderConfig* encoder_config) override { |
+ transport_adapter_.reset( |
+ new internal::TransportAdapter(send_config->send_transport)); |
+ transport_adapter_->Enable(); |
send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
send_config->rtp.rtx.payload_type = retransmit_payload_type_; |
if (retransmit_ssrc_ != kSendSsrcs[0]) |
@@ -456,14 +458,14 @@ void VideoSendStreamTest::TestNackRetransmission( |
<< "Timed out while waiting for NACK retransmission."; |
} |
- internal::TransportAdapter transport_adapter_; |
+ rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_; |
int send_count_; |
uint32_t retransmit_ssrc_; |
uint8_t retransmit_payload_type_; |
int nacked_sequence_number_; |
} test(retransmit_ssrc, retransmit_payload_type); |
- RunBaseTest(&test); |
+ RunBaseTest(&test, FakeNetworkPipe::Config()); |
} |
TEST_F(VideoSendStreamTest, RetransmitsNack) { |
@@ -496,7 +498,6 @@ void VideoSendStreamTest::TestPacketFragmentationSize(VideoFormat format, |
bool test_generic_packetization, |
bool use_fec) |
: SendTest(kLongTimeoutMs), |
- transport_adapter_(SendTransport()), |
encoder_(stop), |
max_packet_size_(max_packet_size), |
stop_size_(stop_size), |
@@ -511,7 +512,6 @@ void VideoSendStreamTest::TestPacketFragmentationSize(VideoFormat format, |
// Fragmentation required, this test doesn't make sense without it. |
encoder_.SetFrameSize(start_size); |
RTC_DCHECK_GT(stop_size, max_packet_size); |
- transport_adapter_.Enable(); |
} |
private: |
@@ -598,7 +598,7 @@ void VideoSendStreamTest::TestPacketFragmentationSize(VideoFormat format, |
kSendSsrcs[0], header.sequenceNumber, packet_count_ / 2, 127); |
RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), |
&lossy_receive_stats, nullptr, |
- &transport_adapter_); |
+ transport_adapter_.get()); |
rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); |
rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); |
@@ -629,6 +629,9 @@ void VideoSendStreamTest::TestPacketFragmentationSize(VideoFormat format, |
void ModifyConfigs(VideoSendStream::Config* send_config, |
std::vector<VideoReceiveStream::Config>* receive_configs, |
VideoEncoderConfig* encoder_config) override { |
+ transport_adapter_.reset( |
+ new internal::TransportAdapter(send_config->send_transport)); |
+ transport_adapter_->Enable(); |
if (use_fec_) { |
send_config->rtp.fec.red_payload_type = kRedPayloadType; |
send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; |
@@ -651,7 +654,7 @@ void VideoSendStreamTest::TestPacketFragmentationSize(VideoFormat format, |
<< "Timed out while observing incoming RTP packets."; |
} |
- internal::TransportAdapter transport_adapter_; |
+ rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_; |
test::ConfigurableFrameSizeEncoder encoder_; |
const size_t max_packet_size_; |
@@ -673,7 +676,7 @@ void VideoSendStreamTest::TestPacketFragmentationSize(VideoFormat format, |
FrameFragmentationTest test( |
kMaxPacketSize, start, stop, format == kGeneric, with_fec); |
- RunBaseTest(&test); |
+ RunBaseTest(&test, FakeNetworkPipe::Config()); |
} |
// TODO(sprang): Is there any way of speeding up these tests? |
@@ -709,7 +712,6 @@ TEST_F(VideoSendStreamTest, SuspendBelowMinBitrate) { |
public: |
RembObserver() |
: SendTest(kDefaultTimeoutMs), |
- transport_adapter_(&transport_), |
clock_(Clock::GetRealTimeClock()), |
test_state_(kBeforeSuspend), |
rtp_count_(0), |
@@ -717,18 +719,9 @@ TEST_F(VideoSendStreamTest, SuspendBelowMinBitrate) { |
suspended_frame_count_(0), |
low_remb_bps_(0), |
high_remb_bps_(0) { |
- transport_adapter_.Enable(); |
} |
private: |
- Action OnSendRtcp(const uint8_t* packet, size_t length) override { |
- // Receive statistics reporting having lost 0% of the packets. |
- // This is needed for the send-side bitrate controller to work properly. |
- rtc::CritScope lock(&crit_); |
- SendRtcpFeedback(0); // REMB is only sent if value is > 0. |
- return SEND_PACKET; |
- } |
- |
Action OnSendRtp(const uint8_t* packet, size_t length) override { |
rtc::CritScope lock(&crit_); |
++rtp_count_; |
@@ -746,18 +739,21 @@ TEST_F(VideoSendStreamTest, SuspendBelowMinBitrate) { |
// counter. |
suspended_frame_count_ = 0; |
} |
+ SendRtcpFeedback(0); // REMB is only sent if value is > 0. |
} else if (test_state_ == kWaitingForPacket) { |
if (header.paddingLength == 0) { |
// Non-padding packet observed. Test is almost complete. Will just |
// have to wait for the stats to change. |
test_state_ = kWaitingForStats; |
} |
+ SendRtcpFeedback(0); // REMB is only sent if value is > 0. |
} else if (test_state_ == kWaitingForStats) { |
VideoSendStream::Stats stats = stream_->GetStats(); |
if (stats.suspended == false) { |
// Stats flipped to false. Test is complete. |
observation_complete_->Set(); |
} |
+ SendRtcpFeedback(0); // REMB is only sent if value is > 0. |
} |
return SEND_PACKET; |
@@ -785,11 +781,6 @@ TEST_F(VideoSendStreamTest, SuspendBelowMinBitrate) { |
high_remb_bps_ = value; |
} |
- void SetReceivers(PacketReceiver* send_transport_receiver, |
- PacketReceiver* receive_transport_receiver) override { |
- transport_.SetReceiver(send_transport_receiver); |
- } |
- |
void OnStreamsCreated( |
VideoSendStream* send_stream, |
const std::vector<VideoReceiveStream*>& receive_streams) override { |
@@ -799,6 +790,9 @@ TEST_F(VideoSendStreamTest, SuspendBelowMinBitrate) { |
void ModifyConfigs(VideoSendStream::Config* send_config, |
std::vector<VideoReceiveStream::Config>* receive_configs, |
VideoEncoderConfig* encoder_config) override { |
+ transport_adapter_.reset( |
+ new internal::TransportAdapter(send_config->send_transport)); |
+ transport_adapter_->Enable(); |
send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
send_config->pre_encode_callback = this; |
send_config->suspend_below_min_bitrate = true; |
@@ -813,7 +807,6 @@ TEST_F(VideoSendStreamTest, SuspendBelowMinBitrate) { |
void PerformTest() override { |
EXPECT_EQ(kEventSignaled, Wait()) |
<< "Timed out during suspend-below-min-bitrate test."; |
- transport_.StopSending(); |
} |
enum TestState { |
@@ -828,7 +821,7 @@ TEST_F(VideoSendStreamTest, SuspendBelowMinBitrate) { |
FakeReceiveStatistics receive_stats( |
kSendSsrcs[0], last_sequence_number_, rtp_count_, 0); |
RTCPSender rtcp_sender(false, clock_, &receive_stats, nullptr, |
- &transport_adapter_); |
+ transport_adapter_.get()); |
rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); |
rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); |
@@ -840,8 +833,7 @@ TEST_F(VideoSendStreamTest, SuspendBelowMinBitrate) { |
EXPECT_EQ(0, rtcp_sender.SendRTCP(feedback_state, kRtcpRr)); |
} |
- internal::TransportAdapter transport_adapter_; |
- test::DirectTransport transport_; |
+ rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_; |
Clock* const clock_; |
VideoSendStream* stream_; |
@@ -854,7 +846,7 @@ TEST_F(VideoSendStreamTest, SuspendBelowMinBitrate) { |
int high_remb_bps_ GUARDED_BY(crit_); |
} test; |
- RunBaseTest(&test); |
+ RunBaseTest(&test, FakeNetworkPipe::Config()); |
} |
TEST_F(VideoSendStreamTest, NoPaddingWhenVideoIsMuted) { |
@@ -863,10 +855,8 @@ TEST_F(VideoSendStreamTest, NoPaddingWhenVideoIsMuted) { |
NoPaddingWhenVideoIsMuted() |
: SendTest(kDefaultTimeoutMs), |
clock_(Clock::GetRealTimeClock()), |
- transport_adapter_(ReceiveTransport()), |
last_packet_time_ms_(-1), |
capturer_(nullptr) { |
- transport_adapter_.Enable(); |
} |
private: |
@@ -887,7 +877,7 @@ TEST_F(VideoSendStreamTest, NoPaddingWhenVideoIsMuted) { |
// Receive statistics reporting having lost 50% of the packets. |
FakeReceiveStatistics receive_stats(kSendSsrcs[0], 1, 1, 0); |
RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), &receive_stats, |
- nullptr, &transport_adapter_); |
+ nullptr, transport_adapter_.get()); |
rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); |
rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); |
@@ -898,10 +888,12 @@ TEST_F(VideoSendStreamTest, NoPaddingWhenVideoIsMuted) { |
return SEND_PACKET; |
} |
- void SetReceivers(PacketReceiver* send_transport_receiver, |
- PacketReceiver* receive_transport_receiver) override { |
- RtpRtcpObserver::SetReceivers(send_transport_receiver, |
- send_transport_receiver); |
+ void OnTransportsCreated( |
+ test::PacketTransport* send_transport, |
+ test::PacketTransport* receive_transport) override { |
+ transport_adapter_.reset( |
+ new internal::TransportAdapter(receive_transport)); |
+ transport_adapter_->Enable(); |
} |
size_t GetNumStreams() const override { return 3; } |
@@ -918,13 +910,13 @@ TEST_F(VideoSendStreamTest, NoPaddingWhenVideoIsMuted) { |
} |
Clock* const clock_; |
- internal::TransportAdapter transport_adapter_; |
+ rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_; |
rtc::CriticalSection crit_; |
int64_t last_packet_time_ms_ GUARDED_BY(crit_); |
test::FrameGeneratorCapturer* capturer_ GUARDED_BY(crit_); |
} test; |
- RunBaseTest(&test); |
+ RunBaseTest(&test, FakeNetworkPipe::Config()); |
} |
// This test first observes "high" bitrate use at which point it sends a REMB to |
@@ -939,39 +931,21 @@ TEST_F(VideoSendStreamTest, MinTransmitBitrateRespectsRemb) { |
static const int kHighBitrateBps = 150000; |
static const int kRembBitrateBps = 80000; |
static const int kRembRespectedBitrateBps = 100000; |
- class BitrateObserver : public test::SendTest, public PacketReceiver { |
+ class BitrateObserver : public test::SendTest { |
public: |
BitrateObserver() |
: SendTest(kDefaultTimeoutMs), |
- feedback_transport_(ReceiveTransport()), |
bitrate_capped_(false) { |
- RtpRtcp::Configuration config; |
- feedback_transport_.Enable(); |
- config.outgoing_transport = &feedback_transport_; |
- rtp_rtcp_.reset(RtpRtcp::CreateRtpRtcp(config)); |
- rtp_rtcp_->SetREMBStatus(true); |
- rtp_rtcp_->SetRTCPStatus(RtcpMode::kReducedSize); |
- } |
- |
- void OnStreamsCreated( |
- VideoSendStream* send_stream, |
- const std::vector<VideoReceiveStream*>& receive_streams) override { |
- stream_ = send_stream; |
} |
private: |
- DeliveryStatus DeliverPacket(MediaType media_type, |
- const uint8_t* packet, |
- size_t length, |
- const PacketTime& packet_time) override { |
- EXPECT_TRUE(media_type == MediaType::ANY || |
- media_type == MediaType::VIDEO); |
+ virtual Action OnSendRtp(const uint8_t* packet, size_t length) { |
if (RtpHeaderParser::IsRtcp(packet, length)) |
- return DELIVERY_OK; |
+ return DROP_PACKET; |
RTPHeader header; |
if (!parser_->Parse(packet, length, &header)) |
- return DELIVERY_PACKET_ERROR; |
+ return DROP_PACKET; |
RTC_DCHECK(stream_ != nullptr); |
VideoSendStream::Stats stats = stream_->GetStats(); |
if (!stats.substreams.empty()) { |
@@ -994,17 +968,27 @@ TEST_F(VideoSendStreamTest, MinTransmitBitrateRespectsRemb) { |
observation_complete_->Set(); |
} |
} |
- return DELIVERY_OK; |
+ // Packets don't have to be delivered since the test is the receiver. |
+ return DROP_PACKET; |
} |
- void SetReceivers(PacketReceiver* send_transport_receiver, |
- PacketReceiver* receive_transport_receiver) override { |
- RtpRtcpObserver::SetReceivers(this, send_transport_receiver); |
+ void OnStreamsCreated( |
+ VideoSendStream* send_stream, |
+ const std::vector<VideoReceiveStream*>& receive_streams) override { |
+ stream_ = send_stream; |
+ RtpRtcp::Configuration config; |
+ config.outgoing_transport = feedback_transport_.get(); |
+ rtp_rtcp_.reset(RtpRtcp::CreateRtpRtcp(config)); |
+ rtp_rtcp_->SetREMBStatus(true); |
+ rtp_rtcp_->SetRTCPStatus(RtcpMode::kReducedSize); |
} |
void ModifyConfigs(VideoSendStream::Config* send_config, |
std::vector<VideoReceiveStream::Config>* receive_configs, |
VideoEncoderConfig* encoder_config) override { |
+ feedback_transport_.reset( |
+ new internal::TransportAdapter(send_config->send_transport)); |
+ feedback_transport_->Enable(); |
encoder_config->min_transmit_bitrate_bps = kMinTransmitBitrateBps; |
} |
@@ -1014,12 +998,12 @@ TEST_F(VideoSendStreamTest, MinTransmitBitrateRespectsRemb) { |
} |
rtc::scoped_ptr<RtpRtcp> rtp_rtcp_; |
- internal::TransportAdapter feedback_transport_; |
+ rtc::scoped_ptr<internal::TransportAdapter> feedback_transport_; |
VideoSendStream* stream_; |
bool bitrate_capped_; |
} test; |
- RunBaseTest(&test); |
+ RunBaseTest(&test, FakeNetworkPipe::Config()); |
} |
TEST_F(VideoSendStreamTest, CanReconfigureToUseStartBitrateAbovePreviousMax) { |
@@ -1329,7 +1313,7 @@ TEST_F(VideoSendStreamTest, EncoderIsProperlyInitializedAndDestroyed) { |
VideoEncoderConfig encoder_config_; |
} test_encoder; |
- RunBaseTest(&test_encoder); |
+ RunBaseTest(&test_encoder, FakeNetworkPipe::Config()); |
EXPECT_TRUE(test_encoder.IsReleased()); |
EXPECT_EQ(1u, test_encoder.num_releases()); |
@@ -1387,7 +1371,7 @@ TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) { |
VideoEncoderConfig encoder_config_; |
} test; |
- RunBaseTest(&test); |
+ RunBaseTest(&test, FakeNetworkPipe::Config()); |
} |
static const size_t kVideoCodecConfigObserverNumberOfTemporalLayers = 4; |
@@ -1515,17 +1499,17 @@ void VideoCodecConfigObserver<VideoCodecVP9>::VerifyCodecSpecifics( |
TEST_F(VideoSendStreamTest, EncoderSetupPropagatesVp8Config) { |
VideoCodecConfigObserver<VideoCodecVP8> test(kVideoCodecVP8, "VP8"); |
- RunBaseTest(&test); |
+ RunBaseTest(&test, FakeNetworkPipe::Config()); |
} |
TEST_F(VideoSendStreamTest, EncoderSetupPropagatesVp9Config) { |
VideoCodecConfigObserver<VideoCodecVP9> test(kVideoCodecVP9, "VP9"); |
- RunBaseTest(&test); |
+ RunBaseTest(&test, FakeNetworkPipe::Config()); |
} |
TEST_F(VideoSendStreamTest, EncoderSetupPropagatesH264Config) { |
VideoCodecConfigObserver<VideoCodecH264> test(kVideoCodecH264, "H264"); |
- RunBaseTest(&test); |
+ RunBaseTest(&test, FakeNetworkPipe::Config()); |
} |
TEST_F(VideoSendStreamTest, RtcpSenderReportContainsMediaBytesSent) { |
@@ -1575,7 +1559,7 @@ TEST_F(VideoSendStreamTest, RtcpSenderReportContainsMediaBytesSent) { |
size_t media_bytes_sent_; |
} test; |
- RunBaseTest(&test); |
+ RunBaseTest(&test, FakeNetworkPipe::Config()); |
} |
TEST_F(VideoSendStreamTest, TranslatesTwoLayerScreencastToTargetBitrate) { |
@@ -1615,7 +1599,7 @@ TEST_F(VideoSendStreamTest, TranslatesTwoLayerScreencastToTargetBitrate) { |
} |
} test; |
- RunBaseTest(&test); |
+ RunBaseTest(&test, FakeNetworkPipe::Config()); |
} |
TEST_F(VideoSendStreamTest, ReconfigureBitratesSetsEncoderBitratesCorrectly) { |
@@ -1721,7 +1705,7 @@ TEST_F(VideoSendStreamTest, ReconfigureBitratesSetsEncoderBitratesCorrectly) { |
webrtc::VideoEncoderConfig encoder_config_; |
} test; |
- RunBaseTest(&test); |
+ RunBaseTest(&test, FakeNetworkPipe::Config()); |
} |
TEST_F(VideoSendStreamTest, ReportsSentResolution) { |
@@ -1800,7 +1784,7 @@ TEST_F(VideoSendStreamTest, ReportsSentResolution) { |
VideoSendStream* send_stream_; |
} test; |
- RunBaseTest(&test); |
+ RunBaseTest(&test, FakeNetworkPipe::Config()); |
} |
class VP9HeaderObeserver : public test::SendTest { |
@@ -1880,7 +1864,7 @@ TEST_F(VideoSendStreamTest, VP9NoFlexMode) { |
} |
} test; |
- RunBaseTest(&test); |
+ RunBaseTest(&test, FakeNetworkPipe::Config()); |
} |
TEST_F(VideoSendStreamTest, DISABLED_VP9FlexMode) { |
@@ -1899,7 +1883,7 @@ TEST_F(VideoSendStreamTest, DISABLED_VP9FlexMode) { |
} test; |
- RunBaseTest(&test); |
+ RunBaseTest(&test, FakeNetworkPipe::Config()); |
} |
} // namespace webrtc |