diff --git a/webrtc/media/BUILD.gn b/webrtc/media/BUILD.gn index be75f6f57d..5114ba65d5 100644 --- a/webrtc/media/BUILD.gn +++ b/webrtc/media/BUILD.gn @@ -112,7 +112,6 @@ rtc_static_library("rtc_media_base") { } deps += [ - ":rtc_h264_profile_id", "..:webrtc_common", "../api:libjingle_peerconnection_api", "../p2p", @@ -120,6 +119,8 @@ rtc_static_library("rtc_media_base") { "../rtc_base:rtc_base_approved", ] + public_deps += [ ":rtc_h264_profile_id" ] + if (is_nacl) { deps += [ "//native_client_sdk/src/libraries/nacl_io" ] } diff --git a/webrtc/media/engine/videoencodersoftwarefallbackwrapper.cc b/webrtc/media/engine/videoencodersoftwarefallbackwrapper.cc index 2bc74a7e72..540597838a 100644 --- a/webrtc/media/engine/videoencodersoftwarefallbackwrapper.cc +++ b/webrtc/media/engine/videoencodersoftwarefallbackwrapper.cc @@ -10,6 +10,7 @@ #include "webrtc/media/engine/videoencodersoftwarefallbackwrapper.h" +#include "webrtc/media/base/h264_profile_level_id.h" #include "webrtc/media/engine/internalencoderfactory.h" #include "webrtc/modules/video_coding/include/video_error_codes.h" #include "webrtc/rtc_base/checks.h" @@ -89,6 +90,7 @@ VideoEncoderSoftwareFallbackWrapper::VideoEncoderSoftwareFallbackWrapper( } bool VideoEncoderSoftwareFallbackWrapper::InitFallbackEncoder() { + MaybeModifyCodecForFallback(); cricket::InternalEncoderFactory internal_factory; if (!FindMatchingCodec(internal_factory.supported_codecs(), codec_)) { LOG(LS_WARNING) @@ -355,4 +357,13 @@ bool VideoEncoderSoftwareFallbackWrapper::ForcedFallbackParams::ShouldStop( (codec.width * codec.height >= kMinPixelsStop); } +void VideoEncoderSoftwareFallbackWrapper::MaybeModifyCodecForFallback() { + // We have a specific case for H264 ConstrainedBaseline because that is the + // only supported profile in Sw fallback. + if (!cricket::CodecNamesEq(codec_.name.c_str(), cricket::kH264CodecName)) + return; + codec_.SetParam(cricket::kH264FmtpProfileLevelId, + cricket::kH264ProfileLevelConstrainedBaseline); +} + } // namespace webrtc diff --git a/webrtc/media/engine/videoencodersoftwarefallbackwrapper.h b/webrtc/media/engine/videoencodersoftwarefallbackwrapper.h index d11a0f678e..8061c008c6 100644 --- a/webrtc/media/engine/videoencodersoftwarefallbackwrapper.h +++ b/webrtc/media/engine/videoencodersoftwarefallbackwrapper.h @@ -77,6 +77,7 @@ class VideoEncoderSoftwareFallbackWrapper : public VideoEncoder { bool TryReInitForcedFallbackEncoder(); void ValidateSettingsForForcedFallback(); bool IsForcedFallbackActive() const; + void MaybeModifyCodecForFallback(); // Settings used in the last InitEncode call and used if a dynamic fallback to // software is required. @@ -94,7 +95,7 @@ class VideoEncoderSoftwareFallbackWrapper : public VideoEncoder { uint32_t packet_loss_; int64_t rtt_; - const cricket::VideoCodec codec_; + cricket::VideoCodec codec_; webrtc::VideoEncoder* const encoder_; std::unique_ptr fallback_encoder_;