Skip to content

Commit 33dd79e

Browse files
stefanCommit bot
stefan
authored and
Commit bot
committed
Wire up PacketTime to ReceiveStreams.
BUG=webrtc:4758 Review URL: https://codereview.webrtc.org/1333483002 Cr-Original-Commit-Position: refs/heads/master@{#9892} Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc Cr-Mirrored-Commit: 68786d20400f1f3744ad83549325665c18ea9e5b
1 parent ce4ef17 commit 33dd79e

17 files changed

+113
-78
lines changed

call.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@ class PacketReceiver {
4545

4646
virtual DeliveryStatus DeliverPacket(MediaType media_type,
4747
const uint8_t* packet,
48-
size_t length) = 0;
48+
size_t length,
49+
const PacketTime& packet_time) = 0;
50+
4951
protected:
5052
virtual ~PacketReceiver() {}
5153
};

stream.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ class Stream {
4242
class ReceiveStream : public Stream {
4343
public:
4444
// Called when a RTP packet is received.
45-
virtual bool DeliverRtp(const uint8_t* packet, size_t length) = 0;
45+
virtual bool DeliverRtp(const uint8_t* packet,
46+
size_t length,
47+
const PacketTime& packet_time) = 0;
4648
};
4749

4850
// Common base class for send streams.

test/fake_network_pipe.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ void FakeNetworkPipe::Process() {
200200
NetworkPacket* packet = packets_to_deliver.front();
201201
packets_to_deliver.pop();
202202
packet_receiver_->DeliverPacket(MediaType::ANY, packet->data(),
203-
packet->data_length());
203+
packet->data_length(), PacketTime());
204204
delete packet;
205205
}
206206
}

test/fake_network_pipe_unittest.cc

+23-31
Original file line numberDiff line numberDiff line change
@@ -29,20 +29,21 @@ class MockReceiver : public PacketReceiver {
2929
virtual ~MockReceiver() {}
3030

3131
void IncomingPacket(const uint8_t* data, size_t length) {
32-
DeliverPacket(MediaType::ANY, data, length);
32+
DeliverPacket(MediaType::ANY, data, length, PacketTime());
3333
delete [] data;
3434
}
3535

36-
MOCK_METHOD3(DeliverPacket,
37-
DeliveryStatus(MediaType, const uint8_t*, size_t));
36+
MOCK_METHOD4(
37+
DeliverPacket,
38+
DeliveryStatus(MediaType, const uint8_t*, size_t, const PacketTime&));
3839
};
3940

4041
class FakeNetworkPipeTest : public ::testing::Test {
4142
protected:
4243
virtual void SetUp() {
4344
TickTime::UseFakeClock(12345);
4445
receiver_.reset(new MockReceiver());
45-
ON_CALL(*receiver_, DeliverPacket(_, _, _))
46+
ON_CALL(*receiver_, DeliverPacket(_, _, _, _))
4647
.WillByDefault(Return(PacketReceiver::DELIVERY_OK));
4748
}
4849

@@ -84,26 +85,22 @@ TEST_F(FakeNetworkPipeTest, CapacityTest) {
8485
kPacketSize);
8586

8687
// Time haven't increased yet, so we souldn't get any packets.
87-
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _))
88-
.Times(0);
88+
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(0);
8989
pipe->Process();
9090

9191
// Advance enough time to release one packet.
9292
TickTime::AdvanceFakeClock(kPacketTimeMs);
93-
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _))
94-
.Times(1);
93+
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(1);
9594
pipe->Process();
9695

9796
// Release all but one packet
9897
TickTime::AdvanceFakeClock(9 * kPacketTimeMs - 1);
99-
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _))
100-
.Times(8);
98+
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(8);
10199
pipe->Process();
102100

103101
// And the last one.
104102
TickTime::AdvanceFakeClock(1);
105-
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _))
106-
.Times(1);
103+
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(1);
107104
pipe->Process();
108105
}
109106

