Index: webrtc/media/engine/webrtcvideoengine2.cc |
diff --git a/webrtc/media/engine/webrtcvideoengine2.cc b/webrtc/media/engine/webrtcvideoengine2.cc |
index e37bf94a651cc517676c484861ee063ebc1b1aca..5f79f4b04b961e28cf2f230bbd2a0cd63f9eb85d 100644 |
--- a/webrtc/media/engine/webrtcvideoengine2.cc |
+++ b/webrtc/media/engine/webrtcvideoengine2.cc |
@@ -1526,16 +1526,16 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::VideoSendStreamParameters:: |
WebRtcVideoChannel2::WebRtcVideoSendStream::AllocatedEncoder::AllocatedEncoder( |
webrtc::VideoEncoder* encoder, |
- webrtc::VideoCodecType type, |
+ const cricket::VideoCodec& codec, |
bool external) |
: encoder(encoder), |
external_encoder(nullptr), |
- type(type), |
+ codec(codec), |
external(external) { |
if (external) { |
external_encoder = encoder; |
this->encoder = |
- new webrtc::VideoEncoderSoftwareFallbackWrapper(type, encoder); |
+ new webrtc::VideoEncoderSoftwareFallbackWrapper(codec, encoder); |
} |
} |
@@ -1563,7 +1563,7 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream( |
encoder_sink_(nullptr), |
parameters_(std::move(config), options, max_bitrate_bps, codec_settings), |
rtp_parameters_(CreateRtpParametersWithOneEncoding()), |
- allocated_encoder_(nullptr, webrtc::kVideoCodecUnknown, false), |
+ allocated_encoder_(nullptr, cricket::VideoCodec(), false), |
sending_(false), |
last_frame_timestamp_us_(0) { |
parameters_.config.rtp.max_packet_size = kVideoMtu; |
@@ -1698,36 +1698,32 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::AllocatedEncoder |
WebRtcVideoChannel2::WebRtcVideoSendStream::CreateVideoEncoder( |
const VideoCodec& codec) { |
RTC_DCHECK_RUN_ON(&thread_checker_); |
- webrtc::VideoCodecType type = CodecTypeFromName(codec.name); |
// Do not re-create encoders of the same type. |
- if (type == allocated_encoder_.type && allocated_encoder_.encoder != NULL) { |
+ if (codec == allocated_encoder_.codec && |
+ allocated_encoder_.encoder != nullptr) { |
return allocated_encoder_; |
} |
+ // Try creating external encoder. |
if (external_encoder_factory_ != NULL) { |
webrtc::VideoEncoder* encoder = |
external_encoder_factory_->CreateVideoEncoder(codec); |
if (encoder != NULL) { |
- return AllocatedEncoder(encoder, type, true); |
+ return AllocatedEncoder(encoder, codec, true /* is_external */); |
} |
} |
- if (type == webrtc::kVideoCodecVP8) { |
- return AllocatedEncoder( |
- webrtc::VideoEncoder::Create(webrtc::VideoEncoder::kVp8), type, false); |
- } else if (type == webrtc::kVideoCodecVP9) { |
- return AllocatedEncoder( |
- webrtc::VideoEncoder::Create(webrtc::VideoEncoder::kVp9), type, false); |
- } else if (type == webrtc::kVideoCodecH264) { |
- return AllocatedEncoder( |
- webrtc::VideoEncoder::Create(webrtc::VideoEncoder::kH264), type, false); |
+ // Try creating internal encoder. |
+ if (webrtc::VideoEncoder::IsSupportedSoftware(codec)) { |
+ return AllocatedEncoder(webrtc::VideoEncoder::Create(codec), codec, |
+ false /* is_external */); |
} |
// This shouldn't happen, we should not be trying to create something we don't |
// support. |
- RTC_DCHECK(false); |
- return AllocatedEncoder(NULL, webrtc::kVideoCodecUnknown, false); |
+ RTC_NOTREACHED(); |
+ return AllocatedEncoder(NULL, cricket::VideoCodec(), false); |
} |
void WebRtcVideoChannel2::WebRtcVideoSendStream::DestroyVideoEncoder( |