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}
This commit is contained in:
emircan
2017-08-21 17:30:58 -07:00
committed by Commit Bot
parent c0cde560f2
commit 1fd66656b3
3 changed files with 15 additions and 2 deletions

View File

@ -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" ]
}

View File

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

View File

@ -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<webrtc::VideoEncoder> fallback_encoder_;