| 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(
|
|
|