Refactoring: Look up codec vendor via RtpTransceiver
This is a necessary step in the process to get codecs to be
specified per media section, not per PeerConnection.
No behavior change expected.
Bug: webrtc:360058654
Change-Id: Ifd78c9bea115e1fa79ee243fb5ccb570559233a1
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/380721
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#44089}
diff --git a/pc/BUILD.gn b/pc/BUILD.gn
index 42b5047..a07b5d6 100644
--- a/pc/BUILD.gn
+++ b/pc/BUILD.gn
@@ -486,7 +486,13 @@
sources = [ "peer_connection_factory_proxy.h" ]
deps = [
":proxy",
+ "../api:audio_options_api",
"../api:libjingle_peerconnection_api",
+ "../api:media_stream_interface",
+ "../api:rtc_error",
+ "../api:rtp_parameters",
+ "../api:scoped_refptr",
+ "//third_party/abseil-cpp/absl/strings:string_view",
]
}
@@ -931,15 +937,32 @@
visibility = [ ":*" ]
sources = [ "peer_connection_internal.h" ]
deps = [
+ ":data_channel_utils",
":jsep_transport_controller",
":peer_connection_message_handler",
":rtp_transceiver",
":rtp_transmission_manager",
":sctp_data_channel",
+ ":session_description",
+ ":transport_stats",
+ ":usage_pattern",
+ "../api:candidate",
+ "../api:field_trials_view",
"../api:libjingle_peerconnection_api",
+ "../api:media_stream_interface",
+ "../api:rtc_error",
+ "../api:rtp_parameters",
+ "../api:scoped_refptr",
"../api/audio:audio_device",
+ "../api/crypto:options",
"../call:call_interfaces",
+ "../call:payload_type_picker",
"../modules/audio_device",
+ "../p2p:port",
+ "../p2p:port_allocator",
+ "../rtc_base:ssl",
+ "../rtc_base:ssl_adapter",
+ "//third_party/abseil-cpp/absl/strings:string_view",
]
}
@@ -1061,11 +1084,13 @@
deps = [
":channel",
":channel_interface",
+ ":codec_vendor",
":connection_context",
":data_channel_controller",
":dtls_transport",
":jsep_transport_controller",
":legacy_stats_collector",
+ ":media_options",
":media_session",
":media_stream",
":media_stream_observer",
@@ -1127,6 +1152,7 @@
"../rtc_base:event_tracer",
"../rtc_base:logging",
"../rtc_base:macromagic",
+ "../rtc_base:rtc_certificate_generator",
"../rtc_base:rtc_operations_chain",
"../rtc_base:ssl",
"../rtc_base:ssl_adapter",
@@ -1226,6 +1252,7 @@
"../api/units:time_delta",
"../api/video:video_codec_constants",
"../call:call_interfaces",
+ "../call:payload_type",
"../call:payload_type_picker",
"../media:codec",
"../media:media_channel",
@@ -1435,7 +1462,9 @@
"webrtc_session_description_factory.h",
]
deps = [
+ ":codec_vendor",
":connection_context",
+ ":media_options",
":media_session",
":sdp_state_provider",
":session_description",
@@ -2107,6 +2136,7 @@
"../api:candidate",
"../api:dtls_transport_interface",
"../api:field_trials",
+ "../api:field_trials_view",
"../api:ice_transport_factory",
"../api:ice_transport_interface",
"../api:libjingle_peerconnection_api",
@@ -2549,6 +2579,7 @@
"../rtc_base:refcount",
"../rtc_base:rtc_base_tests_utils",
"../rtc_base:rtc_certificate_generator",
+ "../rtc_base:rtc_event",
"../rtc_base:rtc_json",
"../rtc_base:safe_conversions",
"../rtc_base:socket_address",
@@ -2564,6 +2595,7 @@
"../rtc_base/synchronization:mutex",
"../rtc_base/third_party/base64",
"../rtc_base/third_party/sigslot",
+ "../system_wrappers",
"../system_wrappers:metrics",
"../test:audio_codec_mocks",
"../test:rtc_expect_death",
diff --git a/pc/codec_vendor.h b/pc/codec_vendor.h
index 28fae16..04f9b6f 100644
--- a/pc/codec_vendor.h
+++ b/pc/codec_vendor.h
@@ -11,6 +11,7 @@
#ifndef PC_CODEC_VENDOR_H_
#define PC_CODEC_VENDOR_H_
+#include <string>
#include <vector>
#include "api/field_trials_view.h"
@@ -117,6 +118,16 @@
TypedCodecVendor video_recv_codecs_;
};
+// A class to assist in looking up data for a codec mapping.
+// Pure virtual to allow implementations that depend on things that
+// codec_vendor.h should not depend on.
+class CodecLookupHelper {
+ public:
+ virtual ~CodecLookupHelper() = default;
+ virtual webrtc::PayloadTypeSuggester* PayloadTypeSuggester() = 0;
+ virtual cricket::CodecVendor* CodecVendor(const std::string& mid) = 0;
+};
+
} // namespace cricket
#endif // PC_CODEC_VENDOR_H_
diff --git a/pc/media_session.cc b/pc/media_session.cc
index 8cd77a6..ec5c85c 100644
--- a/pc/media_session.cc
+++ b/pc/media_session.cc
@@ -27,7 +27,6 @@
#include "api/rtc_error.h"
#include "api/rtp_parameters.h"
#include "api/rtp_transceiver_direction.h"
-#include "call/payload_type.h"
#include "media/base/codec.h"
#include "media/base/codec_list.h"
#include "media/base/media_constants.h"
@@ -684,16 +683,15 @@
bool rtx_enabled,
rtc::UniqueRandomIdGenerator* ssrc_generator,
const TransportDescriptionFactory* transport_desc_factory,
- webrtc::PayloadTypeSuggester* pt_suggester)
+ CodecLookupHelper* codec_lookup_helper)
: ssrc_generator_(ssrc_generator),
transport_desc_factory_(transport_desc_factory),
- pt_suggester_(pt_suggester),
+ codec_lookup_helper_(codec_lookup_helper),
payload_types_in_transport_trial_enabled_(
transport_desc_factory_->trials().IsEnabled(
"WebRTC-PayloadTypesInTransport")) {
RTC_CHECK(transport_desc_factory_);
- codec_vendor_ = std::make_unique<CodecVendor>(
- media_engine, rtx_enabled, transport_desc_factory_->trials());
+ RTC_CHECK(codec_lookup_helper_);
}
RtpHeaderExtensions
@@ -738,12 +736,12 @@
CodecList offer_audio_codecs;
CodecList offer_video_codecs;
- if (codec_vendor_) {
- RTCError error = codec_vendor_->GetCodecsForOffer(
- current_active_contents, offer_audio_codecs, offer_video_codecs);
- if (!error.ok()) {
- return error;
- }
+
+ // TODO: issues.webrtc.org/360058654 - Get codecs when we know the right mid.
+ RTCError error = codec_lookup_helper_->CodecVendor("")->GetCodecsForOffer(
+ current_active_contents, offer_audio_codecs, offer_video_codecs);
+ if (!error.ok()) {
+ return error;
}
AudioVideoRtpHeaderExtensions extensions_with_ids =
@@ -893,13 +891,12 @@
// sections.
CodecList answer_audio_codecs;
CodecList answer_video_codecs;
- if (codec_vendor_) {
- RTCError error = codec_vendor_->GetCodecsForAnswer(
- current_active_contents, *offer, answer_audio_codecs,
- answer_video_codecs);
- if (!error.ok()) {
- return error;
- }
+ // TODO: issues.webrtc.org/360058654 - do this when we have the MID.
+ RTCError error = codec_lookup_helper_->CodecVendor("")->GetCodecsForAnswer(
+ current_active_contents, *offer, answer_audio_codecs,
+ answer_video_codecs);
+ if (!error.ok()) {
+ return error;
}
auto answer = std::make_unique<SessionDescription>();
@@ -1206,10 +1203,11 @@
media_description_options.type == MEDIA_TYPE_VIDEO);
std::vector<Codec> codecs_to_include;
+ std::string mid = media_description_options.mid;
webrtc::RTCErrorOr<std::vector<Codec>> error_or_filtered_codecs =
- codec_vendor_->GetNegotiatedCodecsForOffer(
+ codec_lookup_helper_->CodecVendor(mid)->GetNegotiatedCodecsForOffer(
media_description_options, session_options, current_content,
- *pt_suggester_, codecs);
+ *codec_lookup_helper_->PayloadTypeSuggester(), codecs);
if (!error_or_filtered_codecs.ok()) {
return error_or_filtered_codecs.MoveError();
}
@@ -1365,10 +1363,11 @@
std::vector<Codec> codecs_to_include;
webrtc::RTCErrorOr<std::vector<Codec>> error_or_filtered_codecs =
- codec_vendor_->GetNegotiatedCodecsForAnswer(
- media_description_options, session_options, offer_rtd, answer_rtd,
- current_content, offer_content_description->codecs(), *pt_suggester_,
- codecs);
+ codec_lookup_helper_->CodecVendor(media_description_options.mid)
+ ->GetNegotiatedCodecsForAnswer(
+ media_description_options, session_options, offer_rtd, answer_rtd,
+ current_content, offer_content_description->codecs(),
+ *codec_lookup_helper_->PayloadTypeSuggester(), codecs);
if (!error_or_filtered_codecs.ok()) {
return error_or_filtered_codecs.MoveError();
}
diff --git a/pc/media_session.h b/pc/media_session.h
index 590f933..5c56dd9 100644
--- a/pc/media_session.h
+++ b/pc/media_session.h
@@ -19,8 +19,7 @@
#include "api/media_types.h"
#include "api/rtc_error.h"
-#include "call/payload_type.h"
-#include "media/base/codec.h"
+#include "media/base/codec_list.h"
#include "media/base/stream_params.h"
#include "p2p/base/ice_credentials_iterator.h"
#include "p2p/base/transport_description.h"
@@ -58,7 +57,7 @@
bool rtx_enabled,
rtc::UniqueRandomIdGenerator* ssrc_generator,
const TransportDescriptionFactory* factory,
- webrtc::PayloadTypeSuggester* pt_suggester);
+ CodecLookupHelper* codec_lookup_helper);
RtpHeaderExtensions filtered_rtp_header_extensions(
RtpHeaderExtensions extensions) const;
@@ -79,8 +78,6 @@
const MediaSessionOptions& options,
const SessionDescription* current_description) const;
- CodecVendor* CodecVendorForTesting() { return codec_vendor_.get(); }
-
private:
struct AudioVideoRtpHeaderExtensions {
RtpHeaderExtensions audio;
@@ -188,10 +185,8 @@
ssrc_generator_;
bool enable_encrypted_rtp_header_extensions_ = true;
const TransportDescriptionFactory* transport_desc_factory_;
- // Payoad type tracker interface. Must live longer than this object.
- webrtc::PayloadTypeSuggester* pt_suggester_;
+ CodecLookupHelper* codec_lookup_helper_;
bool payload_types_in_transport_trial_enabled_;
- std::unique_ptr<CodecVendor> codec_vendor_;
};
// Convenience functions.
diff --git a/pc/media_session_unittest.cc b/pc/media_session_unittest.cc
index 2b01a69..fa5b94b 100644
--- a/pc/media_session_unittest.cc
+++ b/pc/media_session_unittest.cc
@@ -26,11 +26,13 @@
#include "api/array_view.h"
#include "api/audio_codecs/audio_format.h"
#include "api/candidate.h"
+#include "api/field_trials_view.h"
#include "api/media_types.h"
#include "api/rtp_parameters.h"
#include "api/rtp_transceiver_direction.h"
#include "api/video_codecs/sdp_video_format.h"
#include "call/fake_payload_type_suggester.h"
+#include "call/payload_type.h"
#include "media/base/codec.h"
#include "media/base/codec_list.h"
#include "media/base/media_constants.h"
@@ -42,6 +44,7 @@
#include "p2p/base/transport_description.h"
#include "p2p/base/transport_description_factory.h"
#include "p2p/base/transport_info.h"
+#include "pc/codec_vendor.h"
#include "pc/media_options.h"
#include "pc/media_protocol_names.h"
#include "pc/rtp_media_utils.h"
@@ -83,6 +86,23 @@
using Candidates = std::vector<Candidate>;
+class CodecLookupHelperForTesting : public CodecLookupHelper {
+ public:
+ explicit CodecLookupHelperForTesting(
+ const webrtc::FieldTrialsView& field_trials)
+ : codec_vendor_(nullptr, false, field_trials) {}
+ webrtc::PayloadTypeSuggester* PayloadTypeSuggester() override {
+ return &payload_type_suggester_;
+ }
+ cricket::CodecVendor* CodecVendor(const std::string& mid) override {
+ return &codec_vendor_;
+ }
+
+ private:
+ webrtc::FakePayloadTypeSuggester payload_type_suggester_;
+ cricket::CodecVendor codec_vendor_;
+};
+
Codec CreateRedAudioCodec(absl::string_view encoding_id) {
Codec red = CreateAudioCodec(63, "red", 48000, 2);
red.SetParam(kCodecParamNotInNameValueFormat,
@@ -510,16 +530,18 @@
MediaSessionDescriptionFactoryTest()
: tdf1_(field_trials),
tdf2_(field_trials),
- f1_(nullptr, false, &ssrc_generator1, &tdf1_, &pt_suggester_1_),
- f2_(nullptr, false, &ssrc_generator2, &tdf2_, &pt_suggester_2_) {
- f1_.CodecVendorForTesting()->set_audio_codecs(MAKE_VECTOR(kAudioCodecs1),
- MAKE_VECTOR(kAudioCodecs1));
- f1_.CodecVendorForTesting()->set_video_codecs(MAKE_VECTOR(kVideoCodecs1),
- MAKE_VECTOR(kVideoCodecs1));
- f2_.CodecVendorForTesting()->set_audio_codecs(MAKE_VECTOR(kAudioCodecs2),
- MAKE_VECTOR(kAudioCodecs2));
- f2_.CodecVendorForTesting()->set_video_codecs(MAKE_VECTOR(kVideoCodecs2),
- MAKE_VECTOR(kVideoCodecs2));
+ codec_lookup_helper_1_(field_trials),
+ codec_lookup_helper_2_(field_trials),
+ f1_(nullptr, false, &ssrc_generator1, &tdf1_, &codec_lookup_helper_1_),
+ f2_(nullptr, false, &ssrc_generator2, &tdf2_, &codec_lookup_helper_2_) {
+ codec_lookup_helper_1_.CodecVendor("")->set_audio_codecs(
+ MAKE_VECTOR(kAudioCodecs1), MAKE_VECTOR(kAudioCodecs1));
+ codec_lookup_helper_1_.CodecVendor("")->set_video_codecs(
+ MAKE_VECTOR(kVideoCodecs1), MAKE_VECTOR(kVideoCodecs1));
+ codec_lookup_helper_2_.CodecVendor("")->set_audio_codecs(
+ MAKE_VECTOR(kAudioCodecs2), MAKE_VECTOR(kAudioCodecs2));
+ codec_lookup_helper_2_.CodecVendor("")->set_video_codecs(
+ MAKE_VECTOR(kVideoCodecs2), MAKE_VECTOR(kVideoCodecs2));
tdf1_.set_certificate(rtc::RTCCertificate::Create(
std::unique_ptr<rtc::SSLIdentity>(new rtc::FakeSSLIdentity("id1"))));
tdf2_.set_certificate(rtc::RTCCertificate::Create(
@@ -760,8 +782,8 @@
rtc::UniqueRandomIdGenerator ssrc_generator2;
TransportDescriptionFactory tdf1_;
TransportDescriptionFactory tdf2_;
- webrtc::FakePayloadTypeSuggester pt_suggester_1_;
- webrtc::FakePayloadTypeSuggester pt_suggester_2_;
+ CodecLookupHelperForTesting codec_lookup_helper_1_;
+ CodecLookupHelperForTesting codec_lookup_helper_2_;
MediaSessionDescriptionFactory f1_;
MediaSessionDescriptionFactory f2_;
};
@@ -778,7 +800,7 @@
EXPECT_EQ(MediaProtocolType::kRtp, ac->type);
const MediaContentDescription* acd = ac->media_description();
EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
- EXPECT_THAT(f1_.CodecVendorForTesting()->audio_sendrecv_codecs(),
+ EXPECT_THAT(codec_lookup_helper_1_.CodecVendor("")->audio_sendrecv_codecs(),
ElementsAreArray(acd->codecs()));
EXPECT_EQ(0U, acd->first_ssrc()); // no sender is attached.
EXPECT_EQ(kAutoBandwidth, acd->bandwidth()); // default bandwidth (auto)
@@ -792,9 +814,9 @@
// First, prefer to only use opus and red.
std::vector<webrtc::RtpCodecCapability> preferences;
preferences.push_back(webrtc::ToRtpCodecCapability(
- f1_.CodecVendorForTesting()->audio_sendrecv_codecs()[0]));
+ codec_lookup_helper_1_.CodecVendor("")->audio_sendrecv_codecs()[0]));
preferences.push_back(webrtc::ToRtpCodecCapability(
- f1_.CodecVendorForTesting()->audio_sendrecv_codecs()[1]));
+ codec_lookup_helper_1_.CodecVendor("")->audio_sendrecv_codecs()[1]));
EXPECT_EQ("opus", preferences[0].name);
EXPECT_EQ("red", preferences[1].name);
@@ -820,9 +842,9 @@
// First, prefer to only use opus and red.
std::vector<webrtc::RtpCodecCapability> preferences;
preferences.push_back(webrtc::ToRtpCodecCapability(
- f1_.CodecVendorForTesting()->audio_sendrecv_codecs()[1]));
+ codec_lookup_helper_1_.CodecVendor("")->audio_sendrecv_codecs()[1]));
preferences.push_back(webrtc::ToRtpCodecCapability(
- f1_.CodecVendorForTesting()->audio_sendrecv_codecs()[0]));
+ codec_lookup_helper_1_.CodecVendor("")->audio_sendrecv_codecs()[0]));
EXPECT_EQ("red", preferences[0].name);
EXPECT_EQ("opus", preferences[1].name);
@@ -859,15 +881,17 @@
const MediaContentDescription* acd = ac->media_description();
const MediaContentDescription* vcd = vc->media_description();
EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
- EXPECT_EQ(f1_.CodecVendorForTesting()->audio_sendrecv_codecs().codecs(),
- acd->codecs());
+ EXPECT_EQ(
+ codec_lookup_helper_1_.CodecVendor("")->audio_sendrecv_codecs().codecs(),
+ acd->codecs());
EXPECT_EQ(0U, acd->first_ssrc()); // no sender is attached
EXPECT_EQ(kAutoBandwidth, acd->bandwidth()); // default bandwidth (auto)
EXPECT_TRUE(acd->rtcp_mux()); // rtcp-mux defaults on
EXPECT_EQ(kMediaProtocolDtlsSavpf, acd->protocol());
EXPECT_EQ(MEDIA_TYPE_VIDEO, vcd->type());
- EXPECT_EQ(f1_.CodecVendorForTesting()->video_sendrecv_codecs().codecs(),
- vcd->codecs());
+ EXPECT_EQ(
+ codec_lookup_helper_1_.CodecVendor("")->video_sendrecv_codecs().codecs(),
+ vcd->codecs());
EXPECT_EQ(0U, vcd->first_ssrc()); // no sender is attached
EXPECT_EQ(kAutoBandwidth, vcd->bandwidth()); // default bandwidth (auto)
EXPECT_TRUE(vcd->rtcp_mux()); // rtcp-mux defaults on
@@ -967,9 +991,9 @@
// duplicate RTP payload types.
TEST_F(MediaSessionDescriptionFactoryTest, TestBundleOfferWithSameCodecPlType) {
Codec offered_video_codec =
- f2_.CodecVendorForTesting()->video_sendrecv_codecs()[0];
+ codec_lookup_helper_2_.CodecVendor("")->video_sendrecv_codecs()[0];
Codec offered_audio_codec =
- f2_.CodecVendorForTesting()->audio_sendrecv_codecs()[0];
+ codec_lookup_helper_2_.CodecVendor("")->audio_sendrecv_codecs()[0];
ASSERT_EQ(offered_video_codec.id, offered_audio_codec.id);
MediaSessionOptions opts;
@@ -1418,10 +1442,12 @@
RtpTransceiverDirection::kSendRecv, kActive,
&opts);
std::vector f1_codecs = {CreateAudioCodec(96, "opus", 48000, 1)};
- f1_.CodecVendorForTesting()->set_audio_codecs(f1_codecs, f1_codecs);
+ codec_lookup_helper_1_.CodecVendor("")->set_audio_codecs(f1_codecs,
+ f1_codecs);
std::vector f2_codecs = {CreateAudioCodec(0, "PCMU", 8000, 1)};
- f2_.CodecVendorForTesting()->set_audio_codecs(f2_codecs, f2_codecs);
+ codec_lookup_helper_2_.CodecVendor("")->set_audio_codecs(f2_codecs,
+ f2_codecs);
std::unique_ptr<SessionDescription> offer =
f1_.CreateOfferOrError(opts, nullptr).MoveValue();
@@ -1469,10 +1495,12 @@
RtpTransceiverDirection::kSendRecv, kActive,
&opts);
std::vector f1_codecs = {CreateVideoCodec(96, "H264")};
- f1_.CodecVendorForTesting()->set_video_codecs(f1_codecs, f1_codecs);
+ codec_lookup_helper_1_.CodecVendor("")->set_video_codecs(f1_codecs,
+ f1_codecs);
std::vector f2_codecs = {CreateVideoCodec(97, "VP8")};
- f2_.CodecVendorForTesting()->set_video_codecs(f2_codecs, f2_codecs);
+ codec_lookup_helper_2_.CodecVendor("")->set_video_codecs(f2_codecs,
+ f2_codecs);
std::unique_ptr<SessionDescription> offer =
f1_.CreateOfferOrError(opts, nullptr).MoveValue();
@@ -1493,11 +1521,13 @@
&opts);
std::vector f1_codecs = {CreateVideoCodec(96, "H264"),
CreateVideoCodec(118, "flexfec-03")};
- f1_.CodecVendorForTesting()->set_video_codecs(f1_codecs, f1_codecs);
+ codec_lookup_helper_1_.CodecVendor("")->set_video_codecs(f1_codecs,
+ f1_codecs);
std::vector f2_codecs = {CreateVideoCodec(97, "VP8"),
CreateVideoCodec(118, "flexfec-03")};
- f2_.CodecVendorForTesting()->set_video_codecs(f2_codecs, f2_codecs);
+ codec_lookup_helper_2_.CodecVendor("")->set_video_codecs(f2_codecs,
+ f2_codecs);
std::unique_ptr<SessionDescription> offer =
f1_.CreateOfferOrError(opts, nullptr).MoveValue();
@@ -2625,8 +2655,9 @@
const MediaContentDescription* acd = ac->media_description();
const MediaContentDescription* vcd = vc->media_description();
EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
- EXPECT_EQ(f1_.CodecVendorForTesting()->audio_sendrecv_codecs().codecs(),
- acd->codecs());
+ EXPECT_EQ(
+ codec_lookup_helper_1_.CodecVendor("")->audio_sendrecv_codecs().codecs(),
+ acd->codecs());
const StreamParamsVec& audio_streams = acd->streams();
ASSERT_EQ(2U, audio_streams.size());
@@ -2642,8 +2673,9 @@
EXPECT_TRUE(acd->rtcp_mux()); // rtcp-mux defaults on
EXPECT_EQ(MEDIA_TYPE_VIDEO, vcd->type());
- EXPECT_EQ(f1_.CodecVendorForTesting()->video_sendrecv_codecs().codecs(),
- vcd->codecs());
+ EXPECT_EQ(
+ codec_lookup_helper_1_.CodecVendor("")->video_sendrecv_codecs().codecs(),
+ vcd->codecs());
const StreamParamsVec& video_streams = vcd->streams();
ASSERT_EQ(1U, video_streams.size());
@@ -3038,8 +3070,10 @@
// that is being recycled.
TEST_F(MediaSessionDescriptionFactoryTest,
ReOfferDoesNotReUseRecycledAudioCodecs) {
- f1_.CodecVendorForTesting()->set_video_codecs(CodecList{}, CodecList{});
- f2_.CodecVendorForTesting()->set_video_codecs(CodecList{}, CodecList{});
+ codec_lookup_helper_1_.CodecVendor("")->set_video_codecs(CodecList{},
+ CodecList{});
+ codec_lookup_helper_2_.CodecVendor("")->set_video_codecs(CodecList{},
+ CodecList{});
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_AUDIO, "a0",
@@ -3072,8 +3106,10 @@
// that is being recycled.
TEST_F(MediaSessionDescriptionFactoryTest,
ReOfferDoesNotReUseRecycledVideoCodecs) {
- f1_.CodecVendorForTesting()->set_audio_codecs(CodecList{}, CodecList{});
- f2_.CodecVendorForTesting()->set_audio_codecs(CodecList{}, CodecList{});
+ codec_lookup_helper_1_.CodecVendor("")->set_audio_codecs(CodecList{},
+ CodecList{});
+ codec_lookup_helper_2_.CodecVendor("")->set_audio_codecs(CodecList{},
+ CodecList{});
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_VIDEO, "v0",
@@ -3099,8 +3135,10 @@
// section that is being recycled.
TEST_F(MediaSessionDescriptionFactoryTest,
ReAnswerDoesNotReUseRecycledAudioCodecs) {
- f1_.CodecVendorForTesting()->set_video_codecs(CodecList{}, CodecList{});
- f2_.CodecVendorForTesting()->set_video_codecs(CodecList{}, CodecList{});
+ codec_lookup_helper_1_.CodecVendor("")->set_video_codecs(CodecList{},
+ CodecList{});
+ codec_lookup_helper_2_.CodecVendor("")->set_video_codecs(CodecList{},
+ CodecList{});
// Perform initial offer/answer in reverse (`f2_` as offerer) so that the
// second offer/answer is forward (`f1_` as offerer).
@@ -3131,8 +3169,10 @@
// section that is being recycled.
TEST_F(MediaSessionDescriptionFactoryTest,
ReAnswerDoesNotReUseRecycledVideoCodecs) {
- f1_.CodecVendorForTesting()->set_audio_codecs(CodecList{}, CodecList{});
- f2_.CodecVendorForTesting()->set_audio_codecs(CodecList{}, CodecList{});
+ codec_lookup_helper_1_.CodecVendor("")->set_audio_codecs(CodecList{},
+ CodecList{});
+ codec_lookup_helper_2_.CodecVendor("")->set_audio_codecs(CodecList{},
+ CodecList{});
// Perform initial offer/answer in reverse (`f2_` as offerer) so that the
// second offer/answer is forward (`f1_` as offerer).
@@ -3171,12 +3211,14 @@
std::vector<Codec> f1_codecs = MAKE_VECTOR(kVideoCodecs1);
// This creates rtx for H264 with the payload type `f1_` uses.
AddRtxCodec(CreateVideoRtxCodec(126, kVideoCodecs1[1].id), &f1_codecs);
- f1_.CodecVendorForTesting()->set_video_codecs(f1_codecs, f1_codecs);
+ codec_lookup_helper_1_.CodecVendor("")->set_video_codecs(f1_codecs,
+ f1_codecs);
std::vector<Codec> f2_codecs = MAKE_VECTOR(kVideoCodecs2);
// This creates rtx for H264 with the payload type `f2_` uses.
AddRtxCodec(CreateVideoRtxCodec(125, kVideoCodecs2[0].id), &f2_codecs);
- f2_.CodecVendorForTesting()->set_video_codecs(f2_codecs, f2_codecs);
+ codec_lookup_helper_2_.CodecVendor("")->set_video_codecs(f2_codecs,
+ f2_codecs);
std::unique_ptr<SessionDescription> offer =
f1_.CreateOfferOrError(opts, nullptr).MoveValue();
@@ -3233,11 +3275,15 @@
// *doesn't* honor the existing preferred codec (VP8) we'll notice.
std::vector<Codec> f2_codecs = {vp9, vp9_rtx, vp8_answerer, vp8_answerer_rtx};
- f1_.CodecVendorForTesting()->set_video_codecs(f1_codecs, f1_codecs);
- f2_.CodecVendorForTesting()->set_video_codecs(f2_codecs, f2_codecs);
+ codec_lookup_helper_1_.CodecVendor("")->set_video_codecs(f1_codecs,
+ f1_codecs);
+ codec_lookup_helper_2_.CodecVendor("")->set_video_codecs(f2_codecs,
+ f2_codecs);
std::vector<Codec> audio_codecs;
- f1_.CodecVendorForTesting()->set_audio_codecs(audio_codecs, audio_codecs);
- f2_.CodecVendorForTesting()->set_audio_codecs(audio_codecs, audio_codecs);
+ codec_lookup_helper_1_.CodecVendor("")->set_audio_codecs(audio_codecs,
+ audio_codecs);
+ codec_lookup_helper_2_.CodecVendor("")->set_audio_codecs(audio_codecs,
+ audio_codecs);
// Offer will be {VP8, RTX for VP8}. Answer will be the same.
std::unique_ptr<SessionDescription> offer =
@@ -3270,7 +3316,8 @@
std::vector<Codec> f1_codecs = MAKE_VECTOR(kVideoCodecs1);
// This creates rtx for H264 with the payload type `f1_` uses.
AddRtxCodec(CreateVideoRtxCodec(126, kVideoCodecs1[1].id), &f1_codecs);
- f1_.CodecVendorForTesting()->set_video_codecs(f1_codecs, f1_codecs);
+ codec_lookup_helper_1_.CodecVendor("")->set_video_codecs(f1_codecs,
+ f1_codecs);
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_AUDIO, "audio",
@@ -3296,7 +3343,8 @@
int used_pl_type = acd->codecs()[0].id;
f2_codecs[0].id = used_pl_type; // Set the payload type for H264.
AddRtxCodec(CreateVideoRtxCodec(125, used_pl_type), &f2_codecs);
- f2_.CodecVendorForTesting()->set_video_codecs(f2_codecs, f2_codecs);
+ codec_lookup_helper_2_.CodecVendor("")->set_video_codecs(f2_codecs,
+ f2_codecs);
std::unique_ptr<SessionDescription> updated_offer(
f2_.CreateOfferOrError(opts, answer.get()).MoveValue());
@@ -3333,7 +3381,8 @@
std::vector<Codec> f2_codecs = MAKE_VECTOR(kVideoCodecs2);
// This creates rtx for H264 with the payload type `f2_` uses.
AddRtxCodec(CreateVideoRtxCodec(125, kVideoCodecs2[0].id), &f2_codecs);
- f2_.CodecVendorForTesting()->set_video_codecs(f2_codecs, f2_codecs);
+ codec_lookup_helper_2_.CodecVendor("")->set_video_codecs(f2_codecs,
+ f2_codecs);
std::unique_ptr<SessionDescription> offer =
f1_.CreateOfferOrError(opts, nullptr).MoveValue();
@@ -3372,12 +3421,14 @@
std::vector<Codec> f1_codecs = MAKE_VECTOR(kVideoCodecs1);
// This creates RTX without associated payload type parameter.
AddRtxCodec(CreateVideoCodec(126, kRtxCodecName), &f1_codecs);
- f1_.CodecVendorForTesting()->set_video_codecs(f1_codecs, f1_codecs);
+ codec_lookup_helper_1_.CodecVendor("")->set_video_codecs(f1_codecs,
+ f1_codecs);
std::vector<Codec> f2_codecs = MAKE_VECTOR(kVideoCodecs2);
// This creates RTX for H264 with the payload type `f2_` uses.
AddRtxCodec(CreateVideoRtxCodec(125, kVideoCodecs2[0].id), &f2_codecs);
- f2_.CodecVendorForTesting()->set_video_codecs(f2_codecs, f2_codecs);
+ codec_lookup_helper_2_.CodecVendor("")->set_video_codecs(f2_codecs,
+ f2_codecs);
std::unique_ptr<SessionDescription> offer =
f1_.CreateOfferOrError(opts, nullptr).MoveValue();
@@ -3415,12 +3466,14 @@
std::vector<Codec> f1_codecs = MAKE_VECTOR(kVideoCodecs1);
// This creates RTX for H264 in sender.
AddRtxCodec(CreateVideoRtxCodec(126, kVideoCodecs1[1].id), &f1_codecs);
- f1_.CodecVendorForTesting()->set_video_codecs(f1_codecs, f1_codecs);
+ codec_lookup_helper_1_.CodecVendor("")->set_video_codecs(f1_codecs,
+ f1_codecs);
std::vector<Codec> f2_codecs = MAKE_VECTOR(kVideoCodecs2);
// This creates RTX for H263 in receiver.
AddRtxCodec(CreateVideoRtxCodec(125, kVideoCodecs2[1].id), &f2_codecs);
- f2_.CodecVendorForTesting()->set_video_codecs(f2_codecs, f2_codecs);
+ codec_lookup_helper_2_.CodecVendor("")->set_video_codecs(f2_codecs,
+ f2_codecs);
std::unique_ptr<SessionDescription> offer =
f1_.CreateOfferOrError(opts, nullptr).MoveValue();
@@ -3446,16 +3499,19 @@
std::vector<Codec> f1_codecs = MAKE_VECTOR(kVideoCodecs1);
// This creates RTX for H264-SVC in sender.
AddRtxCodec(CreateVideoRtxCodec(125, kVideoCodecs1[0].id), &f1_codecs);
- f1_.CodecVendorForTesting()->set_video_codecs(f1_codecs, f1_codecs);
+ codec_lookup_helper_1_.CodecVendor("")->set_video_codecs(f1_codecs,
+ f1_codecs);
// This creates RTX for H264 in sender.
AddRtxCodec(CreateVideoRtxCodec(126, kVideoCodecs1[1].id), &f1_codecs);
- f1_.CodecVendorForTesting()->set_video_codecs(f1_codecs, f1_codecs);
+ codec_lookup_helper_1_.CodecVendor("")->set_video_codecs(f1_codecs,
+ f1_codecs);
std::vector<Codec> f2_codecs = MAKE_VECTOR(kVideoCodecs2);
// This creates RTX for H264 in receiver.
AddRtxCodec(CreateVideoRtxCodec(124, kVideoCodecs2[0].id), &f2_codecs);
- f2_.CodecVendorForTesting()->set_video_codecs(f2_codecs, f1_codecs);
+ codec_lookup_helper_2_.CodecVendor("")->set_video_codecs(f2_codecs,
+ f1_codecs);
// H264-SVC codec is removed in the answer, therefore, associated RTX codec
// for H264-SVC should also be removed.
@@ -3482,7 +3538,8 @@
std::vector<Codec> f1_codecs = MAKE_VECTOR(kVideoCodecs1);
// This creates RTX for H264 for the offerer.
AddRtxCodec(CreateVideoRtxCodec(126, kVideoCodecs1[1].id), &f1_codecs);
- f1_.CodecVendorForTesting()->set_video_codecs(f1_codecs, f1_codecs);
+ codec_lookup_helper_1_.CodecVendor("")->set_video_codecs(f1_codecs,
+ f1_codecs);
std::unique_ptr<SessionDescription> offer =
f1_.CreateOfferOrError(opts, nullptr).MoveValue();
@@ -3496,7 +3553,8 @@
// Now, attempt to add RTX for H264-SVC.
AddRtxCodec(CreateVideoRtxCodec(125, kVideoCodecs1[0].id), &f1_codecs);
- f1_.CodecVendorForTesting()->set_video_codecs(f1_codecs, f1_codecs);
+ codec_lookup_helper_1_.CodecVendor("")->set_video_codecs(f1_codecs,
+ f1_codecs);
std::unique_ptr<SessionDescription> updated_offer(
f1_.CreateOfferOrError(opts, offer.get()).MoveValue());
@@ -3522,7 +3580,8 @@
std::vector<Codec> f1_codecs;
f1_codecs.push_back(CreateVideoCodec(97, "H264"));
AddRtxCodec(CreateVideoRtxCodec(125, 97), &f1_codecs);
- f1_.CodecVendorForTesting()->set_video_codecs(f1_codecs, f1_codecs);
+ codec_lookup_helper_1_.CodecVendor("")->set_video_codecs(f1_codecs,
+ f1_codecs);
// Ensure that the offer has an RTX ssrc for each regular ssrc, and that there
// is a FID ssrc + grouping for each.
@@ -3566,7 +3625,8 @@
std::vector<Codec> f1_codecs;
f1_codecs.push_back(CreateVideoCodec(97, "H264"));
f1_codecs.push_back(CreateVideoCodec(118, "flexfec-03"));
- f1_.CodecVendorForTesting()->set_video_codecs(f1_codecs, f1_codecs);
+ codec_lookup_helper_1_.CodecVendor("")->set_video_codecs(f1_codecs,
+ f1_codecs);
// Ensure that the offer has a single FlexFEC ssrc and that
// there is no FEC-FR ssrc + grouping for each.
@@ -3609,7 +3669,8 @@
std::vector<Codec> f1_codecs;
f1_codecs.push_back(CreateVideoCodec(97, "H264"));
f1_codecs.push_back(CreateVideoCodec(118, "flexfec-03"));
- f1_.CodecVendorForTesting()->set_video_codecs(f1_codecs, f1_codecs);
+ codec_lookup_helper_1_.CodecVendor("")->set_video_codecs(f1_codecs,
+ f1_codecs);
// Ensure that the offer has no FlexFEC ssrcs for each regular ssrc, and that
// there is no FEC-FR ssrc + grouping for each.
@@ -4275,11 +4336,13 @@
TEST_F(MediaSessionDescriptionFactoryTest, H265TxModeIsEqualRetainIt) {
std::vector f1_codecs = {CreateVideoCodec(96, "H265")};
f1_codecs.back().tx_mode = "mrst";
- f1_.CodecVendorForTesting()->set_video_codecs(f1_codecs, f1_codecs);
+ codec_lookup_helper_1_.CodecVendor("")->set_video_codecs(f1_codecs,
+ f1_codecs);
std::vector f2_codecs = {CreateVideoCodec(96, "H265")};
f2_codecs.back().tx_mode = "mrst";
- f2_.CodecVendorForTesting()->set_video_codecs(f2_codecs, f2_codecs);
+ codec_lookup_helper_2_.CodecVendor("")->set_video_codecs(f2_codecs,
+ f2_codecs);
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_VIDEO, "video1",
@@ -4311,11 +4374,13 @@
TEST_F(MediaSessionDescriptionFactoryTest, H265TxModeIsDifferentDropCodecs) {
std::vector f1_codecs = {CreateVideoCodec(96, "H265")};
f1_codecs.back().tx_mode = "mrst";
- f1_.CodecVendorForTesting()->set_video_codecs(f1_codecs, f1_codecs);
+ codec_lookup_helper_1_.CodecVendor("")->set_video_codecs(f1_codecs,
+ f1_codecs);
std::vector f2_codecs = {CreateVideoCodec(96, "H265")};
f2_codecs.back().tx_mode = "mrmt";
- f2_.CodecVendorForTesting()->set_video_codecs(f2_codecs, f2_codecs);
+ codec_lookup_helper_2_.CodecVendor("")->set_video_codecs(f2_codecs,
+ f2_codecs);
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_VIDEO, "video1",
@@ -4348,11 +4413,13 @@
TEST_F(MediaSessionDescriptionFactoryTest, PacketizationIsEqual) {
std::vector f1_codecs = {CreateVideoCodec(96, "H264")};
f1_codecs.back().packetization = "raw";
- f1_.CodecVendorForTesting()->set_video_codecs(f1_codecs, f1_codecs);
+ codec_lookup_helper_1_.CodecVendor("")->set_video_codecs(f1_codecs,
+ f1_codecs);
std::vector f2_codecs = {CreateVideoCodec(96, "H264")};
f2_codecs.back().packetization = "raw";
- f2_.CodecVendorForTesting()->set_video_codecs(f2_codecs, f2_codecs);
+ codec_lookup_helper_2_.CodecVendor("")->set_video_codecs(f2_codecs,
+ f2_codecs);
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_VIDEO, "video1",
@@ -4384,11 +4451,13 @@
TEST_F(MediaSessionDescriptionFactoryTest, PacketizationIsDifferent) {
std::vector f1_codecs = {CreateVideoCodec(96, "H264")};
f1_codecs.back().packetization = "raw";
- f1_.CodecVendorForTesting()->set_video_codecs(f1_codecs, f1_codecs);
+ codec_lookup_helper_1_.CodecVendor("")->set_video_codecs(f1_codecs,
+ f1_codecs);
std::vector f2_codecs = {CreateVideoCodec(96, "H264")};
f2_codecs.back().packetization = "notraw";
- f2_.CodecVendorForTesting()->set_video_codecs(f2_codecs, f2_codecs);
+ codec_lookup_helper_2_.CodecVendor("")->set_video_codecs(f2_codecs,
+ f2_codecs);
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_VIDEO, "video1",
@@ -4508,10 +4577,14 @@
audio_codecs2[0].SetParam(audio_param_name, audio_value2);
video_codecs2[0].SetParam(video_param_name, video_value2);
- f1_.CodecVendorForTesting()->set_audio_codecs(audio_codecs1, audio_codecs1);
- f1_.CodecVendorForTesting()->set_video_codecs(video_codecs1, video_codecs1);
- f2_.CodecVendorForTesting()->set_audio_codecs(audio_codecs2, audio_codecs2);
- f2_.CodecVendorForTesting()->set_video_codecs(video_codecs2, video_codecs2);
+ codec_lookup_helper_1_.CodecVendor("")->set_audio_codecs(audio_codecs1,
+ audio_codecs1);
+ codec_lookup_helper_1_.CodecVendor("")->set_video_codecs(video_codecs1,
+ video_codecs1);
+ codec_lookup_helper_2_.CodecVendor("")->set_audio_codecs(audio_codecs2,
+ audio_codecs2);
+ codec_lookup_helper_2_.CodecVendor("")->set_video_codecs(video_codecs2,
+ video_codecs2);
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_AUDIO, "audio",
@@ -4562,9 +4635,10 @@
// Offerer will send both codecs, answerer should choose the one with matching
// packetization mode (and not the first one it sees).
- f1_.CodecVendorForTesting()->set_video_codecs({h264_pm0, h264_pm1},
- {h264_pm0, h264_pm1});
- f2_.CodecVendorForTesting()->set_video_codecs({h264_pm1}, {h264_pm1});
+ codec_lookup_helper_1_.CodecVendor("")->set_video_codecs(
+ {h264_pm0, h264_pm1}, {h264_pm0, h264_pm1});
+ codec_lookup_helper_2_.CodecVendor("")->set_video_codecs({h264_pm1},
+ {h264_pm1});
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_VIDEO, "video",
@@ -4593,16 +4667,18 @@
MediaProtocolTest()
: tdf1_(field_trials_),
tdf2_(field_trials_),
- f1_(nullptr, false, &ssrc_generator1, &tdf1_, &pt_suggester_1_),
- f2_(nullptr, false, &ssrc_generator2, &tdf2_, &pt_suggester_2_) {
- f1_.CodecVendorForTesting()->set_audio_codecs(MAKE_VECTOR(kAudioCodecs1),
- MAKE_VECTOR(kAudioCodecs1));
- f1_.CodecVendorForTesting()->set_video_codecs(MAKE_VECTOR(kVideoCodecs1),
- MAKE_VECTOR(kVideoCodecs1));
- f2_.CodecVendorForTesting()->set_audio_codecs(MAKE_VECTOR(kAudioCodecs2),
- MAKE_VECTOR(kAudioCodecs2));
- f2_.CodecVendorForTesting()->set_video_codecs(MAKE_VECTOR(kVideoCodecs2),
- MAKE_VECTOR(kVideoCodecs2));
+ codec_lookup_helper_1_(field_trials_),
+ codec_lookup_helper_2_(field_trials_),
+ f1_(nullptr, false, &ssrc_generator1, &tdf1_, &codec_lookup_helper_1_),
+ f2_(nullptr, false, &ssrc_generator2, &tdf2_, &codec_lookup_helper_2_) {
+ codec_lookup_helper_1_.CodecVendor("")->set_audio_codecs(
+ MAKE_VECTOR(kAudioCodecs1), MAKE_VECTOR(kAudioCodecs1));
+ codec_lookup_helper_1_.CodecVendor("")->set_video_codecs(
+ MAKE_VECTOR(kVideoCodecs1), MAKE_VECTOR(kVideoCodecs1));
+ codec_lookup_helper_2_.CodecVendor("")->set_audio_codecs(
+ MAKE_VECTOR(kAudioCodecs2), MAKE_VECTOR(kAudioCodecs2));
+ codec_lookup_helper_2_.CodecVendor("")->set_video_codecs(
+ MAKE_VECTOR(kVideoCodecs2), MAKE_VECTOR(kVideoCodecs2));
tdf1_.set_certificate(rtc::RTCCertificate::Create(
std::unique_ptr<rtc::SSLIdentity>(new rtc::FakeSSLIdentity("id1"))));
tdf2_.set_certificate(rtc::RTCCertificate::Create(
@@ -4613,8 +4689,8 @@
webrtc::test::ScopedKeyValueConfig field_trials_;
TransportDescriptionFactory tdf1_;
TransportDescriptionFactory tdf2_;
- webrtc::FakePayloadTypeSuggester pt_suggester_1_;
- webrtc::FakePayloadTypeSuggester pt_suggester_2_;
+ CodecLookupHelperForTesting codec_lookup_helper_1_;
+ CodecLookupHelperForTesting codec_lookup_helper_2_;
MediaSessionDescriptionFactory f1_;
MediaSessionDescriptionFactory f2_;
rtc::UniqueRandomIdGenerator ssrc_generator1;
@@ -4674,13 +4750,14 @@
std::unique_ptr<rtc::SSLIdentity>(new rtc::FakeSSLIdentity("id"))));
rtc::UniqueRandomIdGenerator ssrc_generator;
- webrtc::FakePayloadTypeSuggester pt_suggester;
+ CodecLookupHelperForTesting codec_lookup_helper(field_trials);
MediaSessionDescriptionFactory sf(nullptr, false, &ssrc_generator, &tdf,
- &pt_suggester);
+ &codec_lookup_helper);
const std::vector<Codec> send_codecs = MAKE_VECTOR(kAudioCodecs1);
const std::vector<Codec> recv_codecs = MAKE_VECTOR(kAudioCodecs2);
const std::vector<Codec> sendrecv_codecs = MAKE_VECTOR(kAudioCodecsAnswer);
- sf.CodecVendorForTesting()->set_audio_codecs(send_codecs, recv_codecs);
+ codec_lookup_helper.CodecVendor("")->set_audio_codecs(send_codecs,
+ recv_codecs);
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_AUDIO, "audio", direction, kActive,
@@ -4781,17 +4858,18 @@
rtc::RTCCertificate::Create(std::unique_ptr<rtc::SSLIdentity>(
new rtc::FakeSSLIdentity("answer_id"))));
rtc::UniqueRandomIdGenerator ssrc_generator1, ssrc_generator2;
- webrtc::FakePayloadTypeSuggester offer_pt_suggester;
- MediaSessionDescriptionFactory offer_factory(nullptr, false, &ssrc_generator1,
- &offer_tdf, &offer_pt_suggester);
- webrtc::FakePayloadTypeSuggester answer_pt_suggester;
- MediaSessionDescriptionFactory answer_factory(
- nullptr, false, &ssrc_generator2, &answer_tdf, &answer_pt_suggester);
+ CodecLookupHelperForTesting offer_codec_lookup_helper(field_trials);
+ MediaSessionDescriptionFactory offer_factory(
+ nullptr, false, &ssrc_generator1, &offer_tdf, &offer_codec_lookup_helper);
+ CodecLookupHelperForTesting answer_codec_lookup_helper(field_trials);
+ MediaSessionDescriptionFactory answer_factory(nullptr, false,
+ &ssrc_generator2, &answer_tdf,
+ &answer_codec_lookup_helper);
- offer_factory.CodecVendorForTesting()->set_audio_codecs(
+ offer_codec_lookup_helper.CodecVendor("")->set_audio_codecs(
VectorFromIndices(kOfferAnswerCodecs, kOfferSendCodecs),
VectorFromIndices(kOfferAnswerCodecs, kOfferRecvCodecs));
- answer_factory.CodecVendorForTesting()->set_audio_codecs(
+ answer_codec_lookup_helper.CodecVendor("")->set_audio_codecs(
VectorFromIndices(kOfferAnswerCodecs, kAnswerSendCodecs),
VectorFromIndices(kOfferAnswerCodecs, kAnswerRecvCodecs));
@@ -4934,12 +5012,14 @@
false,
&ssrc_generator_offerer_,
&tdf_offerer_,
- &pt_suggester_offerer_),
+ &codec_lookup_helper_offerer_),
sf_answerer_(nullptr,
false,
&ssrc_generator_answerer_,
&tdf_answerer_,
- &pt_suggester_answerer_) {
+ &codec_lookup_helper_answerer_),
+ codec_lookup_helper_offerer_(field_trials_),
+ codec_lookup_helper_answerer_(field_trials_) {
tdf_offerer_.set_certificate(
rtc::RTCCertificate::Create(std::unique_ptr<rtc::SSLIdentity>(
new rtc::FakeSSLIdentity("offer_id"))));
@@ -4967,8 +5047,8 @@
rtc::UniqueRandomIdGenerator ssrc_generator_answerer_;
MediaSessionDescriptionFactory sf_offerer_;
MediaSessionDescriptionFactory sf_answerer_;
- webrtc::FakePayloadTypeSuggester pt_suggester_offerer_;
- webrtc::FakePayloadTypeSuggester pt_suggester_answerer_;
+ CodecLookupHelperForTesting codec_lookup_helper_offerer_;
+ CodecLookupHelperForTesting codec_lookup_helper_answerer_;
};
// Both sides support H.265 level 5.2 for encoding and decoding.
@@ -4979,13 +5059,13 @@
const std::vector<Codec> recv_codecs = MAKE_VECTOR(kVideoCodecsH265Level52);
const std::vector<Codec> sendrecv_codecs =
MAKE_VECTOR(kVideoCodecsH265Level52);
- sf_offerer_.CodecVendorForTesting()->set_video_codecs(send_codecs,
- recv_codecs);
- sf_answerer_.CodecVendorForTesting()->set_video_codecs(recv_codecs,
- send_codecs);
- EXPECT_EQ(
- sendrecv_codecs,
- sf_offerer_.CodecVendorForTesting()->video_sendrecv_codecs().codecs());
+ codec_lookup_helper_offerer_.CodecVendor("")->set_video_codecs(send_codecs,
+ recv_codecs);
+ codec_lookup_helper_answerer_.CodecVendor("")->set_video_codecs(recv_codecs,
+ send_codecs);
+ EXPECT_EQ(sendrecv_codecs, codec_lookup_helper_offerer_.CodecVendor("")
+ ->video_sendrecv_codecs()
+ .codecs());
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_VIDEO, "video",
@@ -5030,13 +5110,13 @@
const std::vector<Codec> recv_codecs = MAKE_VECTOR(kVideoCodecsH265Level6);
const std::vector<Codec> sendrecv_codecs =
MAKE_VECTOR(kVideoCodecsH265Level6);
- sf_offerer_.CodecVendorForTesting()->set_video_codecs(send_codecs,
- recv_codecs);
- sf_answerer_.CodecVendorForTesting()->set_video_codecs(recv_codecs,
- send_codecs);
- EXPECT_EQ(
- sendrecv_codecs,
- sf_offerer_.CodecVendorForTesting()->video_sendrecv_codecs().codecs());
+ codec_lookup_helper_offerer_.CodecVendor("")->set_video_codecs(send_codecs,
+ recv_codecs);
+ codec_lookup_helper_answerer_.CodecVendor("")->set_video_codecs(recv_codecs,
+ send_codecs);
+ EXPECT_EQ(sendrecv_codecs, codec_lookup_helper_offerer_.CodecVendor("")
+ ->video_sendrecv_codecs()
+ .codecs());
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_VIDEO, "video",
@@ -5078,13 +5158,13 @@
const std::vector<Codec> recv_codecs = MAKE_VECTOR(kVideoCodecsH265Level52);
const std::vector<Codec> sendrecv_codecs =
MAKE_VECTOR(kVideoCodecsH265Level52);
- sf_offerer_.CodecVendorForTesting()->set_video_codecs(send_codecs,
- recv_codecs);
- sf_answerer_.CodecVendorForTesting()->set_video_codecs(recv_codecs,
- send_codecs);
- EXPECT_EQ(
- sendrecv_codecs,
- sf_offerer_.CodecVendorForTesting()->video_sendrecv_codecs().codecs());
+ codec_lookup_helper_offerer_.CodecVendor("")->set_video_codecs(send_codecs,
+ recv_codecs);
+ codec_lookup_helper_answerer_.CodecVendor("")->set_video_codecs(recv_codecs,
+ send_codecs);
+ EXPECT_EQ(sendrecv_codecs, codec_lookup_helper_offerer_.CodecVendor("")
+ ->video_sendrecv_codecs()
+ .codecs());
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_VIDEO, "video",
@@ -5132,13 +5212,14 @@
MAKE_VECTOR(kVideoCodecsH265Level6);
const std::vector<Codec> answerer_recv_codecs =
MAKE_VECTOR(kVideoCodecsH265Level52);
- sf_offerer_.CodecVendorForTesting()->set_video_codecs(offerer_send_codecs,
- offerer_recv_codecs);
- sf_answerer_.CodecVendorForTesting()->set_video_codecs(answerer_send_codecs,
- answerer_recv_codecs);
- EXPECT_EQ(
- offerer_sendrecv_codecs,
- sf_offerer_.CodecVendorForTesting()->video_sendrecv_codecs().codecs());
+ codec_lookup_helper_offerer_.CodecVendor("")->set_video_codecs(
+ offerer_send_codecs, offerer_recv_codecs);
+ codec_lookup_helper_answerer_.CodecVendor("")->set_video_codecs(
+ answerer_send_codecs, answerer_recv_codecs);
+ EXPECT_EQ(offerer_sendrecv_codecs,
+ codec_lookup_helper_offerer_.CodecVendor("")
+ ->video_sendrecv_codecs()
+ .codecs());
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_VIDEO, "video",
@@ -5191,13 +5272,14 @@
MAKE_VECTOR(kVideoCodecsH265Level52);
const std::vector<Codec> answerer_recv_codecs =
MAKE_VECTOR(kVideoCodecsH265Level6);
- sf_offerer_.CodecVendorForTesting()->set_video_codecs(offerer_send_codecs,
- offerer_recv_codecs);
- sf_answerer_.CodecVendorForTesting()->set_video_codecs(answerer_send_codecs,
- answerer_recv_codecs);
- EXPECT_EQ(
- offerer_sendrecv_codecs,
- sf_offerer_.CodecVendorForTesting()->video_sendrecv_codecs().codecs());
+ codec_lookup_helper_offerer_.CodecVendor("")->set_video_codecs(
+ offerer_send_codecs, offerer_recv_codecs);
+ codec_lookup_helper_answerer_.CodecVendor("")->set_video_codecs(
+ answerer_send_codecs, answerer_recv_codecs);
+ EXPECT_EQ(offerer_sendrecv_codecs,
+ codec_lookup_helper_offerer_.CodecVendor("")
+ ->video_sendrecv_codecs()
+ .codecs());
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_VIDEO, "video",
@@ -5250,13 +5332,14 @@
MAKE_VECTOR(kVideoCodecsH265Level31);
const std::vector<Codec> answerer_recv_codecs =
MAKE_VECTOR(kVideoCodecsH265Level5);
- sf_offerer_.CodecVendorForTesting()->set_video_codecs(offerer_send_codecs,
- offerer_recv_codecs);
- sf_answerer_.CodecVendorForTesting()->set_video_codecs(answerer_send_codecs,
- answerer_recv_codecs);
- EXPECT_EQ(
- offerer_sendrecv_codecs,
- sf_offerer_.CodecVendorForTesting()->video_sendrecv_codecs().codecs());
+ codec_lookup_helper_offerer_.CodecVendor("")->set_video_codecs(
+ offerer_send_codecs, offerer_recv_codecs);
+ codec_lookup_helper_answerer_.CodecVendor("")->set_video_codecs(
+ answerer_send_codecs, answerer_recv_codecs);
+ EXPECT_EQ(offerer_sendrecv_codecs,
+ codec_lookup_helper_offerer_.CodecVendor("")
+ ->video_sendrecv_codecs()
+ .codecs());
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_VIDEO, "video",
@@ -5319,13 +5402,14 @@
MAKE_VECTOR(kVideoCodecsH265Level4);
const std::vector<Codec> answerer_recv_codecs =
MAKE_VECTOR(kVideoCodecsH265Level6);
- sf_offerer_.CodecVendorForTesting()->set_video_codecs(offerer_send_codecs,
- offerer_recv_codecs);
- sf_answerer_.CodecVendorForTesting()->set_video_codecs(answerer_send_codecs,
- answerer_recv_codecs);
- EXPECT_EQ(
- offerer_sendrecv_codecs,
- sf_offerer_.CodecVendorForTesting()->video_sendrecv_codecs().codecs());
+ codec_lookup_helper_offerer_.CodecVendor("")->set_video_codecs(
+ offerer_send_codecs, offerer_recv_codecs);
+ codec_lookup_helper_answerer_.CodecVendor("")->set_video_codecs(
+ answerer_send_codecs, answerer_recv_codecs);
+ EXPECT_EQ(offerer_sendrecv_codecs,
+ codec_lookup_helper_offerer_.CodecVendor("")
+ ->video_sendrecv_codecs()
+ .codecs());
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_VIDEO, "video",
@@ -5378,13 +5462,14 @@
MAKE_VECTOR(kVideoCodecsH265Level6);
const std::vector<Codec> answerer_recv_codecs =
MAKE_VECTOR(kVideoCodecsH265Level52);
- sf_offerer_.CodecVendorForTesting()->set_video_codecs(offerer_send_codecs,
- offerer_recv_codecs);
- sf_answerer_.CodecVendorForTesting()->set_video_codecs(answerer_send_codecs,
- answerer_recv_codecs);
- EXPECT_EQ(
- offerer_sendrecv_codecs,
- sf_offerer_.CodecVendorForTesting()->video_sendrecv_codecs().codecs());
+ codec_lookup_helper_offerer_.CodecVendor("")->set_video_codecs(
+ offerer_send_codecs, offerer_recv_codecs);
+ codec_lookup_helper_answerer_.CodecVendor("")->set_video_codecs(
+ answerer_send_codecs, answerer_recv_codecs);
+ EXPECT_EQ(offerer_sendrecv_codecs,
+ codec_lookup_helper_offerer_.CodecVendor("")
+ ->video_sendrecv_codecs()
+ .codecs());
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_VIDEO, "video",
@@ -5437,13 +5522,14 @@
MAKE_VECTOR(kVideoCodecsH265Level6);
const std::vector<Codec> answerer_recv_codecs =
MAKE_VECTOR(kVideoCodecsH265Level52);
- sf_offerer_.CodecVendorForTesting()->set_video_codecs(offerer_send_codecs,
- offerer_recv_codecs);
- sf_answerer_.CodecVendorForTesting()->set_video_codecs(answerer_send_codecs,
- answerer_recv_codecs);
- EXPECT_EQ(
- offerer_sendrecv_codecs,
- sf_offerer_.CodecVendorForTesting()->video_sendrecv_codecs().codecs());
+ codec_lookup_helper_offerer_.CodecVendor("")->set_video_codecs(
+ offerer_send_codecs, offerer_recv_codecs);
+ codec_lookup_helper_answerer_.CodecVendor("")->set_video_codecs(
+ answerer_send_codecs, answerer_recv_codecs);
+ EXPECT_EQ(offerer_sendrecv_codecs,
+ codec_lookup_helper_offerer_.CodecVendor("")
+ ->video_sendrecv_codecs()
+ .codecs());
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_VIDEO, "video",
@@ -5493,13 +5579,14 @@
MAKE_VECTOR(kVideoCodecsH265Level52);
const std::vector<Codec> answerer_recv_codecs =
MAKE_VECTOR(kVideoCodecsH265Level6);
- sf_offerer_.CodecVendorForTesting()->set_video_codecs(offerer_send_codecs,
- offerer_recv_codecs);
- sf_answerer_.CodecVendorForTesting()->set_video_codecs(answerer_send_codecs,
- answerer_recv_codecs);
- EXPECT_EQ(
- offerer_sendrecv_codecs,
- sf_offerer_.CodecVendorForTesting()->video_sendrecv_codecs().codecs());
+ codec_lookup_helper_offerer_.CodecVendor("")->set_video_codecs(
+ offerer_send_codecs, offerer_recv_codecs);
+ codec_lookup_helper_answerer_.CodecVendor("")->set_video_codecs(
+ answerer_send_codecs, answerer_recv_codecs);
+ EXPECT_EQ(offerer_sendrecv_codecs,
+ codec_lookup_helper_offerer_.CodecVendor("")
+ ->video_sendrecv_codecs()
+ .codecs());
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_VIDEO, "video",
@@ -5549,13 +5636,14 @@
MAKE_VECTOR(kVideoCodecsH265Level31);
const std::vector<Codec> answerer_recv_codecs =
MAKE_VECTOR(kVideoCodecsH265Level5);
- sf_offerer_.CodecVendorForTesting()->set_video_codecs(offerer_send_codecs,
- offerer_recv_codecs);
- sf_answerer_.CodecVendorForTesting()->set_video_codecs(answerer_send_codecs,
- answerer_recv_codecs);
- EXPECT_EQ(
- offerer_sendrecv_codecs,
- sf_offerer_.CodecVendorForTesting()->video_sendrecv_codecs().codecs());
+ codec_lookup_helper_offerer_.CodecVendor("")->set_video_codecs(
+ offerer_send_codecs, offerer_recv_codecs);
+ codec_lookup_helper_answerer_.CodecVendor("")->set_video_codecs(
+ answerer_send_codecs, answerer_recv_codecs);
+ EXPECT_EQ(offerer_sendrecv_codecs,
+ codec_lookup_helper_offerer_.CodecVendor("")
+ ->video_sendrecv_codecs()
+ .codecs());
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_VIDEO, "video",
@@ -5605,13 +5693,14 @@
MAKE_VECTOR(kVideoCodecsH265Level4);
const std::vector<Codec> answerer_recv_codecs =
MAKE_VECTOR(kVideoCodecsH265Level6);
- sf_offerer_.CodecVendorForTesting()->set_video_codecs(offerer_send_codecs,
- offerer_recv_codecs);
- sf_answerer_.CodecVendorForTesting()->set_video_codecs(answerer_send_codecs,
- answerer_recv_codecs);
- EXPECT_EQ(
- offerer_sendrecv_codecs,
- sf_offerer_.CodecVendorForTesting()->video_sendrecv_codecs().codecs());
+ codec_lookup_helper_offerer_.CodecVendor("")->set_video_codecs(
+ offerer_send_codecs, offerer_recv_codecs);
+ codec_lookup_helper_answerer_.CodecVendor("")->set_video_codecs(
+ answerer_send_codecs, answerer_recv_codecs);
+ EXPECT_EQ(offerer_sendrecv_codecs,
+ codec_lookup_helper_offerer_.CodecVendor("")
+ ->video_sendrecv_codecs()
+ .codecs());
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_VIDEO, "video",
@@ -5661,13 +5750,14 @@
MAKE_VECTOR(kVideoCodecsH265Level6);
const std::vector<Codec> answerer_recv_codecs =
MAKE_VECTOR(kVideoCodecsH265Level52);
- sf_offerer_.CodecVendorForTesting()->set_video_codecs(offerer_send_codecs,
- offerer_recv_codecs);
- sf_answerer_.CodecVendorForTesting()->set_video_codecs(answerer_send_codecs,
- answerer_recv_codecs);
- EXPECT_EQ(
- offerer_sendrecv_codecs,
- sf_offerer_.CodecVendorForTesting()->video_sendrecv_codecs().codecs());
+ codec_lookup_helper_offerer_.CodecVendor("")->set_video_codecs(
+ offerer_send_codecs, offerer_recv_codecs);
+ codec_lookup_helper_answerer_.CodecVendor("")->set_video_codecs(
+ answerer_send_codecs, answerer_recv_codecs);
+ EXPECT_EQ(offerer_sendrecv_codecs,
+ codec_lookup_helper_offerer_.CodecVendor("")
+ ->video_sendrecv_codecs()
+ .codecs());
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_VIDEO, "video",
@@ -5717,13 +5807,14 @@
MAKE_VECTOR(kVideoCodecsH265Level6);
const std::vector<Codec> answerer_recv_codecs =
MAKE_VECTOR(kVideoCodecsH265Level52);
- sf_offerer_.CodecVendorForTesting()->set_video_codecs(offerer_send_codecs,
- offerer_recv_codecs);
- sf_answerer_.CodecVendorForTesting()->set_video_codecs(answerer_send_codecs,
- answerer_recv_codecs);
- EXPECT_EQ(
- offerer_sendrecv_codecs,
- sf_offerer_.CodecVendorForTesting()->video_sendrecv_codecs().codecs());
+ codec_lookup_helper_offerer_.CodecVendor("")->set_video_codecs(
+ offerer_send_codecs, offerer_recv_codecs);
+ codec_lookup_helper_answerer_.CodecVendor("")->set_video_codecs(
+ answerer_send_codecs, answerer_recv_codecs);
+ EXPECT_EQ(offerer_sendrecv_codecs,
+ codec_lookup_helper_offerer_.CodecVendor("")
+ ->video_sendrecv_codecs()
+ .codecs());
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_VIDEO, "video",
@@ -5774,13 +5865,14 @@
MAKE_VECTOR(kVideoCodecsH265Level52);
const std::vector<Codec> answerer_recv_codecs =
MAKE_VECTOR(kVideoCodecsH265Level6);
- sf_offerer_.CodecVendorForTesting()->set_video_codecs(offerer_send_codecs,
- offerer_recv_codecs);
- sf_answerer_.CodecVendorForTesting()->set_video_codecs(answerer_send_codecs,
- answerer_recv_codecs);
- EXPECT_EQ(
- offerer_sendrecv_codecs,
- sf_offerer_.CodecVendorForTesting()->video_sendrecv_codecs().codecs());
+ codec_lookup_helper_offerer_.CodecVendor("")->set_video_codecs(
+ offerer_send_codecs, offerer_recv_codecs);
+ codec_lookup_helper_answerer_.CodecVendor("")->set_video_codecs(
+ answerer_send_codecs, answerer_recv_codecs);
+ EXPECT_EQ(offerer_sendrecv_codecs,
+ codec_lookup_helper_offerer_.CodecVendor("")
+ ->video_sendrecv_codecs()
+ .codecs());
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_VIDEO, "video",
@@ -5831,13 +5923,14 @@
MAKE_VECTOR(kVideoCodecsH265Level31);
const std::vector<Codec> answerer_recv_codecs =
MAKE_VECTOR(kVideoCodecsH265Level5);
- sf_offerer_.CodecVendorForTesting()->set_video_codecs(offerer_send_codecs,
- offerer_recv_codecs);
- sf_answerer_.CodecVendorForTesting()->set_video_codecs(answerer_send_codecs,
- answerer_recv_codecs);
- EXPECT_EQ(
- offerer_sendrecv_codecs,
- sf_offerer_.CodecVendorForTesting()->video_sendrecv_codecs().codecs());
+ codec_lookup_helper_offerer_.CodecVendor("")->set_video_codecs(
+ offerer_send_codecs, offerer_recv_codecs);
+ codec_lookup_helper_answerer_.CodecVendor("")->set_video_codecs(
+ answerer_send_codecs, answerer_recv_codecs);
+ EXPECT_EQ(offerer_sendrecv_codecs,
+ codec_lookup_helper_offerer_.CodecVendor("")
+ ->video_sendrecv_codecs()
+ .codecs());
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_VIDEO, "video",
@@ -5888,13 +5981,14 @@
MAKE_VECTOR(kVideoCodecsH265Level4);
const std::vector<Codec> answerer_recv_codecs =
MAKE_VECTOR(kVideoCodecsH265Level6);
- sf_offerer_.CodecVendorForTesting()->set_video_codecs(offerer_send_codecs,
- offerer_recv_codecs);
- sf_answerer_.CodecVendorForTesting()->set_video_codecs(answerer_send_codecs,
- answerer_recv_codecs);
- EXPECT_EQ(
- offerer_sendrecv_codecs,
- sf_offerer_.CodecVendorForTesting()->video_sendrecv_codecs().codecs());
+ codec_lookup_helper_offerer_.CodecVendor("")->set_video_codecs(
+ offerer_send_codecs, offerer_recv_codecs);
+ codec_lookup_helper_answerer_.CodecVendor("")->set_video_codecs(
+ answerer_send_codecs, answerer_recv_codecs);
+ EXPECT_EQ(offerer_sendrecv_codecs,
+ codec_lookup_helper_offerer_.CodecVendor("")
+ ->video_sendrecv_codecs()
+ .codecs());
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_VIDEO, "video",
@@ -5945,13 +6039,14 @@
MAKE_VECTOR(kVideoCodecsH265Level6);
const std::vector<Codec> answerer_recv_codecs =
MAKE_VECTOR(kVideoCodecsH265Level52);
- sf_offerer_.CodecVendorForTesting()->set_video_codecs(offerer_send_codecs,
- offerer_recv_codecs);
- sf_answerer_.CodecVendorForTesting()->set_video_codecs(answerer_send_codecs,
- answerer_recv_codecs);
- EXPECT_EQ(
- offerer_sendrecv_codecs,
- sf_offerer_.CodecVendorForTesting()->video_sendrecv_codecs().codecs());
+ codec_lookup_helper_offerer_.CodecVendor("")->set_video_codecs(
+ offerer_send_codecs, offerer_recv_codecs);
+ codec_lookup_helper_answerer_.CodecVendor("")->set_video_codecs(
+ answerer_send_codecs, answerer_recv_codecs);
+ EXPECT_EQ(offerer_sendrecv_codecs,
+ codec_lookup_helper_offerer_.CodecVendor("")
+ ->video_sendrecv_codecs()
+ .codecs());
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_VIDEO, "video",
@@ -5998,13 +6093,14 @@
MAKE_VECTOR(kVideoCodecsH265Level6);
const std::vector<Codec> answerer_recv_codecs =
MAKE_VECTOR(kVideoCodecsH265Level52);
- sf_offerer_.CodecVendorForTesting()->set_video_codecs(offerer_send_codecs,
- offerer_recv_codecs);
- sf_answerer_.CodecVendorForTesting()->set_video_codecs(answerer_send_codecs,
- answerer_recv_codecs);
- EXPECT_EQ(
- offerer_sendrecv_codecs,
- sf_offerer_.CodecVendorForTesting()->video_sendrecv_codecs().codecs());
+ codec_lookup_helper_offerer_.CodecVendor("")->set_video_codecs(
+ offerer_send_codecs, offerer_recv_codecs);
+ codec_lookup_helper_answerer_.CodecVendor("")->set_video_codecs(
+ answerer_send_codecs, answerer_recv_codecs);
+ EXPECT_EQ(offerer_sendrecv_codecs,
+ codec_lookup_helper_offerer_.CodecVendor("")
+ ->video_sendrecv_codecs()
+ .codecs());
MediaSessionOptions opts;
AddMediaDescriptionOptions(MEDIA_TYPE_VIDEO, "video",
@@ -6015,7 +6111,7 @@
{kMediaStream1}, 1, &opts);
std::vector<webrtc::RtpCodecCapability> preferences;
for (const auto& codec :
- sf_offerer_.CodecVendorForTesting()->video_recv_codecs()) {
+ codec_lookup_helper_offerer_.CodecVendor("")->video_recv_codecs()) {
preferences.push_back(webrtc::ToRtpCodecCapability(codec));
}
opts.media_description_options[0].codec_preferences = preferences;
diff --git a/pc/peer_connection.cc b/pc/peer_connection.cc
index 6dde889..473b77d 100644
--- a/pc/peer_connection.cc
+++ b/pc/peer_connection.cc
@@ -63,6 +63,7 @@
#include "api/video/video_codec_constants.h"
#include "call/audio_state.h"
#include "call/packet_receiver.h"
+#include "call/payload_type.h"
#include "media/base/codec.h"
#include "media/base/media_config.h"
#include "media/base/media_engine.h"
@@ -140,6 +141,38 @@
namespace {
static const int REPORT_USAGE_PATTERN_DELAY_MS = 60000;
+class CodecLookupHelperForPeerConnection : public cricket::CodecLookupHelper {
+ public:
+ explicit CodecLookupHelperForPeerConnection(PeerConnection* self)
+ : self_(self) {}
+
+ webrtc::PayloadTypeSuggester* PayloadTypeSuggester() override {
+ return self_->transport_controller_s();
+ }
+
+ cricket::CodecVendor* CodecVendor(const std::string& mid) override {
+ auto transceiver = self_->rtp_manager()->transceivers()->FindByMid(mid);
+ if (!transceiver) {
+ // This codepath exists because of some codec lookups that have not
+ // yet been converted to be transceiver specific.
+ if (!fallback_codec_vendor_) {
+ RTC_LOG(LS_WARNING) << "Creating fallback codec vendor due to "
+ "lookup of mid "
+ << mid;
+ fallback_codec_vendor_ = std::make_unique<cricket::CodecVendor>(
+ self_->context()->media_engine(), self_->context()->use_rtx(),
+ self_->context()->env().field_trials());
+ }
+ return fallback_codec_vendor_.get();
+ }
+ return transceiver->internal()->codec_vendor();
+ }
+
+ private:
+ PeerConnection* self_;
+ std::unique_ptr<cricket::CodecVendor> fallback_codec_vendor_;
+};
+
uint32_t ConvertIceTransportTypeToCandidateFilter(
PeerConnectionInterface::IceTransportsType type) {
switch (type) {
@@ -544,6 +577,8 @@
session_id_(rtc::ToString(rtc::CreateRandomId64() & LLONG_MAX)),
data_channel_controller_(this),
message_handler_(signaling_thread()),
+ codec_lookup_helper_(
+ std::make_unique<CodecLookupHelperForPeerConnection>(this)),
weak_factory_(this) {
// Field trials specific to the peerconnection should be owned by the `env`,
RTC_DCHECK(dependencies.trials == nullptr);
@@ -561,7 +596,7 @@
sdp_handler_ = SdpOfferAnswerHandler::Create(
this, configuration_, std::move(dependencies.cert_generator),
std::move(dependencies.video_bitrate_allocator_factory), context_.get(),
- transport_controller_copy_);
+ codec_lookup_helper_.get());
rtp_manager_ = std::make_unique<RtpTransmissionManager>(
env_, IsUnifiedPlan(), context_.get(), &usage_pattern_, observer_,
legacy_stats_.get(), [this]() {
diff --git a/pc/peer_connection.h b/pc/peer_connection.h
index fb0cb3d..180b2ab 100644
--- a/pc/peer_connection.h
+++ b/pc/peer_connection.h
@@ -63,6 +63,7 @@
#include "p2p/base/port_allocator.h"
#include "p2p/base/transport_description.h"
#include "pc/channel_interface.h"
+#include "pc/codec_vendor.h"
#include "pc/connection_context.h"
#include "pc/data_channel_controller.h"
#include "pc/data_channel_utils.h"
@@ -728,6 +729,8 @@
// Accessed on both signaling and network thread. Const after Initialize().
std::unique_ptr<RtpTransmissionManager> rtp_manager_;
+ std::unique_ptr<cricket::CodecLookupHelper> codec_lookup_helper_;
+
// This variable needs to be the last one in the class.
WeakPtrFactory<PeerConnection> weak_factory_;
};
diff --git a/pc/peer_connection_encodings_integrationtest.cc b/pc/peer_connection_encodings_integrationtest.cc
index d095bba..f42ca15 100644
--- a/pc/peer_connection_encodings_integrationtest.cc
+++ b/pc/peer_connection_encodings_integrationtest.cc
@@ -27,6 +27,7 @@
#include "api/audio_codecs/builtin_audio_encoder_factory.h"
#include "api/audio_options.h"
#include "api/field_trials.h"
+#include "api/field_trials_view.h"
#include "api/jsep.h"
#include "api/make_ref_counted.h"
#include "api/media_stream_interface.h"
@@ -42,6 +43,8 @@
#include "api/test/rtc_error_matchers.h"
#include "api/units/data_rate.h"
#include "api/units/time_delta.h"
+#include "api/video_codecs/scalability_mode.h"
+#include "api/video_codecs/sdp_video_format.h"
#include "media/base/codec.h"
#include "media/engine/fake_webrtc_video_engine.h"
#include "pc/sdp_utils.h"
diff --git a/pc/peer_connection_end_to_end_unittest.cc b/pc/peer_connection_end_to_end_unittest.cc
index 34bc5d4..21c935b 100644
--- a/pc/peer_connection_end_to_end_unittest.cc
+++ b/pc/peer_connection_end_to_end_unittest.cc
@@ -35,7 +35,6 @@
#include "api/data_channel_interface.h"
#include "api/environment/environment.h"
#include "api/make_ref_counted.h"
-#include "api/media_stream_interface.h"
#include "api/peer_connection_interface.h"
#include "api/rtc_error.h"
#include "api/rtp_parameters.h"
diff --git a/pc/peer_connection_factory.h b/pc/peer_connection_factory.h
index 2a96dd1..3d99c13 100644
--- a/pc/peer_connection_factory.h
+++ b/pc/peer_connection_factory.h
@@ -20,6 +20,7 @@
#include "absl/strings/string_view.h"
#include "api/audio_options.h"
+#include "api/environment/environment.h"
#include "api/fec_controller.h"
#include "api/field_trials_view.h"
#include "api/media_stream_interface.h"
@@ -37,10 +38,8 @@
#include "api/transport/sctp_transport_factory_interface.h"
#include "call/call.h"
#include "call/rtp_transport_controller_send_factory_interface.h"
-#include "p2p/base/port_allocator.h"
+#include "media/base/media_engine.h"
#include "pc/connection_context.h"
-#include "rtc_base/checks.h"
-#include "rtc_base/rtc_certificate_generator.h"
#include "rtc_base/thread.h"
#include "rtc_base/thread_annotations.h"
diff --git a/pc/peer_connection_factory_proxy.h b/pc/peer_connection_factory_proxy.h
index b9bd1cb..88ee3b1 100644
--- a/pc/peer_connection_factory_proxy.h
+++ b/pc/peer_connection_factory_proxy.h
@@ -11,11 +11,18 @@
#ifndef PC_PEER_CONNECTION_FACTORY_PROXY_H_
#define PC_PEER_CONNECTION_FACTORY_PROXY_H_
-#include <memory>
+#include <cstdint>
+#include <cstdio>
#include <string>
-#include <utility>
+#include "absl/strings/string_view.h"
+#include "api/audio_options.h"
+#include "api/media_stream_interface.h"
+#include "api/media_types.h"
#include "api/peer_connection_interface.h"
+#include "api/rtc_error.h"
+#include "api/rtp_parameters.h"
+#include "api/scoped_refptr.h"
#include "pc/proxy.h"
namespace webrtc {
diff --git a/pc/peer_connection_factory_unittest.cc b/pc/peer_connection_factory_unittest.cc
index d34004c..7ca1ccc 100644
--- a/pc/peer_connection_factory_unittest.cc
+++ b/pc/peer_connection_factory_unittest.cc
@@ -11,13 +11,13 @@
#include "pc/peer_connection_factory.h"
#include <algorithm>
+#include <cstddef>
+#include <cstdio>
#include <memory>
#include <utility>
#include <vector>
#include "api/audio/audio_device.h"
-#include "api/audio/audio_mixer.h"
-#include "api/audio/audio_processing.h"
#include "api/audio_codecs/builtin_audio_decoder_factory.h"
#include "api/audio_codecs/builtin_audio_encoder_factory.h"
#include "api/create_peerconnection_factory.h"
@@ -29,8 +29,15 @@
#include "api/jsep.h"
#include "api/make_ref_counted.h"
#include "api/media_stream_interface.h"
+#include "api/media_types.h"
+#include "api/packet_socket_factory.h"
+#include "api/peer_connection_interface.h"
+#include "api/rtp_parameters.h"
+#include "api/scoped_refptr.h"
#include "api/task_queue/default_task_queue_factory.h"
#include "api/test/mock_packet_socket_factory.h"
+#include "api/units/time_delta.h"
+#include "api/video_codecs/scalability_mode.h"
#include "api/video_codecs/video_decoder_factory_template.h"
#include "api/video_codecs/video_decoder_factory_template_dav1d_adapter.h"
#include "api/video_codecs/video_decoder_factory_template_libvpx_vp8_adapter.h"
@@ -42,18 +49,22 @@
#include "api/video_codecs/video_encoder_factory_template_libvpx_vp9_adapter.h"
#include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h"
#include "media/base/fake_frame_source.h"
+#include "media/base/media_constants.h"
#include "modules/audio_processing/include/mock_audio_processing.h"
+#include "p2p/base/basic_packet_socket_factory.h"
#include "p2p/base/port.h"
#include "p2p/base/port_allocator.h"
#include "p2p/base/port_interface.h"
#include "p2p/test/fake_port_allocator.h"
+#include "pc/connection_context.h"
#include "pc/test/fake_audio_capture_module.h"
#include "pc/test/fake_video_track_source.h"
-#include "pc/test/mock_peer_connection_observers.h"
-#include "rtc_base/gunit.h"
+#include "rtc_base/event.h"
#include "rtc_base/internal/default_socket_server.h"
-#include "rtc_base/rtc_certificate_generator.h"
+#include "rtc_base/network.h"
#include "rtc_base/socket_address.h"
+#include "rtc_base/socket_server.h"
+#include "rtc_base/thread.h"
#include "rtc_base/time_utils.h"
#include "test/gmock.h"
#include "test/gtest.h"
diff --git a/pc/peer_connection_field_trial_tests.cc b/pc/peer_connection_field_trial_tests.cc
index e6aa9a9..be9c49f 100644
--- a/pc/peer_connection_field_trial_tests.cc
+++ b/pc/peer_connection_field_trial_tests.cc
@@ -13,28 +13,27 @@
#include <memory>
#include <set>
+#include <utility>
-#include "api/audio_codecs/builtin_audio_decoder_factory.h"
-#include "api/audio_codecs/builtin_audio_encoder_factory.h"
+#include "absl/algorithm/container.h"
#include "api/create_peerconnection_factory.h"
#include "api/enable_media_with_defaults.h"
#include "api/field_trials.h"
#include "api/field_trials_view.h"
+#include "api/media_types.h"
#include "api/peer_connection_interface.h"
-#include "api/stats/rtcstats_objects.h"
+#include "api/rtp_parameters.h"
+#include "api/scoped_refptr.h"
#include "api/task_queue/default_task_queue_factory.h"
-#include "api/video_codecs/builtin_video_decoder_factory.h"
-#include "api/video_codecs/builtin_video_encoder_factory.h"
-#include "media/engine/webrtc_media_engine.h"
#include "pc/peer_connection_wrapper.h"
#include "pc/session_description.h"
#include "pc/test/fake_audio_capture_module.h"
-#include "pc/test/frame_generator_capturer_video_track_source.h"
-#include "pc/test/peer_connection_test_wrapper.h"
-#include "rtc_base/gunit.h"
+#include "pc/test/mock_peer_connection_observers.h"
+#include "rtc_base/checks.h"
#include "rtc_base/internal/default_socket_server.h"
-#include "rtc_base/physical_socket_server.h"
+#include "rtc_base/socket_server.h"
#include "rtc_base/thread.h"
+#include "system_wrappers/include/clock.h"
#include "test/gtest.h"
#ifdef WEBRTC_ANDROID
diff --git a/pc/peer_connection_header_extension_unittest.cc b/pc/peer_connection_header_extension_unittest.cc
index 0abaf8e..ef296f5 100644
--- a/pc/peer_connection_header_extension_unittest.cc
+++ b/pc/peer_connection_header_extension_unittest.cc
@@ -22,23 +22,20 @@
#include "api/peer_connection_interface.h"
#include "api/rtc_error.h"
#include "api/rtc_event_log/rtc_event_log_factory.h"
-#include "api/rtc_event_log/rtc_event_log_factory_interface.h"
#include "api/rtp_parameters.h"
#include "api/rtp_transceiver_direction.h"
#include "api/rtp_transceiver_interface.h"
#include "api/scoped_refptr.h"
#include "api/task_queue/default_task_queue_factory.h"
-#include "api/task_queue/task_queue_factory.h"
#include "media/base/fake_media_engine.h"
-#include "media/base/media_engine.h"
-#include "p2p/base/port_allocator.h"
+#include "p2p/base/basic_packet_socket_factory.h"
#include "p2p/test/fake_port_allocator.h"
#include "pc/peer_connection_wrapper.h"
#include "pc/session_description.h"
#include "pc/test/enable_fake_media.h"
#include "pc/test/mock_peer_connection_observers.h"
#include "rtc_base/internal/default_socket_server.h"
-#include "rtc_base/rtc_certificate_generator.h"
+#include "rtc_base/socket_server.h"
#include "rtc_base/strings/string_builder.h"
#include "rtc_base/thread.h"
#include "test/gmock.h"
diff --git a/pc/peer_connection_integrationtest.cc b/pc/peer_connection_integrationtest.cc
index 64a527f..34878cb 100644
--- a/pc/peer_connection_integrationtest.cc
+++ b/pc/peer_connection_integrationtest.cc
@@ -53,8 +53,10 @@
#include "api/test/rtc_error_matchers.h"
#include "api/transport/rtp/rtp_source.h"
#include "api/uma_metrics.h"
+#include "api/units/data_rate.h"
#include "api/units/time_delta.h"
#include "api/video/video_rotation.h"
+#include "api/video_codecs/sdp_video_format.h"
#include "logging/rtc_event_log/fake_rtc_event_log.h"
#include "logging/rtc_event_log/fake_rtc_event_log_factory.h"
#include "media/base/codec.h"
diff --git a/pc/peer_connection_interface_unittest.cc b/pc/peer_connection_interface_unittest.cc
index 7c072da..1f1a8fc 100644
--- a/pc/peer_connection_interface_unittest.cc
+++ b/pc/peer_connection_interface_unittest.cc
@@ -63,6 +63,7 @@
#include "media/base/media_config.h"
#include "media/base/stream_params.h"
#include "media/sctp/sctp_transport_internal.h"
+#include "p2p/base/basic_packet_socket_factory.h"
#include "p2p/base/p2p_constants.h"
#include "p2p/base/port.h"
#include "p2p/base/port_allocator.h"
diff --git a/pc/peer_connection_internal.h b/pc/peer_connection_internal.h
index 54f69b9..0026b3e 100644
--- a/pc/peer_connection_internal.h
+++ b/pc/peer_connection_internal.h
@@ -18,14 +18,34 @@
#include <string>
#include <vector>
+#include "absl/strings/string_view.h"
#include "api/audio/audio_device.h"
+#include "api/candidate.h"
+#include "api/crypto/crypto_options.h"
+#include "api/data_channel_interface.h"
+#include "api/field_trials_view.h"
+#include "api/jsep.h"
+#include "api/media_stream_interface.h"
+#include "api/media_types.h"
#include "api/peer_connection_interface.h"
+#include "api/rtc_error.h"
+#include "api/rtp_transceiver_interface.h"
+#include "api/scoped_refptr.h"
#include "call/call.h"
+#include "call/payload_type_picker.h"
+#include "p2p/base/port.h"
+#include "p2p/base/port_allocator.h"
+#include "pc/data_channel_utils.h"
#include "pc/jsep_transport_controller.h"
#include "pc/peer_connection_message_handler.h"
#include "pc/rtp_transceiver.h"
#include "pc/rtp_transmission_manager.h"
-#include "pc/sctp_data_channel.h"
+#include "pc/session_description.h"
+#include "pc/transport_stats.h"
+#include "pc/usage_pattern.h"
+#include "rtc_base/rtc_certificate.h"
+#include "rtc_base/ssl_certificate.h"
+#include "rtc_base/ssl_stream_adapter.h"
namespace webrtc {
diff --git a/pc/peer_connection_jsep_unittest.cc b/pc/peer_connection_jsep_unittest.cc
index 8e97f0b..547593b 100644
--- a/pc/peer_connection_jsep_unittest.cc
+++ b/pc/peer_connection_jsep_unittest.cc
@@ -20,9 +20,7 @@
#include <vector>
#include "absl/strings/string_view.h"
-#include "api/audio/audio_device.h"
#include "api/enable_media_with_defaults.h"
-#include "api/field_trials_view.h"
#include "api/jsep.h"
#include "api/media_stream_interface.h"
#include "api/media_types.h"
@@ -35,14 +33,9 @@
#include "api/rtp_transceiver_interface.h"
#include "api/scoped_refptr.h"
#include "api/task_queue/default_task_queue_factory.h"
-#include "api/task_queue/task_queue_factory.h"
#include "api/transport/field_trial_based_config.h"
-#include "api/transport/sctp_transport_factory_interface.h"
-#include "media/base/media_engine.h"
#include "media/base/stream_params.h"
-#include "media/engine/webrtc_media_engine.h"
#include "p2p/base/p2p_constants.h"
-#include "p2p/base/port_allocator.h"
#include "p2p/base/transport_info.h"
#include "pc/channel_interface.h"
#include "pc/media_session.h"
@@ -50,7 +43,6 @@
#include "pc/sdp_utils.h"
#include "pc/session_description.h"
#include "pc/test/mock_peer_connection_observers.h"
-#include "rtc_base/rtc_certificate_generator.h"
#include "rtc_base/thread.h"
#include "test/gtest.h"
#ifdef WEBRTC_ANDROID
diff --git a/pc/rtp_transceiver.h b/pc/rtp_transceiver.h
index dfaee4f..6ab4f1f 100644
--- a/pc/rtp_transceiver.h
+++ b/pc/rtp_transceiver.h
@@ -301,6 +301,8 @@
void OnNegotiationUpdate(SdpType sdp_type,
const cricket::MediaContentDescription* content);
+ cricket::CodecVendor* codec_vendor() { return &codec_vendor_; }
+
private:
cricket::MediaEngineInterface* media_engine() const {
return context_->media_engine();
diff --git a/pc/sdp_offer_answer.cc b/pc/sdp_offer_answer.cc
index e2df01f..4f88549 100644
--- a/pc/sdp_offer_answer.cc
+++ b/pc/sdp_offer_answer.cc
@@ -64,10 +64,12 @@
#include "p2p/base/transport_description_factory.h"
#include "p2p/base/transport_info.h"
#include "pc/channel_interface.h"
+#include "pc/codec_vendor.h"
#include "pc/connection_context.h"
#include "pc/dtls_transport.h"
#include "pc/jsep_transport_controller.h"
#include "pc/legacy_stats_collector.h"
+#include "pc/media_options.h"
#include "pc/media_session.h"
#include "pc/media_stream.h"
#include "pc/media_stream_observer.h"
@@ -92,6 +94,7 @@
#include "rtc_base/logging.h"
#include "rtc_base/operations_chain.h"
#include "rtc_base/rtc_certificate.h"
+#include "rtc_base/rtc_certificate_generator.h"
#include "rtc_base/ssl_stream_adapter.h"
#include "rtc_base/string_encode.h"
#include "rtc_base/strings/string_builder.h"
@@ -1426,11 +1429,11 @@
std::unique_ptr<webrtc::VideoBitrateAllocatorFactory>
video_bitrate_allocator_factory,
ConnectionContext* context,
- PayloadTypeSuggester* pt_suggester) {
+ cricket::CodecLookupHelper* codec_lookup_helper) {
auto handler = absl::WrapUnique(new SdpOfferAnswerHandler(pc, context));
handler->Initialize(configuration, std::move(cert_generator),
std::move(video_bitrate_allocator_factory), context,
- pt_suggester);
+ codec_lookup_helper);
return handler;
}
@@ -1440,7 +1443,7 @@
std::unique_ptr<webrtc::VideoBitrateAllocatorFactory>
video_bitrate_allocator_factory,
ConnectionContext* context,
- PayloadTypeSuggester* pt_suggester) {
+ cricket::CodecLookupHelper* codec_lookup_helper) {
RTC_DCHECK_RUN_ON(signaling_thread());
// 100 kbps is used by default, but can be overriden by a non-standard
// RTCConfiguration value (not available on Web).
@@ -1473,7 +1476,7 @@
RTC_DCHECK_RUN_ON(signaling_thread());
transport_controller_s()->SetLocalCertificate(certificate);
},
- pt_suggester, pc_->trials());
+ codec_lookup_helper, pc_->trials());
if (pc_->options()->disable_encryption) {
RTC_LOG(LS_INFO)
diff --git a/pc/sdp_offer_answer.h b/pc/sdp_offer_answer.h
index 7ceca8b..235a630 100644
--- a/pc/sdp_offer_answer.h
+++ b/pc/sdp_offer_answer.h
@@ -38,13 +38,14 @@
#include "api/set_remote_description_observer_interface.h"
#include "api/uma_metrics.h"
#include "api/video/video_bitrate_allocator_factory.h"
-#include "call/payload_type.h"
#include "media/base/media_channel.h"
#include "media/base/stream_params.h"
#include "p2p/base/port_allocator.h"
+#include "pc/codec_vendor.h"
#include "pc/connection_context.h"
#include "pc/data_channel_controller.h"
#include "pc/jsep_transport_controller.h"
+#include "pc/media_options.h"
#include "pc/media_session.h"
#include "pc/media_stream_observer.h"
#include "pc/peer_connection_internal.h"
@@ -57,6 +58,7 @@
#include "pc/transceiver_list.h"
#include "pc/webrtc_session_description_factory.h"
#include "rtc_base/operations_chain.h"
+#include "rtc_base/rtc_certificate_generator.h"
#include "rtc_base/ssl_stream_adapter.h"
#include "rtc_base/thread.h"
#include "rtc_base/thread_annotations.h"
@@ -84,7 +86,7 @@
std::unique_ptr<webrtc::VideoBitrateAllocatorFactory>
video_bitrate_allocator_factory,
ConnectionContext* context,
- PayloadTypeSuggester* pt_suggester);
+ cricket::CodecLookupHelper* codec_lookup_helper);
void ResetSessionDescFactory() {
RTC_DCHECK_RUN_ON(signaling_thread());
@@ -219,7 +221,7 @@
std::unique_ptr<webrtc::VideoBitrateAllocatorFactory>
video_bitrate_allocator_factory,
ConnectionContext* context,
- PayloadTypeSuggester* pt_suggester);
+ cricket::CodecLookupHelper* codec_lookup_helper);
rtc::Thread* signaling_thread() const;
rtc::Thread* network_thread() const;
diff --git a/pc/webrtc_session_description_factory.cc b/pc/webrtc_session_description_factory.cc
index 8b32191..75f48b27 100644
--- a/pc/webrtc_session_description_factory.cc
+++ b/pc/webrtc_session_description_factory.cc
@@ -30,8 +30,9 @@
#include "api/rtc_error.h"
#include "api/scoped_refptr.h"
#include "api/sequence_checker.h"
-#include "call/payload_type.h"
+#include "pc/codec_vendor.h"
#include "pc/connection_context.h"
+#include "pc/media_options.h"
#include "pc/media_session.h"
#include "pc/sdp_state_provider.h"
#include "pc/session_description.h"
@@ -118,7 +119,7 @@
rtc::scoped_refptr<rtc::RTCCertificate> certificate,
std::function<void(const rtc::scoped_refptr<rtc::RTCCertificate>&)>
on_certificate_ready,
- PayloadTypeSuggester* pt_suggester,
+ cricket::CodecLookupHelper* codec_lookup_helper,
const FieldTrialsView& field_trials)
: signaling_thread_(context->signaling_thread()),
transport_desc_factory_(field_trials),
@@ -126,7 +127,7 @@
context->use_rtx(),
context->ssrc_generator(),
&transport_desc_factory_,
- pt_suggester),
+ codec_lookup_helper),
// RFC 4566 suggested a Network Time Protocol (NTP) format timestamp
// as the session id and session version. To simplify, it should be fine
// to just use a random number as session id and start version from
diff --git a/pc/webrtc_session_description_factory.h b/pc/webrtc_session_description_factory.h
index de7fd42..935a008 100644
--- a/pc/webrtc_session_description_factory.h
+++ b/pc/webrtc_session_description_factory.h
@@ -25,8 +25,9 @@
#include "api/rtc_error.h"
#include "api/scoped_refptr.h"
#include "api/task_queue/task_queue_base.h"
-#include "call/payload_type.h"
#include "p2p/base/transport_description_factory.h"
+#include "pc/codec_vendor.h"
+#include "pc/media_options.h"
#include "pc/media_session.h"
#include "pc/sdp_state_provider.h"
#include "rtc_base/rtc_certificate.h"
@@ -54,7 +55,7 @@
rtc::scoped_refptr<rtc::RTCCertificate> certificate,
std::function<void(const rtc::scoped_refptr<rtc::RTCCertificate>&)>
on_certificate_ready,
- PayloadTypeSuggester* pt_suggester,
+ cricket::CodecLookupHelper* codec_lookup_helper,
const FieldTrialsView& field_trials);
~WebRtcSessionDescriptionFactory();