Prefer external video codecs over internal in SDP
Currently, when we generate the list of supported video codecs that will be signaled in SDP, we start with the internal video codecs and then append the external video codecs. When we create a video encoder for a given codec, we prefer an external encoder over an internal encoder. This CL lists the external video codecs first in SDP instead, so that we consistently prefer external video codecs over internal. The reason for doing this is that we will otherwise prefer an internal SW H264 encoder over an external HW H264 encoder if the H264 profiles differs. BUG=chromium:688541 Review-Url: https://codereview.webrtc.org/2974383002 Cr-Commit-Position: refs/heads/master@{#19026}
This commit is contained in:
parent
96765abcb9
commit
06f3aae345
@ -537,8 +537,6 @@ static std::vector<VideoCodec> GetSupportedCodecs(
|
||||
<< CodecVectorToString(internal_codecs);
|
||||
|
||||
std::vector<VideoCodec> unified_codecs;
|
||||
AppendVideoCodecs(internal_codecs, &unified_codecs);
|
||||
|
||||
if (external_encoder_factory != nullptr) {
|
||||
const std::vector<VideoCodec>& external_codecs =
|
||||
external_encoder_factory->supported_codecs();
|
||||
@ -547,6 +545,8 @@ static std::vector<VideoCodec> GetSupportedCodecs(
|
||||
<< CodecVectorToString(external_codecs);
|
||||
}
|
||||
|
||||
AppendVideoCodecs(internal_codecs, &unified_codecs);
|
||||
|
||||
return unified_codecs;
|
||||
}
|
||||
|
||||
|
||||
@ -819,12 +819,12 @@ TEST_F(WebRtcVideoEngineTest, ReportSupportedExternalCodecs) {
|
||||
|
||||
std::vector<cricket::VideoCodec> codecs(engine_.codecs());
|
||||
ASSERT_GE(codecs.size(), 2u);
|
||||
cricket::VideoCodec internal_codec = codecs.front();
|
||||
cricket::VideoCodec external_codec = codecs.back();
|
||||
cricket::VideoCodec external_codec = codecs[0];
|
||||
cricket::VideoCodec internal_codec = codecs[1];
|
||||
|
||||
// The external codec will appear last in the vector.
|
||||
EXPECT_EQ("VP8", internal_codec.name);
|
||||
// The external codec will appear first in the vector.
|
||||
EXPECT_EQ("FakeExternalCodec", external_codec.name);
|
||||
EXPECT_EQ("VP8", internal_codec.name);
|
||||
}
|
||||
|
||||
// Test that an external codec that was added after the engine was initialized
|
||||
@ -836,15 +836,15 @@ TEST_F(WebRtcVideoEngineTest, ReportSupportedExternalCodecsWithAddedCodec) {
|
||||
engine_.SetExternalEncoderFactory(&encoder_factory);
|
||||
engine_.Init();
|
||||
|
||||
// The first external codec will appear last in the vector.
|
||||
// The first external codec will appear first in the vector.
|
||||
std::vector<cricket::VideoCodec> codecs_before(engine_.codecs());
|
||||
EXPECT_EQ("FakeExternalCodec1", codecs_before.back().name);
|
||||
EXPECT_EQ("FakeExternalCodec1", codecs_before.front().name);
|
||||
|
||||
// Add second codec.
|
||||
encoder_factory.AddSupportedVideoCodecType("FakeExternalCodec2");
|
||||
std::vector<cricket::VideoCodec> codecs_after(engine_.codecs());
|
||||
EXPECT_EQ(codecs_before.size() + 1, codecs_after.size());
|
||||
EXPECT_EQ("FakeExternalCodec2", codecs_after.back().name);
|
||||
EXPECT_EQ("FakeExternalCodec2", codecs_after[1].name);
|
||||
}
|
||||
|
||||
TEST_F(WebRtcVideoEngineTest, RegisterExternalDecodersIfSupported) {
|
||||
@ -1066,6 +1066,11 @@ class WebRtcVideoChannelTest : public WebRtcVideoEngineTest {
|
||||
ASSERT_TRUE(channel_->SetSendParameters(send_parameters_));
|
||||
}
|
||||
|
||||
void TearDown() override {
|
||||
channel_ = nullptr;
|
||||
fake_call_ = nullptr;
|
||||
}
|
||||
|
||||
protected:
|
||||
FakeVideoSendStream* AddSendStream() {
|
||||
return AddSendStream(StreamParams::CreateLegacy(++last_ssrc_));
|
||||
@ -1975,6 +1980,8 @@ class Vp9SettingsTest : public WebRtcVideoChannelTest {
|
||||
// Remove references to encoder_factory_ since this will be destroyed
|
||||
// before channel_ and engine_.
|
||||
ASSERT_TRUE(channel_->SetSendParameters(send_parameters_));
|
||||
|
||||
WebRtcVideoChannelTest::TearDown();
|
||||
}
|
||||
|
||||
cricket::FakeWebRtcVideoEncoderFactory encoder_factory_;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user