Migrate software decoders to new VideoDecoder::Configure

Bug: webrtc:13045
Change-Id: I1fa28a7c2dd59f0889d98c8ec5f58161c0ec9f95
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/228380
Reviewed-by: Åsa Persson <asapersson@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#34716}
diff --git a/modules/video_coding/codecs/av1/libaom_av1_decoder.cc b/modules/video_coding/codecs/av1/libaom_av1_decoder.cc
index c187c72..2405e2c 100644
--- a/modules/video_coding/codecs/av1/libaom_av1_decoder.cc
+++ b/modules/video_coding/codecs/av1/libaom_av1_decoder.cc
@@ -17,7 +17,6 @@
 #include "api/scoped_refptr.h"
 #include "api/video/encoded_image.h"
 #include "api/video/i420_buffer.h"
-#include "api/video_codecs/video_codec.h"
 #include "api/video_codecs/video_decoder.h"
 #include "common_video/include/video_frame_buffer_pool.h"
 #include "modules/video_coding/include/video_error_codes.h"
@@ -40,8 +39,7 @@
   ~LibaomAv1Decoder();
 
   // Implements VideoDecoder.
-  int32_t InitDecode(const VideoCodec* codec_settings,
-                     int number_of_cores) override;
+  bool Configure(const Settings& settings) override;
 
   // Decode an encoded video frame.
   int32_t Decode(const EncodedImage& encoded_image,
@@ -74,23 +72,20 @@
   Release();
 }
 
-int32_t LibaomAv1Decoder::InitDecode(const VideoCodec* codec_settings,
-                                     int number_of_cores) {
-  aom_codec_dec_cfg_t config = {
-      static_cast<unsigned int>(number_of_cores),  // Max # of threads.
-      0,                    // Frame width set after decode.
-      0,                    // Frame height set after decode.
-      kConfigLowBitDepth};  // Enable low-bit-depth code path.
+bool LibaomAv1Decoder::Configure(const Settings& settings) {
+  aom_codec_dec_cfg_t config = {};
+  config.threads = static_cast<unsigned int>(settings.number_of_cores());
+  config.allow_lowbitdepth = kConfigLowBitDepth;
 
   aom_codec_err_t ret =
       aom_codec_dec_init(&context_, aom_codec_av1_dx(), &config, kDecFlags);
   if (ret != AOM_CODEC_OK) {
-    RTC_LOG(LS_WARNING) << "LibaomAv1Decoder::InitDecode returned " << ret
+    RTC_LOG(LS_WARNING) << "LibaomAv1Decoder::Configure returned " << ret
                         << " on aom_codec_dec_init.";
-    return WEBRTC_VIDEO_CODEC_ERROR;
+    return false;
   }
   inited_ = true;
-  return WEBRTC_VIDEO_CODEC_OK;
+  return true;
 }
 
 int32_t LibaomAv1Decoder::Decode(const EncodedImage& encoded_image,
diff --git a/modules/video_coding/codecs/av1/libaom_av1_unittest.cc b/modules/video_coding/codecs/av1/libaom_av1_unittest.cc
index e63e0f8..5823266 100644
--- a/modules/video_coding/codecs/av1/libaom_av1_unittest.cc
+++ b/modules/video_coding/codecs/av1/libaom_av1_unittest.cc
@@ -77,9 +77,7 @@
       ADD_FAILURE() << "Failed to create a decoder#" << decoder_id_;
       return;
     }
-    EXPECT_EQ(decoder_->InitDecode(/*codec_settings=*/nullptr,
-                                   /*number_of_cores=*/1),
-              WEBRTC_VIDEO_CODEC_OK);
+    EXPECT_TRUE(decoder_->Configure({}));
     EXPECT_EQ(decoder_->RegisterDecodeCompleteCallback(&callback_),
               WEBRTC_VIDEO_CODEC_OK);
   }
