Don't poll EncoderInfo from encoder twice per frame
Bug: webrtc:9890
Change-Id: Id4c2062a1c0c6be699f2096b4c0b334c98f3c4ba
Reviewed-on: https://webrtc-review.googlesource.com/c/111083
Commit-Queue: Erik Språng <sprang@webrtc.org>
Reviewed-by: Mirta Dvornicic <mirtad@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#25672}
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() {