|  | /* | 
|  | *  Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. | 
|  | * | 
|  | *  Use of this source code is governed by a BSD-style license | 
|  | *  that can be found in the LICENSE file in the root of the source | 
|  | *  tree. An additional intellectual property rights grant can be found | 
|  | *  in the file PATENTS.  All contributing project authors may | 
|  | *  be found in the AUTHORS file in the root of the source tree. | 
|  | */ | 
|  |  | 
|  | #include "webrtc/modules/video_coding/codecs/test/videoprocessor_integrationtest.h" | 
|  |  | 
|  | #include "webrtc/test/testsupport/fileutils.h" | 
|  |  | 
|  | namespace webrtc { | 
|  | namespace test { | 
|  |  | 
|  | namespace { | 
|  |  | 
|  | // Loop variables. | 
|  | const int kBitrates[] = {500}; | 
|  | const VideoCodecType kVideoCodecType[] = {kVideoCodecVP8}; | 
|  | const bool kHwCodec[] = {false}; | 
|  |  | 
|  | // Codec settings. | 
|  | const bool kResilienceOn = false; | 
|  | const int kNumTemporalLayers = 1; | 
|  | const bool kDenoisingOn = false; | 
|  | const bool kErrorConcealmentOn = false; | 
|  | const bool kSpatialResizeOn = false; | 
|  | const bool kFrameDropperOn = false; | 
|  |  | 
|  | // Test settings. | 
|  | const bool kUseSingleCore = false; | 
|  | const VisualizationParams kVisualizationParams = { | 
|  | false,  // save_encoded_ivf | 
|  | false,  // save_decoded_y4m | 
|  | }; | 
|  |  | 
|  | const int kNumFrames = 30; | 
|  |  | 
|  | }  // namespace | 
|  |  | 
|  | // Tests for plotting statistics from logs. | 
|  | class VideoProcessorIntegrationTestParameterized | 
|  | : public VideoProcessorIntegrationTest, | 
|  | public ::testing::WithParamInterface< | 
|  | ::testing::tuple<int, VideoCodecType, bool>> { | 
|  | protected: | 
|  | VideoProcessorIntegrationTestParameterized() | 
|  | : bitrate_(::testing::get<0>(GetParam())), | 
|  | codec_type_(::testing::get<1>(GetParam())), | 
|  | hw_codec_(::testing::get<2>(GetParam())) {} | 
|  | ~VideoProcessorIntegrationTestParameterized() override = default; | 
|  |  | 
|  | void RunTest(int width, | 
|  | int height, | 
|  | int framerate, | 
|  | const std::string& filename) { | 
|  | config_.filename = filename; | 
|  | config_.input_filename = ResourcePath(filename, "yuv"); | 
|  | config_.output_filename = | 
|  | TempFilename(OutputPath(), "plot_videoprocessor_integrationtest"); | 
|  | config_.use_single_core = kUseSingleCore; | 
|  | config_.verbose = true; | 
|  | config_.hw_encoder = hw_codec_; | 
|  | config_.hw_decoder = hw_codec_; | 
|  | SetCodecSettings(&config_, codec_type_, kNumTemporalLayers, | 
|  | kErrorConcealmentOn, kDenoisingOn, kFrameDropperOn, | 
|  | kSpatialResizeOn, kResilienceOn, width, height); | 
|  |  | 
|  | RateProfile rate_profile; | 
|  | SetRateProfile(&rate_profile, | 
|  | 0,  // update_index | 
|  | bitrate_, framerate, | 
|  | 0);  // frame_index_rate_update | 
|  | rate_profile.frame_index_rate_update[1] = kNumFrames + 1; | 
|  | rate_profile.num_frames = kNumFrames; | 
|  |  | 
|  | ProcessFramesAndMaybeVerify(rate_profile, nullptr, nullptr, | 
|  | &kVisualizationParams); | 
|  | } | 
|  |  | 
|  | const int bitrate_; | 
|  | const VideoCodecType codec_type_; | 
|  | const bool hw_codec_; | 
|  | }; | 
|  |  | 
|  | INSTANTIATE_TEST_CASE_P(CodecSettings, | 
|  | VideoProcessorIntegrationTestParameterized, | 
|  | ::testing::Combine(::testing::ValuesIn(kBitrates), | 
|  | ::testing::ValuesIn(kVideoCodecType), | 
|  | ::testing::ValuesIn(kHwCodec))); | 
|  |  | 
|  | TEST_P(VideoProcessorIntegrationTestParameterized, Process_128x96_30fps) { | 
|  | RunTest(128, 96, 30, "foreman_128x96"); | 
|  | } | 
|  |  | 
|  | TEST_P(VideoProcessorIntegrationTestParameterized, Process_160x120_30fps) { | 
|  | RunTest(160, 120, 30, "foreman_160x120"); | 
|  | } | 
|  |  | 
|  | TEST_P(VideoProcessorIntegrationTestParameterized, Process_176x144_30fps) { | 
|  | RunTest(176, 144, 30, "foreman_176x144"); | 
|  | } | 
|  |  | 
|  | TEST_P(VideoProcessorIntegrationTestParameterized, Process_320x240_30fps) { | 
|  | RunTest(320, 240, 30, "foreman_320x240"); | 
|  | } | 
|  |  | 
|  | TEST_P(VideoProcessorIntegrationTestParameterized, Process_352x288_30fps) { | 
|  | RunTest(352, 288, 30, "foreman_cif"); | 
|  | } | 
|  |  | 
|  | }  // namespace test | 
|  | }  // namespace webrtc |