Turn off error resilience for VP9 if no spatial or temporal layers are configured and NACK is enabled.
Error resilience is currently always enabled for VP9 which reduces quality. BUG=webrtc:6783 Review-Url: https://codereview.webrtc.org/2532053002 Cr-Commit-Position: refs/heads/master@{#15390}
This commit is contained in:
@ -46,7 +46,7 @@ VideoCodecVP9 VideoEncoder::GetDefaultVp9Settings() {
|
||||
VideoCodecVP9 vp9_settings;
|
||||
memset(&vp9_settings, 0, sizeof(vp9_settings));
|
||||
|
||||
vp9_settings.resilience = 1;
|
||||
vp9_settings.resilienceOn = true;
|
||||
vp9_settings.numberOfTemporalLayers = 1;
|
||||
vp9_settings.denoisingOn = false;
|
||||
vp9_settings.frameDroppingOn = true;
|
||||
|
||||
@ -298,7 +298,7 @@ int VP9EncoderImpl::InitEncode(const VideoCodec* inst,
|
||||
config_->g_w = codec_.width;
|
||||
config_->g_h = codec_.height;
|
||||
config_->rc_target_bitrate = inst->startBitrate; // in kbit/s
|
||||
config_->g_error_resilient = 1;
|
||||
config_->g_error_resilient = inst->VP9().resilienceOn ? 1 : 0;
|
||||
// Setting the time base of the codec.
|
||||
config_->g_timebase.num = 1;
|
||||
config_->g_timebase.den = 90000;
|
||||
|
||||
@ -21,6 +21,15 @@
|
||||
#include "webrtc/system_wrappers/include/clock.h"
|
||||
|
||||
namespace webrtc {
|
||||
namespace {
|
||||
bool TemporalLayersConfigured(const std::vector<VideoStream>& streams) {
|
||||
for (const VideoStream& stream : streams) {
|
||||
if (stream.temporal_layer_thresholds_bps.size() > 0)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
} // namespace
|
||||
|
||||
bool VideoCodecInitializer::SetupCodec(
|
||||
const VideoEncoderConfig& config,
|
||||
@ -119,12 +128,8 @@ VideoCodec VideoCodecInitializer::VideoEncoderConfigToVideoCodec(
|
||||
*video_codec.VP8() = VideoEncoder::GetDefaultVp8Settings();
|
||||
video_codec.VP8()->numberOfTemporalLayers = static_cast<unsigned char>(
|
||||
streams.back().temporal_layer_thresholds_bps.size() + 1);
|
||||
bool temporal_layers_configured = false;
|
||||
for (const VideoStream& stream : streams) {
|
||||
if (stream.temporal_layer_thresholds_bps.size() > 0)
|
||||
temporal_layers_configured = true;
|
||||
}
|
||||
if (nack_enabled && !temporal_layers_configured) {
|
||||
|
||||
if (nack_enabled && !TemporalLayersConfigured(streams)) {
|
||||
LOG(LS_INFO) << "No temporal layers and nack enabled -> resilience off";
|
||||
video_codec.VP8()->resilience = kResilienceOff;
|
||||
}
|
||||
@ -142,6 +147,13 @@ VideoCodec VideoCodecInitializer::VideoEncoderConfigToVideoCodec(
|
||||
}
|
||||
video_codec.VP9()->numberOfTemporalLayers = static_cast<unsigned char>(
|
||||
streams.back().temporal_layer_thresholds_bps.size() + 1);
|
||||
|
||||
if (nack_enabled && !TemporalLayersConfigured(streams) &&
|
||||
video_codec.VP9()->numberOfSpatialLayers == 1) {
|
||||
LOG(LS_INFO) << "No temporal or spatial layers and nack enabled -> "
|
||||
<< "resilience off";
|
||||
video_codec.VP9()->resilienceOn = false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case kVideoCodecH264: {
|
||||
|
||||
Reference in New Issue
Block a user