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