Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(236)

Unified Diff: webrtc/pc/mediasession_unittest.cc

Issue 1616033002: Fixing some issues with payload type mappings. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Removing unneeded spammy log message. Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/pc/mediasession.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/pc/mediasession_unittest.cc
diff --git a/webrtc/pc/mediasession_unittest.cc b/webrtc/pc/mediasession_unittest.cc
index 6887194b58a78a50f0d1d02fdb9d3da4b911defd..66204b59c71f274ac20025b3780a1c470c8b4ac3 100644
--- a/webrtc/pc/mediasession_unittest.cc
+++ b/webrtc/pc/mediasession_unittest.cc
@@ -1654,6 +1654,48 @@ TEST_F(MediaSessionDescriptionFactoryTest,
EXPECT_EQ(new_h264_pl_type, pt_referenced_by_rtx);
}
+// Create an updated offer with RTX after creating an answer to an offer
+// without RTX, and with different default payload types.
+// Verify that the added RTX codec references the correct payload type.
+TEST_F(MediaSessionDescriptionFactoryTest,
+ RespondentCreatesOfferWithRtxAfterCreatingAnswerWithoutRtx) {
+ MediaSessionOptions opts;
+ opts.recv_video = true;
+ opts.recv_audio = true;
+
+ std::vector<VideoCodec> f2_codecs = MAKE_VECTOR(kVideoCodecs2);
+ // This creates rtx for H264 with the payload type |f2_| uses.
+ AddRtxCodec(VideoCodec::CreateRtxCodec(125, kVideoCodecs2[0].id), &f2_codecs);
+ f2_.set_video_codecs(f2_codecs);
+
+ rtc::scoped_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
+ ASSERT_TRUE(offer.get() != nullptr);
+ rtc::scoped_ptr<SessionDescription> answer(
+ f2_.CreateAnswer(offer.get(), opts, nullptr));
+
+ const VideoContentDescription* vcd =
+ GetFirstVideoContentDescription(answer.get());
+
+ std::vector<VideoCodec> expected_codecs = MAKE_VECTOR(kVideoCodecsAnswer);
+ EXPECT_EQ(expected_codecs, vcd->codecs());
+
+ // Now, ensure that the RTX codec is created correctly when |f2_| creates an
+ // updated offer, even though the default payload types are different from
+ // those of |f1_|.
+ rtc::scoped_ptr<SessionDescription> updated_offer(
+ f2_.CreateOffer(opts, answer.get()));
+ ASSERT_TRUE(updated_offer);
+
+ const VideoContentDescription* updated_vcd =
+ GetFirstVideoContentDescription(updated_offer.get());
+
+ // New offer should attempt to add H263, and RTX for H264.
+ expected_codecs.push_back(kVideoCodecs2[1]);
+ AddRtxCodec(VideoCodec::CreateRtxCodec(125, kVideoCodecs1[1].id),
+ &expected_codecs);
+ EXPECT_EQ(expected_codecs, updated_vcd->codecs());
+}
+
// Test that RTX is ignored when there is no associated payload type parameter.
TEST_F(MediaSessionDescriptionFactoryTest, RtxWithoutApt) {
MediaSessionOptions opts;
@@ -1762,6 +1804,41 @@ TEST_F(MediaSessionDescriptionFactoryTest,
EXPECT_EQ(expected_codecs, vcd->codecs());
}
+// Test that after one RTX codec has been negotiated, a new offer can attempt
+// to add another.
+TEST_F(MediaSessionDescriptionFactoryTest, AddSecondRtxInNewOffer) {
+ MediaSessionOptions opts;
+ opts.recv_video = true;
+ opts.recv_audio = false;
+ std::vector<VideoCodec> f1_codecs = MAKE_VECTOR(kVideoCodecs1);
+ // This creates RTX for H264 for the offerer.
+ AddRtxCodec(VideoCodec::CreateRtxCodec(126, kVideoCodecs1[1].id), &f1_codecs);
+ f1_.set_video_codecs(f1_codecs);
+
+ rtc::scoped_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
+ ASSERT_TRUE(offer);
+ const VideoContentDescription* vcd =
+ GetFirstVideoContentDescription(offer.get());
+
+ std::vector<VideoCodec> expected_codecs = MAKE_VECTOR(kVideoCodecs1);
+ AddRtxCodec(VideoCodec::CreateRtxCodec(126, kVideoCodecs1[1].id),
+ &expected_codecs);
+ EXPECT_EQ(expected_codecs, vcd->codecs());
+
+ // Now, attempt to add RTX for H264-SVC.
+ AddRtxCodec(VideoCodec::CreateRtxCodec(125, kVideoCodecs1[0].id), &f1_codecs);
+ f1_.set_video_codecs(f1_codecs);
+
+ rtc::scoped_ptr<SessionDescription> updated_offer(
+ f1_.CreateOffer(opts, offer.get()));
+ ASSERT_TRUE(updated_offer);
+ vcd = GetFirstVideoContentDescription(updated_offer.get());
+
+ AddRtxCodec(VideoCodec::CreateRtxCodec(125, kVideoCodecs1[0].id),
+ &expected_codecs);
+ EXPECT_EQ(expected_codecs, vcd->codecs());
+}
+
// Test that when RTX is used in conjunction with simulcast, an RTX ssrc is
// generated for each simulcast ssrc and correctly grouped.
TEST_F(MediaSessionDescriptionFactoryTest, SimSsrcsGenerateMultipleRtxSsrcs) {
« no previous file with comments | « webrtc/pc/mediasession.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698