Move media_type to RtpTransceiverInterface
Media type is not part of the WebRTC spec for RtpTransceiver, but it is
handy and the RtpSender/RtpReceiver also have it.
Bug: webrtc:7600
Change-Id: I8350069502588bff478db4dc1318329626dcf9be
Reviewed-on: https://webrtc-review.googlesource.com/50560
Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org>
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21988}
diff --git a/api/rtptransceiverinterface.h b/api/rtptransceiverinterface.h
index 5d74ae1..4106793 100644
--- a/api/rtptransceiverinterface.h
+++ b/api/rtptransceiverinterface.h
@@ -63,6 +63,10 @@
// https://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiver
class RtpTransceiverInterface : public rtc::RefCountInterface {
public:
+ // Media type of the transceiver. Any sender(s)/receiver(s) will have this
+ // type as well.
+ virtual cricket::MediaType media_type() const = 0;
+
// The mid attribute is the mid negotiated and present in the local and
// remote descriptions. Before negotiation is complete, the mid value may be
// null. After rollbacks, the value may change from a non-null value to null.
diff --git a/pc/peerconnection.cc b/pc/peerconnection.cc
index 4ec26fa..e565e57 100644
--- a/pc/peerconnection.cc
+++ b/pc/peerconnection.cc
@@ -774,12 +774,12 @@
// Destroy video channels first since they may have a pointer to a voice
// channel.
for (auto transceiver : transceivers_) {
- if (transceiver->internal()->media_type() == cricket::MEDIA_TYPE_VIDEO) {
+ if (transceiver->media_type() == cricket::MEDIA_TYPE_VIDEO) {
DestroyTransceiverChannel(transceiver);
}
}
for (auto transceiver : transceivers_) {
- if (transceiver->internal()->media_type() == cricket::MEDIA_TYPE_AUDIO) {
+ if (transceiver->media_type() == cricket::MEDIA_TYPE_AUDIO) {
DestroyTransceiverChannel(transceiver);
}
}
@@ -1148,7 +1148,7 @@
RTC_DCHECK(track);
for (auto transceiver : transceivers_) {
if (!transceiver->sender()->track() &&
- cricket::MediaTypeToString(transceiver->internal()->media_type()) ==
+ cricket::MediaTypeToString(transceiver->media_type()) ==
track->kind() &&
!transceiver->internal()->has_ever_been_used_to_send()) {
return transceiver;
@@ -1640,8 +1640,7 @@
rtc::scoped_refptr<RtpTransceiverProxyWithInternal<RtpTransceiver>>>
receiving_transceivers;
for (auto transceiver : transceivers_) {
- if (!transceiver->stopped() &&
- transceiver->internal()->media_type() == media_type &&
+ if (!transceiver->stopped() && transceiver->media_type() == media_type &&
RtpTransceiverDirectionHasRecv(transceiver->direction())) {
receiving_transceivers.push_back(transceiver);
}
@@ -2318,13 +2317,12 @@
}
} else {
if (!channel) {
- if (transceiver->internal()->media_type() == cricket::MEDIA_TYPE_AUDIO) {
+ if (transceiver->media_type() == cricket::MEDIA_TYPE_AUDIO) {
channel = CreateVoiceChannel(
content.name,
GetTransportNameForMediaSection(content.name, bundle_group));
} else {
- RTC_DCHECK_EQ(cricket::MEDIA_TYPE_VIDEO,
- transceiver->internal()->media_type());
+ RTC_DCHECK_EQ(cricket::MEDIA_TYPE_VIDEO, transceiver->media_type());
channel = CreateVideoChannel(
content.name,
GetTransportNameForMediaSection(content.name, bundle_group));
@@ -2425,7 +2423,7 @@
}
}
RTC_DCHECK(transceiver);
- if (transceiver->internal()->media_type() != media_desc->type()) {
+ if (transceiver->media_type() != media_desc->type()) {
LOG_AND_RETURN_ERROR(
RTCErrorType::INVALID_PARAMETER,
"Transceiver type does not match media description type.");
@@ -2471,7 +2469,7 @@
// associated with any m= section and are not stopped, find the first such
// RtpTransceiver.
for (auto transceiver : transceivers_) {
- if (transceiver->internal()->media_type() == media_type &&
+ if (transceiver->media_type() == media_type &&
transceiver->internal()->created_by_addtrack() && !transceiver->mid() &&
!transceiver->stopped()) {
return transceiver;
@@ -2497,7 +2495,7 @@
// Plan B only allows at most one audio and one video section, so use the
// first media section of that type.
return cricket::GetFirstMediaContent(sdesc->description()->contents(),
- transceiver->internal()->media_type());
+ transceiver->media_type());
}
}
@@ -3318,7 +3316,7 @@
transceiver,
const std::string& mid) {
cricket::MediaDescriptionOptions media_description_options(
- transceiver->internal()->media_type(), mid, transceiver->direction(),
+ transceiver->media_type(), mid, transceiver->direction(),
transceiver->stopped());
// This behavior is specified in JSEP. The gist is that:
// 1. The MSID is included if the RtpTransceiver's direction is sendonly or
@@ -3383,10 +3381,9 @@
// rejected in either the local or remote description.
if (had_been_rejected) {
session_options->media_description_options.push_back(
- cricket::MediaDescriptionOptions(
- transceiver->internal()->media_type(), mid,
- RtpTransceiverDirection::kInactive,
- /*stopped=*/true));
+ cricket::MediaDescriptionOptions(transceiver->media_type(), mid,
+ RtpTransceiverDirection::kInactive,
+ /*stopped=*/true));
recycleable_mline_indices.push(i);
} else {
session_options->media_description_options.push_back(
@@ -4083,7 +4080,7 @@
// audio/video transceiver.
RTC_DCHECK(!IsUnifiedPlan());
for (auto transceiver : transceivers_) {
- if (transceiver->internal()->media_type() == cricket::MEDIA_TYPE_AUDIO) {
+ if (transceiver->media_type() == cricket::MEDIA_TYPE_AUDIO) {
return transceiver;
}
}
@@ -4097,7 +4094,7 @@
// audio/video transceiver.
RTC_DCHECK(!IsUnifiedPlan());
for (auto transceiver : transceivers_) {
- if (transceiver->internal()->media_type() == cricket::MEDIA_TYPE_VIDEO) {
+ if (transceiver->media_type() == cricket::MEDIA_TYPE_VIDEO) {
return transceiver;
}
}
@@ -5603,7 +5600,7 @@
const std::string& transport_name =
transceiver->internal()->channel()->transport_name();
media_types_by_transport_name[transport_name].insert(
- transceiver->internal()->media_type());
+ transceiver->media_type());
}
}
if (rtp_data_channel()) {
diff --git a/pc/peerconnection_bundle_unittest.cc b/pc/peerconnection_bundle_unittest.cc
index a6dccd7..116a598 100644
--- a/pc/peerconnection_bundle_unittest.cc
+++ b/pc/peerconnection_bundle_unittest.cc
@@ -79,7 +79,7 @@
auto transceivers =
GetInternalPeerConnection()->GetTransceiversForTesting();
for (auto transceiver : transceivers) {
- if (transceiver->internal()->media_type() == cricket::MEDIA_TYPE_AUDIO) {
+ if (transceiver->media_type() == cricket::MEDIA_TYPE_AUDIO) {
return static_cast<cricket::VoiceChannel*>(
transceiver->internal()->channel());
}
@@ -99,7 +99,7 @@
auto transceivers =
GetInternalPeerConnection()->GetTransceiversForTesting();
for (auto transceiver : transceivers) {
- if (transceiver->internal()->media_type() == cricket::MEDIA_TYPE_VIDEO) {
+ if (transceiver->media_type() == cricket::MEDIA_TYPE_VIDEO) {
return static_cast<cricket::VideoChannel*>(
transceiver->internal()->channel());
}
diff --git a/pc/peerconnection_ice_unittest.cc b/pc/peerconnection_ice_unittest.cc
index 6f6bd73..c1d7551 100644
--- a/pc/peerconnection_ice_unittest.cc
+++ b/pc/peerconnection_ice_unittest.cc
@@ -197,7 +197,7 @@
pc_wrapper_ptr->pc());
PeerConnection* pc = static_cast<PeerConnection*>(pc_proxy->internal());
for (auto transceiver : pc->GetTransceiversForTesting()) {
- if (transceiver->internal()->media_type() == cricket::MEDIA_TYPE_AUDIO) {
+ if (transceiver->media_type() == cricket::MEDIA_TYPE_AUDIO) {
cricket::BaseChannel* channel = transceiver->internal()->channel();
if (channel) {
return channel->rtp_dtls_transport()->ice_transport()->GetIceRole();
diff --git a/pc/peerconnection_jsep_unittest.cc b/pc/peerconnection_jsep_unittest.cc
index 737b0c9..ae51c9e 100644
--- a/pc/peerconnection_jsep_unittest.cc
+++ b/pc/peerconnection_jsep_unittest.cc
@@ -257,12 +257,10 @@
auto transceivers = callee->pc()->GetTransceivers();
ASSERT_EQ(2u, transceivers.size());
- EXPECT_EQ(cricket::MEDIA_TYPE_AUDIO,
- transceivers[0]->receiver()->media_type());
+ EXPECT_EQ(cricket::MEDIA_TYPE_AUDIO, transceivers[0]->media_type());
EXPECT_EQ(caller_audio->mid(), transceivers[0]->mid());
EXPECT_EQ(RtpTransceiverDirection::kRecvOnly, transceivers[0]->direction());
- EXPECT_EQ(cricket::MEDIA_TYPE_VIDEO,
- transceivers[1]->receiver()->media_type());
+ EXPECT_EQ(cricket::MEDIA_TYPE_VIDEO, transceivers[1]->media_type());
EXPECT_EQ(caller_video->mid(), transceivers[1]->mid());
EXPECT_EQ(RtpTransceiverDirection::kRecvOnly, transceivers[1]->direction());
}
@@ -645,9 +643,9 @@
auto callee_transceivers = callee->pc()->GetTransceivers();
ASSERT_EQ(2u, callee_transceivers.size());
EXPECT_EQ(rtc::nullopt, callee_transceivers[0]->mid());
- EXPECT_EQ(first_type_, callee_transceivers[0]->receiver()->media_type());
+ EXPECT_EQ(first_type_, callee_transceivers[0]->media_type());
EXPECT_EQ(second_mid, callee_transceivers[1]->mid());
- EXPECT_EQ(second_type_, callee_transceivers[1]->receiver()->media_type());
+ EXPECT_EQ(second_type_, callee_transceivers[1]->media_type());
// The answer should have only one media section for the new transceiver.
auto answer = callee->CreateAnswer();
diff --git a/pc/peerconnection_rtp_unittest.cc b/pc/peerconnection_rtp_unittest.cc
index f19388f..023ce92 100644
--- a/pc/peerconnection_rtp_unittest.cc
+++ b/pc/peerconnection_rtp_unittest.cc
@@ -462,6 +462,7 @@
auto caller = CreatePeerConnectionWithUnifiedPlan();
auto transceiver = caller->AddTransceiver(cricket::MEDIA_TYPE_AUDIO);
+ EXPECT_EQ(cricket::MEDIA_TYPE_AUDIO, transceiver->media_type());
ASSERT_TRUE(transceiver->sender());
EXPECT_EQ(cricket::MEDIA_TYPE_AUDIO, transceiver->sender()->media_type());
@@ -482,6 +483,7 @@
auto caller = CreatePeerConnectionWithUnifiedPlan();
auto transceiver = caller->AddTransceiver(cricket::MEDIA_TYPE_VIDEO);
+ EXPECT_EQ(cricket::MEDIA_TYPE_VIDEO, transceiver->media_type());
ASSERT_TRUE(transceiver->sender());
EXPECT_EQ(cricket::MEDIA_TYPE_VIDEO, transceiver->sender()->media_type());
diff --git a/pc/rtptransceiver.cc b/pc/rtptransceiver.cc
index ecb8ec8..310c4c4 100644
--- a/pc/rtptransceiver.cc
+++ b/pc/rtptransceiver.cc
@@ -94,7 +94,7 @@
rtc::scoped_refptr<RtpSenderProxyWithInternal<RtpSenderInternal>> sender) {
RTC_DCHECK(!unified_plan_);
RTC_DCHECK(sender);
- RTC_DCHECK_EQ(media_type(), sender->internal()->media_type());
+ RTC_DCHECK_EQ(media_type(), sender->media_type());
RTC_DCHECK(std::find(senders_.begin(), senders_.end(), sender) ==
senders_.end());
senders_.push_back(sender);
@@ -119,7 +119,7 @@
receiver) {
RTC_DCHECK(!unified_plan_);
RTC_DCHECK(receiver);
- RTC_DCHECK_EQ(media_type(), receiver->internal()->media_type());
+ RTC_DCHECK_EQ(media_type(), receiver->media_type());
RTC_DCHECK(std::find(receivers_.begin(), receivers_.end(), receiver) ==
receivers_.end());
receivers_.push_back(receiver);
@@ -152,6 +152,10 @@
return receivers_[0]->internal();
}
+cricket::MediaType RtpTransceiver::media_type() const {
+ return media_type_;
+}
+
rtc::Optional<std::string> RtpTransceiver::mid() const {
return mid_;
}
diff --git a/pc/rtptransceiver.h b/pc/rtptransceiver.h
index 40ab2f0..e44b4ae 100644
--- a/pc/rtptransceiver.h
+++ b/pc/rtptransceiver.h
@@ -68,8 +68,6 @@
receiver);
~RtpTransceiver() override;
- cricket::MediaType media_type() const { return media_type_; }
-
// Returns the Voice/VideoChannel set for this transceiver. May be null if
// the transceiver is not in the currently set local/remote description.
cricket::BaseChannel* channel() const { return channel_; }
@@ -157,6 +155,7 @@
}
// RtpTransceiverInterface implementation.
+ cricket::MediaType media_type() const override;
rtc::Optional<std::string> mid() const override;
rtc::scoped_refptr<RtpSenderInterface> sender() const override;
rtc::scoped_refptr<RtpReceiverInterface> receiver() const override;
@@ -191,6 +190,7 @@
BEGIN_SIGNALING_PROXY_MAP(RtpTransceiver)
PROXY_SIGNALING_THREAD_DESTRUCTOR()
+PROXY_CONSTMETHOD0(cricket::MediaType, media_type);
PROXY_CONSTMETHOD0(rtc::Optional<std::string>, mid);
PROXY_CONSTMETHOD0(rtc::scoped_refptr<RtpSenderInterface>, sender);
PROXY_CONSTMETHOD0(rtc::scoped_refptr<RtpReceiverInterface>, receiver);