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) {