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/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;
}
}