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

Unified Diff: webrtc/video/end_to_end_tests.cc

Issue 1542653002: Add audio streams to CallTest and a first A/V call test. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Win issue fixed. Created 4 years, 11 months 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/video/end_to_end_tests.cc
diff --git a/webrtc/video/end_to_end_tests.cc b/webrtc/video/end_to_end_tests.cc
index 659af2f137454d8b5e1b7e4deec4e6bdc834b1d9..0ab6484fe97ed3cbf1dd3d071a89c15e9ca837be 100644
--- a/webrtc/video/end_to_end_tests.cc
+++ b/webrtc/video/end_to_end_tests.cc
@@ -31,7 +31,6 @@
#include "webrtc/test/call_test.h"
#include "webrtc/test/direct_transport.h"
#include "webrtc/test/encoder_settings.h"
-#include "webrtc/test/fake_audio_device.h"
#include "webrtc/test/fake_decoder.h"
#include "webrtc/test/fake_encoder.h"
#include "webrtc/test/frame_generator.h"
@@ -87,10 +86,10 @@ TEST_F(EndToEndTest, ReceiverCanBeStartedTwice) {
CreateCalls(Call::Config(), Call::Config());
test::NullTransport transport;
- CreateSendConfig(1, &transport);
- CreateMatchingReceiveConfigs(&transport);
+ CreateSendConfig(1, 0, &transport);
+ CreateMatchingReceiveConfigs(false, &transport);
- CreateStreams();
+ CreateVideoStreams();
video_receive_streams_[0]->Start();
video_receive_streams_[0]->Start();
@@ -102,10 +101,10 @@ TEST_F(EndToEndTest, ReceiverCanBeStoppedTwice) {
CreateCalls(Call::Config(), Call::Config());
test::NullTransport transport;
- CreateSendConfig(1, &transport);
- CreateMatchingReceiveConfigs(&transport);
+ CreateSendConfig(1, 0, &transport);
+ CreateMatchingReceiveConfigs(false, &transport);
- CreateStreams();
+ CreateVideoStreams();
video_receive_streams_[0]->Stop();
video_receive_streams_[0]->Stop();
@@ -159,14 +158,14 @@ TEST_F(EndToEndTest, RendersSingleDelayedFrame) {
sender_transport.SetReceiver(receiver_call_->Receiver());
receiver_transport.SetReceiver(sender_call_->Receiver());
- CreateSendConfig(1, &sender_transport);
- CreateMatchingReceiveConfigs(&receiver_transport);
+ CreateSendConfig(1, 0, &sender_transport);
+ CreateMatchingReceiveConfigs(false, &receiver_transport);
TestFrameCallback pre_render_callback;
video_receive_configs_[0].pre_render_callback = &pre_render_callback;
video_receive_configs_[0].renderer = &renderer;
- CreateStreams();
+ CreateVideoStreams();
Start();
// Create frames that are smaller than the send width/height, this is done to
@@ -211,11 +210,11 @@ TEST_F(EndToEndTest, TransmitsFirstFrame) {
sender_transport.SetReceiver(receiver_call_->Receiver());
receiver_transport.SetReceiver(sender_call_->Receiver());
- CreateSendConfig(1, &sender_transport);
- CreateMatchingReceiveConfigs(&receiver_transport);
+ CreateSendConfig(1, 0, &sender_transport);
+ CreateMatchingReceiveConfigs(false, &receiver_transport);
video_receive_configs_[0].renderer = &renderer;
- CreateStreams();
+ CreateVideoStreams();
Start();
rtc::scoped_ptr<test::FrameGenerator> frame_generator(
@@ -309,7 +308,7 @@ TEST_F(EndToEndTest, SendsAndReceivesH264) {
(*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
send_config->encoder_settings.encoder = &fake_encoder_;
send_config->encoder_settings.payload_name = "H264";
- send_config->encoder_settings.payload_type = kFakeSendPayloadType;
+ send_config->encoder_settings.payload_type = kFakeVideoSendPayloadType;
encoder_config->streams[0].min_bitrate_bps = 50000;
encoder_config->streams[0].target_bitrate_bps =
encoder_config->streams[0].max_bitrate_bps = 2000000;
@@ -354,7 +353,7 @@ TEST_F(EndToEndTest, ReceiverUsesLocalSsrc) {
ssrc |= static_cast<uint32_t>(packet[5]) << 16;
ssrc |= static_cast<uint32_t>(packet[6]) << 8;
ssrc |= static_cast<uint32_t>(packet[7]) << 0;
- EXPECT_EQ(kReceiverLocalSsrc, ssrc);
+ EXPECT_EQ(kReceiverLocalVideoSsrc, ssrc);
observation_complete_.Set();
return SEND_PACKET;
@@ -475,10 +474,10 @@ TEST_F(EndToEndTest, CanReceiveFec) {
if (header.payloadType == kRedPayloadType) {
encapsulated_payload_type =
static_cast<int>(packet[header.headerLength]);
- if (encapsulated_payload_type != kFakeSendPayloadType)
+ if (encapsulated_payload_type != kFakeVideoSendPayloadType)
EXPECT_EQ(kUlpfecPayloadType, encapsulated_payload_type);
} else {
- EXPECT_EQ(kFakeSendPayloadType, header.payloadType);
+ EXPECT_EQ(kFakeVideoSendPayloadType, header.payloadType);
}
if (protected_sequence_numbers_.count(header.sequenceNumber) != 0) {
@@ -502,7 +501,7 @@ TEST_F(EndToEndTest, CanReceiveFec) {
return DROP_PACKET;
break;
case kDropNextMediaPacket:
- if (encapsulated_payload_type == kFakeSendPayloadType) {
+ if (encapsulated_payload_type == kFakeVideoSendPayloadType) {
protected_sequence_numbers_.insert(header.sequenceNumber);
protected_timestamps_.insert(header.timestamp);
state_ = kDropEveryOtherPacketUntilFec;
@@ -581,10 +580,10 @@ TEST_F(EndToEndTest, DISABLED_ReceivedFecPacketsNotNacked) {
if (header.payloadType == kRedPayloadType) {
encapsulated_payload_type =
static_cast<int>(packet[header.headerLength]);
- if (encapsulated_payload_type != kFakeSendPayloadType)
+ if (encapsulated_payload_type != kFakeVideoSendPayloadType)
EXPECT_EQ(kUlpfecPayloadType, encapsulated_payload_type);
} else {
- EXPECT_EQ(kFakeSendPayloadType, header.payloadType);
+ EXPECT_EQ(kFakeVideoSendPayloadType, header.payloadType);
}
if (has_last_sequence_number_ &&
@@ -699,7 +698,7 @@ void EndToEndTest::DecodesRetransmittedFrame(bool use_rtx, bool use_red) {
explicit RetransmissionObserver(bool use_rtx, bool use_red)
: EndToEndTest(kDefaultTimeoutMs),
payload_type_(GetPayloadType(false, use_red)),
- retransmission_ssrc_(use_rtx ? kSendRtxSsrcs[0] : kSendSsrcs[0]),
+ retransmission_ssrc_(use_rtx ? kSendRtxSsrcs[0] : kVideoSendSsrcs[0]),
retransmission_payload_type_(GetPayloadType(use_rtx, use_red)),
marker_bits_observed_(0),
num_packets_observed_(0),
@@ -727,7 +726,7 @@ void EndToEndTest::DecodesRetransmittedFrame(bool use_rtx, bool use_red) {
return SEND_PACKET;
}
- EXPECT_EQ(kSendSsrcs[0], header.ssrc);
+ EXPECT_EQ(kVideoSendSsrcs[0], header.ssrc);
EXPECT_EQ(payload_type_, header.payloadType);
// Found the final packet of the frame to inflict loss to, drop this and
@@ -766,9 +765,9 @@ void EndToEndTest::DecodesRetransmittedFrame(bool use_rtx, bool use_red) {
if (retransmission_ssrc_ == kSendRtxSsrcs[0]) {
send_config->rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[0]);
send_config->rtp.rtx.payload_type = kSendRtxPayloadType;
- (*receive_configs)[0].rtp.rtx[kFakeSendPayloadType].ssrc =
+ (*receive_configs)[0].rtp.rtx[kFakeVideoSendPayloadType].ssrc =
kSendRtxSsrcs[0];
- (*receive_configs)[0].rtp.rtx[kFakeSendPayloadType].payload_type =
+ (*receive_configs)[0].rtp.rtx[kFakeVideoSendPayloadType].payload_type =
kSendRtxPayloadType;
}
}
@@ -780,7 +779,7 @@ void EndToEndTest::DecodesRetransmittedFrame(bool use_rtx, bool use_red) {
int GetPayloadType(bool use_rtx, bool use_red) {
return use_rtx ? kSendRtxPayloadType
- : (use_red ? kRedPayloadType : kFakeSendPayloadType);
+ : (use_red ? kRedPayloadType : kFakeVideoSendPayloadType);
}
rtc::CriticalSection crit_;
@@ -877,7 +876,7 @@ TEST_F(EndToEndTest, UsesFrameCallbacks) {
sender_transport.SetReceiver(receiver_call_->Receiver());
receiver_transport.SetReceiver(sender_call_->Receiver());
- CreateSendConfig(1, &sender_transport);
+ CreateSendConfig(1, 0, &sender_transport);
rtc::scoped_ptr<VideoEncoder> encoder(
VideoEncoder::Create(VideoEncoder::kVp8));
video_send_config_.encoder_settings.encoder = encoder.get();
@@ -887,11 +886,11 @@ TEST_F(EndToEndTest, UsesFrameCallbacks) {
video_encoder_config_.streams[0].height = kHeight;
video_send_config_.pre_encode_callback = &pre_encode_callback;
- CreateMatchingReceiveConfigs(&receiver_transport);
+ CreateMatchingReceiveConfigs(false, &receiver_transport);
video_receive_configs_[0].pre_render_callback = &pre_render_callback;
video_receive_configs_[0].renderer = &renderer;
- CreateStreams();
+ CreateVideoStreams();
Start();
// Create frames that are smaller than the send width/height, this is done to
@@ -1051,10 +1050,10 @@ TEST_F(EndToEndTest, UnknownRtpPacketGivesUnknownSsrcReturnCode) {
send_transport.SetReceiver(&input_observer);
receive_transport.SetReceiver(sender_call_->Receiver());
- CreateSendConfig(1, &send_transport);
- CreateMatchingReceiveConfigs(&receive_transport);
+ CreateSendConfig(1, 0, &send_transport);
+ CreateMatchingReceiveConfigs(false, &receive_transport);
- CreateStreams();
+ CreateVideoStreams();
CreateFrameGeneratorCapturer();
Start();
@@ -1228,7 +1227,7 @@ class MultiStreamTest {
VideoReceiveStream::Config receive_config(receiver_transport.get());
receive_config.rtp.remote_ssrc = ssrc;
- receive_config.rtp.local_ssrc = test::CallTest::kReceiverLocalSsrc;
+ receive_config.rtp.local_ssrc = test::CallTest::kReceiverLocalVideoSsrc;
VideoReceiveStream::Decoder decoder =
test::CreateMatchingDecoder(send_config.encoder_settings);
allocated_decoders.push_back(decoder.decoder);
@@ -1660,12 +1659,12 @@ TEST_F(EndToEndTest, ObserversEncodedFrames) {
sender_transport.SetReceiver(receiver_call_->Receiver());
receiver_transport.SetReceiver(sender_call_->Receiver());
- CreateSendConfig(1, &sender_transport);
- CreateMatchingReceiveConfigs(&receiver_transport);
+ CreateSendConfig(1, 0, &sender_transport);
+ CreateMatchingReceiveConfigs(false, &receiver_transport);
video_send_config_.post_encode_callback = &post_encode_observer;
video_receive_configs_[0].pre_decode_callback = &pre_decode_observer;
- CreateStreams();
+ CreateVideoStreams();
Start();
rtc::scoped_ptr<test::FrameGenerator> frame_generator(
@@ -1706,13 +1705,13 @@ TEST_F(EndToEndTest, ReceiveStreamSendsRemb) {
while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) {
if (packet_type == RTCPUtility::RTCPPacketTypes::kPsfbRemb) {
const RTCPUtility::RTCPPacket& packet = parser.Packet();
- EXPECT_EQ(packet.PSFBAPP.SenderSSRC, kReceiverLocalSsrc);
+ EXPECT_EQ(packet.PSFBAPP.SenderSSRC, kReceiverLocalVideoSsrc);
received_psfb = true;
} else if (packet_type == RTCPUtility::RTCPPacketTypes::kPsfbRembItem) {
const RTCPUtility::RTCPPacket& packet = parser.Packet();
EXPECT_GT(packet.REMBItem.BitRate, 0u);
EXPECT_EQ(packet.REMBItem.NumberOfSSRCs, 1u);
- EXPECT_EQ(packet.REMBItem.SSRCs[0], kSendSsrcs[0]);
+ EXPECT_EQ(packet.REMBItem.SSRCs[0], kVideoSendSsrcs[0]);
received_remb = true;
}
packet_type = parser.Iterate();
@@ -1826,8 +1825,7 @@ TEST_F(EndToEndTest, VerifyNackStats) {
receive_stream_nack_packets +=
stats.rtcp_packet_type_counts.nack_packets;
}
- if (send_stream_nack_packets >= 1 &&
- receive_stream_nack_packets >= 1) {
+ if (send_stream_nack_packets >= 1 && receive_stream_nack_packets >= 1) {
// NACK packet sent on receive stream and received on sent stream.
if (MinMetricRunTimePassed())
observation_complete_.Set();
@@ -1941,9 +1939,9 @@ void EndToEndTest::VerifyHistogramStats(bool use_rtx,
if (use_rtx_) {
send_config->rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[0]);
send_config->rtp.rtx.payload_type = kSendRtxPayloadType;
- (*receive_configs)[0].rtp.rtx[kFakeSendPayloadType].ssrc =
+ (*receive_configs)[0].rtp.rtx[kFakeVideoSendPayloadType].ssrc =
kSendRtxSsrcs[0];
- (*receive_configs)[0].rtp.rtx[kFakeSendPayloadType].payload_type =
+ (*receive_configs)[0].rtp.rtx[kFakeVideoSendPayloadType].payload_type =
kSendRtxPayloadType;
}
encoder_config->content_type =
@@ -2237,7 +2235,7 @@ void EndToEndTest::TestSendsSetSsrcs(size_t num_ssrcs,
return SEND_PACKET;
}
- size_t GetNumStreams() const override { return num_ssrcs_; }
+ size_t GetNumVideoStreams() const override { return num_ssrcs_; }
void ModifyVideoConfigs(
VideoSendStream::Config* send_config,
@@ -2288,7 +2286,7 @@ void EndToEndTest::TestSendsSetSsrcs(size_t num_ssrcs,
VideoSendStream* send_stream_;
VideoEncoderConfig video_encoder_config_all_streams_;
- } test(kSendSsrcs, num_ssrcs, send_single_ssrc_first);
+ } test(kVideoSendSsrcs, num_ssrcs, send_single_ssrc_first);
RunBaseTest(&test, FakeNetworkPipe::Config());
}
@@ -2444,9 +2442,9 @@ TEST_F(EndToEndTest, GetStats) {
stats.rtcp_packet_type_counts.unique_nack_requests != 0;
assert(stats.current_payload_type == -1 ||
- stats.current_payload_type == kFakeSendPayloadType);
+ stats.current_payload_type == kFakeVideoSendPayloadType);
receive_stats_filled_["IncomingPayloadType"] |=
- stats.current_payload_type == kFakeSendPayloadType;
+ stats.current_payload_type == kFakeVideoSendPayloadType;
}
return AllStatsFilled(receive_stats_filled_);
@@ -2553,7 +2551,7 @@ TEST_F(EndToEndTest, GetStats) {
}
}
- size_t GetNumStreams() const override { return kNumSsrcs; }
+ size_t GetNumVideoStreams() const override { return kNumSsrcs; }
void OnVideoStreamsCreated(
VideoSendStream* send_stream,
@@ -2714,7 +2712,7 @@ TEST_F(EndToEndTest, DISABLED_RedundantPayloadsTransmittedOnAllSsrcs) {
return SEND_PACKET;
}
- size_t GetNumStreams() const override { return kNumSsrcs; }
+ size_t GetNumVideoStreams() const override { return kNumSsrcs; }
void ModifyVideoConfigs(
VideoSendStream::Config* send_config,
@@ -2760,7 +2758,7 @@ void EndToEndTest::TestRtpStatePreservation(bool use_rtx) {
: test::RtpRtcpObserver(kDefaultTimeoutMs),
ssrcs_to_observe_(kNumSsrcs) {
for (size_t i = 0; i < kNumSsrcs; ++i) {
- configured_ssrcs_[kSendSsrcs[i]] = true;
+ configured_ssrcs_[kVideoSendSsrcs[i]] = true;
if (use_rtx)
configured_ssrcs_[kSendRtxSsrcs[i]] = true;
}
@@ -2853,7 +2851,7 @@ void EndToEndTest::TestRtpStatePreservation(bool use_rtx) {
send_transport.SetReceiver(receiver_call_->Receiver());
receive_transport.SetReceiver(sender_call_->Receiver());
- CreateSendConfig(kNumSsrcs, &send_transport);
+ CreateSendConfig(kNumSsrcs, 0, &send_transport);
if (use_rtx) {
for (size_t i = 0; i < kNumSsrcs; ++i) {
@@ -2882,9 +2880,9 @@ void EndToEndTest::TestRtpStatePreservation(bool use_rtx) {
video_encoder_config_.streams[i].max_bitrate_bps;
}
- CreateMatchingReceiveConfigs(&receive_transport);
+ CreateMatchingReceiveConfigs(false, &receive_transport);
- CreateStreams();
+ CreateVideoStreams();
CreateFrameGeneratorCapturer();
Start();
@@ -3130,10 +3128,10 @@ TEST_F(EndToEndTest, CallReportsRttForSender) {
sender_transport.SetReceiver(receiver_call_->Receiver());
receiver_transport.SetReceiver(sender_call_->Receiver());
- CreateSendConfig(1, &sender_transport);
- CreateMatchingReceiveConfigs(&receiver_transport);
+ CreateSendConfig(1, 0, &sender_transport);
+ CreateMatchingReceiveConfigs(false, &receiver_transport);
- CreateStreams();
+ CreateVideoStreams();
CreateFrameGeneratorCapturer();
Start();
@@ -3171,10 +3169,10 @@ TEST_F(EndToEndTest, NewSendStreamsRespectNetworkDown) {
sender_call_->SignalNetworkState(kNetworkDown);
UnusedTransport transport;
- CreateSendConfig(1, &transport);
+ CreateSendConfig(1, 0, &transport);
UnusedEncoder unused_encoder;
video_send_config_.encoder_settings.encoder = &unused_encoder;
- CreateStreams();
+ CreateVideoStreams();
CreateFrameGeneratorCapturer();
Start();
@@ -3190,10 +3188,10 @@ TEST_F(EndToEndTest, NewReceiveStreamsRespectNetworkDown) {
test::DirectTransport sender_transport(sender_call_.get());
sender_transport.SetReceiver(receiver_call_->Receiver());
- CreateSendConfig(1, &sender_transport);
+ CreateSendConfig(1, 0, &sender_transport);
UnusedTransport transport;
- CreateMatchingReceiveConfigs(&transport);
- CreateStreams();
+ CreateMatchingReceiveConfigs(false, &transport);
+ CreateVideoStreams();
CreateFrameGeneratorCapturer();
Start();
@@ -3250,4 +3248,84 @@ TEST_F(EndToEndTest, VerifyDefaultReceiveConfigParameters) {
VerifyEmptyFecConfig(default_receive_config.rtp.fec);
}
+#if defined(WEBRTC_ANDROID)
pbos-webrtc 2016/01/07 14:23:37 Re-enable on Android, look into the isolate files
stefan-webrtc 2016/01/07 15:16:44 Done.
+#define MAYBE_TransportSeqNumOnAudioAndVideo DISABLED_TransportSeqNumOnAudioAndVideo
+#else
+#define MAYBE_TransportSeqNumOnAudioAndVideo TransportSeqNumOnAudioAndVideo
+#endif
+TEST_F(EndToEndTest, MAYBE_TransportSeqNumOnAudioAndVideo) {
+ static const int kExtensionId = 8;
+ class TransportSequenceNumberTest : public test::EndToEndTest {
+ public:
+ TransportSequenceNumberTest()
+ : EndToEndTest(kDefaultTimeoutMs),
+ video_observed_(false),
+ audio_observed_(false) {
+ parser_->RegisterRtpHeaderExtension(kRtpExtensionTransportSequenceNumber,
+ kExtensionId);
+ }
+
+ size_t GetNumVideoStreams() const override { return 1; }
+ size_t GetNumAudioStreams() const override { return 1; }
+
+ void ModifyVideoConfigs(
+ VideoSendStream::Config* send_config,
+ std::vector<VideoReceiveStream::Config>* receive_configs,
+ VideoEncoderConfig* encoder_config) override {
+ send_config->rtp.extensions.clear();
+ send_config->rtp.extensions.push_back(
+ RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId));
+ (*receive_configs)[0].rtp.extensions.clear();
pbos-webrtc 2016/01/07 14:23:37 (*receive_configs)[0].rtp.extensions = send_config
stefan-webrtc 2016/01/07 15:16:44 Done.
+ (*receive_configs)[0].rtp.extensions.push_back(
+ RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId));
+ }
+
+ void ModifyAudioConfigs(
+ AudioSendStream::Config* send_config,
+ std::vector<AudioReceiveStream::Config>* receive_configs) override {
+ send_config->rtp.extensions.clear();
+ send_config->rtp.extensions.push_back(
+ RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId));
+ (*receive_configs)[0].rtp.extensions.clear();
+ (*receive_configs)[0].rtp.extensions.push_back(
+ RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId));
+ }
+
+ Action OnSendRtp(const uint8_t* packet, size_t length) override {
+ RTPHeader header;
+ EXPECT_TRUE(parser_->Parse(packet, length, &header));
+ EXPECT_TRUE(header.extension.hasTransportSequenceNumber);
+ // Unwrap packet id and verify uniqueness.
+ int64_t packet_id =
+ unwrapper_.Unwrap(header.extension.transportSequenceNumber);
+ EXPECT_TRUE(received_packet_ids_.insert(packet_id).second);
+
+ if (header.ssrc == kVideoSendSsrcs[0])
+ video_observed_ = true;
+ if (header.ssrc == kAudioSendSsrc)
+ audio_observed_ = true;
+ if (audio_observed_ && video_observed_ &&
+ received_packet_ids_.size() == 50) {
+ size_t packet_id_range =
+ *received_packet_ids_.rbegin() - *received_packet_ids_.begin() + 1;
+ EXPECT_EQ(received_packet_ids_.size(), packet_id_range);
+ observation_complete_.Set();
+ }
+ return SEND_PACKET;
+ }
+
+ void PerformTest() override {
+ EXPECT_TRUE(Wait()) << "Timed out while waiting for audio and video "
+ "packets with transport sequence number.";
+ }
+
+ private:
+ bool video_observed_;
+ bool audio_observed_;
+ SequenceNumberUnwrapper unwrapper_;
+ std::set<int64_t> received_packet_ids_;
+ } test;
+
+ RunBaseTest(&test, FakeNetworkPipe::Config());
+}
} // namespace webrtc

Powered by Google App Engine
This is Rietveld 408576698