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}
This commit is contained in:
@ -136,7 +136,7 @@ class VideoCodingModuleImpl : public VideoCodingModule {
|
||||
|
||||
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 {
|
||||
|
@ -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 @@ class VideoSender {
|
||||
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);
|
||||
|
@ -245,8 +245,10 @@ void VideoSender::SetEncoderParameters(EncoderParameters params,
|
||||
}
|
||||
|
||||
// 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 @@ int32_t VideoSender::AddVideoFrame(const VideoFrame& videoFrame,
|
||||
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 @@ int32_t VideoSender::AddVideoFrame(const VideoFrame& videoFrame,
|
||||
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.
|
||||
|
@ -186,7 +186,10 @@ class TestVideoSender : public ::testing::Test {
|
||||
|
||||
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_;
|
||||
|
@ -902,7 +902,7 @@ void VideoStreamEncoder::EncodeVideoFrame(const VideoFrame& video_frame,
|
||||
}
|
||||
encoder_info_ = info;
|
||||
|
||||
video_sender_.AddVideoFrame(out_frame, nullptr);
|
||||
video_sender_.AddVideoFrame(out_frame, nullptr, encoder_info_);
|
||||
}
|
||||
|
||||
void VideoStreamEncoder::SendKeyFrame() {
|
||||
|
Reference in New Issue
Block a user