Updates to videoprocessor_integration_test:

-added internal spatial resize and frame dropper as codec config parameters.
    -made one test dedicated to internal spatial resize.
    -set the denoiser to be on for the temporal layer test.
    -correct the setting for number of spatial resizes for temporal layer test.
Review URL: https://webrtc-codereview.appspot.com/866007

git-svn-id: http://webrtc.googlecode.com/svn/trunk@2912 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
marpan@webrtc.org 2012-10-11 16:27:34 +00:00
parent 597b4472eb
commit ab7fa4e9a8

View File

@ -40,6 +40,8 @@ struct CodecConfigPars {
int key_frame_interval;
bool error_concealment_on;
bool denoising_on;
bool frame_dropper_on;
bool spatial_resize_on;
};
// Quality metrics.
@ -137,6 +139,8 @@ class VideoProcessorIntegrationTest: public testing::Test {
int key_frame_interval_;
bool error_concealment_on_;
bool denoising_on_;
bool frame_dropper_on_;
bool spatial_resize_on_;
VideoProcessorIntegrationTest() {}
@ -173,6 +177,10 @@ class VideoProcessorIntegrationTest: public testing::Test {
denoising_on_;
config_.codec_settings->codecSpecific.VP8.numberOfTemporalLayers =
num_temporal_layers_;
config_.codec_settings->codecSpecific.VP8.frameDroppingOn =
frame_dropper_on_;
config_.codec_settings->codecSpecific.VP8.automaticResizeOn =
spatial_resize_on_;
frame_reader_ =
new webrtc::test::FrameReaderImpl(config_.input_filename,
@ -313,10 +321,7 @@ class VideoProcessorIntegrationTest: public testing::Test {
printf("\n");
EXPECT_LE(num_frames_to_hit_target_, max_time_hit_target);
EXPECT_LE(num_dropped_frames, max_num_dropped_frames);
// Only if the spatial resizer is on in the codec wrapper do we expect to
// get |num_spatial_resizes| resizes, otherwise we should not get any.
EXPECT_TRUE(num_resize_actions == 0 ||
num_resize_actions == num_spatial_resizes);
EXPECT_EQ(num_resize_actions, num_spatial_resizes);
}
// Layer index corresponding to frame number, for up to 3 layers.
@ -399,6 +404,8 @@ class VideoProcessorIntegrationTest: public testing::Test {
num_temporal_layers_ = process.num_temporal_layers;
error_concealment_on_ = process.error_concealment_on;
denoising_on_ = process.denoising_on;
frame_dropper_on_ = process.frame_dropper_on;
spatial_resize_on_ = process.spatial_resize_on;
SetUpCodecConfig();
// Update the layers and the codec with the initial rates.
bit_rate_ = rate_profile.target_bit_rate[0];
@ -501,12 +508,16 @@ void SetCodecParameters(CodecConfigPars* process_settings,
int key_frame_interval,
int num_temporal_layers,
bool error_concealment_on,
bool denoising_on) {
bool denoising_on,
bool frame_dropper_on,
bool spatial_resize_on) {
process_settings->packet_loss = packet_loss;
process_settings->key_frame_interval = key_frame_interval;
process_settings->num_temporal_layers = num_temporal_layers,
process_settings->error_concealment_on = error_concealment_on;
process_settings->denoising_on = denoising_on;
process_settings->frame_dropper_on = frame_dropper_on;
process_settings->spatial_resize_on = spatial_resize_on;
}
void SetQualityMetrics(QualityMetrics* quality_metrics,
@ -550,7 +561,7 @@ TEST_F(VideoProcessorIntegrationTest, ProcessZeroPacketLoss) {
rate_profile.num_frames = kNbrFramesShort;
// Codec/network settings.
CodecConfigPars process_settings;
SetCodecParameters(&process_settings, 0.0f, -1, 1, true, true);
SetCodecParameters(&process_settings, 0.0f, -1, 1, true, true, true, false);
// Metrics for expected quality.
QualityMetrics quality_metrics;
SetQualityMetrics(&quality_metrics, 37.0, 33.0, 0.90, 0.90);
@ -573,7 +584,7 @@ TEST_F(VideoProcessorIntegrationTest, Process5PercentPacketLoss) {
rate_profile.num_frames = kNbrFramesShort;
// Codec/network settings.
CodecConfigPars process_settings;
SetCodecParameters(&process_settings, 0.05f, -1, 1, true, true);
SetCodecParameters(&process_settings, 0.05f, -1, 1, true, true, true, false);
// Metrics for expected quality.
QualityMetrics quality_metrics;
SetQualityMetrics(&quality_metrics, 20.0, 16.0, 0.60, 0.40);
@ -596,7 +607,7 @@ TEST_F(VideoProcessorIntegrationTest, Process10PercentPacketLoss) {
rate_profile.num_frames = kNbrFramesShort;
// Codec/network settings.
CodecConfigPars process_settings;
SetCodecParameters(&process_settings, 0.1f, -1, 1, true, true);
SetCodecParameters(&process_settings, 0.1f, -1, 1, true, true, true, false);
// Metrics for expected quality.
QualityMetrics quality_metrics;
SetQualityMetrics(&quality_metrics, 19.0, 16.0, 0.50, 0.35);
@ -623,7 +634,7 @@ TEST_F(VideoProcessorIntegrationTest, ProcessNoLossChangeBitRate) {
rate_profile.num_frames = kNbrFramesLong;
// Codec/network settings.
CodecConfigPars process_settings;
SetCodecParameters(&process_settings, 0.0f, -1, 1, true, true);
SetCodecParameters(&process_settings, 0.0f, -1, 1, true, true, true, false);
// Metrics for expected quality.
QualityMetrics quality_metrics;
SetQualityMetrics(&quality_metrics, 34.0, 32.0, 0.85, 0.80);
@ -656,7 +667,7 @@ TEST_F(VideoProcessorIntegrationTest, ProcessNoLossChangeFrameRateFrameDrop) {
rate_profile.num_frames = kNbrFramesLong;
// Codec/network settings.
CodecConfigPars process_settings;
SetCodecParameters(&process_settings, 0.0f, -1, 1, true, true);
SetCodecParameters(&process_settings, 0.0f, -1, 1, true, true, true, false);
// Metrics for expected quality.
QualityMetrics quality_metrics;
SetQualityMetrics(&quality_metrics, 31.0, 23.0, 0.80, 0.65);
@ -677,11 +688,10 @@ TEST_F(VideoProcessorIntegrationTest, ProcessNoLossChangeFrameRateFrameDrop) {
// Run with no packet loss, at low bitrate, then increase rate somewhat.
// Key frame is thrown in every 120 frames. Can expect some frame drops after
// key frame, even at high rate. If resizer is on, expect spatial resize down
// at first key frame, and back up at second key frame. Expected values for
// quality and rate control in this test are such that the test should pass
// with resizing on or off. Error_concealment is off in this test since there
// is a memory leak with resizing and error concealment.
// key frame, even at high rate. The internal spatial resizer is on, so expect
// spatial resize down at first key frame, and back up at second key frame.
// Error_concealment is off in this test since there is a memory leak with
// resizing and error concealment.
TEST_F(VideoProcessorIntegrationTest, ProcessNoLossSpatialResizeFrameDrop) {
config_.networking_config.packet_loss_probability = 0;
// Bitrate and frame rate profile.
@ -693,7 +703,7 @@ TEST_F(VideoProcessorIntegrationTest, ProcessNoLossSpatialResizeFrameDrop) {
rate_profile.num_frames = kNbrFramesLong;
// Codec/network settings.
CodecConfigPars process_settings;
SetCodecParameters(&process_settings, 0.0f, 120, 1, false, true);
SetCodecParameters(&process_settings, 0.0f, 120, 1, false, true, true, true);
// Metrics for expected quality.: lower quality on average from up-sampling
// the down-sampled portion of the run, in case resizer is on.
QualityMetrics quality_metrics;
@ -712,7 +722,7 @@ TEST_F(VideoProcessorIntegrationTest, ProcessNoLossSpatialResizeFrameDrop) {
// Run with no packet loss, with 3 temporal layers, with a rate update in the
// middle of the sequence. The max values for the frame size mismatch and
// encoding rate mismatch are applied to each layer.
// No dropped frames in this test, and the denoiser is off for temporal layers.
// No dropped frames in this test, and internal spatial resizer is off.
// One key frame (first frame only) in sequence, so no spatial resizing.
TEST_F(VideoProcessorIntegrationTest, ProcessNoLossTemporalLayers) {
config_.networking_config.packet_loss_probability = 0;
@ -724,14 +734,14 @@ TEST_F(VideoProcessorIntegrationTest, ProcessNoLossTemporalLayers) {
rate_profile.num_frames = kNbrFramesLong;
// Codec/network settings.
CodecConfigPars process_settings;
SetCodecParameters(&process_settings, 0.0f, -1, 3, true, false);
SetCodecParameters(&process_settings, 0.0f, -1, 3, true, true, true, false);
// Metrics for expected quality.
QualityMetrics quality_metrics;
SetQualityMetrics(&quality_metrics, 32.5, 30.0, 0.85, 0.80);
// Metrics for rate control.
RateControlMetrics rc_metrics[2];
SetRateControlMetrics(rc_metrics, 0, 0, 20, 30, 10, 10, 0);
SetRateControlMetrics(rc_metrics, 1, 0, 0, 30, 15, 10, 1);
SetRateControlMetrics(rc_metrics, 1, 0, 0, 30, 15, 10, 0);
ProcessFramesAndVerify(quality_metrics,
rate_profile,
process_settings,