mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-15 06:40:43 +01:00

This deletes the resilienceOn flag in VideoCodecVP8 and VideoCodecVP9. Instead, the implementations of VP8 and VP9 set resilience mode internally, based on the configuration of temporal and spatial layers. The nack_enabled argument to VideoCodecInitializer::SetupCodec becomes unused with this cl. In a followup, it will be deleted, together with the corresponding argument to VideoStreamEncoder methods. An applications which really wants to configure resilience differently can do that by injecting an EncoderFactory with encoders behaving as desired. Bug: webrtc:8830 Change-Id: I9990faf07d3e95c0fb4a56fcc9a56c2005b4a6fa Reviewed-on: https://webrtc-review.googlesource.com/71380 Reviewed-by: Karl Wiberg <kwiberg@webrtc.org> Reviewed-by: Sergey Silkin <ssilkin@webrtc.org> Reviewed-by: Rasmus Brandt <brandtr@webrtc.org> Commit-Queue: Niels Moller <nisse@webrtc.org> Cr-Commit-Position: refs/heads/master@{#23025}
85 lines
2.8 KiB
C++
85 lines
2.8 KiB
C++
/*
|
|
* 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/videoprocessor_integrationtest.h"
|
|
|
|
#include <vector>
|
|
|
|
#include "media/base/mediaconstants.h"
|
|
#include "test/testsupport/fileutils.h"
|
|
|
|
namespace webrtc {
|
|
namespace test {
|
|
|
|
#if defined(WEBRTC_USE_H264)
|
|
|
|
namespace {
|
|
// Codec settings.
|
|
const int kCifWidth = 352;
|
|
const int kCifHeight = 288;
|
|
const int kNumFrames = 100;
|
|
} // namespace
|
|
|
|
class VideoProcessorIntegrationTestOpenH264
|
|
: public VideoProcessorIntegrationTest {
|
|
protected:
|
|
VideoProcessorIntegrationTestOpenH264() {
|
|
config_.filename = "foreman_cif";
|
|
config_.filepath = ResourcePath(config_.filename, "yuv");
|
|
config_.num_frames = kNumFrames;
|
|
// Only allow encoder/decoder to use single core, for predictability.
|
|
config_.use_single_core = true;
|
|
config_.hw_encoder = false;
|
|
config_.hw_decoder = false;
|
|
config_.encoded_frame_checker = &h264_keyframe_checker_;
|
|
}
|
|
};
|
|
|
|
TEST_F(VideoProcessorIntegrationTestOpenH264, ConstantHighBitrate) {
|
|
config_.SetCodecSettings(cricket::kH264CodecName, 1, 1, 1, false, true, false,
|
|
kCifWidth, kCifHeight);
|
|
|
|
std::vector<RateProfile> rate_profiles = {{500, 30, kNumFrames}};
|
|
|
|
std::vector<RateControlThresholds> rc_thresholds = {
|
|
{5, 1, 0, 0.1, 0.2, 0.1, 0, 1}};
|
|
|
|
std::vector<QualityThresholds> quality_thresholds = {{37, 35, 0.93, 0.91}};
|
|
|
|
ProcessFramesAndMaybeVerify(rate_profiles, &rc_thresholds,
|
|
&quality_thresholds, nullptr, nullptr);
|
|
}
|
|
|
|
// H264: Enable SingleNalUnit packetization mode. Encoder should split
|
|
// large frames into multiple slices and limit length of NAL units.
|
|
TEST_F(VideoProcessorIntegrationTestOpenH264, SingleNalUnit) {
|
|
config_.h264_codec_settings.packetization_mode =
|
|
H264PacketizationMode::SingleNalUnit;
|
|
config_.max_payload_size_bytes = 500;
|
|
config_.SetCodecSettings(cricket::kH264CodecName, 1, 1, 1, false, true, false,
|
|
kCifWidth, kCifHeight);
|
|
|
|
std::vector<RateProfile> rate_profiles = {{500, 30, kNumFrames}};
|
|
|
|
std::vector<RateControlThresholds> rc_thresholds = {
|
|
{5, 1, 0, 0.1, 0.2, 0.1, 0, 1}};
|
|
|
|
std::vector<QualityThresholds> quality_thresholds = {{37, 35, 0.93, 0.91}};
|
|
|
|
BitstreamThresholds bs_thresholds = {config_.max_payload_size_bytes};
|
|
|
|
ProcessFramesAndMaybeVerify(rate_profiles, &rc_thresholds,
|
|
&quality_thresholds, &bs_thresholds, nullptr);
|
|
}
|
|
|
|
#endif // defined(WEBRTC_USE_H264)
|
|
|
|
} // namespace test
|
|
} // namespace webrtc
|