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:

committed by
Commit Bot

parent
17f82cfc68
commit
577b88dae7
@ -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
|
||||
|
Reference in New Issue
Block a user