diff --git a/modules/video_coding/codecs/h264/h264_decoder_impl.cc b/modules/video_coding/codecs/h264/h264_decoder_impl.cc
index 11d36b7..e440d68 100644
--- a/modules/video_coding/codecs/h264/h264_decoder_impl.cc
+++ b/modules/video_coding/codecs/h264/h264_decoder_impl.cc
@@ -69,9 +69,9 @@
 int H264DecoderImpl::AVGetBuffer2(AVCodecContext* context,
                                   AVFrame* av_frame,
                                   int flags) {
-  // Set in `InitDecode`.
+  // Set in `Configure`.
   H264DecoderImpl* decoder = static_cast<H264DecoderImpl*>(context->opaque);
-  // DCHECK values set in `InitDecode`.
+  // DCHECK values set in `Configure`.
   RTC_DCHECK(decoder);
   // Necessary capability to be allowed to provide our own buffers.
   RTC_DCHECK(context->codec->capabilities | AV_CODEC_CAP_DR1);
@@ -172,19 +172,18 @@
   Release();
 }
 
-int32_t H264DecoderImpl::InitDecode(const VideoCodec* codec_settings,
-                                    int32_t number_of_cores) {
+bool H264DecoderImpl::Configure(const Settings& settings) {
   ReportInit();
-  if (codec_settings && codec_settings->codecType != kVideoCodecH264) {
+  if (settings.codec_type() != kVideoCodecH264) {
     ReportError();
-    return WEBRTC_VIDEO_CODEC_ERR_PARAMETER;
+    return false;
   }
 
   // Release necessary in case of re-initializing.
   int32_t ret = Release();
   if (ret != WEBRTC_VIDEO_CODEC_OK) {
     ReportError();
-    return ret;
+    return false;
   }
   RTC_DCHECK(!av_context_);
 
@@ -193,9 +192,10 @@
 
   av_context_->codec_type = AVMEDIA_TYPE_VIDEO;
   av_context_->codec_id = AV_CODEC_ID_H264;
-  if (codec_settings) {
-    av_context_->coded_width = codec_settings->width;
-    av_context_->coded_height = codec_settings->height;
+  const RenderResolution& resolution = settings.max_render_resolution();
+  if (resolution.Valid()) {
+    av_context_->coded_width = resolution.Width();
+    av_context_->coded_height = resolution.Height();
   }
   av_context_->pix_fmt = kPixelFormatDefault;
   av_context_->extradata = nullptr;
@@ -219,25 +219,25 @@
     RTC_LOG(LS_ERROR) << "FFmpeg H.264 decoder not found.";
     Release();
     ReportError();
-    return WEBRTC_VIDEO_CODEC_ERROR;
+    return false;
   }
   int res = avcodec_open2(av_context_.get(), codec, nullptr);
   if (res < 0) {
     RTC_LOG(LS_ERROR) << "avcodec_open2 error: " << res;
     Release();
     ReportError();
-    return WEBRTC_VIDEO_CODEC_ERROR;
+    return false;
   }
 
   av_frame_.reset(av_frame_alloc());
 
-  if (codec_settings && codec_settings->buffer_pool_size) {
-    if (!ffmpeg_buffer_pool_.Resize(*codec_settings->buffer_pool_size) ||
-        !output_buffer_pool_.Resize(*codec_settings->buffer_pool_size)) {
-      return WEBRTC_VIDEO_CODEC_UNINITIALIZED;
+  if (absl::optional<int> buffer_pool_size = settings.buffer_pool_size()) {
+    if (!ffmpeg_buffer_pool_.Resize(*buffer_pool_size) ||
+        !output_buffer_pool_.Resize(*buffer_pool_size)) {
+      return false;
     }
   }
-  return WEBRTC_VIDEO_CODEC_OK;
+  return true;
 }
 
 int32_t H264DecoderImpl::Release() {
@@ -261,7 +261,7 @@
   }
   if (!decoded_image_callback_) {
     RTC_LOG(LS_WARNING)
-        << "InitDecode() has been called, but a callback function "
+        << "Configure() has been called, but a callback function "
            "has not been set with RegisterDecodeCompleteCallback()";
     ReportError();
     return WEBRTC_VIDEO_CODEC_UNINITIALIZED;
diff --git a/modules/video_coding/codecs/h264/h264_decoder_impl.h b/modules/video_coding/codecs/h264/h264_decoder_impl.h
index 2c90a40..e5d9fd3 100644
--- a/modules/video_coding/codecs/h264/h264_decoder_impl.h
+++ b/modules/video_coding/codecs/h264/h264_decoder_impl.h
@@ -60,10 +60,7 @@
   H264DecoderImpl();
   ~H264DecoderImpl() override;
 
-  // If `codec_settings` is NULL it is ignored. If it is not NULL,
-  // `codec_settings->codecType` must be `kVideoCodecH264`.
-  int32_t InitDecode(const VideoCodec* codec_settings,
-                     int32_t number_of_cores) override;
+  bool Configure(const Settings& settings) override;
   int32_t Release() override;
 
   int32_t RegisterDecodeCompleteCallback(
diff --git a/modules/video_coding/codecs/multiplex/include/multiplex_decoder_adapter.h b/modules/video_coding/codecs/multiplex/include/multiplex_decoder_adapter.h
index 856d9ec..e73f7d0 100644
--- a/modules/video_coding/codecs/multiplex/include/multiplex_decoder_adapter.h
+++ b/modules/video_coding/codecs/multiplex/include/multiplex_decoder_adapter.h
@@ -31,8 +31,7 @@
   virtual ~MultiplexDecoderAdapter();
 
   // Implements VideoDecoder
-  int32_t InitDecode(const VideoCodec* codec_settings,
-                     int32_t number_of_cores) override;
+  bool Configure(const Settings& settings) override;
   int32_t Decode(const EncodedImage& input_image,
                  bool missing_frames,
                  int64_t render_time_ms) override;
diff --git a/modules/video_coding/codecs/multiplex/multiplex_decoder_adapter.cc b/modules/video_coding/codecs/multiplex/multiplex_decoder_adapter.cc
index 2332fcd..e1bf598 100644
--- a/modules/video_coding/codecs/multiplex/multiplex_decoder_adapter.cc
+++ b/modules/video_coding/codecs/multiplex/multiplex_decoder_adapter.cc
@@ -104,24 +104,24 @@
   Release();
 }
 
-int32_t MultiplexDecoderAdapter::InitDecode(const VideoCodec* codec_settings,
-                                            int32_t number_of_cores) {
-  RTC_DCHECK_EQ(kVideoCodecMultiplex, codec_settings->codecType);
-  VideoCodec settings = *codec_settings;
-  settings.codecType = PayloadStringToCodecType(associated_format_.name);
+bool MultiplexDecoderAdapter::Configure(const Settings& settings) {
+  RTC_DCHECK_EQ(settings.codec_type(), kVideoCodecMultiplex);
+  Settings associated_settings = settings;
+  associated_settings.set_codec_type(
+      PayloadStringToCodecType(associated_format_.name));
   for (size_t i = 0; i < kAlphaCodecStreams; ++i) {
     std::unique_ptr<VideoDecoder> decoder =
         factory_->CreateVideoDecoder(associated_format_);
-    const int32_t rv = decoder->InitDecode(&settings, number_of_cores);
-    if (rv)
-      return rv;
+    if (!decoder->Configure(associated_settings)) {
+      return false;
+    }
     adapter_callbacks_.emplace_back(
         new MultiplexDecoderAdapter::AdapterDecodedImageCallback(
             this, static_cast<AlphaCodecStream>(i)));
     decoder->RegisterDecodeCompleteCallback(adapter_callbacks_.back().get());
     decoders_.emplace_back(std::move(decoder));
   }
-  return WEBRTC_VIDEO_CODEC_OK;
+  return true;
 }
 
 int32_t MultiplexDecoderAdapter::Decode(const EncodedImage& input_image,
diff --git a/modules/video_coding/codecs/test/video_codec_unittest.cc b/modules/video_coding/codecs/test/video_codec_unittest.cc
index ff09231..b81f658 100644
--- a/modules/video_coding/codecs/test/video_codec_unittest.cc
+++ b/modules/video_coding/codecs/test/video_codec_unittest.cc
@@ -87,8 +87,12 @@
                 &codec_settings_,
                 VideoEncoder::Settings(kCapabilities, 1 /* number of cores */,
                                        0 /* max payload size (unused) */)));
-  EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK,
-            decoder_->InitDecode(&codec_settings_, 1 /* number of cores */));
+
+  VideoDecoder::Settings decoder_settings;
+  decoder_settings.set_codec_type(codec_settings_.codecType);
+  decoder_settings.set_max_render_resolution(
+      {codec_settings_.width, codec_settings_.height});
+  EXPECT_TRUE(decoder_->Configure(decoder_settings));
 }
 
 void VideoCodecUnitTest::ModifyCodecSettings(VideoCodec* codec_settings) {}
diff --git a/modules/video_coding/codecs/test/video_encoder_decoder_instantiation_tests.cc b/modules/video_coding/codecs/test/video_encoder_decoder_instantiation_tests.cc
index e5cce13..e7a7f7d 100644
--- a/modules/video_coding/codecs/test/video_encoder_decoder_instantiation_tests.cc
+++ b/modules/video_coding/codecs/test/video_encoder_decoder_instantiation_tests.cc
@@ -21,6 +21,7 @@
 #elif defined(WEBRTC_IOS)
 #include "modules/video_coding/codecs/test/objc_codec_factory_helper.h"
 #endif
+#include "test/gmock.h"
 #include "test/gtest.h"
 #include "test/video_codec_settings.h"
 
@@ -28,6 +29,9 @@
 namespace test {
 
 namespace {
+
+using ::testing::NotNull;
+
 const VideoEncoder::Capabilities kCapabilities(false);
 
 int32_t InitEncoder(VideoCodecType codec_type, VideoEncoder* encoder) {
@@ -42,14 +46,11 @@
                                      1200 /* max_payload_size */));
 }
 
-int32_t InitDecoder(VideoCodecType codec_type, VideoDecoder* decoder) {
-  VideoCodec codec;
-  CodecSettings(codec_type, &codec);
-  codec.width = 640;
-  codec.height = 480;
-  codec.maxFramerate = 30;
-  RTC_CHECK(decoder);
-  return decoder->InitDecode(&codec, 1 /* number_of_cores */);
+VideoDecoder::Settings DecoderSettings(VideoCodecType codec_type) {
+  VideoDecoder::Settings settings;
+  settings.set_max_render_resolution({640, 480});
+  settings.set_codec_type(codec_type);
+  return settings;
 }
 
 }  // namespace
@@ -126,7 +127,8 @@
   for (int i = 0; i < num_decoders_; ++i) {
     std::unique_ptr<VideoDecoder> decoder =
         decoder_factory_->CreateVideoDecoder(vp8_format_);
-    EXPECT_EQ(0, InitDecoder(kVideoCodecVP8, decoder.get()));
+    ASSERT_THAT(decoder, NotNull());
+    EXPECT_TRUE(decoder->Configure(DecoderSettings(kVideoCodecVP8)));
     decoders_.emplace_back(std::move(decoder));
   }
 }
@@ -143,8 +145,9 @@
   for (int i = 0; i < num_decoders_; ++i) {
     std::unique_ptr<VideoDecoder> decoder =
         decoder_factory_->CreateVideoDecoder(h264cbp_format_);
-    EXPECT_EQ(0, InitDecoder(kVideoCodecH264, decoder.get()));
-    decoders_.emplace_back(std::move(decoder));
+    ASSERT_THAT(decoder, NotNull());
+    EXPECT_TRUE(decoder->Configure(DecoderSettings(kVideoCodecH264)));
+    decoders_.push_back(std::move(decoder));
   }
 }
 
diff --git a/modules/video_coding/codecs/vp8/libvpx_vp8_decoder.cc b/modules/video_coding/codecs/vp8/libvpx_vp8_decoder.cc
index 9d6ffdb..10bd2ad 100644
--- a/modules/video_coding/codecs/vp8/libvpx_vp8_decoder.cc
+++ b/modules/video_coding/codecs/vp8/libvpx_vp8_decoder.cc
@@ -138,10 +138,9 @@
   Release();
 }
 