@@ -126,20 +123,17 @@ TEST_F(FakeNetworkPipeTest, ExtraDelayTest) {
126123

127124
// Increase more than kPacketTimeMs, but not more than the extra delay.
128125
TickTime::AdvanceFakeClock(kPacketTimeMs);
129-
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _))
130-
.Times(0);
126+
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(0);
131127
pipe->Process();
132128

133129
// Advance the network delay to get the first packet.
134130
TickTime::AdvanceFakeClock(config.queue_delay_ms);
135-
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _))
136-
.Times(1);
131+
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(1);
137132
pipe->Process();
138133

139134
// Advance one more kPacketTimeMs to get the last packet.
140135
TickTime::AdvanceFakeClock(kPacketTimeMs);
141-
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _))
142-
.Times(1);
136+
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(1);
143137
pipe->Process();
144138
}
145139

@@ -162,8 +156,7 @@ TEST_F(FakeNetworkPipeTest, QueueLengthTest) {
162156
// Increase time enough to deliver all three packets, verify only two are
163157
// delivered.
164158
TickTime::AdvanceFakeClock(3 * kPacketTimeMs);
165-
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _))
166-
.Times(2);
159+
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(2);
167160
pipe->Process();
168161
}
169162

@@ -184,8 +177,7 @@ TEST_F(FakeNetworkPipeTest, StatisticsTest) {
184177
SendPackets(pipe.get(), 3, kPacketSize);
185178
TickTime::AdvanceFakeClock(3 * kPacketTimeMs + config.queue_delay_ms);
186179

187-
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _))
188-
.Times(2);
180+
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(2);
189181
pipe->Process();
190182

191183
// Packet 1: kPacketTimeMs + config.queue_delay_ms,
@@ -215,13 +207,13 @@ TEST_F(FakeNetworkPipeTest, ChangingCapacityWithEmptyPipeTest) {
215207
int packet_time_ms = PacketTimeMs(config.link_capacity_kbps, kPacketSize);
216208

217209
// Time hasn't increased yet, so we souldn't get any packets.
218-
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _)).Times(0);
210+
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(0);
219211
pipe->Process();
220212

221213
// Advance time in steps to release one packet at a time.
222214
for (int i = 0; i < kNumPackets; ++i) {
223215
TickTime::AdvanceFakeClock(packet_time_ms);
224-
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _)).Times(1);
216+
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(1);
225217
pipe->Process();
226218
}
227219

@@ -237,20 +229,20 @@ TEST_F(FakeNetworkPipeTest, ChangingCapacityWithEmptyPipeTest) {
237229
packet_time_ms = PacketTimeMs(config.link_capacity_kbps, kPacketSize);
238230

239231
// Time hasn't increased yet, so we souldn't get any packets.
240-
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _)).Times(0);
232+
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(0);
241233
pipe->Process();
242234

243235
// Advance time in steps to release one packet at a time.
244236
for (int i = 0; i < kNumPackets; ++i) {
245237
TickTime::AdvanceFakeClock(packet_time_ms);
246-
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _)).Times(1);
238+
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(1);
247239
pipe->Process();
248240
}
249241

250242
// Check that all the packets were sent.
251243
EXPECT_EQ(static_cast<size_t>(2 * kNumPackets), pipe->sent_packets());
252244
TickTime::AdvanceFakeClock(pipe->TimeUntilNextProcess());
253-
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _)).Times(0);
245+
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(0);
254246
pipe->Process();
255247
}
256248

@@ -283,27 +275,27 @@ TEST_F(FakeNetworkPipeTest, ChangingCapacityWithPacketsInPipeTest) {
283275
int packet_time_2_ms = PacketTimeMs(config.link_capacity_kbps, kPacketSize);
284276

285277
// Time hasn't increased yet, so we souldn't get any packets.
286-
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _)).Times(0);
278+
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(0);
287279
pipe->Process();
288280

289281
// Advance time in steps to release one packet at a time.
290282
for (int i = 0; i < kNumPackets; ++i) {
291283
TickTime::AdvanceFakeClock(packet_time_1_ms);
292-
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _)).Times(1);
284+
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(1);
293285
pipe->Process();
294286
}
295287

