diff --git a/modules/video_coding/video_coding_impl.cc b/modules/video_coding/video_coding_impl.cc
index 4fb5ae3..58397ad 100644
--- a/modules/video_coding/video_coding_impl.cc
+++ b/modules/video_coding/video_coding_impl.cc
@@ -136,7 +136,7 @@
 
   int32_t AddVideoFrame(const VideoFrame& videoFrame,
                         const CodecSpecificInfo* codecSpecificInfo) override {
-    return sender_.AddVideoFrame(videoFrame, codecSpecificInfo);
+    return sender_.AddVideoFrame(videoFrame, codecSpecificInfo, absl::nullopt);
   }
 
   int32_t IntraFrameRequest(size_t stream_index) override {
diff --git a/modules/video_coding/video_coding_impl.h b/modules/video_coding/video_coding_impl.h
index ac88166..e27a2fe 100644
--- a/modules/video_coding/video_coding_impl.h
+++ b/modules/video_coding/video_coding_impl.h
@@ -17,6 +17,7 @@
 #include <string>
 #include <vector>
 
+#include "absl/types/optional.h"
 #include "modules/video_coding/decoder_database.h"
 #include "modules/video_coding/encoder_database.h"
 #include "modules/video_coding/frame_buffer.h"
@@ -93,7 +94,8 @@
       VideoBitrateAllocationObserver* bitrate_updated_callback);
 
   int32_t AddVideoFrame(const VideoFrame& videoFrame,
-                        const CodecSpecificInfo* codecSpecificInfo);
+                        const CodecSpecificInfo* codecSpecificInfo,
+                        absl::optional<VideoEncoder::EncoderInfo> encoder_info);
 
   int32_t IntraFrameRequest(size_t stream_index);
   int32_t EnableFrameDropper(bool enable);
diff --git a/modules/video_coding/video_sender.cc b/modules/video_coding/video_sender.cc
index f95d7fc..4bd5253 100644
--- a/modules/video_coding/video_sender.cc
+++ b/modules/video_coding/video_sender.cc
@@ -245,8 +245,10 @@
 }
 
 // Add one raw video frame to the encoder, blocking.
-int32_t VideoSender::AddVideoFrame(const VideoFrame& videoFrame,
-                                   const CodecSpecificInfo* codecSpecificInfo) {
+int32_t VideoSender::AddVideoFrame(
+    const VideoFrame& videoFrame,
+    const CodecSpecificInfo* codecSpecificInfo,
+    absl::optional<VideoEncoder::EncoderInfo> encoder_info) {
   EncoderParameters encoder_params;
   std::vector<FrameType> next_frame_types;
   bool encoder_has_internal_source = false;
@@ -260,14 +262,15 @@
   if (_encoder == nullptr)
     return VCM_UNINITIALIZED;
   SetEncoderParameters(encoder_params, encoder_has_internal_source);
-
-  const VideoEncoder::EncoderInfo encoder_info = _encoder->GetEncoderInfo();
+  if (!encoder_info) {
+    encoder_info = _encoder->GetEncoderInfo();
+  }
 
   // Frame dropping is enabled iff frame dropping has been requested, and
   // frame dropping is not force-disabled, and rate controller is not trusted.
-  const bool frame_dropping_enabled = frame_dropper_requested_ &&
-                                      !force_disable_frame_dropper_ &&
-                                      !encoder_info.has_trusted_rate_controller;
+  const bool frame_dropping_enabled =
+      frame_dropper_requested_ && !force_disable_frame_dropper_ &&
+      !encoder_info->has_trusted_rate_controller;
   _mediaOpt.EnableFrameDropper(frame_dropping_enabled);
 
   if (_mediaOpt.DropFrame()) {
@@ -295,7 +298,7 @@
   const bool is_buffer_type_supported =
       buffer_type == VideoFrameBuffer::Type::kI420 ||
       (buffer_type == VideoFrameBuffer::Type::kNative &&
-       encoder_info.supports_native_handle);
+       encoder_info->supports_native_handle);
   if (!is_buffer_type_supported) {
     // This module only supports software encoding.
     // TODO(pbos): Offload conversion from the encoder thread.
diff --git a/modules/video_coding/video_sender_unittest.cc b/modules/video_coding/video_sender_unittest.cc
index e423de5..c2ff0f6 100644
--- a/modules/video_coding/video_sender_unittest.cc
+++ b/modules/video_coding/video_sender_unittest.cc
@@ -186,7 +186,10 @@
 
   void AddFrame() {
     assert(generator_.get());
-    sender_->AddVideoFrame(*generator_->NextFrame(), NULL);
+    sender_->AddVideoFrame(*generator_->NextFrame(), nullptr,
+                           encoder_ ? absl::optional<VideoEncoder::EncoderInfo>(
+                                          encoder_->GetEncoderInfo())
+                                    : absl::nullopt);
   }
 
   SimulatedClock clock_;
diff --git a/video/video_stream_encoder.cc b/video/video_stream_encoder.cc
index 508c564..a22d58a 100644
--- a/video/video_stream_encoder.cc
+++ b/video/video_stream_encoder.cc
@@ -902,7 +902,7 @@
   }
   encoder_info_ = info;
 
-  video_sender_.AddVideoFrame(out_frame, nullptr);
+  video_sender_.AddVideoFrame(out_frame, nullptr, encoder_info_);
 }
 
 void VideoStreamEncoder::SendKeyFrame() {