-int LibvpxVp8Decoder::InitDecode(const VideoCodec* inst, int number_of_cores) {
-  int ret_val = Release();
-  if (ret_val < 0) {
-    return ret_val;
+bool LibvpxVp8Decoder::Configure(const Settings& settings) {
+  if (Release() < 0) {
+    return false;
   }
   if (decoder_ == NULL) {
     decoder_ = new vpx_codec_ctx_t;
@@ -157,7 +156,7 @@
   if (vpx_codec_dec_init(decoder_, vpx_codec_vp8_dx(), &cfg, flags)) {
     delete decoder_;
     decoder_ = nullptr;
-    return WEBRTC_VIDEO_CODEC_MEMORY;
+    return false;
   }
 
   propagation_cnt_ = -1;
@@ -165,12 +164,12 @@
 
   // Always start with a complete key frame.
   key_frame_required_ = true;
-  if (inst && inst->buffer_pool_size) {
-    if (!buffer_pool_.Resize(*inst->buffer_pool_size)) {
-      return WEBRTC_VIDEO_CODEC_UNINITIALIZED;
+  if (absl::optional<int> buffer_pool_size = settings.buffer_pool_size()) {
+    if (!buffer_pool_.Resize(*buffer_pool_size)) {
+      return false;
     }
   }
-  return WEBRTC_VIDEO_CODEC_OK;
+  return true;
 }
 
 int LibvpxVp8Decoder::Decode(const EncodedImage& input_image,
diff --git a/modules/video_coding/codecs/vp8/libvpx_vp8_decoder.h b/modules/video_coding/codecs/vp8/libvpx_vp8_decoder.h
index e25a896..4d1e20d 100644
--- a/modules/video_coding/codecs/vp8/libvpx_vp8_decoder.h
+++ b/modules/video_coding/codecs/vp8/libvpx_vp8_decoder.h
@@ -29,8 +29,7 @@
   LibvpxVp8Decoder();
   ~LibvpxVp8Decoder() override;
 
-  int InitDecode(const VideoCodec* inst, int number_of_cores) override;
-
+  bool Configure(const Settings& settings) override;
   int Decode(const EncodedImage& input_image,
              bool missing_frames,
              int64_t /*render_time_ms*/) override;
diff --git a/modules/video_coding/codecs/vp8/test/vp8_impl_unittest.cc b/modules/video_coding/codecs/vp8/test/vp8_impl_unittest.cc
index 047bf2a..00258fe 100644
--- a/modules/video_coding/codecs/vp8/test/vp8_impl_unittest.cc
+++ b/modules/video_coding/codecs/vp8/test/vp8_impl_unittest.cc
@@ -244,10 +244,9 @@
             encoder_->Encode(NextInputFrame(), nullptr));
 }
 
-TEST_F(TestVp8Impl, InitDecode) {
+TEST_F(TestVp8Impl, Configure) {
   EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, decoder_->Release());
-  EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK,
-            decoder_->InitDecode(&codec_settings_, kNumCores));
+  EXPECT_TRUE(decoder_->Configure({}));
 }
 
 TEST_F(TestVp8Impl, OnEncodedImageReportsInfo) {
diff --git a/modules/video_coding/codecs/vp9/libvpx_vp9_decoder.cc b/modules/video_coding/codecs/vp9/libvpx_vp9_decoder.cc
index 0f8ade3..a21505f 100644
--- a/modules/video_coding/codecs/vp9/libvpx_vp9_decoder.cc
+++ b/modules/video_coding/codecs/vp9/libvpx_vp9_decoder.cc
@@ -120,10 +120,9 @@
   }
 }
 
-int LibvpxVp9Decoder::InitDecode(const VideoCodec* inst, int number_of_cores) {
-  int ret_val = Release();
-  if (ret_val < 0) {
-    return ret_val;
+bool LibvpxVp9Decoder::Configure(const Settings& settings) {
+  if (Release() < 0) {
+    return false;
   }
 
   if (decoder_ == nullptr) {
@@ -140,9 +139,9 @@
   //  - Make peak CPU usage under control (not depending on input)
   cfg.threads = 1;
 #else
-  if (!inst) {
-    // No config provided - don't know resolution to decode yet.
-    // Set thread count to one in the meantime.
+  const RenderResolution& resolution = settings.max_render_resolution();
+  if (!resolution.Valid()) {
+    // Postpone configuring number of threads until resolution is known.
     cfg.threads = 1;
   } else {
     // We want to use multithreading when decoding high resolution videos. But
@@ -156,31 +155,30 @@
     // 4 for 1080p
     // 8 for 1440p
     // 18 for 4K
-    int num_threads =
-        std::max(1, 2 * (inst->width * inst->height) / (1280 * 720));
-    cfg.threads = std::min(number_of_cores, num_threads);
-    current_codec_ = *inst;
+    int num_threads = std::max(
+        1, 2 * resolution.Width() * resolution.Height() / (1280 * 720));
+    cfg.threads = std::min(settings.number_of_cores(), num_threads);
   }
 #endif
 
-  num_cores_ = number_of_cores;
+  current_settings_ = settings;
 
   vpx_codec_flags_t flags = 0;
   if (vpx_codec_dec_init(decoder_, vpx_codec_vp9_dx(), &cfg, flags)) {
-    return WEBRTC_VIDEO_CODEC_MEMORY;
+    return false;
   }
 
   if (!libvpx_buffer_pool_.InitializeVpxUsePool(decoder_)) {
-    return WEBRTC_VIDEO_CODEC_MEMORY;
+    return false;
   }
 
   inited_ = true;
   // Always start with a complete key frame.
   key_frame_required_ = true;
-  if (inst && inst->buffer_pool_size) {
-    if (!libvpx_buffer_pool_.Resize(*inst->buffer_pool_size) ||
-        !output_buffer_pool_.Resize(*inst->buffer_pool_size)) {
-      return WEBRTC_VIDEO_CODEC_UNINITIALIZED;
+  if (absl::optional<int> buffer_pool_size = settings.buffer_pool_size()) {
+    if (!libvpx_buffer_pool_.Resize(*buffer_pool_size) ||
+        !output_buffer_pool_.Resize(*buffer_pool_size)) {
+      return false;
     }
   }
 
@@ -189,10 +187,10 @@
   if (status != VPX_CODEC_OK) {
     RTC_LOG(LS_ERROR) << "Failed to enable VP9D_SET_LOOP_FILTER_OPT. "
                       << vpx_codec_error(decoder_);
-    return WEBRTC_VIDEO_CODEC_UNINITIALIZED;
+    return false;
   }
 
-  return WEBRTC_VIDEO_CODEC_OK;
+  return true;
 }
 
 int LibvpxVp9Decoder::Decode(const EncodedImage& input_image,
@@ -209,17 +207,16 @@
     absl::optional<vp9::FrameInfo> frame_info =
         vp9::ParseIntraFrameInfo(input_image.data(), input_image.size());
     if (frame_info) {
-      if (frame_info->frame_width != current_codec_.width ||
-          frame_info->frame_height != current_codec_.height) {
+      RenderResolution frame_resolution(frame_info->frame_width,
+                                        frame_info->frame_height);
+      if (frame_resolution != current_settings_.max_render_resolution()) {
         // Resolution has changed, tear down and re-init a new decoder in
         // order to get correct sizing.
         Release();
-        current_codec_.width = frame_info->frame_width;
-        current_codec_.height = frame_info->frame_height;
-        int reinit_status = InitDecode(&current_codec_, num_cores_);
-        if (reinit_status != WEBRTC_VIDEO_CODEC_OK) {
+        current_settings_.set_max_render_resolution(frame_resolution);
+        if (!Configure(current_settings_)) {
           RTC_LOG(LS_WARNING) << "Failed to re-init decoder.";
-          return reinit_status;
+          return WEBRTC_VIDEO_CODEC_UNINITIALIZED;
         }
       }
     } else {
diff --git a/modules/video_coding/codecs/vp9/libvpx_vp9_decoder.h b/modules/video_coding/codecs/vp9/libvpx_vp9_decoder.h
index f26f427..e5636d8 100644
--- a/modules/video_coding/codecs/vp9/libvpx_vp9_decoder.h
+++ b/modules/video_coding/codecs/vp9/libvpx_vp9_decoder.h
@@ -30,7 +30,7 @@
 
   virtual ~LibvpxVp9Decoder();
 
-  int InitDecode(const VideoCodec* inst, int number_of_cores) override;
+  bool Configure(const Settings& settings) override;
 
   int Decode(const EncodedImage& input_image,
              bool missing_frames,
@@ -57,8 +57,7 @@
   bool inited_;
   vpx_codec_ctx_t* decoder_;
   bool key_frame_required_;
-  VideoCodec current_codec_;
-  int num_cores_;
+  Settings current_settings_;
 
   // Decoder should produce this format if possible.
   const VideoFrameBuffer::Type preferred_output_format_;
diff --git a/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc b/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc
index 9de76a3..f61f673 100644
--- a/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc
+++ b/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc
@@ -2168,11 +2168,10 @@
   EXPECT_EQ(encoded_frames[0]._frameType, VideoFrameType::kVideoFrameDelta);
 }
 
-TEST_F(TestVp9Impl, HandlesEmptyInitDecode) {
+TEST_F(TestVp9Impl, HandlesEmptyDecoderConfigure) {
   std::unique_ptr<VideoDecoder> decoder = CreateDecoder();
-  // Check that nullptr settings are ok for decoder.
-  EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK,
-            decoder->InitDecode(/*codec_settings=*/nullptr, 1));
+  // Check that default settings are ok for decoder.
+  EXPECT_TRUE(decoder->Configure({}));
   EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, decoder->Release());
 }