Revert "Sanitize the codec list before sending it to the media engine"
This reverts commit add7ef974ee2642a3b55a36ec80be50a615bc60a. Reason for revert: Cause regression in pc_full_stack_tests.cc Original change's description: > Sanitize the codec list before sending it to the media engine > > The SDP can assign the same codec to two different payload types > which gets represented as two separate codecs in the SDP structure. > The media engine assumes that the client does not pass down > duplicate codecs. This change adds logic to BaseChannel to filter > out codecs of the same name with different payload types, picking > the one which is listed first in the m= line. > > Bug: chromium:987598 > Change-Id: I6fa813db1769e572ff7c3f322dc9b1de39817ea2 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/147602 > Reviewed-by: Amit Hilbuch <amithi@webrtc.org> > Commit-Queue: Steve Anton <steveanton@webrtc.org> > Cr-Commit-Position: refs/heads/master@{#28726} TBR=steveanton@webrtc.org,amithi@webrtc.org # Not skipping CQ checks because original CL landed > 1 day ago. Bug: chromium:987598 Change-Id: I4ffbfcd90c81c6c6c8ee8f872f7e217d8291c857 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/147864 Commit-Queue: Artem Titov <titovartem@webrtc.org> Reviewed-by: Artem Titov <titovartem@webrtc.org> Cr-Commit-Position: refs/heads/master@{#28744}
This commit is contained in:
@ -94,20 +94,6 @@ static void SafeSetError(const std::string& message, std::string* error_desc) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class Codec>
|
|
||||||
std::vector<Codec> SanitizeCodecList(const std::vector<Codec>& codecs) {
|
|
||||||
std::vector<Codec> sanitized;
|
|
||||||
for (const Codec& codec : codecs) {
|
|
||||||
if (absl::c_any_of(sanitized, [&](const Codec& other) {
|
|
||||||
return codec.Matches(other);
|
|
||||||
})) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
sanitized.push_back(codec);
|
|
||||||
}
|
|
||||||
return sanitized;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class Codec>
|
template <class Codec>
|
||||||
void RtpParametersFromMediaDescription(
|
void RtpParametersFromMediaDescription(
|
||||||
const MediaContentDescriptionImpl<Codec>* desc,
|
const MediaContentDescriptionImpl<Codec>* desc,
|
||||||
@ -117,7 +103,7 @@ void RtpParametersFromMediaDescription(
|
|||||||
// a description without codecs. Currently the ORTC implementation is relying
|
// a description without codecs. Currently the ORTC implementation is relying
|
||||||
// on this.
|
// on this.
|
||||||
if (desc->has_codecs()) {
|
if (desc->has_codecs()) {
|
||||||
params->codecs = SanitizeCodecList(desc->codecs());
|
params->codecs = desc->codecs();
|
||||||
}
|
}
|
||||||
// TODO(pthatcher): See if we really need
|
// TODO(pthatcher): See if we really need
|
||||||
// rtp_header_extensions_set() and remove it if we don't.
|
// rtp_header_extensions_set() and remove it if we don't.
|
||||||
|
@ -45,7 +45,6 @@ using cricket::FakeVoiceMediaChannel;
|
|||||||
using cricket::RidDescription;
|
using cricket::RidDescription;
|
||||||
using cricket::RidDirection;
|
using cricket::RidDirection;
|
||||||
using cricket::StreamParams;
|
using cricket::StreamParams;
|
||||||
using testing::ElementsAre;
|
|
||||||
using webrtc::RtpTransceiverDirection;
|
using webrtc::RtpTransceiverDirection;
|
||||||
using webrtc::SdpType;
|
using webrtc::SdpType;
|
||||||
|
|
||||||
@ -2269,27 +2268,6 @@ TEST_F(VideoChannelSingleThreadTest,
|
|||||||
EXPECT_EQ(media_channel1_->send_codecs()[0].packetization, absl::nullopt);
|
EXPECT_EQ(media_channel1_->send_codecs()[0].packetization, absl::nullopt);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test that if the session description has the same codec assigned to two
|
|
||||||
// payload types then the MediaChannel will only receive the one that comes
|
|
||||||
// first in the list.
|
|
||||||
TEST_F(VideoChannelSingleThreadTest, TestFilterDuplicateDynamicCodecs) {
|
|
||||||
const char kCodecName[] = "VP8";
|
|
||||||
cricket::VideoCodec codec(98, kCodecName);
|
|
||||||
cricket::VideoCodec duplicate(99, kCodecName);
|
|
||||||
cricket::VideoContentDescription video_content;
|
|
||||||
video_content.set_codecs({codec, duplicate});
|
|
||||||
|
|
||||||
CreateChannels(0, 0);
|
|
||||||
|
|
||||||
EXPECT_TRUE(
|
|
||||||
channel1_->SetRemoteContent(&video_content, SdpType::kOffer, NULL));
|
|
||||||
EXPECT_TRUE(
|
|
||||||
channel1_->SetLocalContent(&video_content, SdpType::kAnswer, NULL));
|
|
||||||
|
|
||||||
EXPECT_THAT(media_channel1_->recv_codecs(), ElementsAre(codec));
|
|
||||||
EXPECT_THAT(media_channel1_->send_codecs(), ElementsAre(codec));
|
|
||||||
}
|
|
||||||
|
|
||||||
// VideoChannelDoubleThreadTest
|
// VideoChannelDoubleThreadTest
|
||||||
TEST_F(VideoChannelDoubleThreadTest, TestInit) {
|
TEST_F(VideoChannelDoubleThreadTest, TestInit) {
|
||||||
Base::TestInit();
|
Base::TestInit();
|
||||||
|
Reference in New Issue
Block a user