From 82fac89381b6981f3f9d83ce38100330c700433d Mon Sep 17 00:00:00 2001 From: emircan Date: Wed, 23 Aug 2017 14:19:50 -0700 Subject: [PATCH] Reland of Modify profiles for H264 encode SW fallback (patchset #1 id:1 of https://codereview.webrtc.org/2995373002/ ) Reason for revert: Fix and reland. Original issue's description: > Revert of Modify profiles for H264 encode SW fallback (patchset #2 id:20001 of https://codereview.webrtc.org/2997913003/ ) > > Reason for revert: > Breaks the internal bots. > Root cause: The "public_deps" is defined behind an "if" condition which may not be true. > > Original issue's description: > > 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} > > Committed: https://chromium.googlesource.com/external/webrtc/+/1fd66656b3754c22a43f4eded57e022916bb6064 > > TBR=magjed@webrtc.org,emircan@chromium.org > # Skipping CQ checks because original CL landed less than 1 days ago. > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > BUG=chromium:735959 > > Review-Url: https://codereview.webrtc.org/2995373002 > Cr-Commit-Position: refs/heads/master@{#19438} > Committed: https://chromium.googlesource.com/external/webrtc/+/296b64eb25949d84d9cb85fce02e7ba05be9d419 TBR=magjed@webrtc.org,zhihuang@webrtc.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=chromium:735959 Review-Url: https://codereview.webrtc.org/2997423002 Cr-Commit-Position: refs/heads/master@{#19476} --- webrtc/media/BUILD.gn | 8 ++++---- .../engine/videoencodersoftwarefallbackwrapper.cc | 11 +++++++++++ .../engine/videoencodersoftwarefallbackwrapper.h | 3 ++- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/webrtc/media/BUILD.gn b/webrtc/media/BUILD.gn index dcb5247d08..66fce0b3d7 100644 --- a/webrtc/media/BUILD.gn +++ b/webrtc/media/BUILD.gn @@ -61,6 +61,7 @@ rtc_static_library("rtc_media_base") { defines = [] libs = [] deps = [] + public_deps = [] sources = [ "base/adaptedvideotracksource.cc", "base/adaptedvideotracksource.h", @@ -108,16 +109,13 @@ rtc_static_library("rtc_media_base") { include_dirs = [] if (rtc_build_libyuv) { deps += [ "$rtc_libyuv_dir" ] - public_deps = [ - "$rtc_libyuv_dir", - ] + public_deps += [ "$rtc_libyuv_dir" ] } else { # Need to add a directory normally exported by libyuv. include_dirs += [ "$rtc_libyuv_dir/include" ] } deps += [ - ":rtc_h264_profile_id", "..:webrtc_common", "../api:libjingle_peerconnection_api", "../p2p", @@ -125,6 +123,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_;