Add option to enable retransmission for all temporal layers in the constructor for rtp_sender_video.
R=nisse@webrtc.org Change-Id: I09d03af461d7fbe200098fe91845f7b76fab6c4f Bug: webrtc:10954 Change-Id: I09d03af461d7fbe200098fe91845f7b76fab6c4f Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/150863 Commit-Queue: Andrei Dumitru <andreidumitru@google.com> Reviewed-by: Niels Moller <nisse@webrtc.org> Reviewed-by: Åsa Persson <asapersson@webrtc.org> Cr-Commit-Position: refs/heads/master@{#29114}
This commit is contained in:

committed by
Commit Bot

parent
cc62b16658
commit
0987273e1d
@ -134,7 +134,8 @@ std::vector<RtpStreamSender> CreateRtpStreamSenders(
|
|||||||
configuration.clock, rtp_rtcp->RtpSender(),
|
configuration.clock, rtp_rtcp->RtpSender(),
|
||||||
configuration.flexfec_sender, playout_delay_oracle.get(),
|
configuration.flexfec_sender, playout_delay_oracle.get(),
|
||||||
frame_encryptor, crypto_options.sframe.require_frame_encryption,
|
frame_encryptor, crypto_options.sframe.require_frame_encryption,
|
||||||
rtp_config.lntf.enabled, FieldTrialBasedConfig());
|
rtp_config.lntf.enabled, /*enable_retransmit_all_layers*/ false,
|
||||||
|
FieldTrialBasedConfig());
|
||||||
rtp_streams.emplace_back(std::move(playout_delay_oracle),
|
rtp_streams.emplace_back(std::move(playout_delay_oracle),
|
||||||
std::move(rtp_rtcp), std::move(sender_video));
|
std::move(rtp_rtcp), std::move(sender_video));
|
||||||
}
|
}
|
||||||
|
@ -139,7 +139,8 @@ class RtpRtcpRtxNackTest : public ::testing::Test {
|
|||||||
rtp_rtcp_module_ = RtpRtcp::Create(configuration);
|
rtp_rtcp_module_ = RtpRtcp::Create(configuration);
|
||||||
rtp_sender_video_ = absl::make_unique<RTPSenderVideo>(
|
rtp_sender_video_ = absl::make_unique<RTPSenderVideo>(
|
||||||
&fake_clock, rtp_rtcp_module_->RtpSender(), nullptr,
|
&fake_clock, rtp_rtcp_module_->RtpSender(), nullptr,
|
||||||
&playout_delay_oracle_, nullptr, false, false, FieldTrialBasedConfig());
|
&playout_delay_oracle_, nullptr, false, false, false,
|
||||||
|
FieldTrialBasedConfig());
|
||||||
rtp_rtcp_module_->SetRTCPStatus(RtcpMode::kCompound);
|
rtp_rtcp_module_->SetRTCPStatus(RtcpMode::kCompound);
|
||||||
rtp_rtcp_module_->SetStorePacketsStatus(true, 600);
|
rtp_rtcp_module_->SetStorePacketsStatus(true, 600);
|
||||||
EXPECT_EQ(0, rtp_rtcp_module_->SetSendingStatus(true));
|
EXPECT_EQ(0, rtp_rtcp_module_->SetSendingStatus(true));
|
||||||
|
@ -184,7 +184,7 @@ class RtpRtcpImplTest : public ::testing::Test {
|
|||||||
|
|
||||||
sender_video_ = absl::make_unique<RTPSenderVideo>(
|
sender_video_ = absl::make_unique<RTPSenderVideo>(
|
||||||
&clock_, sender_.impl_->RtpSender(), nullptr, &playout_delay_oracle_,
|
&clock_, sender_.impl_->RtpSender(), nullptr, &playout_delay_oracle_,
|
||||||
nullptr, false, false, FieldTrialBasedConfig());
|
nullptr, false, false, false, FieldTrialBasedConfig());
|
||||||
|
|
||||||
memset(&codec_, 0, sizeof(VideoCodec));
|
memset(&codec_, 0, sizeof(VideoCodec));
|
||||||
codec_.plType = 100;
|
codec_.plType = 100;
|
||||||
|
@ -591,7 +591,7 @@ TEST_P(RtpSenderTestWithoutPacer, OnSendSideDelayUpdated) {
|
|||||||
PlayoutDelayOracle playout_delay_oracle;
|
PlayoutDelayOracle playout_delay_oracle;
|
||||||
RTPSenderVideo rtp_sender_video(&fake_clock_, rtp_sender_.get(), nullptr,
|
RTPSenderVideo rtp_sender_video(&fake_clock_, rtp_sender_.get(), nullptr,
|
||||||
&playout_delay_oracle, nullptr, false, false,
|
&playout_delay_oracle, nullptr, false, false,
|
||||||
FieldTrialBasedConfig());
|
false, FieldTrialBasedConfig());
|
||||||
|
|
||||||
const uint8_t kPayloadType = 127;
|
const uint8_t kPayloadType = 127;
|
||||||
const char payload_name[] = "GENERIC";
|
const char payload_name[] = "GENERIC";
|
||||||
@ -1084,7 +1084,7 @@ TEST_P(RtpSenderTestWithoutPacer, SendGenericVideo) {
|
|||||||
PlayoutDelayOracle playout_delay_oracle;
|
PlayoutDelayOracle playout_delay_oracle;
|
||||||
RTPSenderVideo rtp_sender_video(&fake_clock_, rtp_sender_.get(), nullptr,
|
RTPSenderVideo rtp_sender_video(&fake_clock_, rtp_sender_.get(), nullptr,
|
||||||
&playout_delay_oracle, nullptr, false, false,
|
&playout_delay_oracle, nullptr, false, false,
|
||||||
FieldTrialBasedConfig());
|
false, FieldTrialBasedConfig());
|
||||||
rtp_sender_video.RegisterPayloadType(payload_type, payload_name,
|
rtp_sender_video.RegisterPayloadType(payload_type, payload_name,
|
||||||
/*raw_payload=*/false);
|
/*raw_payload=*/false);
|
||||||
uint8_t payload[] = {47, 11, 32, 93, 89};
|
uint8_t payload[] = {47, 11, 32, 93, 89};
|
||||||
@ -1127,7 +1127,7 @@ TEST_P(RtpSenderTestWithoutPacer, SendRawVideo) {
|
|||||||
PlayoutDelayOracle playout_delay_oracle;
|
PlayoutDelayOracle playout_delay_oracle;
|
||||||
RTPSenderVideo rtp_sender_video(&fake_clock_, rtp_sender_.get(), nullptr,
|
RTPSenderVideo rtp_sender_video(&fake_clock_, rtp_sender_.get(), nullptr,
|
||||||
&playout_delay_oracle, nullptr, false, false,
|
&playout_delay_oracle, nullptr, false, false,
|
||||||
FieldTrialBasedConfig());
|
false, FieldTrialBasedConfig());
|
||||||
rtp_sender_video.RegisterPayloadType(payload_type, payload_name,
|
rtp_sender_video.RegisterPayloadType(payload_type, payload_name,
|
||||||
/*raw_payload=*/true);
|
/*raw_payload=*/true);
|
||||||
|
|
||||||
@ -1170,7 +1170,7 @@ TEST_P(RtpSenderTest, SendFlexfecPackets) {
|
|||||||
PlayoutDelayOracle playout_delay_oracle;
|
PlayoutDelayOracle playout_delay_oracle;
|
||||||
RTPSenderVideo rtp_sender_video(
|
RTPSenderVideo rtp_sender_video(
|
||||||
&fake_clock_, rtp_sender_.get(), &flexfec_sender, &playout_delay_oracle,
|
&fake_clock_, rtp_sender_.get(), &flexfec_sender, &playout_delay_oracle,
|
||||||
nullptr, false, false, FieldTrialBasedConfig());
|
nullptr, false, false, false, FieldTrialBasedConfig());
|
||||||
rtp_sender_video.RegisterPayloadType(kMediaPayloadType, "GENERIC",
|
rtp_sender_video.RegisterPayloadType(kMediaPayloadType, "GENERIC",
|
||||||
/*raw_payload=*/false);
|
/*raw_payload=*/false);
|
||||||
|
|
||||||
@ -1255,7 +1255,7 @@ TEST_P(RtpSenderTest, NoFlexfecForTimingFrames) {
|
|||||||
PlayoutDelayOracle playout_delay_oracle;
|
PlayoutDelayOracle playout_delay_oracle;
|
||||||
RTPSenderVideo rtp_sender_video(
|
RTPSenderVideo rtp_sender_video(
|
||||||
&fake_clock_, rtp_sender_.get(), &flexfec_sender, &playout_delay_oracle,
|
&fake_clock_, rtp_sender_.get(), &flexfec_sender, &playout_delay_oracle,
|
||||||
nullptr, false, false, FieldTrialBasedConfig());
|
nullptr, false, false, false, FieldTrialBasedConfig());
|
||||||
rtp_sender_video.RegisterPayloadType(kMediaPayloadType, "GENERIC",
|
rtp_sender_video.RegisterPayloadType(kMediaPayloadType, "GENERIC",
|
||||||
/*raw_payload=*/false);
|
/*raw_payload=*/false);
|
||||||
|
|
||||||
@ -1379,7 +1379,7 @@ TEST_P(RtpSenderTestWithoutPacer, SendFlexfecPackets) {
|
|||||||
PlayoutDelayOracle playout_delay_oracle;
|
PlayoutDelayOracle playout_delay_oracle;
|
||||||
RTPSenderVideo rtp_sender_video(
|
RTPSenderVideo rtp_sender_video(
|
||||||
&fake_clock_, rtp_sender_.get(), &flexfec_sender, &playout_delay_oracle,
|
&fake_clock_, rtp_sender_.get(), &flexfec_sender, &playout_delay_oracle,
|
||||||
nullptr, false, false, FieldTrialBasedConfig());
|
nullptr, false, false, false, FieldTrialBasedConfig());
|
||||||
rtp_sender_video.RegisterPayloadType(kMediaPayloadType, "GENERIC",
|
rtp_sender_video.RegisterPayloadType(kMediaPayloadType, "GENERIC",
|
||||||
/*raw_payload=*/false);
|
/*raw_payload=*/false);
|
||||||
|
|
||||||
@ -1647,7 +1647,7 @@ TEST_P(RtpSenderTest, FecOverheadRate) {
|
|||||||
PlayoutDelayOracle playout_delay_oracle;
|
PlayoutDelayOracle playout_delay_oracle;
|
||||||
RTPSenderVideo rtp_sender_video(
|
RTPSenderVideo rtp_sender_video(
|
||||||
&fake_clock_, rtp_sender_.get(), &flexfec_sender, &playout_delay_oracle,
|
&fake_clock_, rtp_sender_.get(), &flexfec_sender, &playout_delay_oracle,
|
||||||
nullptr, false, false, FieldTrialBasedConfig());
|
nullptr, false, false, false, FieldTrialBasedConfig());
|
||||||
rtp_sender_video.RegisterPayloadType(kMediaPayloadType, "GENERIC",
|
rtp_sender_video.RegisterPayloadType(kMediaPayloadType, "GENERIC",
|
||||||
/*raw_payload=*/false);
|
/*raw_payload=*/false);
|
||||||
// Parameters selected to generate a single FEC packet per media packet.
|
// Parameters selected to generate a single FEC packet per media packet.
|
||||||
@ -1720,7 +1720,7 @@ TEST_P(RtpSenderTest, BitrateCallbacks) {
|
|||||||
PlayoutDelayOracle playout_delay_oracle;
|
PlayoutDelayOracle playout_delay_oracle;
|
||||||
RTPSenderVideo rtp_sender_video(&fake_clock_, rtp_sender_.get(), nullptr,
|
RTPSenderVideo rtp_sender_video(&fake_clock_, rtp_sender_.get(), nullptr,
|
||||||
&playout_delay_oracle, nullptr, false, false,
|
&playout_delay_oracle, nullptr, false, false,
|
||||||
FieldTrialBasedConfig());
|
false, FieldTrialBasedConfig());
|
||||||
const char payload_name[] = "GENERIC";
|
const char payload_name[] = "GENERIC";
|
||||||
const uint8_t payload_type = 127;
|
const uint8_t payload_type = 127;
|
||||||
rtp_sender_video.RegisterPayloadType(payload_type, payload_name,
|
rtp_sender_video.RegisterPayloadType(payload_type, payload_name,
|
||||||
@ -1809,7 +1809,7 @@ TEST_P(RtpSenderTestWithoutPacer, StreamDataCountersCallbacks) {
|
|||||||
PlayoutDelayOracle playout_delay_oracle;
|
PlayoutDelayOracle playout_delay_oracle;
|
||||||
RTPSenderVideo rtp_sender_video(&fake_clock_, rtp_sender_.get(), nullptr,
|
RTPSenderVideo rtp_sender_video(&fake_clock_, rtp_sender_.get(), nullptr,
|
||||||
&playout_delay_oracle, nullptr, false, false,
|
&playout_delay_oracle, nullptr, false, false,
|
||||||
FieldTrialBasedConfig());
|
false, FieldTrialBasedConfig());
|
||||||
rtp_sender_video.RegisterPayloadType(payload_type, payload_name,
|
rtp_sender_video.RegisterPayloadType(payload_type, payload_name,
|
||||||
/*raw_payload=*/false);
|
/*raw_payload=*/false);
|
||||||
uint8_t payload[] = {47, 11, 32, 93, 89};
|
uint8_t payload[] = {47, 11, 32, 93, 89};
|
||||||
|
@ -204,11 +204,14 @@ RTPSenderVideo::RTPSenderVideo(Clock* clock,
|
|||||||
FrameEncryptorInterface* frame_encryptor,
|
FrameEncryptorInterface* frame_encryptor,
|
||||||
bool require_frame_encryption,
|
bool require_frame_encryption,
|
||||||
bool need_rtp_packet_infos,
|
bool need_rtp_packet_infos,
|
||||||
|
bool enable_retransmit_all_layers,
|
||||||
const WebRtcKeyValueConfig& field_trials)
|
const WebRtcKeyValueConfig& field_trials)
|
||||||
: rtp_sender_(rtp_sender),
|
: rtp_sender_(rtp_sender),
|
||||||
clock_(clock),
|
clock_(clock),
|
||||||
retransmission_settings_(kRetransmitBaseLayer |
|
retransmission_settings_(
|
||||||
kConditionallyRetransmitHigherLayers),
|
enable_retransmit_all_layers
|
||||||
|
? kRetransmitAllLayers
|
||||||
|
: (kRetransmitBaseLayer | kConditionallyRetransmitHigherLayers)),
|
||||||
last_rotation_(kVideoRotation_0),
|
last_rotation_(kVideoRotation_0),
|
||||||
transmit_color_space_next_frame_(false),
|
transmit_color_space_next_frame_(false),
|
||||||
playout_delay_oracle_(playout_delay_oracle),
|
playout_delay_oracle_(playout_delay_oracle),
|
||||||
|
@ -45,7 +45,8 @@ enum RetransmissionMode : uint8_t {
|
|||||||
kRetransmitOff = 0x0,
|
kRetransmitOff = 0x0,
|
||||||
kRetransmitBaseLayer = 0x2,
|
kRetransmitBaseLayer = 0x2,
|
||||||
kRetransmitHigherLayers = 0x4,
|
kRetransmitHigherLayers = 0x4,
|
||||||
kConditionallyRetransmitHigherLayers = 0x8,
|
kRetransmitAllLayers = 0x6,
|
||||||
|
kConditionallyRetransmitHigherLayers = 0x8
|
||||||
};
|
};
|
||||||
|
|
||||||
class RTPSenderVideo {
|
class RTPSenderVideo {
|
||||||
@ -59,6 +60,7 @@ class RTPSenderVideo {
|
|||||||
FrameEncryptorInterface* frame_encryptor,
|
FrameEncryptorInterface* frame_encryptor,
|
||||||
bool require_frame_encryption,
|
bool require_frame_encryption,
|
||||||
bool need_rtp_packet_infos,
|
bool need_rtp_packet_infos,
|
||||||
|
bool enable_retransmit_all_layers,
|
||||||
const WebRtcKeyValueConfig& field_trials);
|
const WebRtcKeyValueConfig& field_trials);
|
||||||
virtual ~RTPSenderVideo();
|
virtual ~RTPSenderVideo();
|
||||||
|
|
||||||
|
@ -106,6 +106,7 @@ class TestRtpSenderVideo : public RTPSenderVideo {
|
|||||||
nullptr,
|
nullptr,
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
|
false,
|
||||||
field_trials) {}
|
field_trials) {}
|
||||||
~TestRtpSenderVideo() override {}
|
~TestRtpSenderVideo() override {}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user