diff options
author | Stefan Holmer <stefan@webrtc.org> | 2015-12-07 10:45:43 +0100 |
---|---|---|
committer | Stefan Holmer <stefan@webrtc.org> | 2015-12-07 09:45:49 +0000 |
commit | 9d69c3f4d99240c27d997c37950b561605d403bd (patch) | |
tree | 4f0e92d5b0272c55a0df15b1bd4dd9daa200ab7e /talk/media | |
parent | b86d4e4a8dec1eb1b801244a2a97cda66f561d8e (diff) | |
download | webrtc-9d69c3f4d99240c27d997c37950b561605d403bd.tar.gz |
Return a copy of the supported RTP header extensions instead of a reference.
This also renames the method to better reflect what it does.
BUG=webrtc:5187
R=pbos@webrtc.org, pthatcher@webrtc.org
Review URL: https://codereview.webrtc.org/1486123002 .
Cr-Commit-Position: refs/heads/master@{#10910}
Diffstat (limited to 'talk/media')
-rw-r--r-- | talk/media/base/fakemediaengine.h | 8 | ||||
-rw-r--r-- | talk/media/base/mediaengine.h | 18 | ||||
-rw-r--r-- | talk/media/webrtc/webrtcvideoengine2.cc | 34 | ||||
-rw-r--r-- | talk/media/webrtc/webrtcvideoengine2.h | 3 | ||||
-rw-r--r-- | talk/media/webrtc/webrtcvideoengine2_unittest.cc | 41 | ||||
-rw-r--r-- | talk/media/webrtc/webrtcvoiceengine.cc | 28 | ||||
-rw-r--r-- | talk/media/webrtc/webrtcvoiceengine.h | 3 | ||||
-rw-r--r-- | talk/media/webrtc/webrtcvoiceengine_unittest.cc | 8 |
8 files changed, 69 insertions, 74 deletions
diff --git a/talk/media/base/fakemediaengine.h b/talk/media/base/fakemediaengine.h index bc454e5b9f..ab0c5eb1ff 100644 --- a/talk/media/base/fakemediaengine.h +++ b/talk/media/base/fakemediaengine.h @@ -694,12 +694,10 @@ class FakeBaseEngine { fail_create_channel_(false) {} void set_fail_create_channel(bool fail) { fail_create_channel_ = fail; } - const std::vector<RtpHeaderExtension>& rtp_header_extensions() const { - return rtp_header_extensions_; - } + RtpCapabilities GetCapabilities() const { return capabilities_; } void set_rtp_header_extensions( const std::vector<RtpHeaderExtension>& extensions) { - rtp_header_extensions_ = extensions; + capabilities_.header_extensions = extensions; } protected: @@ -708,7 +706,7 @@ class FakeBaseEngine { // TODO(thaloun): Replace with explicit checks of before & after values. bool options_changed_; bool fail_create_channel_; - std::vector<RtpHeaderExtension> rtp_header_extensions_; + RtpCapabilities capabilities_; }; class FakeVoiceEngine : public FakeBaseEngine { diff --git a/talk/media/base/mediaengine.h b/talk/media/base/mediaengine.h index d39f2b45e6..c31fd72c84 100644 --- a/talk/media/base/mediaengine.h +++ b/talk/media/base/mediaengine.h @@ -57,6 +57,10 @@ namespace cricket { class VideoCapturer; +struct RtpCapabilities { + std::vector<RtpHeaderExtension> header_extensions; +}; + // MediaEngineInterface is an abstraction of a media engine which can be // subclassed to support different media componentry backends. // It supports voice and video operations in the same class to facilitate @@ -108,11 +112,9 @@ class MediaEngineInterface { virtual int GetInputLevel() = 0; virtual const std::vector<AudioCodec>& audio_codecs() = 0; - virtual const std::vector<RtpHeaderExtension>& - audio_rtp_header_extensions() = 0; + virtual RtpCapabilities GetAudioCapabilities() = 0; virtual const std::vector<VideoCodec>& video_codecs() = 0; - virtual const std::vector<RtpHeaderExtension>& - video_rtp_header_extensions() = 0; + virtual RtpCapabilities GetVideoCapabilities() = 0; // Starts AEC dump using existing file. virtual bool StartAecDump(rtc::PlatformFile file) = 0; @@ -202,14 +204,14 @@ class CompositeMediaEngine : public MediaEngineInterface { virtual const std::vector<AudioCodec>& audio_codecs() { return voice_.codecs(); } - virtual const std::vector<RtpHeaderExtension>& audio_rtp_header_extensions() { - return voice_.rtp_header_extensions(); + virtual RtpCapabilities GetAudioCapabilities() { + return voice_.GetCapabilities(); } virtual const std::vector<VideoCodec>& video_codecs() { return video_.codecs(); } - virtual const std::vector<RtpHeaderExtension>& video_rtp_header_extensions() { - return video_.rtp_header_extensions(); + virtual RtpCapabilities GetVideoCapabilities() { + return video_.GetCapabilities(); } virtual bool StartAecDump(rtc::PlatformFile file) { diff --git a/talk/media/webrtc/webrtcvideoengine2.cc b/talk/media/webrtc/webrtcvideoengine2.cc index 844b118527..e84cdab60d 100644 --- a/talk/media/webrtc/webrtcvideoengine2.cc +++ b/talk/media/webrtc/webrtcvideoengine2.cc @@ -488,20 +488,6 @@ WebRtcVideoEngine2::WebRtcVideoEngine2() external_encoder_factory_(NULL) { LOG(LS_INFO) << "WebRtcVideoEngine2::WebRtcVideoEngine2()"; video_codecs_ = GetSupportedCodecs(); - rtp_header_extensions_.push_back( - RtpHeaderExtension(kRtpTimestampOffsetHeaderExtension, - kRtpTimestampOffsetHeaderExtensionDefaultId)); - rtp_header_extensions_.push_back( - RtpHeaderExtension(kRtpAbsoluteSenderTimeHeaderExtension, - kRtpAbsoluteSenderTimeHeaderExtensionDefaultId)); - rtp_header_extensions_.push_back( - RtpHeaderExtension(kRtpVideoRotationHeaderExtension, - kRtpVideoRotationHeaderExtensionDefaultId)); - if (webrtc::field_trial::FindFullName("WebRTC-SendSideBwe") == "Enabled") { - rtp_header_extensions_.push_back(RtpHeaderExtension( - kRtpTransportSequenceNumberHeaderExtension, - kRtpTransportSequenceNumberHeaderExtensionDefaultId)); - } } WebRtcVideoEngine2::~WebRtcVideoEngine2() { @@ -549,9 +535,23 @@ const std::vector<VideoCodec>& WebRtcVideoEngine2::codecs() const { return video_codecs_; } -const std::vector<RtpHeaderExtension>& -WebRtcVideoEngine2::rtp_header_extensions() const { - return rtp_header_extensions_; +RtpCapabilities WebRtcVideoEngine2::GetCapabilities() const { + RtpCapabilities capabilities; + capabilities.header_extensions.push_back( + RtpHeaderExtension(kRtpTimestampOffsetHeaderExtension, + kRtpTimestampOffsetHeaderExtensionDefaultId)); + capabilities.header_extensions.push_back( + RtpHeaderExtension(kRtpAbsoluteSenderTimeHeaderExtension, + kRtpAbsoluteSenderTimeHeaderExtensionDefaultId)); + capabilities.header_extensions.push_back( + RtpHeaderExtension(kRtpVideoRotationHeaderExtension, + kRtpVideoRotationHeaderExtensionDefaultId)); + if (webrtc::field_trial::FindFullName("WebRTC-SendSideBwe") == "Enabled") { + capabilities.header_extensions.push_back(RtpHeaderExtension( + kRtpTransportSequenceNumberHeaderExtension, + kRtpTransportSequenceNumberHeaderExtensionDefaultId)); + } + return capabilities; } void WebRtcVideoEngine2::SetExternalDecoderFactory( diff --git a/talk/media/webrtc/webrtcvideoengine2.h b/talk/media/webrtc/webrtcvideoengine2.h index c5dc88c034..e6e26e7123 100644 --- a/talk/media/webrtc/webrtcvideoengine2.h +++ b/talk/media/webrtc/webrtcvideoengine2.h @@ -118,7 +118,7 @@ class WebRtcVideoEngine2 { const VideoOptions& options); const std::vector<VideoCodec>& codecs() const; - const std::vector<RtpHeaderExtension>& rtp_header_extensions() const; + RtpCapabilities GetCapabilities() const; // Set a WebRtcVideoDecoderFactory for external decoding. Video engine does // not take the ownership of |decoder_factory|. The caller needs to make sure @@ -143,7 +143,6 @@ class WebRtcVideoEngine2 { std::vector<VideoCodec> GetSupportedCodecs() const; std::vector<VideoCodec> video_codecs_; - std::vector<RtpHeaderExtension> rtp_header_extensions_; bool initialized_; diff --git a/talk/media/webrtc/webrtcvideoengine2_unittest.cc b/talk/media/webrtc/webrtcvideoengine2_unittest.cc index 832c4d0623..1de27546be 100644 --- a/talk/media/webrtc/webrtcvideoengine2_unittest.cc +++ b/talk/media/webrtc/webrtcvideoengine2_unittest.cc @@ -242,11 +242,11 @@ TEST_F(WebRtcVideoEngine2Test, DefaultRtxCodecHasAssociatedPayloadTypeSet) { } TEST_F(WebRtcVideoEngine2Test, SupportsTimestampOffsetHeaderExtension) { - std::vector<RtpHeaderExtension> extensions = engine_.rtp_header_extensions(); - ASSERT_FALSE(extensions.empty()); - for (size_t i = 0; i < extensions.size(); ++i) { - if (extensions[i].uri == kRtpTimestampOffsetHeaderExtension) { - EXPECT_EQ(kRtpTimestampOffsetHeaderExtensionDefaultId, extensions[i].id); + RtpCapabilities capabilities = engine_.GetCapabilities(); + ASSERT_FALSE(capabilities.header_extensions.empty()); + for (const RtpHeaderExtension& extension : capabilities.header_extensions) { + if (extension.uri == kRtpTimestampOffsetHeaderExtension) { + EXPECT_EQ(kRtpTimestampOffsetHeaderExtensionDefaultId, extension.id); return; } } @@ -254,12 +254,11 @@ TEST_F(WebRtcVideoEngine2Test, SupportsTimestampOffsetHeaderExtension) { } TEST_F(WebRtcVideoEngine2Test, SupportsAbsoluteSenderTimeHeaderExtension) { - std::vector<RtpHeaderExtension> extensions = engine_.rtp_header_extensions(); - ASSERT_FALSE(extensions.empty()); - for (size_t i = 0; i < extensions.size(); ++i) { - if (extensions[i].uri == kRtpAbsoluteSenderTimeHeaderExtension) { - EXPECT_EQ(kRtpAbsoluteSenderTimeHeaderExtensionDefaultId, - extensions[i].id); + RtpCapabilities capabilities = engine_.GetCapabilities(); + ASSERT_FALSE(capabilities.header_extensions.empty()); + for (const RtpHeaderExtension& extension : capabilities.header_extensions) { + if (extension.uri == kRtpAbsoluteSenderTimeHeaderExtension) { + EXPECT_EQ(kRtpAbsoluteSenderTimeHeaderExtensionDefaultId, extension.id); return; } } @@ -274,12 +273,12 @@ class WebRtcVideoEngine2WithSendSideBweTest : public WebRtcVideoEngine2Test { TEST_F(WebRtcVideoEngine2WithSendSideBweTest, SupportsTransportSequenceNumberHeaderExtension) { - std::vector<RtpHeaderExtension> extensions = engine_.rtp_header_extensions(); - ASSERT_FALSE(extensions.empty()); - for (size_t i = 0; i < extensions.size(); ++i) { - if (extensions[i].uri == kRtpTransportSequenceNumberHeaderExtension) { + RtpCapabilities capabilities = engine_.GetCapabilities(); + ASSERT_FALSE(capabilities.header_extensions.empty()); + for (const RtpHeaderExtension& extension : capabilities.header_extensions) { + if (extension.uri == kRtpTransportSequenceNumberHeaderExtension) { EXPECT_EQ(kRtpTransportSequenceNumberHeaderExtensionDefaultId, - extensions[i].id); + extension.id); return; } } @@ -287,11 +286,11 @@ TEST_F(WebRtcVideoEngine2WithSendSideBweTest, } TEST_F(WebRtcVideoEngine2Test, SupportsVideoRotationHeaderExtension) { - std::vector<RtpHeaderExtension> extensions = engine_.rtp_header_extensions(); - ASSERT_FALSE(extensions.empty()); - for (size_t i = 0; i < extensions.size(); ++i) { - if (extensions[i].uri == kRtpVideoRotationHeaderExtension) { - EXPECT_EQ(kRtpVideoRotationHeaderExtensionDefaultId, extensions[i].id); + RtpCapabilities capabilities = engine_.GetCapabilities(); + ASSERT_FALSE(capabilities.header_extensions.empty()); + for (const RtpHeaderExtension& extension : capabilities.header_extensions) { + if (extension.uri == kRtpVideoRotationHeaderExtension) { + EXPECT_EQ(kRtpVideoRotationHeaderExtensionDefaultId, extension.id); return; } } diff --git a/talk/media/webrtc/webrtcvoiceengine.cc b/talk/media/webrtc/webrtcvoiceengine.cc index 1ffc66b8fa..fd0fc4be17 100644 --- a/talk/media/webrtc/webrtcvoiceengine.cc +++ b/talk/media/webrtc/webrtcvoiceengine.cc @@ -517,18 +517,6 @@ void WebRtcVoiceEngine::Construct() { // Load our audio codec list. codecs_ = WebRtcVoiceCodecs::SupportedCodecs(); - // Load our RTP Header extensions. - rtp_header_extensions_.push_back( - RtpHeaderExtension(kRtpAudioLevelHeaderExtension, - kRtpAudioLevelHeaderExtensionDefaultId)); - rtp_header_extensions_.push_back( - RtpHeaderExtension(kRtpAbsoluteSenderTimeHeaderExtension, - kRtpAbsoluteSenderTimeHeaderExtensionDefaultId)); - if (webrtc::field_trial::FindFullName("WebRTC-SendSideBwe") == "Enabled") { - rtp_header_extensions_.push_back(RtpHeaderExtension( - kRtpTransportSequenceNumberHeaderExtension, - kRtpTransportSequenceNumberHeaderExtensionDefaultId)); - } options_ = GetDefaultEngineOptions(); voe_config_.Set<webrtc::VoicePacing>(new webrtc::VoicePacing(true)); } @@ -1075,10 +1063,20 @@ const std::vector<AudioCodec>& WebRtcVoiceEngine::codecs() { return codecs_; } -const std::vector<RtpHeaderExtension>& -WebRtcVoiceEngine::rtp_header_extensions() const { +RtpCapabilities WebRtcVoiceEngine::GetCapabilities() const { RTC_DCHECK(signal_thread_checker_.CalledOnValidThread()); - return rtp_header_extensions_; + RtpCapabilities capabilities; + capabilities.header_extensions.push_back(RtpHeaderExtension( + kRtpAudioLevelHeaderExtension, kRtpAudioLevelHeaderExtensionDefaultId)); + capabilities.header_extensions.push_back( + RtpHeaderExtension(kRtpAbsoluteSenderTimeHeaderExtension, + kRtpAbsoluteSenderTimeHeaderExtensionDefaultId)); + if (webrtc::field_trial::FindFullName("WebRTC-SendSideBwe") == "Enabled") { + capabilities.header_extensions.push_back(RtpHeaderExtension( + kRtpTransportSequenceNumberHeaderExtension, + kRtpTransportSequenceNumberHeaderExtensionDefaultId)); + } + return capabilities; } int WebRtcVoiceEngine::GetLastEngineError() { diff --git a/talk/media/webrtc/webrtcvoiceengine.h b/talk/media/webrtc/webrtcvoiceengine.h index 89cf25c25f..3222861b21 100644 --- a/talk/media/webrtc/webrtcvoiceengine.h +++ b/talk/media/webrtc/webrtcvoiceengine.h @@ -80,7 +80,7 @@ class WebRtcVoiceEngine final : public webrtc::TraceCallback { int GetInputLevel(); const std::vector<AudioCodec>& codecs(); - const std::vector<RtpHeaderExtension>& rtp_header_extensions() const; + RtpCapabilities GetCapabilities() const; // For tracking WebRtc channels. Needed because we have to pause them // all when switching devices. @@ -140,7 +140,6 @@ class WebRtcVoiceEngine final : public webrtc::TraceCallback { webrtc::AudioDeviceModule* adm_ = nullptr; bool is_dumping_aec_ = false; std::vector<AudioCodec> codecs_; - std::vector<RtpHeaderExtension> rtp_header_extensions_; std::vector<WebRtcVoiceMediaChannel*> channels_; webrtc::AgcConfig default_agc_config_; diff --git a/talk/media/webrtc/webrtcvoiceengine_unittest.cc b/talk/media/webrtc/webrtcvoiceengine_unittest.cc index 1a27a4c5cc..f639e74b5c 100644 --- a/talk/media/webrtc/webrtcvoiceengine_unittest.cc +++ b/talk/media/webrtc/webrtcvoiceengine_unittest.cc @@ -3109,17 +3109,17 @@ TEST_F(WebRtcVoiceEngineTestFake, ConfiguresAudioReceiveStreamRtpExtensions) { } // Set up receive extensions. - const auto& e_exts = engine_.rtp_header_extensions(); + cricket::RtpCapabilities capabilities = engine_.GetCapabilities(); cricket::AudioRecvParameters recv_parameters; - recv_parameters.extensions = e_exts; + recv_parameters.extensions = capabilities.header_extensions; channel_->SetRecvParameters(recv_parameters); EXPECT_EQ(2, call_.GetAudioReceiveStreams().size()); for (uint32_t ssrc : ssrcs) { const auto* s = call_.GetAudioReceiveStream(ssrc); EXPECT_NE(nullptr, s); const auto& s_exts = s->GetConfig().rtp.extensions; - EXPECT_EQ(e_exts.size(), s_exts.size()); - for (const auto& e_ext : e_exts) { + EXPECT_EQ(capabilities.header_extensions.size(), s_exts.size()); + for (const auto& e_ext : capabilities.header_extensions) { for (const auto& s_ext : s_exts) { if (e_ext.id == s_ext.id) { EXPECT_EQ(e_ext.uri, s_ext.name); |