Add new_request flag to SendFullIntraRequest

This allows one to request the same sequence number again
in the case of resending an FIR to the a sender before the
sender has time to send a key-frame.

Bug: webrtc:11171
Change-Id: Idd8e8120ccbcc194cefb8d0cf3f7cc64e7f76aa5
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/161236
Commit-Queue: Evan Shrubsole <eshr@google.com>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30006}
This commit is contained in:
Evan Shrubsole
2019-12-04 13:50:28 +01:00
committed by Commit Bot
parent 17f82cfc68
commit 577b88dae7
6 changed files with 96 additions and 15 deletions

View File

@ -294,4 +294,43 @@ TEST(RtcpTransceiverTest, SendsCombinedRtcpPacketOnTaskQueue) {
WaitPostedTasks(&queue);
}
TEST(RtcpTransceiverTest, SendFrameIntraRequestDefaultsToNewRequest) {
static constexpr uint32_t kSenderSsrc = 12345;
MockTransport outgoing_transport;
TaskQueueForTest queue("rtcp");
RtcpTransceiverConfig config;
config.feedback_ssrc = kSenderSsrc;
config.outgoing_transport = &outgoing_transport;
config.task_queue = &queue;
config.schedule_periodic_compound_packets = false;
RtcpTransceiver rtcp_transceiver(config);
uint8_t first_seq_nr;
EXPECT_CALL(outgoing_transport, SendRtcp)
.WillOnce([&](const uint8_t* buffer, size_t size) {
EXPECT_TRUE(queue.IsCurrent());
RtcpPacketParser rtcp_parser;
rtcp_parser.Parse(buffer, size);
EXPECT_EQ(rtcp_parser.fir()->requests()[0].ssrc, kSenderSsrc);
first_seq_nr = rtcp_parser.fir()->requests()[0].seq_nr;
return true;
})
.WillOnce([&](const uint8_t* buffer, size_t size) {
EXPECT_TRUE(queue.IsCurrent());
RtcpPacketParser rtcp_parser;
rtcp_parser.Parse(buffer, size);
EXPECT_EQ(rtcp_parser.fir()->requests()[0].ssrc, kSenderSsrc);
EXPECT_EQ(rtcp_parser.fir()->requests()[0].seq_nr, first_seq_nr + 1);
return true;
});
// Send 2 FIR packets because the sequence numbers are incremented after,
// sending. One wouldn't be able to differentiate the new_request.
rtcp_transceiver.SendFullIntraRequest({kSenderSsrc});
rtcp_transceiver.SendFullIntraRequest({kSenderSsrc});
WaitPostedTasks(&queue);
}
} // namespace