@@ -713,18 +713,36 @@ SimulcastEncoderAdapter::FetchOrCreateEncoderContext(
713713 encoder_context = std::move (*encoder_context_iter);
714714 cached_encoder_contexts_.erase (encoder_context_iter);
715715 } else {
716- std::unique_ptr<VideoEncoder> encoder;
717716 std::unique_ptr<VideoEncoder> primary_encoder =
718717 primary_encoder_factory_->CreateVideoEncoder (video_format_);
719- VideoEncoder::EncoderInfo primary_info = primary_encoder->GetEncoderInfo ();
720- VideoEncoder::EncoderInfo fallback_info = primary_info;
718+ std::unique_ptr<VideoEncoder> fallback_encoder;
721719 if (fallback_encoder_factory_ != nullptr ) {
722- std::unique_ptr<VideoEncoder> fallback_encoder =
720+ fallback_encoder =
723721 fallback_encoder_factory_->CreateVideoEncoder (video_format_);
722+ }
723+ std::unique_ptr<VideoEncoder> encoder;
724+ VideoEncoder::EncoderInfo primary_info;
725+ VideoEncoder::EncoderInfo fallback_info;
726+ if (primary_encoder != nullptr ) {
727+ primary_info = primary_encoder->GetEncoderInfo ();
728+ fallback_info = primary_info;
729+ if (fallback_encoder == nullptr ) {
730+ encoder = std::move (primary_encoder);
731+ } else {
732+ encoder = CreateVideoEncoderSoftwareFallbackWrapper (
733+ std::move (fallback_encoder), std::move (primary_encoder),
734+ prefer_temporal_support);
735+ }
736+ } else if (fallback_encoder != nullptr ) {
737+ RTC_LOG (LS_WARNING) << " Failed to create primary " << video_format_.name
738+ << " encoder. Use fallback encoder." ;
724739 fallback_info = fallback_encoder->GetEncoderInfo ();
725- encoder = CreateVideoEncoderSoftwareFallbackWrapper (
726- std::move (fallback_encoder), std::move (encoder),
727- prefer_temporal_support);
740+ primary_info = fallback_info;
741+ encoder = std::move (fallback_encoder);
742+ } else {
743+ RTC_LOG (LS_ERROR) << " Failed to create primary and fallback "
744+ << video_format_.name << " encoders." ;
745+ return nullptr ;
728746 }
729747 encoder_context = std::make_unique<SimulcastEncoderAdapter::EncoderContext>(
730748 std::move (encoder), prefer_temporal_support, primary_info,
0 commit comments