296288
// Advance time in steps to release one packet at a time.
297289
for (int i = 0; i < kNumPackets; ++i) {
298290
TickTime::AdvanceFakeClock(packet_time_2_ms);
299-
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _)).Times(1);
291+
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(1);
300292
pipe->Process();
301293
}
302294

303295
// Check that all the packets were sent.
304296
EXPECT_EQ(static_cast<size_t>(2 * kNumPackets), pipe->sent_packets());
305297
TickTime::AdvanceFakeClock(pipe->TimeUntilNextProcess());
306-
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _)).Times(0);
298+
EXPECT_CALL(*receiver_, DeliverPacket(_, _, _, _)).Times(0);
307299
pipe->Process();
308300
}
309301
} // namespace webrtc

video/audio_receive_stream.cc

+5-1
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,9 @@ bool AudioReceiveStream::DeliverRtcp(const uint8_t* packet, size_t length) {
8787
return false;
8888
}
8989

90-
bool AudioReceiveStream::DeliverRtp(const uint8_t* packet, size_t length) {
90+
bool AudioReceiveStream::DeliverRtp(const uint8_t* packet,
91+
size_t length,
92+
const PacketTime& packet_time) {
9193
RTPHeader header;
9294

9395
if (!rtp_header_parser_->Parse(packet, length, &header)) {
@@ -99,6 +101,8 @@ bool AudioReceiveStream::DeliverRtp(const uint8_t* packet, size_t length) {
99101
if (config_.combined_audio_video_bwe &&
100102
header.extension.hasAbsoluteSendTime) {
101103
int64_t arrival_time_ms = TickTime::MillisecondTimestamp();
104+
if (packet_time.timestamp >= 0)
105+
arrival_time_ms = packet_time.timestamp;
102106
size_t payload_size = length - header.headerLength;
103107
remote_bitrate_estimator_->IncomingPacket(arrival_time_ms, payload_size,
104108
header, false);

video/audio_receive_stream.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ class AudioReceiveStream : public webrtc::AudioReceiveStream {
3131
void Stop() override;
3232
void SignalNetworkState(NetworkState state) override;
3333
bool DeliverRtcp(const uint8_t* packet, size_t length) override;
34-
bool DeliverRtp(const uint8_t* packet, size_t length) override;
34+
bool DeliverRtp(const uint8_t* packet,
35+
size_t length,
36+
const PacketTime& packet_time) override;
3537

3638
// webrtc::AudioReceiveStream implementation.
3739
webrtc::AudioReceiveStream::Stats GetStats() const override;

video/call.cc

+22-13
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,10 @@ class Call : public webrtc::Call, public PacketReceiver {
6969

7070
Stats GetStats() const override;
7171

72-
DeliveryStatus DeliverPacket(MediaType media_type, const uint8_t* packet,
73-
size_t length) override;
72+
DeliveryStatus DeliverPacket(MediaType media_type,
73+
const uint8_t* packet,
74+
size_t length,
75+
const PacketTime& packet_time) override;
7476

7577
void SetBitrateConfig(
7678
const webrtc::Call::Config::BitrateConfig& bitrate_config) override;
@@ -79,8 +81,10 @@ class Call : public webrtc::Call, public PacketReceiver {
7981
private:
8082
DeliveryStatus DeliverRtcp(MediaType media_type, const uint8_t* packet,
8183
size_t length);
82-
DeliveryStatus DeliverRtp(MediaType media_type, const uint8_t* packet,
83-
size_t length);
84+
DeliveryStatus DeliverRtp(MediaType media_type,
85+
const uint8_t* packet,
86+
size_t length,
87+
const PacketTime& packet_time);
8488

8589
void SetBitrateControllerConfig(
8690
const webrtc::Call::Config::BitrateConfig& bitrate_config);
@@ -475,7 +479,8 @@ PacketReceiver::DeliveryStatus Call::DeliverRtcp(MediaType media_type,
475479

476480
PacketReceiver::DeliveryStatus Call::DeliverRtp(MediaType media_type,
477481
const uint8_t* packet,
478-
size_t length) {
482+
size_t length,
483+
const PacketTime& packet_time) {
479484
// Minimum RTP header size.
480485
if (length < 12)
481486
return DELIVERY_PACKET_ERROR;
@@ -486,27 +491,31 @@ PacketReceiver::DeliveryStatus Call::DeliverRtp(MediaType media_type,
486491
if (media_type == MediaType::ANY || media_type == MediaType::AUDIO) {
487492
auto it = audio_receive_ssrcs_.find(ssrc);
488493
if (it != audio_receive_ssrcs_.end()) {
489-
return it->second->DeliverRtp(packet, length) ? DELIVERY_OK
490-
: DELIVERY_PACKET_ERROR;
494+
return it->second->DeliverRtp(packet, length, packet_time)
495+
? DELIVERY_OK
496+
: DELIVERY_PACKET_ERROR;
491497
}
492498
}
493499
if (media_type == MediaType::ANY || media_type == MediaType::VIDEO) {
494500
auto it = video_receive_ssrcs_.find(ssrc);
495501
if (it != video_receive_ssrcs_.end()) {
496-
return it->second->DeliverRtp(packet, length) ? DELIVERY_OK
497-
: DELIVERY_PACKET_ERROR;
502+
return it->second->DeliverRtp(packet, length, packet_time)
503+
? DELIVERY_OK
504+
: DELIVERY_PACKET_ERROR;
498505
}
499506
}
500507
return DELIVERY_UNKNOWN_SSRC;
501508
}
502509

503-
PacketReceiver::DeliveryStatus Call::DeliverPacket(MediaType media_type,
504-
const uint8_t* packet,
505-
size_t length) {
510+
PacketReceiver::DeliveryStatus Call::DeliverPacket(
511+
MediaType media_type,
512+
const uint8_t* packet,
513+
size_t length,
514+
const PacketTime& packet_time) {
506515
if (RtpHeaderParser::IsRtcp(packet, length))
507516
return DeliverRtcp(media_type, packet, length);
508517

509-
return DeliverRtp(media_type, packet, length);
518+
return DeliverRtp(media_type, packet, length, packet_time);
510519
}
511520

512521
} // namespace internal

video/call_perf_tests.cc

+10-6
Original file line numberDiff line numberDiff line change
@@ -197,8 +197,10 @@ void CallPerfTest::TestAudioVideoSync(bool fec, bool create_audio_first) {
197197
: channel_(channel),
198198
voe_network_(voe_network),
199199
parser_(RtpHeaderParser::Create()) {}
200-
DeliveryStatus DeliverPacket(MediaType media_type, const uint8_t* packet,
201-
size_t length) override {
200+
DeliveryStatus DeliverPacket(MediaType media_type,
201+
const uint8_t* packet,
202+
size_t length,
203+
const PacketTime& packet_time) override {
202204
EXPECT_TRUE(media_type == MediaType::ANY ||
203205
media_type == MediaType::AUDIO);
204206
int ret;
@@ -540,8 +542,10 @@ void CallPerfTest::TestMinTransmitBitrate(bool pad_to_min_bitrate) {
540542
test::RtpRtcpObserver::SetReceivers(this, receive_transport_receiver);
541543
}
542544

543-
DeliveryStatus DeliverPacket(MediaType media_type, const uint8_t* packet,
544-
size_t length) override {
545+
DeliveryStatus DeliverPacket(MediaType media_type,
546+
const uint8_t* packet,
547+
size_t length,
548+
const PacketTime& packet_time) override {
545549
VideoSendStream::Stats stats = send_stream_->GetStats();
546550
if (stats.substreams.size() > 0) {
547551
DCHECK_EQ(1u, stats.substreams.size());
@@ -575,8 +579,8 @@ void CallPerfTest::TestMinTransmitBitrate(bool pad_to_min_bitrate) {
575579
observation_complete_->Set();
576580
}
577581
}
578-
return send_transport_receiver_->DeliverPacket(media_type, packet,
579-
length);
582+
return send_transport_receiver_->DeliverPacket(media_type, packet, length,
583+
packet_time);
580584
}
581585

582586
void OnStreamsCreated(

0 commit comments

Comments
 (0)