Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1780)

Unified Diff: webrtc/media/engine/webrtcvideoengine2.cc

Issue 2449993003: Replace WebRtcVideoEncoderFactory::VideoCodec with cricket::VideoCodec (Closed)
Patch Set: Compare only codec names, not VideoCodec::Matches Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/media/engine/webrtcvideoengine2.h ('k') | webrtc/media/engine/webrtcvideoengine2_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/media/engine/webrtcvideoengine2.cc
diff --git a/webrtc/media/engine/webrtcvideoengine2.cc b/webrtc/media/engine/webrtcvideoengine2.cc
index 490bbf4504d865d160dc85bb5204d268134c6cc7..98b3adf18a27d51c4df4281a7a8707dd2cc8ba22 100644
--- a/webrtc/media/engine/webrtcvideoengine2.cc
+++ b/webrtc/media/engine/webrtcvideoengine2.cc
@@ -49,7 +49,7 @@ class EncoderFactoryAdapter : public webrtc::VideoEncoderFactory {
// Implement webrtc::VideoEncoderFactory.
webrtc::VideoEncoder* Create() override {
- return factory_->CreateVideoEncoder(webrtc::kVideoCodecVP8);
+ return factory_->CreateVideoEncoder(VideoCodec(kVp8CodecName));
}
void Destroy(webrtc::VideoEncoder* encoder) override {
@@ -99,11 +99,11 @@ class WebRtcSimulcastEncoderFactory
: factory_(factory) {}
static bool UseSimulcastEncoderFactory(
- const std::vector<VideoCodec>& codecs) {
+ const std::vector<cricket::VideoCodec>& codecs) {
// If any codec is VP8, use the simulcast factory. If asked to create a
// non-VP8 codec, we'll just return a contained factory encoder directly.
for (const auto& codec : codecs) {
- if (codec.type == webrtc::kVideoCodecVP8) {
+ if (CodecNamesEq(codec.name.c_str(), kVp8CodecName)) {
return true;
}
}
@@ -111,22 +111,22 @@ class WebRtcSimulcastEncoderFactory
}
webrtc::VideoEncoder* CreateVideoEncoder(
- webrtc::VideoCodecType type) override {
+ const cricket::VideoCodec& codec) override {
RTC_DCHECK(factory_ != NULL);
// If it's a codec type we can simulcast, create a wrapped encoder.
- if (type == webrtc::kVideoCodecVP8) {
+ if (CodecNamesEq(codec.name.c_str(), kVp8CodecName)) {
return new webrtc::SimulcastEncoderAdapter(
new EncoderFactoryAdapter(factory_));
}
- webrtc::VideoEncoder* encoder = factory_->CreateVideoEncoder(type);
+ webrtc::VideoEncoder* encoder = factory_->CreateVideoEncoder(codec);
if (encoder) {
non_simulcast_encoders_.push_back(encoder);
}
return encoder;
}
- const std::vector<VideoCodec>& codecs() const override {
- return factory_->codecs();
+ const std::vector<cricket::VideoCodec>& supported_codecs() const override {
+ return factory_->supported_codecs();
}
bool EncoderTypeHasInternalSource(
@@ -156,21 +156,6 @@ class WebRtcSimulcastEncoderFactory
std::vector<webrtc::VideoEncoder*> non_simulcast_encoders_;
};
-bool CodecIsInternallySupported(const std::string& codec_name) {
- if (CodecNamesEq(codec_name, kVp8CodecName)) {
- return true;
- }
- if (CodecNamesEq(codec_name, kVp9CodecName)) {
- return webrtc::VP9Encoder::IsSupported() &&
- webrtc::VP9Decoder::IsSupported();
- }
- if (CodecNamesEq(codec_name, kH264CodecName)) {
- return webrtc::H264Encoder::IsSupported() &&
- webrtc::H264Decoder::IsSupported();
- }
- return false;
-}
-
void AddDefaultFeedbackParams(VideoCodec* codec) {
codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamCcm, kRtcpFbCcmParamFir));
codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamNack, kParamValueEmpty));
@@ -443,12 +428,13 @@ std::vector<VideoCodec> DefaultVideoCodecList() {
AddCodecAndMaybeRtxCodec(
MakeVideoCodecWithDefaultFeedbackParams(kDefaultVp8PlType, kVp8CodecName),
&codecs);
- if (CodecIsInternallySupported(kVp9CodecName)) {
+ if (webrtc::VP9Encoder::IsSupported() && webrtc::VP9Decoder::IsSupported()) {
AddCodecAndMaybeRtxCodec(MakeVideoCodecWithDefaultFeedbackParams(
kDefaultVp9PlType, kVp9CodecName),
&codecs);
}
- if (CodecIsInternallySupported(kH264CodecName)) {
+ if (webrtc::H264Encoder::IsSupported() &&
+ webrtc::H264Decoder::IsSupported()) {
VideoCodec codec = MakeVideoCodecWithDefaultFeedbackParams(
kDefaultH264PlType, kH264CodecName);
// TODO(hta): Move all parameter generation for SDP into the codec
@@ -468,6 +454,9 @@ std::vector<VideoCodec> DefaultVideoCodecList() {
return codecs;
}
+static std::vector<VideoCodec> GetSupportedCodecs(
+ const WebRtcVideoEncoderFactory* external_encoder_factory);
+
rtc::scoped_refptr<webrtc::VideoEncoderConfig::EncoderSpecificSettings>
WebRtcVideoChannel2::WebRtcVideoSendStream::ConfigureVideoEncoderSettings(
const VideoCodec& codec) {
@@ -565,7 +554,7 @@ WebRtcVideoEngine2::WebRtcVideoEngine2()
external_decoder_factory_(NULL),
external_encoder_factory_(NULL) {
LOG(LS_INFO) << "WebRtcVideoEngine2::WebRtcVideoEngine2()";
- video_codecs_ = GetSupportedCodecs();
+ video_codecs_ = GetSupportedCodecs(external_encoder_factory_);
}
WebRtcVideoEngine2::~WebRtcVideoEngine2() {
@@ -630,37 +619,38 @@ void WebRtcVideoEngine2::SetExternalEncoderFactory(
if (encoder_factory &&
WebRtcSimulcastEncoderFactory::UseSimulcastEncoderFactory(
- encoder_factory->codecs())) {
+ encoder_factory->supported_codecs())) {
simulcast_encoder_factory_.reset(
new WebRtcSimulcastEncoderFactory(encoder_factory));
encoder_factory = simulcast_encoder_factory_.get();
}
external_encoder_factory_ = encoder_factory;
- video_codecs_ = GetSupportedCodecs();
+ video_codecs_ = GetSupportedCodecs(encoder_factory);
}
-std::vector<VideoCodec> WebRtcVideoEngine2::GetSupportedCodecs() const {
+static std::vector<VideoCodec> GetSupportedCodecs(
+ const WebRtcVideoEncoderFactory* external_encoder_factory) {
std::vector<VideoCodec> supported_codecs = DefaultVideoCodecList();
- if (external_encoder_factory_ == NULL) {
+ if (external_encoder_factory == nullptr) {
LOG(LS_INFO) << "Supported codecs: "
<< CodecVectorToString(supported_codecs);
return supported_codecs;
}
std::stringstream out;
- const std::vector<WebRtcVideoEncoderFactory::VideoCodec>& codecs =
- external_encoder_factory_->codecs();
+ const std::vector<VideoCodec>& codecs =
+ external_encoder_factory->supported_codecs();
for (size_t i = 0; i < codecs.size(); ++i) {
- out << codecs[i].name;
+ VideoCodec codec = codecs[i];
+ out << codec.name;
if (i != codecs.size() - 1) {
out << ", ";
}
// Don't add internally-supported codecs twice.
- if (CodecIsInternallySupported(codecs[i].name)) {
+ if (IsCodecSupported(supported_codecs, codec))
continue;
- }
// External video encoders are given payloads 120-127. This also means that
// we only support up to 8 external payload types.
@@ -673,7 +663,7 @@ std::vector<VideoCodec> WebRtcVideoEngine2::GetSupportedCodecs() const {
const int kExternalVideoPayloadTypeBase = 120;
size_t payload_type = kExternalVideoPayloadTypeBase + i;
RTC_DCHECK(payload_type < 128);
- VideoCodec codec(static_cast<int>(payload_type), codecs[i].name);
+ codec.id = payload_type;
AddDefaultFeedbackParams(&codec);
AddCodecAndMaybeRtxCodec(codec, &supported_codecs);
@@ -716,35 +706,17 @@ WebRtcVideoChannel2::~WebRtcVideoChannel2() {
delete kv.second;
}
-bool WebRtcVideoChannel2::CodecIsExternallySupported(
- const std::string& name) const {
- if (external_encoder_factory_ == NULL) {
- return false;
- }
-
- const std::vector<WebRtcVideoEncoderFactory::VideoCodec> external_codecs =
- external_encoder_factory_->codecs();
- for (size_t c = 0; c < external_codecs.size(); ++c) {
- if (CodecNamesEq(name, external_codecs[c].name)) {
- return true;
- }
- }
- return false;
-}
-
std::vector<WebRtcVideoChannel2::VideoCodecSettings>
WebRtcVideoChannel2::FilterSupportedCodecs(
- const std::vector<WebRtcVideoChannel2::VideoCodecSettings>& mapped_codecs)
- const {
- std::vector<VideoCodecSettings> supported_codecs;
- for (size_t i = 0; i < mapped_codecs.size(); ++i) {
- const VideoCodecSettings& codec = mapped_codecs[i];
- if (CodecIsInternallySupported(codec.codec.name) ||
- CodecIsExternallySupported(codec.codec.name)) {
- supported_codecs.push_back(codec);
- }
+ const std::vector<VideoCodecSettings>& mapped_codecs) const {
+ const std::vector<VideoCodec> supported_codecs =
+ GetSupportedCodecs(external_encoder_factory_);
+ std::vector<VideoCodecSettings> filtered_codecs;
+ for (const VideoCodecSettings& mapped_codec : mapped_codecs) {
+ if (IsCodecSupported(supported_codecs, mapped_codec.codec))
+ filtered_codecs.push_back(mapped_codec);
}
- return supported_codecs;
+ return filtered_codecs;
}
bool WebRtcVideoChannel2::ReceiveCodecsHaveChanged(
@@ -1770,17 +1742,6 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::GetSsrcs() const {
return ssrcs_;
}
-webrtc::VideoCodecType CodecTypeFromName(const std::string& name) {
- if (CodecNamesEq(name, kVp8CodecName)) {
- return webrtc::kVideoCodecVP8;
- } else if (CodecNamesEq(name, kVp9CodecName)) {
- return webrtc::kVideoCodecVP9;
- } else if (CodecNamesEq(name, kH264CodecName)) {
- return webrtc::kVideoCodecH264;
- }
- return webrtc::kVideoCodecUnknown;
-}
-
WebRtcVideoChannel2::WebRtcVideoSendStream::AllocatedEncoder
WebRtcVideoChannel2::WebRtcVideoSendStream::CreateVideoEncoder(
const VideoCodec& codec) {
@@ -1794,7 +1755,7 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::CreateVideoEncoder(
if (external_encoder_factory_ != NULL) {
webrtc::VideoEncoder* encoder =
- external_encoder_factory_->CreateVideoEncoder(type);
+ external_encoder_factory_->CreateVideoEncoder(codec);
if (encoder != NULL) {
return AllocatedEncoder(encoder, type, true);
}
« no previous file with comments | « webrtc/media/engine/webrtcvideoengine2.h ('k') | webrtc/media/engine/webrtcvideoengine2_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698