From bfe3ef8feb3b4e351403be38fe626df4e796648c Mon Sep 17 00:00:00 2001 From: Evan Shrubsole Date: Thu, 30 Jan 2020 14:29:35 +0100 Subject: [PATCH] Report frame qp to quality scaler via overuse module MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: webrtc:11222 Change-Id: I63938adf5f623429eab1bcd668cde8fa5a1a083a Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/167924 Commit-Queue: Henrik Boström Reviewed-by: Henrik Boström Reviewed-by: Erik Språng Cr-Commit-Position: refs/heads/master@{#30435} --- call/adaptation/resource_adaptation_module_interface.h | 3 +-- .../overuse_frame_detector_resource_adaptation_module.cc | 8 ++++++-- .../overuse_frame_detector_resource_adaptation_module.h | 3 +-- video/video_stream_encoder.cc | 9 ++------- 4 files changed, 10 insertions(+), 13 deletions(-) diff --git a/call/adaptation/resource_adaptation_module_interface.h b/call/adaptation/resource_adaptation_module_interface.h index 3a3deb2499..52b07600ef 100644 --- a/call/adaptation/resource_adaptation_module_interface.h +++ b/call/adaptation/resource_adaptation_module_interface.h @@ -122,9 +122,8 @@ class ResourceAdaptationModuleInterface { // 3. The frame has successfully completed encoding. Next up: The encoded // frame is dropped or packetized and sent over the network. There is // currently no signal what happens beyond this point. - virtual void OnEncodeCompleted(uint32_t timestamp, + virtual void OnEncodeCompleted(const EncodedImage& encoded_image, int64_t time_sent_in_us, - int64_t capture_time_us, absl::optional encode_duration_us) = 0; }; diff --git a/video/overuse_frame_detector_resource_adaptation_module.cc b/video/overuse_frame_detector_resource_adaptation_module.cc index e73f7fa4d1..3fd220482b 100644 --- a/video/overuse_frame_detector_resource_adaptation_module.cc +++ b/video/overuse_frame_detector_resource_adaptation_module.cc @@ -470,14 +470,18 @@ void OveruseFrameDetectorResourceAdaptationModule::OnEncodeStarted( } void OveruseFrameDetectorResourceAdaptationModule::OnEncodeCompleted( - uint32_t timestamp, + const EncodedImage& encoded_image, int64_t time_sent_in_us, - int64_t capture_time_us, absl::optional encode_duration_us) { // TODO(hbos): Rename FrameSent() to something more appropriate (e.g. // "OnEncodeCompleted"?). + uint32_t timestamp = encoded_image.Timestamp(); + int64_t capture_time_us = + encoded_image.capture_time_ms_ * rtc::kNumMicrosecsPerMillisec; overuse_detector_->FrameSent(timestamp, time_sent_in_us, capture_time_us, encode_duration_us); + if (quality_scaler_ && encoded_image.qp_ >= 0) + quality_scaler_->ReportQp(encoded_image.qp_, time_sent_in_us); } void OveruseFrameDetectorResourceAdaptationModule::UpdateQualityScalerSettings( diff --git a/video/overuse_frame_detector_resource_adaptation_module.h b/video/overuse_frame_detector_resource_adaptation_module.h index 2bb05f9963..8cc8242014 100644 --- a/video/overuse_frame_detector_resource_adaptation_module.h +++ b/video/overuse_frame_detector_resource_adaptation_module.h @@ -81,9 +81,8 @@ class OveruseFrameDetectorResourceAdaptationModule void OnFrameDroppedDueToSize() override; void OnEncodeStarted(const VideoFrame& cropped_frame, int64_t time_when_first_seen_us) override; - void OnEncodeCompleted(uint32_t timestamp, + void OnEncodeCompleted(const EncodedImage& encoded_image, int64_t time_sent_in_us, - int64_t capture_time_us, absl::optional encode_duration_us) override; // Use nullopt to disable quality scaling. diff --git a/video/video_stream_encoder.cc b/video/video_stream_encoder.cc index 7ec659d837..335532cad1 100644 --- a/video/video_stream_encoder.cc +++ b/video/video_stream_encoder.cc @@ -1762,13 +1762,8 @@ void VideoStreamEncoder::RunPostEncode(const EncodedImage& encoded_image, } } - resource_adaptation_module_->OnEncodeCompleted( - encoded_image.Timestamp(), time_sent_us, - encoded_image.capture_time_ms_ * rtc::kNumMicrosecsPerMillisec, - encode_duration_us); - QualityScaler* quality_scaler = resource_adaptation_module_->quality_scaler(); - if (quality_scaler && encoded_image.qp_ >= 0) - quality_scaler->ReportQp(encoded_image.qp_, time_sent_us); + resource_adaptation_module_->OnEncodeCompleted(encoded_image, time_sent_us, + encode_duration_us); if (bitrate_adjuster_) { bitrate_adjuster_->OnEncodedFrame(encoded_image, temporal_index); }