mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-15 14:50:39 +01:00
Fix degradation_preference setting being ignored using RtpSender.SetParameters.
RtpSenderBase::SetParametersInternal stores init_parameters_ if media_channel_ does not exist. When RtpSenderBase::SetSsrc is called, init_parameters_ is used to set the initial encoding parameters and degradation_preference. However, if no encoding parameter is specified, degradation_preference will not be set. This CL modifies the RtpSender so that degradation_preference is not ignored even in this case. Bug: webrtc:14279 Change-Id: I7e95ecdf5fcb19037e4f118981d1314d78ffca5a Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/268960 Reviewed-by: Henrik Boström <hbos@webrtc.org> Commit-Queue: Daniel.L (Byoungchan) Lee <daniel.l@hpcnt.com> Cr-Commit-Position: refs/heads/main@{#37574}
This commit is contained in:
parent
714e3cbb48
commit
10a7d23be5
2 changed files with 29 additions and 1 deletions
|
@ -3649,6 +3649,32 @@ TEST_P(PeerConnectionInterfaceTest, ExtmapAllowMixedIsConfigurable) {
|
|||
EXPECT_FALSE(offer->description()->extmap_allow_mixed());
|
||||
}
|
||||
|
||||
TEST_P(PeerConnectionInterfaceTest,
|
||||
RtpSenderSetDegradationPreferenceWithoutEncodings) {
|
||||
CreatePeerConnection();
|
||||
AddVideoTrack("video_label");
|
||||
|
||||
std::vector<rtc::scoped_refptr<RtpSenderInterface>> rtp_senders =
|
||||
pc_->GetSenders();
|
||||
ASSERT_EQ(rtp_senders.size(), 1u);
|
||||
ASSERT_EQ(rtp_senders[0]->media_type(), cricket::MEDIA_TYPE_VIDEO);
|
||||
rtc::scoped_refptr<RtpSenderInterface> video_rtp_sender = rtp_senders[0];
|
||||
RtpParameters parameters = video_rtp_sender->GetParameters();
|
||||
ASSERT_NE(parameters.degradation_preference,
|
||||
DegradationPreference::MAINTAIN_RESOLUTION);
|
||||
parameters.degradation_preference =
|
||||
DegradationPreference::MAINTAIN_RESOLUTION;
|
||||
ASSERT_TRUE(video_rtp_sender->SetParameters(parameters).ok());
|
||||
|
||||
std::unique_ptr<SessionDescriptionInterface> local_offer;
|
||||
ASSERT_TRUE(DoCreateOffer(&local_offer, nullptr));
|
||||
ASSERT_TRUE(DoSetLocalDescription(std::move(local_offer)));
|
||||
|
||||
RtpParameters parameters_new = video_rtp_sender->GetParameters();
|
||||
ASSERT_EQ(parameters_new.degradation_preference,
|
||||
DegradationPreference::MAINTAIN_RESOLUTION);
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_SUITE_P(PeerConnectionInterfaceTest,
|
||||
PeerConnectionInterfaceTest,
|
||||
Values(SdpSemantics::kPlanB_DEPRECATED,
|
||||
|
|
|
@ -305,7 +305,8 @@ void RtpSenderBase::SetSsrc(uint32_t ssrc) {
|
|||
SetSend();
|
||||
AddTrackToStats();
|
||||
}
|
||||
if (!init_parameters_.encodings.empty()) {
|
||||
if (!init_parameters_.encodings.empty() ||
|
||||
init_parameters_.degradation_preference.has_value()) {
|
||||
worker_thread_->Invoke<void>(RTC_FROM_HERE, [&] {
|
||||
RTC_DCHECK(media_channel_);
|
||||
// Get the current parameters, which are constructed from the SDP.
|
||||
|
@ -328,6 +329,7 @@ void RtpSenderBase::SetSsrc(uint32_t ssrc) {
|
|||
init_parameters_.degradation_preference;
|
||||
media_channel_->SetRtpSendParameters(ssrc_, current_parameters);
|
||||
init_parameters_.encodings.clear();
|
||||
init_parameters_.degradation_preference = absl::nullopt;
|
||||
});
|
||||
}
|
||||
// Attempt to attach the frame decryptor to the current media channel.
|
||||
|
|
Loading…
Reference in a new issue