From 1fd66656b3754c22a43f4eded57e022916bb6064 Mon Sep 17 00:00:00 2001 From: emircan Date: Mon, 21 Aug 2017 17:30:58 -0700 Subject: [PATCH] Modify profiles for H264 encode SW fallback We have only Constrained Baseline profile available in SW encoder impl so modify the profile to that in case of a fallback BUG=chromium:735959 Review-Url: https://codereview.webrtc.org/2997913003 Cr-Commit-Position: refs/heads/master@{#19436} --- webrtc/media/BUILD.gn | 3 ++- .../engine/videoencodersoftwarefallbackwrapper.cc | 11 +++++++++++ .../engine/videoencodersoftwarefallbackwrapper.h | 3 ++- 3 files changed, 15 insertions(+), 2 deletions(-) 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_;