/* * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #include "modules/video_coding/codecs/test/test_config.h" #include #include "modules/video_coding/include/video_codec_interface.h" #include "rtc_base/checks.h" #include "system_wrappers/include/cpu_info.h" #include "test/video_codec_settings.h" namespace webrtc { namespace test { namespace { const int kBaseKeyFrameInterval = 3000; } // namespace void TestConfig::SetCodecSettings(VideoCodecType codec_type, int num_temporal_layers, bool error_concealment_on, bool denoising_on, bool frame_dropper_on, bool spatial_resize_on, bool resilience_on, int width, int height) { webrtc::test::CodecSettings(codec_type, &codec_settings); // TODO(brandtr): Move the setting of |width| and |height| to the tests, and // DCHECK that they are set before initializing the codec instead. codec_settings.width = width; codec_settings.height = height; switch (codec_settings.codecType) { case kVideoCodecVP8: codec_settings.VP8()->resilience = resilience_on ? kResilientStream : kResilienceOff; codec_settings.VP8()->numberOfTemporalLayers = num_temporal_layers; codec_settings.VP8()->denoisingOn = denoising_on; codec_settings.VP8()->errorConcealmentOn = error_concealment_on; codec_settings.VP8()->automaticResizeOn = spatial_resize_on; codec_settings.VP8()->frameDroppingOn = frame_dropper_on; codec_settings.VP8()->keyFrameInterval = kBaseKeyFrameInterval; break; case kVideoCodecVP9: codec_settings.VP9()->resilienceOn = resilience_on; codec_settings.VP9()->numberOfTemporalLayers = num_temporal_layers; codec_settings.VP9()->denoisingOn = denoising_on; codec_settings.VP9()->frameDroppingOn = frame_dropper_on; codec_settings.VP9()->keyFrameInterval = kBaseKeyFrameInterval; codec_settings.VP9()->automaticResizeOn = spatial_resize_on; break; case kVideoCodecH264: codec_settings.H264()->frameDroppingOn = frame_dropper_on; codec_settings.H264()->keyFrameInterval = kBaseKeyFrameInterval; break; default: RTC_NOTREACHED(); break; } } int TestConfig::NumberOfCores() const { return use_single_core ? 1 : CpuInfo::DetectNumberOfCores(); } int TestConfig::NumberOfTemporalLayers() const { if (codec_settings.codecType == kVideoCodecVP8) { return codec_settings.VP8().numberOfTemporalLayers; } else if (codec_settings.codecType == kVideoCodecVP9) { return codec_settings.VP9().numberOfTemporalLayers; } else { return 1; } } void TestConfig::Print() const { printf("Video config:\n"); printf(" Filename : %s\n", filename.c_str()); printf(" # CPU cores used : %u\n", NumberOfCores()); PrintCodecSettings(); printf("\n"); } void TestConfig::PrintCodecSettings() const { printf(" Codec settings:\n"); printf(" Codec type : %s\n", CodecTypeToPayloadString(codec_settings.codecType)); printf(" Start bitrate : %d kbps\n", codec_settings.startBitrate); printf(" Max bitrate : %d kbps\n", codec_settings.maxBitrate); printf(" Min bitrate : %d kbps\n", codec_settings.minBitrate); printf(" Width : %d\n", codec_settings.width); printf(" Height : %d\n", codec_settings.height); printf(" Max frame rate : %d\n", codec_settings.maxFramerate); printf(" QPmax : %d\n", codec_settings.qpMax); if (codec_settings.codecType == kVideoCodecVP8) { printf(" Complexity : %d\n", codec_settings.VP8().complexity); printf(" Resilience : %d\n", codec_settings.VP8().resilience); printf(" # temporal layers : %d\n", codec_settings.VP8().numberOfTemporalLayers); printf(" Denoising : %d\n", codec_settings.VP8().denoisingOn); printf(" Error concealment : %d\n", codec_settings.VP8().errorConcealmentOn); printf(" Automatic resize : %d\n", codec_settings.VP8().automaticResizeOn); printf(" Frame dropping : %d\n", codec_settings.VP8().frameDroppingOn); printf(" Key frame interval: %d\n", codec_settings.VP8().keyFrameInterval); } else if (codec_settings.codecType == kVideoCodecVP9) { printf(" Complexity : %d\n", codec_settings.VP9().complexity); printf(" Resilience : %d\n", codec_settings.VP9().resilienceOn); printf(" # temporal layers : %d\n", codec_settings.VP9().numberOfTemporalLayers); printf(" Denoising : %d\n", codec_settings.VP9().denoisingOn); printf(" Frame dropping : %d\n", codec_settings.VP9().frameDroppingOn); printf(" Key frame interval: %d\n", codec_settings.VP9().keyFrameInterval); printf(" Adaptive QP mode : %d\n", codec_settings.VP9().adaptiveQpMode); printf(" Automatic resize : %d\n", codec_settings.VP9().automaticResizeOn); printf(" # spatial layers : %d\n", codec_settings.VP9().numberOfSpatialLayers); printf(" Flexible mode : %d\n", codec_settings.VP9().flexibleMode); } else if (codec_settings.codecType == kVideoCodecH264) { printf(" Frame dropping : %d\n", codec_settings.H264().frameDroppingOn); printf(" Key frame interval: %d\n", codec_settings.H264().keyFrameInterval); printf(" Profile : %d\n", codec_settings.H264().profile); } } } // namespace test } // namespace webrtc