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}
This commit is contained in:
parent
b86d4e4a8d
commit
9d69c3f4d9
@ -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 {
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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(
|
||||
|
||||
@ -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_;
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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() {
|
||||
|
||||
@ -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_;
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -156,7 +156,7 @@ void ChannelManager::GetSupportedAudioCodecs(
|
||||
|
||||
void ChannelManager::GetSupportedAudioRtpHeaderExtensions(
|
||||
RtpHeaderExtensions* ext) const {
|
||||
*ext = media_engine_->audio_rtp_header_extensions();
|
||||
*ext = media_engine_->GetAudioCapabilities().header_extensions;
|
||||
}
|
||||
|
||||
void ChannelManager::GetSupportedVideoCodecs(
|
||||
@ -175,7 +175,7 @@ void ChannelManager::GetSupportedVideoCodecs(
|
||||
|
||||
void ChannelManager::GetSupportedVideoRtpHeaderExtensions(
|
||||
RtpHeaderExtensions* ext) const {
|
||||
*ext = media_engine_->video_rtp_header_extensions();
|
||||
*ext = media_engine_->GetVideoCapabilities().header_extensions;
|
||||
}
|
||||
|
||||
void ChannelManager::GetSupportedDataCodecs(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user