Delete batch mode from VideoProcessorIntegrationTest.

After landing https://codereview.webrtc.org/2997283002/,
batch mode will no longer be needed.

BUG=webrtc:6634

Review-Url: https://codereview.webrtc.org/3005593002
Cr-Commit-Position: refs/heads/master@{#19520}
This commit is contained in:
brandtr
2017-08-25 07:11:19 -07:00
committed by Commit Bot
parent a387eb48b1
commit 9dbd084761
4 changed files with 37 additions and 96 deletions

View File

@ -30,7 +30,6 @@ const bool kSpatialResizeOn = false;
const bool kFrameDropperOn = false;
// Test settings.
const bool kBatchMode = true;
const bool kVerboseLogging = true;
const float kPacketLoss = 0.0f;
const VisualizationParams kVisualizationParams = {
@ -59,7 +58,7 @@ class PlotVideoProcessorIntegrationTest
int framerate,
const std::string& filename) {
SetTestConfig(&config_, hw_codec_, kUseSingleCore, kPacketLoss, filename,
kVerboseLogging, kBatchMode);
kVerboseLogging);
SetCodecSettings(&config_, codec_type_, kNumTemporalLayers,
kErrorConcealmentOn, kDenoisingOn, kFrameDropperOn,
kSpatialResizeOn, kResilienceOn, width, height);

View File

@ -113,12 +113,6 @@ struct TestConfig {
// If HW or SW codec should be used.
bool hw_codec = false;
// In batch mode, the VideoProcessor is fed all the frames for processing
// before any metrics are calculated. This is useful for pipelining HW codecs,
// for which some calculated metrics otherwise would be incorrect. The
// downside with batch mode is that mid-test rate allocation is not supported.
bool batch_mode = false;
};
// Handles encoding/decoding of video using the VideoEncoder/VideoDecoder

View File

@ -22,7 +22,6 @@ namespace {
const bool kUseSingleCore = true;
const bool kVerboseLogging = false;
const bool kHwCodec = false;
const bool kBatchMode = false;
// Codec settings.
const bool kResilienceOn = true;
@ -49,7 +48,7 @@ const std::nullptr_t kNoVisualizationParams = nullptr;
// not been added.
TEST_F(VideoProcessorIntegrationTest, Process0PercentPacketLossH264) {
SetTestConfig(&config_, kHwCodec, kUseSingleCore, 0.0f, kForemanCif,
kVerboseLogging, kBatchMode);
kVerboseLogging);
SetCodecSettings(&config_, kVideoCodecH264, 1, false, false, true, false,
kResilienceOn, kCifWidth, kCifHeight);
@ -77,7 +76,7 @@ TEST_F(VideoProcessorIntegrationTest, Process0PercentPacketLossH264) {
// One key frame (first frame only) in sequence.
TEST_F(VideoProcessorIntegrationTest, Process0PercentPacketLossVP9) {
SetTestConfig(&config_, kHwCodec, kUseSingleCore, 0.0f, kForemanCif,
kVerboseLogging, kBatchMode);
kVerboseLogging);
SetCodecSettings(&config_, kVideoCodecVP9, 1, false, false, true, false,
kResilienceOn, kCifWidth, kCifHeight);
@ -99,7 +98,7 @@ TEST_F(VideoProcessorIntegrationTest, Process0PercentPacketLossVP9) {
// lower. One key frame (first frame only) in sequence.
TEST_F(VideoProcessorIntegrationTest, Process5PercentPacketLossVP9) {
SetTestConfig(&config_, kHwCodec, kUseSingleCore, 0.05f, kForemanCif,
kVerboseLogging, kBatchMode);
kVerboseLogging);
SetCodecSettings(&config_, kVideoCodecVP9, 1, false, false, true, false,
kResilienceOn, kCifWidth, kCifHeight);
@ -123,7 +122,7 @@ TEST_F(VideoProcessorIntegrationTest, Process5PercentPacketLossVP9) {
// One key frame (first frame only) in sequence.
TEST_F(VideoProcessorIntegrationTest, ProcessNoLossChangeBitRateVP9) {
SetTestConfig(&config_, kHwCodec, kUseSingleCore, 0.0f, kForemanCif,
kVerboseLogging, kBatchMode);
kVerboseLogging);
SetCodecSettings(&config_, kVideoCodecVP9, 1, false, false, true, false,
kResilienceOn, kCifWidth, kCifHeight);
@ -155,7 +154,7 @@ TEST_F(VideoProcessorIntegrationTest, ProcessNoLossChangeBitRateVP9) {
TEST_F(VideoProcessorIntegrationTest,
ProcessNoLossChangeFrameRateFrameDropVP9) {
SetTestConfig(&config_, kHwCodec, kUseSingleCore, 0.0f, kForemanCif,
kVerboseLogging, kBatchMode);
kVerboseLogging);
SetCodecSettings(&config_, kVideoCodecVP9, 1, false, false, true, false,
kResilienceOn, kCifWidth, kCifHeight);
@ -180,7 +179,7 @@ TEST_F(VideoProcessorIntegrationTest,
// VP9: Run with no packet loss and denoiser on. One key frame (first frame).
TEST_F(VideoProcessorIntegrationTest, ProcessNoLossDenoiserOnVP9) {
SetTestConfig(&config_, kHwCodec, kUseSingleCore, 0.0f, kForemanCif,
kVerboseLogging, kBatchMode);
kVerboseLogging);
SetCodecSettings(&config_, kVideoCodecVP9, 1, false, true, true, false,
kResilienceOn, kCifWidth, kCifHeight);
@ -204,7 +203,7 @@ TEST_F(VideoProcessorIntegrationTest, ProcessNoLossDenoiserOnVP9) {
TEST_F(VideoProcessorIntegrationTest,
DISABLED_ProcessNoLossSpatialResizeFrameDropVP9) {
SetTestConfig(&config_, kHwCodec, kUseSingleCore, 0.0f, kForemanCif,
kVerboseLogging, kBatchMode);
kVerboseLogging);
SetCodecSettings(&config_, kVideoCodecVP9, 1, false, false, true, true,
kResilienceOn, kCifWidth, kCifHeight);
@ -232,7 +231,7 @@ TEST_F(VideoProcessorIntegrationTest,
// to -1 below means no periodic key frames in test.
TEST_F(VideoProcessorIntegrationTest, ProcessZeroPacketLoss) {
SetTestConfig(&config_, kHwCodec, kUseSingleCore, 0.0f, kForemanCif,
kVerboseLogging, kBatchMode);
kVerboseLogging);
SetCodecSettings(&config_, kVideoCodecVP8, 1, false, true, true, false,
kResilienceOn, kCifWidth, kCifHeight);
@ -254,7 +253,7 @@ TEST_F(VideoProcessorIntegrationTest, ProcessZeroPacketLoss) {
// lower. One key frame (first frame only) in sequence.
TEST_F(VideoProcessorIntegrationTest, Process5PercentPacketLoss) {
SetTestConfig(&config_, kHwCodec, kUseSingleCore, 0.05f, kForemanCif,
kVerboseLogging, kBatchMode);
kVerboseLogging);
SetCodecSettings(&config_, kVideoCodecVP8, 1, false, true, true, false,
kResilienceOn, kCifWidth, kCifHeight);
@ -276,7 +275,7 @@ TEST_F(VideoProcessorIntegrationTest, Process5PercentPacketLoss) {
// One key frame (first frame only) in sequence.
TEST_F(VideoProcessorIntegrationTest, Process10PercentPacketLoss) {
SetTestConfig(&config_, kHwCodec, kUseSingleCore, 0.1f, kForemanCif,
kVerboseLogging, kBatchMode);
kVerboseLogging);
SetCodecSettings(&config_, kVideoCodecVP8, 1, false, true, true, false,
kResilienceOn, kCifWidth, kCifHeight);
@ -294,30 +293,6 @@ TEST_F(VideoProcessorIntegrationTest, Process10PercentPacketLoss) {
kNoVisualizationParams);
}
// This test is identical to VideoProcessorIntegrationTest.ProcessZeroPacketLoss
// except that |batch_mode| is turned on. The main point of this test is to see
// that the reported stats are not wildly varying between batch mode and the
// regular online mode.
TEST_F(VideoProcessorIntegrationTest, ProcessInBatchMode) {
SetTestConfig(&config_, kHwCodec, kUseSingleCore, 0.0f, kForemanCif,
kVerboseLogging, true /* batch_mode */);
SetCodecSettings(&config_, kVideoCodecVP8, 1, false, true, true, false,
kResilienceOn, kCifWidth, kCifHeight);
RateProfile rate_profile;
SetRateProfile(&rate_profile, 0, 500, 30, 0);
rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1;
rate_profile.num_frames = kNumFramesShort;
std::vector<RateControlThresholds> rc_thresholds;
AddRateControlThresholds(0, 40, 20, 10, 15, 0, 1, &rc_thresholds);
QualityThresholds quality_thresholds(34.95, 33.0, 0.90, 0.89);
ProcessFramesAndMaybeVerify(rate_profile, &rc_thresholds, &quality_thresholds,
kNoVisualizationParams);
}
#endif // !defined(WEBRTC_IOS)
// The tests below are currently disabled for Android. For ARM, the encoder
@ -342,7 +317,7 @@ TEST_F(VideoProcessorIntegrationTest, ProcessInBatchMode) {
#endif
TEST_F(VideoProcessorIntegrationTest, MAYBE_ProcessNoLossChangeBitRateVP8) {
SetTestConfig(&config_, kHwCodec, kUseSingleCore, 0.0f, kForemanCif,
kVerboseLogging, kBatchMode);
kVerboseLogging);
SetCodecSettings(&config_, kVideoCodecVP8, 1, false, true, true, false,
kResilienceOn, kCifWidth, kCifHeight);
@ -382,7 +357,7 @@ TEST_F(VideoProcessorIntegrationTest, MAYBE_ProcessNoLossChangeBitRateVP8) {
TEST_F(VideoProcessorIntegrationTest,
MAYBE_ProcessNoLossChangeFrameRateFrameDropVP8) {
SetTestConfig(&config_, kHwCodec, kUseSingleCore, 0.0f, kForemanCif,
kVerboseLogging, kBatchMode);
kVerboseLogging);
SetCodecSettings(&config_, kVideoCodecVP8, 1, false, true, true, false,
kResilienceOn, kCifWidth, kCifHeight);
@ -418,7 +393,7 @@ TEST_F(VideoProcessorIntegrationTest,
#endif
TEST_F(VideoProcessorIntegrationTest, MAYBE_ProcessNoLossTemporalLayersVP8) {
SetTestConfig(&config_, kHwCodec, kUseSingleCore, 0.0f, kForemanCif,
kVerboseLogging, kBatchMode);
kVerboseLogging);
SetCodecSettings(&config_, kVideoCodecVP8, 3, false, true, true, false,
kResilienceOn, kCifWidth, kCifHeight);

View File

@ -492,59 +492,34 @@ class VideoProcessorIntegrationTest : public testing::Test {
ResetRateControlMetrics(
rate_profile.frame_index_rate_update[update_index + 1]);
if (config_.batch_mode) {
// In batch mode, we calculate the metrics for all frames after all frames
// have been sent for encoding.
while (frame_number < num_frames) {
processor_->ProcessFrame(frame_number);
VerifyQpParser(frame_number);
const int tl_idx = TemporalLayerIndexForFrame(frame_number);
++num_frames_per_update_[tl_idx];
++num_frames_total_;
UpdateRateControlMetrics(frame_number);
for (frame_number = 0; frame_number < num_frames; ++frame_number) {
processor_->ProcessFrame(frame_number);
}
++frame_number;
for (frame_number = 0; frame_number < num_frames; ++frame_number) {
const int tl_idx = TemporalLayerIndexForFrame(frame_number);
++num_frames_per_update_[tl_idx];
++num_frames_total_;
UpdateRateControlMetrics(frame_number);
}
} else {
// In online mode, we calculate the metrics for a given frame right after
// it has been sent for encoding.
// If we hit another/next update, verify stats for current state and
// update layers and codec with new rates.
if (frame_number ==
rate_profile.frame_index_rate_update[update_index + 1]) {
PrintAndMaybeVerifyRateControlMetrics(update_index, rc_thresholds);
if (config_.hw_codec) {
LOG(LS_WARNING) << "HW codecs should mostly be run in batch mode, "
"since they may be pipelining.";
}
while (frame_number < num_frames) {
processor_->ProcessFrame(frame_number);
VerifyQpParser(frame_number);
const int tl_idx = TemporalLayerIndexForFrame(frame_number);
++num_frames_per_update_[tl_idx];
++num_frames_total_;
UpdateRateControlMetrics(frame_number);
++frame_number;
// If we hit another/next update, verify stats for current state and
// update layers and codec with new rates.
if (frame_number ==
rate_profile.frame_index_rate_update[update_index + 1]) {
PrintAndMaybeVerifyRateControlMetrics(update_index, rc_thresholds);
// Update layer rates and the codec with new rates.
++update_index;
bitrate_kbps_ = rate_profile.target_bit_rate[update_index];
framerate_ = rate_profile.input_frame_rate[update_index];
SetTemporalLayerRates();
ResetRateControlMetrics(
rate_profile.frame_index_rate_update[update_index + 1]);
processor_->SetRates(bitrate_kbps_, framerate_);
}
// Update layer rates and the codec with new rates.
++update_index;
bitrate_kbps_ = rate_profile.target_bit_rate[update_index];
framerate_ = rate_profile.input_frame_rate[update_index];
SetTemporalLayerRates();
ResetRateControlMetrics(
rate_profile.frame_index_rate_update[update_index + 1]);
processor_->SetRates(bitrate_kbps_, framerate_);
}
}
// Verify rate control metrics for all frames (if in batch mode), or for all
// frames since the last rate update (if not in batch mode).
// Verify rate control metrics for all frames since the last rate update.
PrintAndMaybeVerifyRateControlMetrics(update_index, rc_thresholds);
EXPECT_EQ(num_frames, frame_number);
EXPECT_EQ(num_frames, static_cast<int>(stats_.stats_.size()));
@ -592,8 +567,7 @@ class VideoProcessorIntegrationTest : public testing::Test {
bool use_single_core,
float packet_loss_probability,
std::string filename,
bool verbose_logging,
bool batch_mode) {
bool verbose_logging) {
config->filename = filename;
config->input_filename = ResourcePath(filename, "yuv");
// Generate an output filename in a safe way.
@ -603,7 +577,6 @@ class VideoProcessorIntegrationTest : public testing::Test {
config->use_single_core = use_single_core;
config->verbose = verbose_logging;
config->hw_codec = hw_codec;
config->batch_mode = batch_mode;
}
static void SetCodecSettings(TestConfig* config,