Do not transfer ownership of codecs to tester
Passing of ownership of codecs to tester is not strictly needed. We may need to continue using a codec after test. For example, to check codec state or to use the same codec instance in next test.
Bug: b/261160916, webrtc:14852
Change-Id: I179b262116d7de76b8171f0409f943ad6d87433e
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/291802
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Sergey Silkin <ssilkin@webrtc.org>
Reviewed-by: Rasmus Brandt <brandtr@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#39256}
diff --git a/api/test/video_codec_tester.h b/api/test/video_codec_tester.h
index b2ce88c..83408e6 100644
--- a/api/test/video_codec_tester.h
+++ b/api/test/video_codec_tester.h
@@ -106,25 +106,25 @@
// Returns `VideoCodecTestStats` object that contains collected per-frame
// metrics.
virtual std::unique_ptr<VideoCodecStats> RunDecodeTest(
- std::unique_ptr<CodedVideoSource> video_source,
- std::unique_ptr<Decoder> decoder,
+ CodedVideoSource* video_source,
+ Decoder* decoder,
const DecoderSettings& decoder_settings) = 0;
// Pulls raw video frames from `video_source` and passes them to `encoder`.
// Returns `VideoCodecTestStats` object that contains collected per-frame
// metrics.
virtual std::unique_ptr<VideoCodecStats> RunEncodeTest(
- std::unique_ptr<RawVideoSource> video_source,
- std::unique_ptr<Encoder> encoder,
+ RawVideoSource* video_source,
+ Encoder* encoder,
const EncoderSettings& encoder_settings) = 0;
// Pulls raw video frames from `video_source`, passes them to `encoder` and
// then passes encoded frames to `decoder`. Returns `VideoCodecTestStats`
// object that contains collected per-frame metrics.
virtual std::unique_ptr<VideoCodecStats> RunEncodeDecodeTest(
- std::unique_ptr<RawVideoSource> video_source,
- std::unique_ptr<Encoder> encoder,
- std::unique_ptr<Decoder> decoder,
+ RawVideoSource* video_source,
+ Encoder* encoder,
+ Decoder* decoder,
const EncoderSettings& encoder_settings,
const DecoderSettings& decoder_settings) = 0;
};
diff --git a/modules/video_coding/codecs/test/video_codec_test.cc b/modules/video_coding/codecs/test/video_codec_test.cc
index d2ad743..ce7f4e7 100644
--- a/modules/video_coding/codecs/test/video_codec_test.cc
+++ b/modules/video_coding/codecs/test/video_codec_test.cc
@@ -423,7 +423,7 @@
TEST_P(EncodeDecodeTest, DISABLED_TestEncodeDecode) {
std::unique_ptr<VideoCodecStats> stats = tester_->RunEncodeDecodeTest(
- std::move(video_source_), std::move(encoder_), std::move(decoder_),
+ video_source_.get(), encoder_.get(), decoder_.get(),
test_params_.encoder_settings, test_params_.decoder_settings);
const auto& frame_settings = test_params_.encoding_settings.frame_settings;
diff --git a/modules/video_coding/codecs/test/video_codec_tester_impl.cc b/modules/video_coding/codecs/test/video_codec_tester_impl.cc
index 09c5978..3655c30 100644
--- a/modules/video_coding/codecs/test/video_codec_tester_impl.cc
+++ b/modules/video_coding/codecs/test/video_codec_tester_impl.cc
@@ -45,8 +45,8 @@
// that reads reference frames from a separate thread.
class SyncRawVideoSource : public VideoCodecAnalyzer::ReferenceVideoSource {
public:
- explicit SyncRawVideoSource(std::unique_ptr<RawVideoSource> video_source)
- : video_source_(std::move(video_source)) {}
+ explicit SyncRawVideoSource(RawVideoSource* video_source)
+ : video_source_(video_source) {}
absl::optional<VideoFrame> PullFrame() {
MutexLock lock(&mutex_);
@@ -59,7 +59,7 @@
}
protected:
- std::unique_ptr<RawVideoSource> video_source_ RTC_GUARDED_BY(mutex_);
+ RawVideoSource* const video_source_ RTC_GUARDED_BY(mutex_);
Mutex mutex_;
};
@@ -153,11 +153,11 @@
class TesterDecoder {
public:
- TesterDecoder(std::unique_ptr<Decoder> decoder,
+ TesterDecoder(Decoder* decoder,
VideoCodecAnalyzer* analyzer,
const DecoderSettings& settings,
rtc::TaskQueue& task_queue)
- : decoder_(std::move(decoder)),
+ : decoder_(decoder),
analyzer_(analyzer),
settings_(settings),
pacer_(settings.pacing),
@@ -183,7 +183,7 @@
void Flush() { task_queue_.WaitForPreviouslyPostedTasks(); }
protected:
- std::unique_ptr<Decoder> decoder_;
+ Decoder* const decoder_;
VideoCodecAnalyzer* const analyzer_;
const DecoderSettings& settings_;
Pacer pacer_;
@@ -192,12 +192,12 @@
class TesterEncoder {
public:
- TesterEncoder(std::unique_ptr<Encoder> encoder,
+ TesterEncoder(Encoder* encoder,
TesterDecoder* decoder,
VideoCodecAnalyzer* analyzer,
const EncoderSettings& settings,
rtc::TaskQueue& task_queue)
- : encoder_(std::move(encoder)),
+ : encoder_(encoder),
decoder_(decoder),
analyzer_(analyzer),
settings_(settings),
@@ -225,7 +225,7 @@
void Flush() { task_queue_.WaitForPreviouslyPostedTasks(); }
protected:
- std::unique_ptr<Encoder> encoder_;
+ Encoder* const encoder_;
TesterDecoder* const decoder_;
VideoCodecAnalyzer* const analyzer_;
const EncoderSettings& settings_;
@@ -247,8 +247,8 @@
}
std::unique_ptr<VideoCodecStats> VideoCodecTesterImpl::RunDecodeTest(
- std::unique_ptr<CodedVideoSource> video_source,
- std::unique_ptr<Decoder> decoder,
+ CodedVideoSource* video_source,
+ Decoder* decoder,
const DecoderSettings& decoder_settings) {
rtc::TaskQueue analyser_task_queue(task_queue_factory_->CreateTaskQueue(
"Analyzer", TaskQueueFactory::Priority::NORMAL));
@@ -256,8 +256,8 @@
"Decoder", TaskQueueFactory::Priority::NORMAL));
VideoCodecAnalyzer perf_analyzer(analyser_task_queue);
- TesterDecoder tester_decoder(std::move(decoder), &perf_analyzer,
- decoder_settings, decoder_task_queue);
+ TesterDecoder tester_decoder(decoder, &perf_analyzer, decoder_settings,
+ decoder_task_queue);
while (auto frame = video_source->PullFrame()) {
tester_decoder.Decode(*frame);
@@ -269,19 +269,18 @@
}
std::unique_ptr<VideoCodecStats> VideoCodecTesterImpl::RunEncodeTest(
- std::unique_ptr<RawVideoSource> video_source,
- std::unique_ptr<Encoder> encoder,
+ RawVideoSource* video_source,
+ Encoder* encoder,
const EncoderSettings& encoder_settings) {
rtc::TaskQueue analyser_task_queue(task_queue_factory_->CreateTaskQueue(
"Analyzer", TaskQueueFactory::Priority::NORMAL));
rtc::TaskQueue encoder_task_queue(task_queue_factory_->CreateTaskQueue(
"Encoder", TaskQueueFactory::Priority::NORMAL));
- SyncRawVideoSource sync_source(std::move(video_source));
+ SyncRawVideoSource sync_source(video_source);
VideoCodecAnalyzer perf_analyzer(analyser_task_queue);
- TesterEncoder tester_encoder(std::move(encoder), /*decoder=*/nullptr,
- &perf_analyzer, encoder_settings,
- encoder_task_queue);
+ TesterEncoder tester_encoder(encoder, /*decoder=*/nullptr, &perf_analyzer,
+ encoder_settings, encoder_task_queue);
while (auto frame = sync_source.PullFrame()) {
tester_encoder.Encode(*frame);
@@ -293,9 +292,9 @@
}
std::unique_ptr<VideoCodecStats> VideoCodecTesterImpl::RunEncodeDecodeTest(
- std::unique_ptr<RawVideoSource> video_source,
- std::unique_ptr<Encoder> encoder,
- std::unique_ptr<Decoder> decoder,
+ RawVideoSource* video_source,
+ Encoder* encoder,
+ Decoder* decoder,
const EncoderSettings& encoder_settings,
const DecoderSettings& decoder_settings) {
rtc::TaskQueue analyser_task_queue(task_queue_factory_->CreateTaskQueue(
@@ -305,13 +304,12 @@
rtc::TaskQueue encoder_task_queue(task_queue_factory_->CreateTaskQueue(
"Encoder", TaskQueueFactory::Priority::NORMAL));
- SyncRawVideoSource sync_source(std::move(video_source));
+ SyncRawVideoSource sync_source(video_source);
VideoCodecAnalyzer perf_analyzer(analyser_task_queue, &sync_source);
- TesterDecoder tester_decoder(std::move(decoder), &perf_analyzer,
- decoder_settings, decoder_task_queue);
- TesterEncoder tester_encoder(std::move(encoder), &tester_decoder,
- &perf_analyzer, encoder_settings,
- encoder_task_queue);
+ TesterDecoder tester_decoder(decoder, &perf_analyzer, decoder_settings,
+ decoder_task_queue);
+ TesterEncoder tester_encoder(encoder, &tester_decoder, &perf_analyzer,
+ encoder_settings, encoder_task_queue);
while (auto frame = sync_source.PullFrame()) {
tester_encoder.Encode(*frame);
diff --git a/modules/video_coding/codecs/test/video_codec_tester_impl.h b/modules/video_coding/codecs/test/video_codec_tester_impl.h
index 4ac61ee..bb8ee72 100644
--- a/modules/video_coding/codecs/test/video_codec_tester_impl.h
+++ b/modules/video_coding/codecs/test/video_codec_tester_impl.h
@@ -26,19 +26,19 @@
explicit VideoCodecTesterImpl(TaskQueueFactory* task_queue_factory);
std::unique_ptr<VideoCodecStats> RunDecodeTest(
- std::unique_ptr<CodedVideoSource> video_source,
- std::unique_ptr<Decoder> decoder,
+ CodedVideoSource* video_source,
+ Decoder* decoder,
const DecoderSettings& decoder_settings) override;
std::unique_ptr<VideoCodecStats> RunEncodeTest(
- std::unique_ptr<RawVideoSource> video_source,
- std::unique_ptr<Encoder> encoder,
+ RawVideoSource* video_source,
+ Encoder* encoder,
const EncoderSettings& encoder_settings) override;
std::unique_ptr<VideoCodecStats> RunEncodeDecodeTest(
- std::unique_ptr<RawVideoSource> video_source,
- std::unique_ptr<Encoder> encoder,
- std::unique_ptr<Decoder> decoder,
+ RawVideoSource* video_source,
+ Encoder* encoder,
+ Decoder* decoder,
const EncoderSettings& encoder_settings,
const DecoderSettings& decoder_settings) override;
diff --git a/modules/video_coding/codecs/test/video_codec_tester_impl_unittest.cc b/modules/video_coding/codecs/test/video_codec_tester_impl_unittest.cc
index 409e813..c1195a7 100644
--- a/modules/video_coding/codecs/test/video_codec_tester_impl_unittest.cc
+++ b/modules/video_coding/codecs/test/video_codec_tester_impl_unittest.cc
@@ -149,10 +149,10 @@
};
TEST_P(VideoCodecTesterImplPacingTest, PaceEncode) {
- auto video_source = std::make_unique<MockRawVideoSource>();
+ MockRawVideoSource video_source;
size_t frame_num = 0;
- EXPECT_CALL(*video_source, PullFrame).WillRepeatedly(Invoke([&]() mutable {
+ EXPECT_CALL(video_source, PullFrame).WillRepeatedly(Invoke([&]() mutable {
if (frame_num >= num_frames_) {
return absl::optional<VideoFrame>();
}
@@ -164,15 +164,13 @@
return absl::optional<VideoFrame>(CreateVideoFrame(timestamp_rtp));
}));
- auto encoder = std::make_unique<MockEncoder>();
+ MockEncoder encoder;
EncoderSettings encoder_settings;
encoder_settings.pacing = pacing_settings_;
VideoCodecTesterImpl tester(&task_queue_factory_);
- auto fs = tester
- .RunEncodeTest(std::move(video_source), std::move(encoder),
- encoder_settings)
- ->Slice();
+ auto fs =
+ tester.RunEncodeTest(&video_source, &encoder, encoder_settings)->Slice();
ASSERT_EQ(fs.size(), num_frames_);
for (size_t i = 0; i < fs.size(); ++i) {
@@ -182,10 +180,10 @@
}
TEST_P(VideoCodecTesterImplPacingTest, PaceDecode) {
- auto video_source = std::make_unique<MockCodedVideoSource>();
+ MockCodedVideoSource video_source;
size_t frame_num = 0;
- EXPECT_CALL(*video_source, PullFrame).WillRepeatedly(Invoke([&]() mutable {
+ EXPECT_CALL(video_source, PullFrame).WillRepeatedly(Invoke([&]() mutable {
if (frame_num >= num_frames_) {
return absl::optional<EncodedImage>();
}
@@ -197,15 +195,13 @@
return absl::optional<EncodedImage>(CreateEncodedImage(timestamp_rtp));
}));
- auto decoder = std::make_unique<MockDecoder>();
+ MockDecoder decoder;
DecoderSettings decoder_settings;
decoder_settings.pacing = pacing_settings_;
VideoCodecTesterImpl tester(&task_queue_factory_);
- auto fs = tester
- .RunDecodeTest(std::move(video_source), std::move(decoder),
- decoder_settings)
- ->Slice();
+ auto fs =
+ tester.RunDecodeTest(&video_source, &decoder, decoder_settings)->Slice();
ASSERT_EQ(fs.size(), num_frames_);
for (size_t i = 0; i < fs.size(); ++i) {