Remove most usage of MediaContentDescription::as_audio()/as_video()
and unify algorithms a bit more.
BUG=webrtc:15214
Change-Id: Ie9903f3e56d25b1dc026367e8ae6817275faa07b
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/328442
Reviewed-by: Florent Castelli <orphis@webrtc.org>
Commit-Queue: Philipp Hancke <phancke@microsoft.com>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#41244}
diff --git a/pc/channel.cc b/pc/channel.cc
index 00ef3ae..792f67a 100644
--- a/pc/channel.cc
+++ b/pc/channel.cc
@@ -79,7 +79,7 @@
} // namespace
void MediaChannelParametersFromMediaDescription(
- const RtpMediaContentDescription* desc,
+ const MediaContentDescription* desc,
const RtpHeaderExtensions& extensions,
bool is_stream_active,
MediaChannelParameters* params) {
@@ -97,7 +97,7 @@
}
void RtpSendParametersFromMediaDescription(
- const RtpMediaContentDescription* desc,
+ const MediaContentDescription* desc,
webrtc::RtpExtension::Filter extensions_filter,
SenderParameters* send_params) {
RtpHeaderExtensions extensions =
@@ -875,7 +875,7 @@
AudioReceiverParameters recv_params = last_recv_params_;
MediaChannelParametersFromMediaDescription(
- content->as_audio(), header_extensions,
+ content, header_extensions,
webrtc::RtpTransceiverDirectionHasRecv(content->direction()),
&recv_params);
@@ -927,8 +927,8 @@
RTC_LOG(LS_INFO) << "Setting remote voice description for " << ToString();
AudioSenderParameter send_params = last_send_params_;
- RtpSendParametersFromMediaDescription(content->as_audio(),
- extensions_filter(), &send_params);
+ RtpSendParametersFromMediaDescription(content, extensions_filter(),
+ &send_params);
send_params.mid = mid();
bool parameters_applied =
@@ -1016,7 +1016,7 @@
VideoReceiverParameters recv_params = last_recv_params_;
MediaChannelParametersFromMediaDescription(
- content->as_video(), header_extensions,
+ content, header_extensions,
webrtc::RtpTransceiverDirectionHasRecv(content->direction()),
&recv_params);
@@ -1100,7 +1100,7 @@
last_send_params_ = send_params;
}
- if (!UpdateLocalStreams_w(content->as_video()->streams(), type, error_desc)) {
+ if (!UpdateLocalStreams_w(content->streams(), type, error_desc)) {
RTC_DCHECK(!error_desc.empty());
return false;
}
@@ -1128,13 +1128,11 @@
TRACE_EVENT0("webrtc", "VideoChannel::SetRemoteContent_w");
RTC_LOG(LS_INFO) << "Setting remote video description for " << ToString();
- const VideoContentDescription* video = content->as_video();
-
VideoSenderParameters send_params = last_send_params_;
- RtpSendParametersFromMediaDescription(video, extensions_filter(),
+ RtpSendParametersFromMediaDescription(content, extensions_filter(),
&send_params);
send_params.mid = mid();
- send_params.conference_mode = video->conference_mode();
+ send_params.conference_mode = content->conference_mode();
VideoReceiverParameters recv_params = last_recv_params_;
@@ -1145,15 +1143,15 @@
// instead.
bool needs_recv_params_update = false;
if (type == SdpType::kAnswer || type == SdpType::kPrAnswer) {
- webrtc::flat_set<const VideoCodec*> matched_codecs;
- for (VideoCodec& recv_codec : recv_params.codecs) {
- if (absl::c_any_of(matched_codecs, [&](const VideoCodec* c) {
+ webrtc::flat_set<const Codec*> matched_codecs;
+ for (Codec& recv_codec : recv_params.codecs) {
+ if (absl::c_any_of(matched_codecs, [&](const Codec* c) {
return recv_codec.MatchesWithoutPacketization(*c);
})) {
continue;
}
- std::vector<const VideoCodec*> send_codecs =
+ std::vector<const Codec*> send_codecs =
FindAllMatchingCodecs(send_params.codecs, recv_codec);
if (send_codecs.empty()) {
continue;
@@ -1161,7 +1159,7 @@
bool may_ignore_packetization = false;
bool has_matching_packetization = false;
- for (const VideoCodec* send_codec : send_codecs) {
+ for (const Codec* send_codec : send_codecs) {
if (!send_codec->packetization.has_value() &&
recv_codec.packetization.has_value()) {
may_ignore_packetization = true;
diff --git a/pc/media_session_unittest.cc b/pc/media_session_unittest.cc
index e15cc39..b0dc3ad 100644
--- a/pc/media_session_unittest.cc
+++ b/pc/media_session_unittest.cc
@@ -683,8 +683,8 @@
ASSERT_TRUE(vc);
EXPECT_EQ(MediaProtocolType::kRtp, ac->type);
EXPECT_EQ(MediaProtocolType::kRtp, vc->type);
- const AudioContentDescription* acd = ac->media_description()->as_audio();
- const VideoContentDescription* vcd = vc->media_description()->as_video();
+ const MediaContentDescription* acd = ac->media_description();
+ const MediaContentDescription* vcd = vc->media_description();
EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
EXPECT_THAT(acd->codecs(), ElementsAreArray(kAudioCodecsAnswer));
EXPECT_EQ(kAutoBandwidth, acd->bandwidth()); // negotiated auto bw
@@ -781,7 +781,7 @@
ASSERT_TRUE(ac);
EXPECT_FALSE(vc);
EXPECT_EQ(MediaProtocolType::kRtp, ac->type);
- const AudioContentDescription* acd = ac->media_description()->as_audio();
+ const MediaContentDescription* acd = ac->media_description();
EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
EXPECT_EQ(f1_.audio_sendrecv_codecs(), acd->codecs());
EXPECT_EQ(0U, acd->first_ssrc()); // no sender is attached.
@@ -814,7 +814,7 @@
ASSERT_TRUE(ac != NULL);
ASSERT_TRUE(vc == NULL);
EXPECT_EQ(MediaProtocolType::kRtp, ac->type);
- const AudioContentDescription* acd = ac->media_description()->as_audio();
+ const MediaContentDescription* acd = ac->media_description();
EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
EXPECT_EQ(2U, acd->codecs().size());
EXPECT_EQ("opus", acd->codecs()[0].name);
@@ -843,7 +843,7 @@
ASSERT_TRUE(ac != NULL);
ASSERT_TRUE(vc == NULL);
EXPECT_EQ(MediaProtocolType::kRtp, ac->type);
- const AudioContentDescription* acd = ac->media_description()->as_audio();
+ const MediaContentDescription* acd = ac->media_description();
EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
EXPECT_EQ(2U, acd->codecs().size());
EXPECT_EQ("red", acd->codecs()[0].name);
@@ -864,8 +864,8 @@
ASSERT_TRUE(vc);
EXPECT_EQ(MediaProtocolType::kRtp, ac->type);
EXPECT_EQ(MediaProtocolType::kRtp, vc->type);
- const AudioContentDescription* acd = ac->media_description()->as_audio();
- const VideoContentDescription* vcd = vc->media_description()->as_video();
+ const MediaContentDescription* acd = ac->media_description();
+ const MediaContentDescription* vcd = vc->media_description();
EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
EXPECT_EQ(f1_.audio_sendrecv_codecs(), acd->codecs());
EXPECT_EQ(0U, acd->first_ssrc()); // no sender is attached
@@ -1228,8 +1228,8 @@
const ContentInfo* vc = offer->GetContentByName("video");
ASSERT_TRUE(ac);
ASSERT_TRUE(vc);
- const AudioContentDescription* acd = ac->media_description()->as_audio();
- const VideoContentDescription* vcd = vc->media_description()->as_video();
+ const MediaContentDescription* acd = ac->media_description();
+ const MediaContentDescription* vcd = vc->media_description();
EXPECT_FALSE(vcd->has_ssrcs()); // No StreamParams.
EXPECT_FALSE(acd->has_ssrcs()); // No StreamParams.
@@ -1306,7 +1306,7 @@
ASSERT_TRUE(ac);
EXPECT_FALSE(vc);
EXPECT_EQ(MediaProtocolType::kRtp, ac->type);
- const AudioContentDescription* acd = ac->media_description()->as_audio();
+ const MediaContentDescription* acd = ac->media_description();
EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
EXPECT_THAT(acd->codecs(), ElementsAreArray(kAudioCodecsAnswer));
EXPECT_EQ(0U, acd->first_ssrc()); // no sender is attached
@@ -1337,7 +1337,7 @@
ASSERT_TRUE(ac);
EXPECT_FALSE(vc);
EXPECT_EQ(MediaProtocolType::kRtp, ac->type);
- const AudioContentDescription* acd = ac->media_description()->as_audio();
+ const MediaContentDescription* acd = ac->media_description();
EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
EXPECT_THAT(acd->codecs(), ElementsAreArray(kAudioCodecsAnswer));
EXPECT_EQ(0U, acd->first_ssrc()); // no sender is attached
@@ -1386,8 +1386,8 @@
ASSERT_TRUE(vc);
EXPECT_EQ(MediaProtocolType::kRtp, ac->type);
EXPECT_EQ(MediaProtocolType::kRtp, vc->type);
- const AudioContentDescription* acd = ac->media_description()->as_audio();
- const VideoContentDescription* vcd = vc->media_description()->as_video();
+ const MediaContentDescription* acd = ac->media_description();
+ const MediaContentDescription* vcd = vc->media_description();
EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
EXPECT_THAT(acd->codecs(), ElementsAreArray(kAudioCodecsAnswer));
EXPECT_EQ(kAutoBandwidth, acd->bandwidth()); // negotiated auto bw
@@ -2215,8 +2215,8 @@
const ContentInfo* vc = answer->GetContentByName("video");
ASSERT_TRUE(ac);
ASSERT_TRUE(vc);
- const AudioContentDescription* acd = ac->media_description()->as_audio();
- const VideoContentDescription* vcd = vc->media_description()->as_video();
+ const MediaContentDescription* acd = ac->media_description();
+ const MediaContentDescription* vcd = vc->media_description();
EXPECT_FALSE(acd->has_ssrcs()); // No StreamParams.
EXPECT_FALSE(vcd->has_ssrcs()); // No StreamParams.
@@ -2481,8 +2481,8 @@
const ContentInfo* vc = offer->GetContentByName("video");
ASSERT_TRUE(ac);
ASSERT_TRUE(vc);
- const AudioContentDescription* acd = ac->media_description()->as_audio();
- const VideoContentDescription* vcd = vc->media_description()->as_video();
+ const MediaContentDescription* acd = ac->media_description();
+ const MediaContentDescription* vcd = vc->media_description();
EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
EXPECT_EQ(f1_.audio_sendrecv_codecs(), acd->codecs());
@@ -2526,10 +2526,8 @@
vc = updated_offer->GetContentByName("video");
ASSERT_TRUE(ac);
ASSERT_TRUE(vc);
- const AudioContentDescription* updated_acd =
- ac->media_description()->as_audio();
- const VideoContentDescription* updated_vcd =
- vc->media_description()->as_video();
+ const MediaContentDescription* updated_acd = ac->media_description();
+ const MediaContentDescription* updated_vcd = vc->media_description();
EXPECT_EQ(acd->type(), updated_acd->type());
EXPECT_EQ(acd->codecs(), updated_acd->codecs());
@@ -2574,7 +2572,7 @@
ASSERT_TRUE(offer.get());
const ContentInfo* vc = offer->GetContentByName("video");
ASSERT_TRUE(vc);
- const VideoContentDescription* vcd = vc->media_description()->as_video();
+ const MediaContentDescription* vcd = vc->media_description();
const StreamParamsVec& video_streams = vcd->streams();
ASSERT_EQ(1U, video_streams.size());
@@ -2786,8 +2784,8 @@
const ContentInfo* vc = answer->GetContentByName("video");
ASSERT_TRUE(ac);
ASSERT_TRUE(vc);
- const AudioContentDescription* acd = ac->media_description()->as_audio();
- const VideoContentDescription* vcd = vc->media_description()->as_video();
+ const MediaContentDescription* acd = ac->media_description();
+ const MediaContentDescription* vcd = vc->media_description();
ASSERT_CRYPTO(acd, 1U, kDefaultSrtpCryptoSuite);
ASSERT_CRYPTO(vcd, 1U, kDefaultSrtpCryptoSuite);
@@ -2831,10 +2829,8 @@
vc = updated_answer->GetContentByName("video");
ASSERT_TRUE(ac);
ASSERT_TRUE(vc);
- const AudioContentDescription* updated_acd =
- ac->media_description()->as_audio();
- const VideoContentDescription* updated_vcd =
- vc->media_description()->as_video();
+ const MediaContentDescription* updated_acd = ac->media_description();
+ const MediaContentDescription* updated_vcd = vc->media_description();
ASSERT_CRYPTO(updated_acd, 1U, kDefaultSrtpCryptoSuite);
EXPECT_TRUE(CompareCryptoParams(acd->cryptos(), updated_acd->cryptos()));
@@ -3260,14 +3256,13 @@
MediaContentDescription* media_desc =
offer->GetContentDescriptionByName(CN_VIDEO);
ASSERT_TRUE(media_desc);
- VideoContentDescription* desc = media_desc->as_video();
- std::vector<VideoCodec> codecs = desc->codecs();
- for (VideoCodec& codec : codecs) {
+ std::vector<Codec> codecs = media_desc->codecs();
+ for (Codec& codec : codecs) {
if (absl::StartsWith(codec.name, kRtxCodecName)) {
codec.params.clear();
}
}
- desc->set_codecs(codecs);
+ media_desc->set_codecs(codecs);
std::unique_ptr<SessionDescription> answer =
f2_.CreateAnswerOrError(offer.get(), opts, nullptr).MoveValue();
@@ -3404,8 +3399,7 @@
MediaContentDescription* media_desc =
offer->GetContentDescriptionByName(CN_VIDEO);
ASSERT_TRUE(media_desc);
- VideoContentDescription* desc = media_desc->as_video();
- const StreamParamsVec& streams = desc->streams();
+ const StreamParamsVec& streams = media_desc->streams();
// Single stream.
ASSERT_EQ(1u, streams.size());
// Stream should have 6 ssrcs: 3 for video, 3 for RTX.
@@ -3449,8 +3443,7 @@
MediaContentDescription* media_desc =
offer->GetContentDescriptionByName(CN_VIDEO);
ASSERT_TRUE(media_desc);
- VideoContentDescription* desc = media_desc->as_video();
- const StreamParamsVec& streams = desc->streams();
+ const StreamParamsVec& streams = media_desc->streams();
// Single stream.
ASSERT_EQ(1u, streams.size());
// Stream should have 2 ssrcs: 1 for video, 1 for FlexFEC.
@@ -3493,8 +3486,7 @@
MediaContentDescription* media_desc =
offer->GetContentDescriptionByName(CN_VIDEO);
ASSERT_TRUE(media_desc);
- VideoContentDescription* desc = media_desc->as_video();
- const StreamParamsVec& streams = desc->streams();
+ const StreamParamsVec& streams = media_desc->streams();
// Single stream.
ASSERT_EQ(1u, streams.size());
// Stream should have 3 ssrcs: 3 for video, 0 for FlexFEC.
@@ -3663,12 +3655,12 @@
ASSERT_TRUE(ac);
ASSERT_TRUE(vc);
EXPECT_EQ(MediaProtocolType::kRtp, ac->type);
- const AudioContentDescription* acd_copy = ac->media_description()->as_audio();
+ const MediaContentDescription* acd_copy = ac->media_description();
EXPECT_EQ(acd->codecs(), acd_copy->codecs());
EXPECT_EQ(1u, acd->first_ssrc());
EXPECT_EQ(MediaProtocolType::kRtp, vc->type);
- const VideoContentDescription* vcd_copy = vc->media_description()->as_video();
+ const MediaContentDescription* vcd_copy = vc->media_description();
EXPECT_EQ(vcd->codecs(), vcd_copy->codecs());
EXPECT_EQ(2u, vcd->first_ssrc());
}
@@ -3812,8 +3804,8 @@
ASSERT_TRUE(offer.get());
ContentInfo* offer_content = offer->GetContentByName("audio");
ASSERT_TRUE(offer_content);
- AudioContentDescription* offer_audio_desc =
- offer_content->media_description()->as_audio();
+ MediaContentDescription* offer_audio_desc =
+ offer_content->media_description();
offer_audio_desc->set_protocol(kMediaProtocolDtlsSavpf);
std::unique_ptr<SessionDescription> answer =
@@ -3839,8 +3831,8 @@
ASSERT_TRUE(offer.get());
ContentInfo* offer_content = offer->GetContentByName("audio");
ASSERT_TRUE(offer_content);
- AudioContentDescription* offer_audio_desc =
- offer_content->media_description()->as_audio();
+ MediaContentDescription* offer_audio_desc =
+ offer_content->media_description();
offer_audio_desc->set_protocol(kMediaProtocolDtlsSavpf);
std::unique_ptr<SessionDescription> answer =
@@ -3852,8 +3844,8 @@
ASSERT_TRUE(answer_content);
ASSERT_FALSE(answer_content->rejected);
- const AudioContentDescription* answer_audio_desc =
- answer_content->media_description()->as_audio();
+ const MediaContentDescription* answer_audio_desc =
+ answer_content->media_description();
EXPECT_EQ(kMediaProtocolDtlsSavpf, answer_audio_desc->protocol());
}
@@ -4094,27 +4086,25 @@
ASSERT_EQ(4u, offer->contents().size());
EXPECT_FALSE(offer->contents()[0].rejected);
- const AudioContentDescription* acd =
- offer->contents()[0].media_description()->as_audio();
+ const MediaContentDescription* acd = offer->contents()[0].media_description();
ASSERT_EQ(1u, acd->streams().size());
EXPECT_EQ(kAudioTrack1, acd->streams()[0].id);
EXPECT_EQ(RtpTransceiverDirection::kSendRecv, acd->direction());
EXPECT_FALSE(offer->contents()[1].rejected);
- const VideoContentDescription* vcd =
- offer->contents()[1].media_description()->as_video();
+ const MediaContentDescription* vcd = offer->contents()[1].media_description();
ASSERT_EQ(1u, vcd->streams().size());
EXPECT_EQ(kVideoTrack1, vcd->streams()[0].id);
EXPECT_EQ(RtpTransceiverDirection::kSendRecv, vcd->direction());
EXPECT_FALSE(offer->contents()[2].rejected);
- acd = offer->contents()[2].media_description()->as_audio();
+ acd = offer->contents()[2].media_description();
ASSERT_EQ(1u, acd->streams().size());
EXPECT_EQ(kAudioTrack2, acd->streams()[0].id);
EXPECT_EQ(RtpTransceiverDirection::kSendRecv, acd->direction());
EXPECT_FALSE(offer->contents()[3].rejected);
- vcd = offer->contents()[3].media_description()->as_video();
+ vcd = offer->contents()[3].media_description();
ASSERT_EQ(1u, vcd->streams().size());
EXPECT_EQ(kVideoTrack2, vcd->streams()[0].id);
EXPECT_EQ(RtpTransceiverDirection::kSendRecv, vcd->direction());
@@ -4157,27 +4147,27 @@
ASSERT_EQ(4u, answer->contents().size());
EXPECT_FALSE(answer->contents()[0].rejected);
- const AudioContentDescription* acd =
- answer->contents()[0].media_description()->as_audio();
+ const MediaContentDescription* acd =
+ answer->contents()[0].media_description();
ASSERT_EQ(1u, acd->streams().size());
EXPECT_EQ(kAudioTrack1, acd->streams()[0].id);
EXPECT_EQ(RtpTransceiverDirection::kSendRecv, acd->direction());
EXPECT_FALSE(answer->contents()[1].rejected);
- const VideoContentDescription* vcd =
- answer->contents()[1].media_description()->as_video();
+ const MediaContentDescription* vcd =
+ answer->contents()[1].media_description();
ASSERT_EQ(1u, vcd->streams().size());
EXPECT_EQ(kVideoTrack1, vcd->streams()[0].id);
EXPECT_EQ(RtpTransceiverDirection::kSendRecv, vcd->direction());
EXPECT_FALSE(answer->contents()[2].rejected);
- acd = answer->contents()[2].media_description()->as_audio();
+ acd = answer->contents()[2].media_description();
ASSERT_EQ(1u, acd->streams().size());
EXPECT_EQ(kAudioTrack2, acd->streams()[0].id);
EXPECT_EQ(RtpTransceiverDirection::kSendRecv, acd->direction());
EXPECT_FALSE(answer->contents()[3].rejected);
- vcd = answer->contents()[3].media_description()->as_video();
+ vcd = answer->contents()[3].media_description();
ASSERT_EQ(1u, vcd->streams().size());
EXPECT_EQ(kVideoTrack2, vcd->streams()[0].id);
EXPECT_EQ(RtpTransceiverDirection::kSendRecv, vcd->direction());
@@ -4313,10 +4303,10 @@
f1_.CreateOfferOrError(opts, nullptr).MoveValue();
ASSERT_TRUE(offer);
ASSERT_EQ(2u, offer->contents().size());
- const VideoContentDescription* vcd1 =
- offer->contents()[0].media_description()->as_video();
- const VideoContentDescription* vcd2 =
- offer->contents()[1].media_description()->as_video();
+ const MediaContentDescription* vcd1 =
+ offer->contents()[0].media_description();
+ const MediaContentDescription* vcd2 =
+ offer->contents()[1].media_description();
EXPECT_EQ(vcd1->codecs().size(), vcd2->codecs().size());
ASSERT_EQ(2u, vcd1->codecs().size());
EXPECT_EQ(vcd1->codecs()[0].name, vcd2->codecs()[0].name);
@@ -4329,8 +4319,8 @@
f2_.CreateAnswerOrError(offer.get(), opts, nullptr).MoveValue();
ASSERT_TRUE(answer);
ASSERT_EQ(2u, answer->contents().size());
- vcd1 = answer->contents()[0].media_description()->as_video();
- vcd2 = answer->contents()[1].media_description()->as_video();
+ vcd1 = answer->contents()[0].media_description();
+ vcd2 = answer->contents()[1].media_description();
EXPECT_EQ(vcd1->codecs().size(), vcd2->codecs().size());
ASSERT_EQ(1u, vcd1->codecs().size());
EXPECT_EQ(vcd1->codecs()[0].name, vcd2->codecs()[0].name);
@@ -4353,15 +4343,14 @@
std::unique_ptr<SessionDescription> offer =
f1_.CreateOfferOrError(opts, nullptr).MoveValue();
ASSERT_THAT(offer, NotNull());
- VideoContentDescription& video =
- *offer->contents()[0].media_description()->as_video();
+ MediaContentDescription& video = *offer->contents()[0].media_description();
video.set_codecs({vp8, vp8_raw});
std::unique_ptr<SessionDescription> updated_offer =
f1_.CreateOfferOrError(opts, offer.get()).MoveValue();
ASSERT_THAT(updated_offer, NotNull());
- VideoContentDescription& updated_video =
- *updated_offer->contents()[0].media_description()->as_video();
+ MediaContentDescription& updated_video =
+ *updated_offer->contents()[0].media_description();
EXPECT_THAT(
updated_video.codecs(),
ElementsAre(AllOf(Field(&cricket::Codec::name, "VP8"),
@@ -4398,8 +4387,8 @@
f1_.CreateOfferOrError(opts, nullptr).MoveValue();
ASSERT_TRUE(offer);
ASSERT_EQ(1u, offer->contents().size());
- const VideoContentDescription* vcd1 =
- offer->contents()[0].media_description()->as_video();
+ const MediaContentDescription* vcd1 =
+ offer->contents()[0].media_description();
ASSERT_EQ(1u, vcd1->codecs().size());
EXPECT_EQ(vcd1->codecs()[0].packetization, "raw");
@@ -4408,7 +4397,7 @@
f2_.CreateAnswerOrError(offer.get(), opts, nullptr).MoveValue();
ASSERT_TRUE(answer);
ASSERT_EQ(1u, answer->contents().size());
- vcd1 = answer->contents()[0].media_description()->as_video();
+ vcd1 = answer->contents()[0].media_description();
ASSERT_EQ(1u, vcd1->codecs().size());
EXPECT_EQ(vcd1->codecs()[0].packetization, "raw");
}
@@ -4429,10 +4418,9 @@
f1_.CreateOfferOrError(opts, nullptr).MoveValue();
ASSERT_TRUE(offer);
ASSERT_EQ(2u, offer->contents().size());
- VideoContentDescription* vcd1 =
- offer->contents()[0].media_description()->as_video();
- const VideoContentDescription* vcd2 =
- offer->contents()[1].media_description()->as_video();
+ MediaContentDescription* vcd1 = offer->contents()[0].media_description();
+ const MediaContentDescription* vcd2 =
+ offer->contents()[1].media_description();
auto video_codecs = MAKE_VECTOR(kVideoCodecs1);
EXPECT_EQ(video_codecs, vcd1->codecs());
EXPECT_EQ(video_codecs, vcd2->codecs());
@@ -4443,8 +4431,8 @@
vcd1->set_codecs(video_codecs_reverse);
std::unique_ptr<SessionDescription> updated_offer(
f1_.CreateOfferOrError(opts, offer.get()).MoveValue());
- vcd1 = updated_offer->contents()[0].media_description()->as_video();
- vcd2 = updated_offer->contents()[1].media_description()->as_video();
+ vcd1 = updated_offer->contents()[0].media_description();
+ vcd2 = updated_offer->contents()[1].media_description();
// The video codec preference order should be respected.
EXPECT_EQ(video_codecs_reverse, vcd1->codecs());
EXPECT_EQ(video_codecs, vcd2->codecs());
@@ -4466,10 +4454,9 @@
f1_.CreateOfferOrError(opts, nullptr).MoveValue();
ASSERT_TRUE(offer);
ASSERT_EQ(2u, offer->contents().size());
- VideoContentDescription* vcd1 =
- offer->contents()[0].media_description()->as_video();
- const VideoContentDescription* vcd2 =
- offer->contents()[1].media_description()->as_video();
+ MediaContentDescription* vcd1 = offer->contents()[0].media_description();
+ const MediaContentDescription* vcd2 =
+ offer->contents()[1].media_description();
auto video_codecs = MAKE_VECTOR(kVideoCodecs1);
EXPECT_EQ(video_codecs, vcd1->codecs());
EXPECT_EQ(video_codecs, vcd2->codecs());
@@ -4480,8 +4467,8 @@
vcd1->set_codecs(video_codecs_reverse);
std::unique_ptr<SessionDescription> answer =
f1_.CreateAnswerOrError(offer.get(), opts, nullptr).MoveValue();
- vcd1 = answer->contents()[0].media_description()->as_video();
- vcd2 = answer->contents()[1].media_description()->as_video();
+ vcd1 = answer->contents()[0].media_description();
+ vcd2 = answer->contents()[1].media_description();
// The video codec preference order should be respected.
EXPECT_EQ(video_codecs_reverse, vcd1->codecs());
EXPECT_EQ(video_codecs, vcd2->codecs());
@@ -4524,8 +4511,8 @@
std::unique_ptr<SessionDescription> offer =
f1_.CreateOfferOrError(opts, nullptr).MoveValue();
ASSERT_TRUE(offer);
- auto offer_acd = offer->contents()[0].media_description()->as_audio();
- auto offer_vcd = offer->contents()[1].media_description()->as_video();
+ auto offer_acd = offer->contents()[0].media_description();
+ auto offer_vcd = offer->contents()[1].media_description();
std::string value;
EXPECT_TRUE(offer_acd->codecs()[0].GetParam(audio_param_name, &value));
EXPECT_EQ(audio_value1, value);
@@ -4535,8 +4522,8 @@
std::unique_ptr<SessionDescription> answer =
f2_.CreateAnswerOrError(offer.get(), opts, nullptr).MoveValue();
ASSERT_TRUE(answer);
- auto answer_acd = answer->contents()[0].media_description()->as_audio();
- auto answer_vcd = answer->contents()[1].media_description()->as_video();
+ auto answer_acd = answer->contents()[0].media_description();
+ auto answer_vcd = answer->contents()[1].media_description();
// Use the parameters from the local codecs.
EXPECT_TRUE(answer_acd->codecs()[0].GetParam(audio_param_name, &value));
EXPECT_EQ(audio_value2, value);
@@ -4581,7 +4568,7 @@
// Answer should have one negotiated codec with packetization-mode=1 using the
// offered payload type.
ASSERT_EQ(1u, answer->contents().size());
- auto answer_vcd = answer->contents()[0].media_description()->as_video();
+ auto answer_vcd = answer->contents()[0].media_description();
ASSERT_EQ(1u, answer_vcd->codecs().size());
auto answer_codec = answer_vcd->codecs()[0];
EXPECT_EQ(h264_pm1.id, answer_codec.id);
@@ -4640,8 +4627,8 @@
ASSERT_TRUE(vc);
EXPECT_FALSE(ac->rejected); // the offer is accepted
EXPECT_FALSE(vc->rejected);
- const AudioContentDescription* acd = ac->media_description()->as_audio();
- const VideoContentDescription* vcd = vc->media_description()->as_video();
+ const MediaContentDescription* acd = ac->media_description();
+ const MediaContentDescription* vcd = vc->media_description();
EXPECT_EQ(GetParam(), acd->protocol());
EXPECT_EQ(GetParam(), vcd->protocol());
}
@@ -4753,7 +4740,7 @@
// send nor receive audio. The checks are still in place if at some point
// we'd instead create an inactive stream.
if (ac) {
- AudioContentDescription* acd = ac->media_description()->as_audio();
+ MediaContentDescription* acd = ac->media_description();
// sendrecv and inactive should both present lists as if the channel was
// to be used for sending and receiving. Inactive essentially means it
// might eventually be used anything, but we don't know more at this
@@ -4872,7 +4859,7 @@
// we'd instead create an inactive stream.
if (ac) {
ASSERT_EQ(MEDIA_TYPE_AUDIO, ac->media_description()->type());
- const AudioContentDescription* acd = ac->media_description()->as_audio();
+ const MediaContentDescription* acd = ac->media_description();
std::vector<AudioCodec> target_codecs;
// For offers with sendrecv or inactive, we should never reply with more
diff --git a/pc/peer_connection_integrationtest.cc b/pc/peer_connection_integrationtest.cc
index 029046e..7e3da9b 100644
--- a/pc/peer_connection_integrationtest.cc
+++ b/pc/peer_connection_integrationtest.cc
@@ -1086,11 +1086,7 @@
}),
extensions.end());
media->set_rtp_header_extensions(extensions);
- cricket::VideoContentDescription* video = media->as_video();
- ASSERT_TRUE(video != nullptr);
- std::vector<cricket::VideoCodec> codecs = {
- cricket::CreateVideoCodec(pt++, "VP8")};
- video->set_codecs(codecs);
+ media->set_codecs({cricket::CreateVideoCodec(pt++, "VP8")});
}
}
@@ -3757,11 +3753,10 @@
// codecs.
caller()->SetGeneratedSdpMunger([](cricket::SessionDescription* desc) {
for (ContentInfo& content : desc->contents()) {
- cricket::AudioContentDescription* media =
- content.media_description()->as_audio();
- std::vector<cricket::AudioCodec> codecs = media->codecs();
- std::vector<cricket::AudioCodec> codecs_out;
- for (cricket::AudioCodec codec : codecs) {
+ cricket::MediaContentDescription* media = content.media_description();
+ std::vector<cricket::Codec> codecs = media->codecs();
+ std::vector<cricket::Codec> codecs_out;
+ for (cricket::Codec codec : codecs) {
if (codec.name == "opus") {
codec.AddFeedbackParam(cricket::FeedbackParam(
cricket::kRtcpFbParamNack, cricket::kParamValueEmpty));
@@ -3808,11 +3803,10 @@
// codecs.
caller()->SetGeneratedSdpMunger([](cricket::SessionDescription* desc) {
for (ContentInfo& content : desc->contents()) {
- cricket::VideoContentDescription* media =
- content.media_description()->as_video();
- std::vector<cricket::VideoCodec> codecs = media->codecs();
- std::vector<cricket::VideoCodec> codecs_out;
- for (cricket::VideoCodec codec : codecs) {
+ cricket::MediaContentDescription* media = content.media_description();
+ std::vector<cricket::Codec> codecs = media->codecs();
+ std::vector<cricket::Codec> codecs_out;
+ for (cricket::Codec codec : codecs) {
if (codec.name == "VP8") {
ASSERT_TRUE(codec.HasFeedbackParam(cricket::FeedbackParam(
cricket::kRtcpFbParamNack, cricket::kParamValueEmpty)));
diff --git a/pc/peer_connection_interface_unittest.cc b/pc/peer_connection_interface_unittest.cc
index c057e55..5ee9881 100644
--- a/pc/peer_connection_interface_unittest.cc
+++ b/pc/peer_connection_interface_unittest.cc
@@ -1227,8 +1227,7 @@
bool HasCNCodecs(const cricket::ContentInfo* content) {
RTC_DCHECK(content);
RTC_DCHECK(content->media_description());
- for (const cricket::AudioCodec& codec :
- content->media_description()->as_audio()->codecs()) {
+ for (const cricket::Codec& codec : content->media_description()->codecs()) {
if (codec.name == "CN") {
return true;
}
diff --git a/pc/peer_connection_media_unittest.cc b/pc/peer_connection_media_unittest.cc
index 796520f..387094c 100644
--- a/pc/peer_connection_media_unittest.cc
+++ b/pc/peer_connection_media_unittest.cc
@@ -1638,7 +1638,6 @@
auto codecs = offer->description()
->contents()[0]
.media_description()
- ->as_audio()
->codecs();
EXPECT_TRUE(CompareCodecs(sender_audio_codecs, codecs));
}
@@ -1661,7 +1660,6 @@
auto codecs = offer->description()
->contents()[0]
.media_description()
- ->as_audio()
->codecs();
EXPECT_TRUE(CompareCodecs(sender_audio_codecs, codecs));
}
@@ -1733,7 +1731,6 @@
auto codecs = offer->description()
->contents()[0]
.media_description()
- ->as_video()
->codecs();
EXPECT_TRUE(CompareCodecs(sender_video_codecs, codecs));
}
@@ -1757,7 +1754,6 @@
auto codecs = offer->description()
->contents()[0]
.media_description()
- ->as_video()
->codecs();
EXPECT_TRUE(CompareCodecs(sender_video_codecs, codecs));
}
@@ -1786,7 +1782,6 @@
auto codecs = offer->description()
->contents()[0]
.media_description()
- ->as_video()
->codecs();
EXPECT_TRUE(CompareCodecs(single_codec, codecs));
}
@@ -1831,7 +1826,6 @@
auto codecs = offer->description()
->contents()[0]
.media_description()
- ->as_video()
->codecs();
EXPECT_TRUE(CompareCodecs(video_codecs_vpx_rtx, codecs));
@@ -1878,7 +1872,6 @@
auto codecs = offer->description()
->contents()[0]
.media_description()
- ->as_video()
->codecs();
EXPECT_EQ(codecs.size(), 2u); // VP8, VP9
@@ -1903,7 +1896,6 @@
auto recv_codecs = answer->description()
->contents()[0]
.media_description()
- ->as_video()
->codecs();
EXPECT_EQ(recv_codecs.size(), 1u); // VP8
}
@@ -1951,7 +1943,6 @@
auto codecs = offer->description()
->contents()[0]
.media_description()
- ->as_video()
->codecs();
EXPECT_EQ(codecs.size(), 2u); // VP9, VP8
EXPECT_TRUE(CompareCodecs(video_codecs_vpx, codecs));
@@ -1966,7 +1957,6 @@
auto recv_codecs = answer->description()
->contents()[0]
.media_description()
- ->as_video()
->codecs();
EXPECT_TRUE(CompareCodecs(video_codecs_vpx_reverse, recv_codecs));
diff --git a/pc/peer_connection_signaling_unittest.cc b/pc/peer_connection_signaling_unittest.cc
index aeba7ef..190fb38 100644
--- a/pc/peer_connection_signaling_unittest.cc
+++ b/pc/peer_connection_signaling_unittest.cc
@@ -984,13 +984,10 @@
auto answer = caller->CreateAnswer();
ASSERT_EQ(answer->description()->contents().size(), 1u);
- ASSERT_NE(
- answer->description()->contents()[0].media_description()->as_video(),
- nullptr);
+ ASSERT_NE(answer->description()->contents()[0].media_description(), nullptr);
auto codecs = answer->description()
->contents()[0]
.media_description()
- ->as_video()
->codecs();
ASSERT_EQ(codecs.size(), 2u);
EXPECT_EQ(codecs[1].name, "flexfec-03");
@@ -1040,13 +1037,10 @@
auto answer = caller->CreateAnswer();
ASSERT_EQ(answer->description()->contents().size(), 1u);
- ASSERT_NE(
- answer->description()->contents()[0].media_description()->as_video(),
- nullptr);
+ ASSERT_NE(answer->description()->contents()[0].media_description(), nullptr);
auto codecs = answer->description()
->contents()[0]
.media_description()
- ->as_video()
->codecs();
ASSERT_EQ(codecs.size(), 2u);
EXPECT_EQ(codecs[1].name, "flexfec-03");
@@ -1059,7 +1053,6 @@
auto offer_codecs = offer->description()
->contents()[0]
.media_description()
- ->as_video()
->codecs();
auto flexfec_it = std::find_if(
offer_codecs.begin(), offer_codecs.end(),
@@ -1353,7 +1346,6 @@
auto codecs = reoffer->description()
->contents()[0]
.media_description()
- ->as_video()
->codecs();
ASSERT_GT(codecs.size(), 2u);
EXPECT_EQ(codecs[0].name, "VP8");
diff --git a/pc/sdp_offer_answer.cc b/pc/sdp_offer_answer.cc
index 04d1aff..b61fbf5 100644
--- a/pc/sdp_offer_answer.cc
+++ b/pc/sdp_offer_answer.cc
@@ -565,22 +565,9 @@
continue;
}
const auto type = media_description->type();
- if (type == cricket::MEDIA_TYPE_AUDIO) {
- RTC_DCHECK(media_description->as_audio());
- for (const auto& codec : media_description->as_audio()->codecs()) {
- if (!cricket::UsedPayloadTypes::IsIdValid(
- codec, media_description->rtcp_mux())) {
- LOG_AND_RETURN_ERROR(
- RTCErrorType::INVALID_PARAMETER,
- "The media section with MID='" + content.mid() +
- "' used an invalid payload type " + rtc::ToString(codec.id) +
- " for codec '" + codec.name + ", rtcp-mux:" +
- (media_description->rtcp_mux() ? "enabled" : "disabled"));
- }
- }
- } else if (type == cricket::MEDIA_TYPE_VIDEO) {
- RTC_DCHECK(media_description->as_video());
- for (const auto& codec : media_description->as_video()->codecs()) {
+ if (type == cricket::MEDIA_TYPE_AUDIO ||
+ type == cricket::MEDIA_TYPE_VIDEO) {
+ for (const auto& codec : media_description->codecs()) {
if (!cricket::UsedPayloadTypes::IsIdValid(
codec, media_description->rtcp_mux())) {
LOG_AND_RETURN_ERROR(
@@ -1887,8 +1874,8 @@
if (audio_content->rejected) {
RemoveSenders(cricket::MEDIA_TYPE_AUDIO);
} else {
- const cricket::AudioContentDescription* audio_desc =
- audio_content->media_description()->as_audio();
+ const cricket::MediaContentDescription* audio_desc =
+ audio_content->media_description();
UpdateLocalSenders(audio_desc->streams(), audio_desc->type());
}
}
@@ -1899,8 +1886,8 @@
if (video_content->rejected) {
RemoveSenders(cricket::MEDIA_TYPE_VIDEO);
} else {
- const cricket::VideoContentDescription* video_desc =
- video_content->media_description()->as_video();
+ const cricket::MediaContentDescription* video_desc =
+ video_content->media_description();
UpdateLocalSenders(video_desc->streams(), video_desc->type());
}
}
@@ -5365,44 +5352,40 @@
// Ignore transceivers that are not receiving.
continue;
}
- switch (content_info.media_description()->type()) {
- case cricket::MediaType::MEDIA_TYPE_AUDIO: {
- if (!mid_header_extension_missing_audio) {
- mid_header_extension_missing_audio =
- !ContentHasHeaderExtension(content_info, RtpExtension::kMidUri);
- }
- const cricket::AudioContentDescription* audio_desc =
- content_info.media_description()->as_audio();
- for (const cricket::AudioCodec& audio : audio_desc->codecs()) {
- if (payload_types->audio_payload_types.count(audio.id)) {
+ const cricket::MediaType media_type =
+ content_info.media_description()->type();
+ if (media_type == cricket::MediaType::MEDIA_TYPE_AUDIO ||
+ media_type == cricket::MediaType::MEDIA_TYPE_VIDEO) {
+ if (media_type == cricket::MediaType::MEDIA_TYPE_AUDIO &&
+ !mid_header_extension_missing_audio) {
+ mid_header_extension_missing_audio =
+ !ContentHasHeaderExtension(content_info, RtpExtension::kMidUri);
+ } else if (media_type == cricket::MEDIA_TYPE_VIDEO &&
+ !mid_header_extension_missing_video) {
+ mid_header_extension_missing_video =
+ !ContentHasHeaderExtension(content_info, RtpExtension::kMidUri);
+ }
+ const cricket::MediaContentDescription* media_desc =
+ content_info.media_description();
+ for (const cricket::Codec& codec : media_desc->codecs()) {
+ if (media_type == cricket::MediaType::MEDIA_TYPE_AUDIO) {
+ if (payload_types->audio_payload_types.count(codec.id)) {
// Two m= sections are using the same payload type, thus demuxing
// by payload type is not possible.
- payload_types->pt_demuxing_possible_audio = false;
+ if (media_type == cricket::MediaType::MEDIA_TYPE_AUDIO) {
+ payload_types->pt_demuxing_possible_audio = false;
+ }
}
- payload_types->audio_payload_types.insert(audio.id);
- }
- break;
- }
- case cricket::MediaType::MEDIA_TYPE_VIDEO: {
- if (!mid_header_extension_missing_video) {
- mid_header_extension_missing_video =
- !ContentHasHeaderExtension(content_info, RtpExtension::kMidUri);
- }
- const cricket::VideoContentDescription* video_desc =
- content_info.media_description()->as_video();
- for (const cricket::VideoCodec& video : video_desc->codecs()) {
- if (payload_types->video_payload_types.count(video.id)) {
+ payload_types->audio_payload_types.insert(codec.id);
+ } else if (media_type == cricket::MEDIA_TYPE_VIDEO) {
+ if (payload_types->video_payload_types.count(codec.id)) {
// Two m= sections are using the same payload type, thus demuxing
// by payload type is not possible.
payload_types->pt_demuxing_possible_video = false;
}
- payload_types->video_payload_types.insert(video.id);
+ payload_types->video_payload_types.insert(codec.id);
}
- break;
}
- default:
- // Ignore data channels.
- continue;
}
}
diff --git a/pc/sdp_offer_answer_unittest.cc b/pc/sdp_offer_answer_unittest.cc
index 9a44360..f158feb 100644
--- a/pc/sdp_offer_answer_unittest.cc
+++ b/pc/sdp_offer_answer_unittest.cc
@@ -990,8 +990,7 @@
auto offer = pc->CreateOffer();
ASSERT_EQ(offer->description()->contents().size(), 1u);
- auto* audio =
- offer->description()->contents()[0].media_description()->as_audio();
+ auto* audio = offer->description()->contents()[0].media_description();
ASSERT_GT(audio->codecs().size(), 0u);
EXPECT_TRUE(audio->rtcp_mux());
auto codecs = audio->codecs();
diff --git a/pc/webrtc_sdp_unittest.cc b/pc/webrtc_sdp_unittest.cc
index 2c43c35..ae26ba0 100644
--- a/pc/webrtc_sdp_unittest.cc
+++ b/pc/webrtc_sdp_unittest.cc
@@ -1316,8 +1316,9 @@
return video;
}
- template <class MCD>
- void CompareMediaContentDescription(const MCD* cd1, const MCD* cd2) {
+ void CompareMediaContentDescription(
+ const cricket::MediaContentDescription* cd1,
+ const cricket::MediaContentDescription* cd2) {
// type
EXPECT_EQ(cd1->type(), cd2->type());
@@ -1427,20 +1428,14 @@
ASSERT_EQ(IsAudioContent(&c1), IsAudioContent(&c2));
if (IsAudioContent(&c1)) {
- const AudioContentDescription* acd1 =
- c1.media_description()->as_audio();
- const AudioContentDescription* acd2 =
- c2.media_description()->as_audio();
- CompareMediaContentDescription<AudioContentDescription>(acd1, acd2);
+ CompareMediaContentDescription(c1.media_description(),
+ c2.media_description());
}
ASSERT_EQ(IsVideoContent(&c1), IsVideoContent(&c2));
if (IsVideoContent(&c1)) {
- const VideoContentDescription* vcd1 =
- c1.media_description()->as_video();
- const VideoContentDescription* vcd2 =
- c2.media_description()->as_video();
- CompareMediaContentDescription<VideoContentDescription>(vcd1, vcd2);
+ CompareMediaContentDescription(c1.media_description(),
+ c2.media_description());
}
ASSERT_EQ(IsDataContent(&c1), IsDataContent(&c2));
@@ -5015,7 +5010,7 @@
EXPECT_TRUE(SdpDeserialize(sdp, &jdesc));
ASSERT_EQ(1u, jdesc.description()->contents().size());
const auto content = jdesc.description()->contents()[0];
- const auto* audio_description = content.media_description()->as_audio();
+ const auto* audio_description = content.media_description();
ASSERT_NE(audio_description, nullptr);
const auto& extensions = audio_description->rtp_header_extensions();
ASSERT_EQ(1u, extensions.size());
diff --git a/test/peer_scenario/scenario_connection.cc b/test/peer_scenario/scenario_connection.cc
index 66eca27..2c7a589 100644
--- a/test/peer_scenario/scenario_connection.cc
+++ b/test/peer_scenario/scenario_connection.cc
@@ -177,17 +177,8 @@
RTC_CHECK(res.ok()) << res.message();
RtpDemuxerCriteria criteria;
for (const auto& content : remote_description_->description()->contents()) {
- if (content.media_description()->as_audio()) {
- for (const auto& codec :
- content.media_description()->as_audio()->codecs()) {
- criteria.payload_types().insert(codec.id);
- }
- }
- if (content.media_description()->as_video()) {
- for (const auto& codec :
- content.media_description()->as_video()->codecs()) {
- criteria.payload_types().insert(codec.id);
- }
+ for (const auto& codec : content.media_description()->codecs()) {
+ criteria.payload_types().insert(codec.id);
}
}