Make protection method, filename and resolution configurable for FullStackTest.

Review URL: https://webrtc-codereview.appspot.com/991007

git-svn-id: http://webrtc.googlecode.com/svn/trunk@3315 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
stefan@webrtc.org 2012-12-19 12:45:16 +00:00
parent 4275ab1ca0
commit 1960219530
6 changed files with 56 additions and 12 deletions

View File

@ -114,17 +114,31 @@ class ViEVideoVerificationTest : public testing::Test {
class ParameterizedFullStackTest : public ViEVideoVerificationTest, class ParameterizedFullStackTest : public ViEVideoVerificationTest,
public ::testing::WithParamInterface<int> { public ::testing::WithParamInterface<int> {
public:
static const int kNumFullStackInstances = 4;
protected: protected:
struct TestParameters { struct TestParameters {
NetworkParameters network; NetworkParameters network;
std::string file_name;
int width;
int height;
int bitrate; int bitrate;
double avg_psnr_threshold; double avg_psnr_threshold;
double avg_ssim_threshold; double avg_ssim_threshold;
ProtectionMethod protection_method;
std::string test_label; std::string test_label;
}; };
void SetUp() { void SetUp() {
for (int i = 0; i < kNumFullStackInstances; ++i) {
parameter_table_[i].file_name = webrtc::test::ResourcePath("foreman_cif",
"yuv");
parameter_table_[i].width = 352;
parameter_table_[i].height = 288;
}
int i = 0; int i = 0;
parameter_table_[i].protection_method = kNack;
// Uniform loss => Setting burst length to -1. // Uniform loss => Setting burst length to -1.
parameter_table_[i].network.loss_model = kUniformLoss; parameter_table_[i].network.loss_model = kUniformLoss;
parameter_table_[i].network.packet_loss_rate = 0; parameter_table_[i].network.packet_loss_rate = 0;
@ -136,6 +150,7 @@ class ParameterizedFullStackTest : public ViEVideoVerificationTest,
parameter_table_[i].avg_ssim_threshold = 0.96; parameter_table_[i].avg_ssim_threshold = 0.96;
parameter_table_[i].test_label = "net delay (0, 0), plr 0"; parameter_table_[i].test_label = "net delay (0, 0), plr 0";
++i; ++i;
parameter_table_[i].protection_method = kNack;
parameter_table_[i].network.loss_model = kUniformLoss; parameter_table_[i].network.loss_model = kUniformLoss;
parameter_table_[i].network.packet_loss_rate = 5; parameter_table_[i].network.packet_loss_rate = 5;
parameter_table_[i].network.burst_length = -1; parameter_table_[i].network.burst_length = -1;
@ -146,6 +161,7 @@ class ParameterizedFullStackTest : public ViEVideoVerificationTest,
parameter_table_[i].avg_ssim_threshold = 0.96; parameter_table_[i].avg_ssim_threshold = 0.96;
parameter_table_[i].test_label = "net delay (50, 5), plr 5"; parameter_table_[i].test_label = "net delay (50, 5), plr 5";
++i; ++i;
parameter_table_[i].protection_method = kNack;
parameter_table_[i].network.loss_model = kUniformLoss; parameter_table_[i].network.loss_model = kUniformLoss;
parameter_table_[i].network.packet_loss_rate = 0; parameter_table_[i].network.packet_loss_rate = 0;
parameter_table_[i].network.burst_length = -1; parameter_table_[i].network.burst_length = -1;
@ -156,6 +172,7 @@ class ParameterizedFullStackTest : public ViEVideoVerificationTest,
parameter_table_[i].avg_ssim_threshold = 0.96; parameter_table_[i].avg_ssim_threshold = 0.96;
parameter_table_[i].test_label = "net delay (100, 10), plr 0"; parameter_table_[i].test_label = "net delay (100, 10), plr 0";
++i; ++i;
parameter_table_[i].protection_method = kNack;
parameter_table_[i].network.loss_model = kGilbertElliotLoss; parameter_table_[i].network.loss_model = kGilbertElliotLoss;
parameter_table_[i].network.packet_loss_rate = 5; parameter_table_[i].network.packet_loss_rate = 5;
parameter_table_[i].network.burst_length = 3; parameter_table_[i].network.burst_length = 3;
@ -165,9 +182,11 @@ class ParameterizedFullStackTest : public ViEVideoVerificationTest,
parameter_table_[i].avg_psnr_threshold = 35; parameter_table_[i].avg_psnr_threshold = 35;
parameter_table_[i].avg_ssim_threshold = 0.96; parameter_table_[i].avg_ssim_threshold = 0.96;
parameter_table_[i].test_label = "net delay (100, 10), plr 0"; parameter_table_[i].test_label = "net delay (100, 10), plr 0";
ASSERT_EQ(kNumFullStackInstances - 1, i);
} }
TestParameters parameter_table_[4]; TestParameters parameter_table_[kNumFullStackInstances];
}; };
TEST_F(ViEVideoVerificationTest, RunsBaseStandardTestWithoutErrors) { TEST_F(ViEVideoVerificationTest, RunsBaseStandardTestWithoutErrors) {
@ -213,7 +232,7 @@ TEST_F(ViEVideoVerificationTest, RunsBaseStandardTestWithoutErrors) {
TEST_P(ParameterizedFullStackTest, RunsFullStackWithoutErrors) { TEST_P(ParameterizedFullStackTest, RunsFullStackWithoutErrors) {
// Using CIF here since it's a more common resolution than QCIF, and higher // Using CIF here since it's a more common resolution than QCIF, and higher
// resolutions shouldn't be a problem for a test using VP8. // resolutions shouldn't be a problem for a test using VP8.
input_file_ = webrtc::test::ResourcePath("foreman_cif", "yuv"); input_file_ = parameter_table_[GetParam()].file_name;
FrameDropDetector detector; FrameDropDetector detector;
local_file_renderer_ = new ViEToFileRenderer(); local_file_renderer_ = new ViEToFileRenderer();
remote_file_renderer_ = new FrameDropMonitoringRemoteFileRenderer(&detector); remote_file_renderer_ = new FrameDropMonitoringRemoteFileRenderer(&detector);
@ -224,15 +243,17 @@ TEST_P(ParameterizedFullStackTest, RunsFullStackWithoutErrors) {
// frames every now and then. // frames every now and then.
const int kBitRateKbps = parameter_table_[GetParam()].bitrate; const int kBitRateKbps = parameter_table_[GetParam()].bitrate;
const NetworkParameters network = parameter_table_[GetParam()].network; const NetworkParameters network = parameter_table_[GetParam()].network;
// TODO(mikhal): Resolution and file name should be in the parameter list. int width = parameter_table_[GetParam()].width;
int width = 352; int height = parameter_table_[GetParam()].height;
int height = 288; ProtectionMethod protection_method =
parameter_table_[GetParam()].protection_method;
ViETest::Log("Bit rate : %5d kbps", kBitRateKbps); ViETest::Log("Bit rate : %5d kbps", kBitRateKbps);
ViETest::Log("Packet loss : %5d %%", network.packet_loss_rate); ViETest::Log("Packet loss : %5d %%", network.packet_loss_rate);
ViETest::Log("Network delay: mean=%dms std dev=%d ms", ViETest::Log("Network delay: mean=%dms std dev=%d ms",
network.mean_one_way_delay, network.std_dev_one_way_delay); network.mean_one_way_delay, network.std_dev_one_way_delay);
tests_.TestFullStack(input_file_, width, height, kBitRateKbps, network, tests_.TestFullStack(input_file_, width, height, kBitRateKbps,
local_file_renderer_, remote_file_renderer_, &detector); protection_method, network, local_file_renderer_,
remote_file_renderer_, &detector);
const std::string reference_file = local_file_renderer_->GetFullOutputPath(); const std::string reference_file = local_file_renderer_->GetFullOutputPath();
const std::string output_file = remote_file_renderer_->GetFullOutputPath(); const std::string output_file = remote_file_renderer_->GetFullOutputPath();
StopRenderers(); StopRenderers();
@ -286,6 +307,6 @@ TEST_P(ParameterizedFullStackTest, RunsFullStackWithoutErrors) {
} }
INSTANTIATE_TEST_CASE_P(FullStackTests, ParameterizedFullStackTest, INSTANTIATE_TEST_CASE_P(FullStackTests, ParameterizedFullStackTest,
::testing::Values(0, 1, 2)); ::testing::Range(0, ParameterizedFullStackTest::kNumFullStackInstances));
} // namespace } // namespace

View File

@ -13,6 +13,8 @@
#include <string> #include <string>
#include "webrtc/video_engine/test/auto_test/primitives/general_primitives.h"
class FrameDropDetector; class FrameDropDetector;
struct NetworkParameters; struct NetworkParameters;
class ViEToFileRenderer; class ViEToFileRenderer;
@ -49,6 +51,7 @@ class ViEFileBasedComparisonTests {
int width, int width,
int height, int height,
int bit_rate_kbps, int bit_rate_kbps,
ProtectionMethod protection_method,
const NetworkParameters& network, const NetworkParameters& network,
ViEToFileRenderer* local_file_renderer, ViEToFileRenderer* local_file_renderer,
ViEToFileRenderer* remote_file_renderer, ViEToFileRenderer* remote_file_renderer,

View File

@ -74,13 +74,26 @@ void RenderToFile(webrtc::ViERender* renderer_interface,
} }
void ConfigureRtpRtcp(webrtc::ViERTP_RTCP* rtcp_interface, void ConfigureRtpRtcp(webrtc::ViERTP_RTCP* rtcp_interface,
ProtectionMethod protection_method,
int video_channel) { int video_channel) {
EXPECT_EQ(0, rtcp_interface->SetRTCPStatus(video_channel, EXPECT_EQ(0, rtcp_interface->SetRTCPStatus(video_channel,
webrtc::kRtcpCompound_RFC4585)); webrtc::kRtcpCompound_RFC4585));
EXPECT_EQ(0, rtcp_interface->SetKeyFrameRequestMethod( EXPECT_EQ(0, rtcp_interface->SetKeyFrameRequestMethod(
video_channel, webrtc::kViEKeyFrameRequestPliRtcp)); video_channel, webrtc::kViEKeyFrameRequestPliRtcp));
EXPECT_EQ(0, rtcp_interface->SetTMMBRStatus(video_channel, true)); EXPECT_EQ(0, rtcp_interface->SetTMMBRStatus(video_channel, true));
EXPECT_EQ(0, rtcp_interface->SetNACKStatus(video_channel, true)); switch (protection_method) {
case kNack:
EXPECT_EQ(0, rtcp_interface->SetNACKStatus(video_channel, true));
break;
case kHybridNackFec:
const int kRedPayloadType = 96;
const int kUlpFecPayloadType = 97;
EXPECT_EQ(0, rtcp_interface->SetHybridNACKFECStatus(video_channel,
true,
kRedPayloadType,
kUlpFecPayloadType));
break;
}
} }
bool FindSpecificCodec(webrtc::VideoCodecType of_type, bool FindSpecificCodec(webrtc::VideoCodecType of_type,

View File

@ -25,6 +25,11 @@ class ViERTP_RTCP;
struct VideoCodec; struct VideoCodec;
} }
enum ProtectionMethod {
kNack,
kHybridNackFec,
};
// This constant can be used as input to various functions to not force the // This constant can be used as input to various functions to not force the
// codec resolution. // codec resolution.
const int kDoNotForceResolution = 0; const int kDoNotForceResolution = 0;
@ -57,6 +62,7 @@ void RenderToFile(webrtc::ViERender* renderer_interface,
// Configures RTP-RTCP. // Configures RTP-RTCP.
void ConfigureRtpRtcp(webrtc::ViERTP_RTCP* rtcp_interface, void ConfigureRtpRtcp(webrtc::ViERTP_RTCP* rtcp_interface,
ProtectionMethod protection_method,
int video_channel); int video_channel);
// Finds a codec in the codec list. Returns true on success, false otherwise. // Finds a codec in the codec list. Returns true on success, false otherwise.

View File

@ -52,7 +52,7 @@ void ViEAutoTest::ViEBaseStandardTest() {
video_channel)); video_channel));
EXPECT_EQ(0, capture_interface->StartCapture(capture_id)); EXPECT_EQ(0, capture_interface->StartCapture(capture_id));
ConfigureRtpRtcp(interfaces.rtp_rtcp, video_channel); ConfigureRtpRtcp(interfaces.rtp_rtcp, kNack, video_channel);
EXPECT_EQ(0, render_interface->RegisterVideoRenderModule(*_vrm1)); EXPECT_EQ(0, render_interface->RegisterVideoRenderModule(*_vrm1));
EXPECT_EQ(0, render_interface->RegisterVideoRenderModule(*_vrm2)); EXPECT_EQ(0, render_interface->RegisterVideoRenderModule(*_vrm2));

View File

@ -48,7 +48,7 @@ bool ViEFileBasedComparisonTests::TestCallSetup(
EXPECT_EQ(0, interfaces.capture->ConnectCaptureDevice( EXPECT_EQ(0, interfaces.capture->ConnectCaptureDevice(
capture_id, video_channel)); capture_id, video_channel));
ConfigureRtpRtcp(interfaces.rtp_rtcp, video_channel); ConfigureRtpRtcp(interfaces.rtp_rtcp, kNack, video_channel);
webrtc::ViERender* render_interface = interfaces.render; webrtc::ViERender* render_interface = interfaces.render;
webrtc::ViEImageProcess* image_process = interfaces.image_process; webrtc::ViEImageProcess* image_process = interfaces.image_process;
@ -90,6 +90,7 @@ void ViEFileBasedComparisonTests::TestFullStack(
int width, int width,
int height, int height,
int bit_rate_kbps, int bit_rate_kbps,
ProtectionMethod protection_method,
const NetworkParameters& network, const NetworkParameters& network,
ViEToFileRenderer* local_file_renderer, ViEToFileRenderer* local_file_renderer,
ViEToFileRenderer* remote_file_renderer, ViEToFileRenderer* remote_file_renderer,
@ -115,7 +116,7 @@ void ViEFileBasedComparisonTests::TestFullStack(
EXPECT_EQ(0, interfaces.capture->ConnectCaptureDevice( EXPECT_EQ(0, interfaces.capture->ConnectCaptureDevice(
capture_id, video_channel)); capture_id, video_channel));
ConfigureRtpRtcp(interfaces.rtp_rtcp, video_channel); ConfigureRtpRtcp(interfaces.rtp_rtcp, protection_method, video_channel);
::TestFullStack(interfaces, capture_id, video_channel, width, height, ::TestFullStack(interfaces, capture_id, video_channel, width, height,
bit_rate_kbps, network, frame_drop_detector, bit_rate_kbps, network, frame_drop_detector,