From df8fd28d0b02efff0ab7493753928769ae5d74eb Mon Sep 17 00:00:00 2001 From: Sergey Silkin Date: Tue, 5 Nov 2019 15:14:51 +0100 Subject: [PATCH] Add output_path to VideoCodecTestFixture::Config. This lets test to set output path explicitly. Bug: none Change-Id: I756484775f4c7f44cd1bb904c89d9215ffa48fe1 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/158798 Commit-Queue: Sergey Silkin Reviewed-by: Karl Wiberg Reviewed-by: Rasmus Brandt Cr-Commit-Position: refs/heads/master@{#29702} --- api/test/videocodec_test_fixture.h | 3 + .../test/videocodec_test_fixture_impl.cc | 59 ++++++++++--------- 2 files changed, 35 insertions(+), 27 deletions(-) diff --git a/api/test/videocodec_test_fixture.h b/api/test/videocodec_test_fixture.h index 16177de5b0..afb3f8a5e4 100644 --- a/api/test/videocodec_test_fixture.h +++ b/api/test/videocodec_test_fixture.h @@ -129,6 +129,9 @@ class VideoCodecTestFixture { // Print out frame level stats. bool print_frame_level_stats = false; + // Path to a directory where encoded or/and decoded video should be saved. + std::string output_path; + // Should video be saved persistently to disk for post-run visualization? struct VisualizationParams { bool save_encoded_ivf = false; diff --git a/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc b/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc index a424baba2e..0eb256ea99 100644 --- a/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc +++ b/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc @@ -648,37 +648,42 @@ void VideoCodecTestFixtureImpl::SetUpAndInitObjects( RTC_DCHECK(encoded_frame_writers_.empty()); RTC_DCHECK(decoded_frame_writers_.empty()); - const size_t num_simulcast_or_spatial_layers = std::max( - config_.NumberOfSimulcastStreams(), config_.NumberOfSpatialLayers()); - const size_t num_temporal_layers = config_.NumberOfTemporalLayers(); - for (size_t simulcast_svc_idx = 0; - simulcast_svc_idx < num_simulcast_or_spatial_layers; - ++simulcast_svc_idx) { - const std::string output_filename_base = - OutputPath() + FilenameWithParams(config_) + "_sl" + - std::to_string(simulcast_svc_idx); - if (config_.visualization_params.save_encoded_ivf) { - for (size_t temporal_idx = 0; temporal_idx < num_temporal_layers; - ++temporal_idx) { - const std::string output_file_path = - output_filename_base + "tl" + std::to_string(temporal_idx) + ".ivf"; - FileWrapper ivf_file = FileWrapper::OpenWriteOnly(output_file_path); + if (config_.visualization_params.save_encoded_ivf || + config_.visualization_params.save_decoded_y4m) { + const size_t num_simulcast_or_spatial_layers = std::max( + config_.NumberOfSimulcastStreams(), config_.NumberOfSpatialLayers()); + const size_t num_temporal_layers = config_.NumberOfTemporalLayers(); + for (size_t simulcast_svc_idx = 0; + simulcast_svc_idx < num_simulcast_or_spatial_layers; + ++simulcast_svc_idx) { + const std::string output_filename_base = JoinFilename( + config_.output_path, FilenameWithParams(config_) + "_sl" + + std::to_string(simulcast_svc_idx)); - const VideoProcessor::LayerKey layer_key(simulcast_svc_idx, - temporal_idx); - encoded_frame_writers_[layer_key] = - IvfFileWriter::Wrap(std::move(ivf_file), /*byte_limit=*/0); + if (config_.visualization_params.save_encoded_ivf) { + for (size_t temporal_idx = 0; temporal_idx < num_temporal_layers; + ++temporal_idx) { + const std::string output_file_path = output_filename_base + "tl" + + std::to_string(temporal_idx) + + ".ivf"; + FileWrapper ivf_file = FileWrapper::OpenWriteOnly(output_file_path); + + const VideoProcessor::LayerKey layer_key(simulcast_svc_idx, + temporal_idx); + encoded_frame_writers_[layer_key] = + IvfFileWriter::Wrap(std::move(ivf_file), /*byte_limit=*/0); + } } - } - if (config_.visualization_params.save_decoded_y4m) { - FrameWriter* decoded_frame_writer = new Y4mFrameWriterImpl( - output_filename_base + ".y4m", config_.codec_settings.width, - config_.codec_settings.height, config_.codec_settings.maxFramerate); - EXPECT_TRUE(decoded_frame_writer->Init()); - decoded_frame_writers_.push_back( - std::unique_ptr(decoded_frame_writer)); + if (config_.visualization_params.save_decoded_y4m) { + FrameWriter* decoded_frame_writer = new Y4mFrameWriterImpl( + output_filename_base + ".y4m", config_.codec_settings.width, + config_.codec_settings.height, config_.codec_settings.maxFramerate); + EXPECT_TRUE(decoded_frame_writer->Init()); + decoded_frame_writers_.push_back( + std::unique_ptr(decoded_frame_writer)); + } } }