Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1183)

Unified Diff: webrtc/modules/video_coding/codecs/test/videoprocessor_integrationtest.h

Issue 2703333004: Rename config structs in VideoProcessor tests. (Closed)
Patch Set: sprang comments 1. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/video_coding/codecs/test/videoprocessor_integrationtest.h
diff --git a/webrtc/modules/video_coding/codecs/test/videoprocessor_integrationtest.h b/webrtc/modules/video_coding/codecs/test/videoprocessor_integrationtest.h
index ddd343836b5a23791d75d1b9d7cb76505ac168f4..ceaf7cef94b3288d765d0fb16fe52e777d2ab570 100644
--- a/webrtc/modules/video_coding/codecs/test/videoprocessor_integrationtest.h
+++ b/webrtc/modules/video_coding/codecs/test/videoprocessor_integrationtest.h
@@ -62,32 +62,36 @@ const int kCifHeight = 288;
const char kFilenameForemanCif[] = "foreman_cif";
// Codec and network settings.
-struct CodecConfigPars {
+struct CodecParams {
VideoCodecType codec_type;
bool hw_codec;
bool use_single_core;
- float packet_loss;
+
+ int width;
+ int height;
+
int num_temporal_layers;
int key_frame_interval;
bool error_concealment_on;
bool denoising_on;
bool frame_dropper_on;
bool spatial_resize_on;
- int width;
- int height;
+
+ float packet_loss_probability; // [0.0, 1.0].
+
std::string filename;
bool verbose_logging;
};
-// Quality metrics.
-struct QualityMetrics {
- double minimum_avg_psnr;
- double minimum_min_psnr;
- double minimum_avg_ssim;
- double minimum_min_ssim;
+// Thresholds for the quality metrics.
+struct QualityThresholds {
+ double min_avg_psnr;
+ double min_min_psnr;
+ double min_avg_ssim;
+ double min_min_ssim;
};
-// The sequence of bitrate and frame rate changes for the encoder, the frame
+// The sequence of bit rate and frame rate changes for the encoder, the frame
// number where the changes are made, and the total number of frames for the
// test.
struct RateProfile {
@@ -97,12 +101,12 @@ struct RateProfile {
int num_frames;
};
-// Metrics for the rate control. The rate mismatch metrics are defined as
-// percentages.|max_time_hit_target| is defined as number of frames, after a
-// rate update is made to the encoder, for the encoder to reach within
-// |kPercTargetvsActualMismatch| of new target rate. The metrics are defined for
-// each rate update sequence.
-struct RateControlMetrics {
+// Thresholds for the rate control metrics. The rate mismatch thresholds are
+// defined as percentages. |max_time_hit_target| is defined as number of frames,
+// after a rate update is made to the encoder, for the encoder to reach within
+// |kPercTargetvsActualMismatch| of new target rate. The thresholds are defined
+// for each rate update sequence.
+struct RateControlThresholds {
int max_num_dropped_frames;
int max_key_frame_size_mismatch;
int max_delta_frame_size_mismatch;
@@ -131,12 +135,13 @@ const float kScaleKeyFrameSize = 0.5f;
// Integration test for video processor. Encodes+decodes a clip and
// writes it to the output directory. After completion, quality metrics
-// (PSNR and SSIM) and rate control metrics are computed to verify that the
-// quality and encoder response is acceptable. The rate control tests allow us
-// to verify the behavior for changing bitrate, changing frame rate, frame
-// dropping/spatial resize, and temporal layers. The limits for the rate
-// control metrics are set to be fairly conservative, so failure should only
-// happen when some significant regression or breakdown occurs.
+// (PSNR and SSIM) and rate control metrics are computed and compared to given
+// thresholds, to verify that the quality and encoder response is acceptable.
+// The rate control tests allow us to verify the behavior for changing bit rate,
+// changing frame rate, frame dropping/spatial resize, and temporal layers.
+// The thresholds for the rate control metrics are set to be fairly
+// conservative, so failure should only happen when some significant regression
+// or breakdown occurs.
class VideoProcessorIntegrationTest : public testing::Test {
protected:
VideoProcessorIntegrationTest() {
@@ -152,7 +157,7 @@ class VideoProcessorIntegrationTest : public testing::Test {
}
virtual ~VideoProcessorIntegrationTest() = default;
- void SetUpCodecConfig(const CodecConfigPars& process,
+ void SetUpCodecConfig(const CodecParams& process,
const VisualizationParams* visualization_params) {
if (process.hw_codec) {
#if defined(WEBRTC_VIDEOPROCESSOR_INTEGRATIONTEST_HW_CODECS_ENABLED)
@@ -233,7 +238,8 @@ class VideoProcessorIntegrationTest : public testing::Test {
config_.use_single_core = process.use_single_core;
// Key frame interval and packet loss are set for each test.
config_.keyframe_interval = process.key_frame_interval;
- config_.networking_config.packet_loss_probability = packet_loss_;
+ config_.networking_config.packet_loss_probability =
+ packet_loss_probability_;
// Configure codec settings.
config_.codec_settings = &codec_settings_;
@@ -393,14 +399,14 @@ class VideoProcessorIntegrationTest : public testing::Test {
}
// Verify expected behavior of rate control and print out data.
- void VerifyRateControl(int update_index,
- int max_key_frame_size_mismatch,
- int max_delta_frame_size_mismatch,
- int max_encoding_rate_mismatch,
- int max_time_hit_target,
- int max_num_dropped_frames,
- int num_spatial_resizes,
- int num_key_frames) {
+ void VerifyRateControlMetrics(int update_index,
+ int max_key_frame_size_mismatch,
+ int max_delta_frame_size_mismatch,
+ int max_encoding_rate_mismatch,
+ int max_time_hit_target,
+ int max_num_dropped_frames,
+ int num_spatial_resizes,
+ int num_key_frames) {
int num_dropped_frames = processor_->NumberDroppedFrames();
int num_resize_actions = processor_->NumberSpatialResizes();
printf(
@@ -454,6 +460,15 @@ class VideoProcessorIntegrationTest : public testing::Test {
EXPECT_EQ(num_key_frames_, num_key_frames);
}
+ void VerifyQuality(const test::QualityMetricsResult& psnr_result,
+ const test::QualityMetricsResult& ssim_result,
+ const QualityThresholds& quality_thresholds) {
+ EXPECT_GT(psnr_result.average, quality_thresholds.min_avg_psnr);
+ EXPECT_GT(psnr_result.min, quality_thresholds.min_min_psnr);
+ EXPECT_GT(ssim_result.average, quality_thresholds.min_avg_ssim);
+ EXPECT_GT(ssim_result.min, quality_thresholds.min_min_ssim);
+ }
+
// Layer index corresponding to frame number, for up to 3 layers.
void LayerIndexForFrame(int frame_number) {
if (num_temporal_layers_ == 1) {
@@ -505,15 +520,15 @@ class VideoProcessorIntegrationTest : public testing::Test {
}
// Processes all frames in the clip and verifies the result.
- void ProcessFramesAndVerify(QualityMetrics quality_metrics,
+ void ProcessFramesAndVerify(QualityThresholds quality_thresholds,
RateProfile rate_profile,
- CodecConfigPars process,
- RateControlMetrics* rc_metrics,
+ CodecParams process,
+ RateControlThresholds* rc_thresholds,
const VisualizationParams* visualization_params) {
// Codec/config settings.
start_bitrate_ = rate_profile.target_bit_rate[0];
start_frame_rate_ = rate_profile.input_frame_rate[0];
- packet_loss_ = process.packet_loss;
+ packet_loss_probability_ = process.packet_loss_probability;
num_temporal_layers_ = process.num_temporal_layers;
SetUpCodecConfig(process, visualization_params);
// Update the layers and the codec with the initial rates.
@@ -548,14 +563,15 @@ class VideoProcessorIntegrationTest : public testing::Test {
// update layers and codec with new rates.
if (frame_number ==
rate_profile.frame_index_rate_update[update_index + 1]) {
- VerifyRateControl(
- update_index, rc_metrics[update_index].max_key_frame_size_mismatch,
- rc_metrics[update_index].max_delta_frame_size_mismatch,
- rc_metrics[update_index].max_encoding_rate_mismatch,
- rc_metrics[update_index].max_time_hit_target,
- rc_metrics[update_index].max_num_dropped_frames,
- rc_metrics[update_index].num_spatial_resizes,
- rc_metrics[update_index].num_key_frames);
+ VerifyRateControlMetrics(
+ update_index,
+ rc_thresholds[update_index].max_key_frame_size_mismatch,
+ rc_thresholds[update_index].max_delta_frame_size_mismatch,
+ rc_thresholds[update_index].max_encoding_rate_mismatch,
+ rc_thresholds[update_index].max_time_hit_target,
+ rc_thresholds[update_index].max_num_dropped_frames,
+ rc_thresholds[update_index].num_spatial_resizes,
+ rc_thresholds[update_index].num_key_frames);
// Update layer rates and the codec with new rates.
++update_index;
bit_rate_ = rate_profile.target_bit_rate[update_index];
@@ -566,14 +582,14 @@ class VideoProcessorIntegrationTest : public testing::Test {
processor_->SetRates(bit_rate_, frame_rate_);
}
}
- VerifyRateControl(update_index,
- rc_metrics[update_index].max_key_frame_size_mismatch,
- rc_metrics[update_index].max_delta_frame_size_mismatch,
- rc_metrics[update_index].max_encoding_rate_mismatch,
- rc_metrics[update_index].max_time_hit_target,
- rc_metrics[update_index].max_num_dropped_frames,
- rc_metrics[update_index].num_spatial_resizes,
- rc_metrics[update_index].num_key_frames);
+ VerifyRateControlMetrics(
+ update_index, rc_thresholds[update_index].max_key_frame_size_mismatch,
+ rc_thresholds[update_index].max_delta_frame_size_mismatch,
+ rc_thresholds[update_index].max_encoding_rate_mismatch,
+ rc_thresholds[update_index].max_time_hit_target,
+ rc_thresholds[update_index].max_num_dropped_frames,
+ rc_thresholds[update_index].num_spatial_resizes,
+ rc_thresholds[update_index].num_key_frames);
EXPECT_EQ(num_frames, frame_number);
EXPECT_EQ(num_frames + 1, static_cast<int>(stats_.stats_.size()));
@@ -607,10 +623,7 @@ class VideoProcessorIntegrationTest : public testing::Test {
psnr_result.average, psnr_result.min, ssim_result.average,
ssim_result.min);
stats_.PrintSummary();
- EXPECT_GT(psnr_result.average, quality_metrics.minimum_avg_psnr);
- EXPECT_GT(psnr_result.min, quality_metrics.minimum_min_psnr);
- EXPECT_GT(ssim_result.average, quality_metrics.minimum_avg_ssim);
- EXPECT_GT(ssim_result.min, quality_metrics.minimum_min_ssim);
+ VerifyQuality(psnr_result, ssim_result, quality_thresholds);
// Remove analysis file.
if (remove(config_.output_filename.c_str()) < 0) {
@@ -618,25 +631,25 @@ class VideoProcessorIntegrationTest : public testing::Test {
}
}
- static void SetCodecParameters(CodecConfigPars* process_settings,
- VideoCodecType codec_type,
- bool hw_codec,
- bool use_single_core,
- float packet_loss,
- int key_frame_interval,
- int num_temporal_layers,
- bool error_concealment_on,
- bool denoising_on,
- bool frame_dropper_on,
- bool spatial_resize_on,
- int width,
- int height,
- const std::string& filename,
- bool verbose_logging) {
+ static void SetCodecParams(CodecParams* process_settings,
+ VideoCodecType codec_type,
+ bool hw_codec,
+ bool use_single_core,
+ float packet_loss_probability,
+ int key_frame_interval,
+ int num_temporal_layers,
+ bool error_concealment_on,
+ bool denoising_on,
+ bool frame_dropper_on,
+ bool spatial_resize_on,
+ int width,
+ int height,
+ const std::string& filename,
+ bool verbose_logging) {
process_settings->codec_type = codec_type;
process_settings->hw_codec = hw_codec;
process_settings->use_single_core = use_single_core;
- process_settings->packet_loss = packet_loss;
+ process_settings->packet_loss_probability = packet_loss_probability;
process_settings->key_frame_interval = key_frame_interval;
process_settings->num_temporal_layers = num_temporal_layers,
process_settings->error_concealment_on = error_concealment_on;
@@ -649,65 +662,65 @@ class VideoProcessorIntegrationTest : public testing::Test {
process_settings->verbose_logging = verbose_logging;
}
- static void SetCodecParameters(CodecConfigPars* process_settings,
- VideoCodecType codec_type,
- bool hw_codec,
- bool use_single_core,
- float packet_loss,
- int key_frame_interval,
- int num_temporal_layers,
- bool error_concealment_on,
- bool denoising_on,
- bool frame_dropper_on,
- bool spatial_resize_on) {
- SetCodecParameters(process_settings, codec_type, hw_codec, use_single_core,
- packet_loss, key_frame_interval, num_temporal_layers,
- error_concealment_on, denoising_on, frame_dropper_on,
- spatial_resize_on, kCifWidth, kCifHeight,
- kFilenameForemanCif, false /* verbose_logging */);
+ static void SetCodecParams(CodecParams* process_settings,
+ VideoCodecType codec_type,
+ bool hw_codec,
+ bool use_single_core,
+ float packet_loss_probability,
+ int key_frame_interval,
+ int num_temporal_layers,
+ bool error_concealment_on,
+ bool denoising_on,
+ bool frame_dropper_on,
+ bool spatial_resize_on) {
+ SetCodecParams(process_settings, codec_type, hw_codec, use_single_core,
+ packet_loss_probability, key_frame_interval,
+ num_temporal_layers, error_concealment_on, denoising_on,
+ frame_dropper_on, spatial_resize_on, kCifWidth, kCifHeight,
+ kFilenameForemanCif, false /* verbose_logging */);
}
- static void SetQualityMetrics(QualityMetrics* quality_metrics,
- double minimum_avg_psnr,
- double minimum_min_psnr,
- double minimum_avg_ssim,
- double minimum_min_ssim) {
- quality_metrics->minimum_avg_psnr = minimum_avg_psnr;
- quality_metrics->minimum_min_psnr = minimum_min_psnr;
- quality_metrics->minimum_avg_ssim = minimum_avg_ssim;
- quality_metrics->minimum_min_ssim = minimum_min_ssim;
+ static void SetQualityThresholds(QualityThresholds* quality_thresholds,
+ double min_avg_psnr,
+ double min_min_psnr,
+ double min_avg_ssim,
+ double min_min_ssim) {
+ quality_thresholds->min_avg_psnr = min_avg_psnr;
+ quality_thresholds->min_min_psnr = min_min_psnr;
+ quality_thresholds->min_avg_ssim = min_avg_ssim;
+ quality_thresholds->min_min_ssim = min_min_ssim;
}
- static void SetRateProfilePars(RateProfile* rate_profile,
- int update_index,
- int bit_rate,
- int frame_rate,
- int frame_index_rate_update) {
+ static void SetRateProfile(RateProfile* rate_profile,
+ int update_index,
+ int bit_rate,
+ int frame_rate,
+ int frame_index_rate_update) {
rate_profile->target_bit_rate[update_index] = bit_rate;
rate_profile->input_frame_rate[update_index] = frame_rate;
rate_profile->frame_index_rate_update[update_index] =
frame_index_rate_update;
}
- static void SetRateControlMetrics(RateControlMetrics* rc_metrics,
- int update_index,
- int max_num_dropped_frames,
- int max_key_frame_size_mismatch,
- int max_delta_frame_size_mismatch,
- int max_encoding_rate_mismatch,
- int max_time_hit_target,
- int num_spatial_resizes,
- int num_key_frames) {
- rc_metrics[update_index].max_num_dropped_frames = max_num_dropped_frames;
- rc_metrics[update_index].max_key_frame_size_mismatch =
+ static void SetRateControlThresholds(RateControlThresholds* rc_thresholds,
+ int update_index,
+ int max_num_dropped_frames,
+ int max_key_frame_size_mismatch,
+ int max_delta_frame_size_mismatch,
+ int max_encoding_rate_mismatch,
+ int max_time_hit_target,
+ int num_spatial_resizes,
+ int num_key_frames) {
+ rc_thresholds[update_index].max_num_dropped_frames = max_num_dropped_frames;
+ rc_thresholds[update_index].max_key_frame_size_mismatch =
max_key_frame_size_mismatch;
- rc_metrics[update_index].max_delta_frame_size_mismatch =
+ rc_thresholds[update_index].max_delta_frame_size_mismatch =
max_delta_frame_size_mismatch;
- rc_metrics[update_index].max_encoding_rate_mismatch =
+ rc_thresholds[update_index].max_encoding_rate_mismatch =
max_encoding_rate_mismatch;
- rc_metrics[update_index].max_time_hit_target = max_time_hit_target;
- rc_metrics[update_index].num_spatial_resizes = num_spatial_resizes;
- rc_metrics[update_index].num_key_frames = num_key_frames;
+ rc_thresholds[update_index].max_time_hit_target = max_time_hit_target;
+ rc_thresholds[update_index].num_spatial_resizes = num_spatial_resizes;
+ rc_thresholds[update_index].num_key_frames = num_key_frames;
}
// Codecs.
@@ -758,7 +771,7 @@ class VideoProcessorIntegrationTest : public testing::Test {
int start_frame_rate_;
// Codec and network settings.
- float packet_loss_;
+ float packet_loss_probability_;
int num_temporal_layers_;
};

Powered by Google App Engine
This is Rietveld 408576698