diff --git a/api/stats/rtcstats_objects.h b/api/stats/rtcstats_objects.h index 3795d79f5e..dec3094b45 100644 --- a/api/stats/rtcstats_objects.h +++ b/api/stats/rtcstats_objects.h @@ -648,7 +648,7 @@ class RTC_EXPORT RTCVideoSourceStats final : public RTCMediaSourceStats { RTCStatsMember width; RTCStatsMember height; RTCStatsMember frames; - RTCStatsMember frames_per_second; + RTCStatsMember frames_per_second; }; // https://w3c.github.io/webrtc-stats/#transportstats-dict* diff --git a/call/BUILD.gn b/call/BUILD.gn index 87c0ec028a..b5002e4aa9 100644 --- a/call/BUILD.gn +++ b/call/BUILD.gn @@ -362,6 +362,7 @@ rtc_library("video_stream_api") { "../modules/rtp_rtcp:rtp_rtcp_format", "../rtc_base:checks", "../rtc_base:rtc_base_approved", + "../rtc_base:stringutils", ] absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] } diff --git a/call/video_send_stream.cc b/call/video_send_stream.cc index 25513e4e4c..241d44a230 100644 --- a/call/video_send_stream.cc +++ b/call/video_send_stream.cc @@ -14,6 +14,7 @@ #include "api/crypto/frame_encryptor_interface.h" #include "rtc_base/strings/string_builder.h" +#include "rtc_base/strings/string_format.h" namespace webrtc { @@ -71,7 +72,7 @@ std::string VideoSendStream::Stats::ToString(int64_t time_ms) const { char buf[2048]; rtc::SimpleStringBuilder ss(buf); ss << "VideoSendStream stats: " << time_ms << ", {"; - ss << "input_fps: " << input_frame_rate << ", "; + ss << "input_fps: " << rtc::StringFormat("%.1f", input_frame_rate) << ", "; ss << "encode_fps: " << encode_frame_rate << ", "; ss << "encode_ms: " << avg_encode_time_ms << ", "; ss << "encode_usage_perc: " << encode_usage_percent << ", "; diff --git a/call/video_send_stream.h b/call/video_send_stream.h index 487f3042a8..f899a7371b 100644 --- a/call/video_send_stream.h +++ b/call/video_send_stream.h @@ -98,7 +98,7 @@ class VideoSendStream { ~Stats(); std::string ToString(int64_t time_ms) const; std::string encoder_implementation_name = "unknown"; - int input_frame_rate = 0; + double input_frame_rate = 0; int encode_frame_rate = 0; int avg_encode_time_ms = 0; int encode_usage_percent = 0; diff --git a/media/base/media_channel.h b/media/base/media_channel.h index 519ca5dd6d..b3ceb3930f 100644 --- a/media/base/media_channel.h +++ b/media/base/media_channel.h @@ -549,7 +549,7 @@ struct VideoSenderInfo : public MediaSenderInfo { int send_frame_width = 0; int send_frame_height = 0; int frames = 0; - int framerate_input = 0; + double framerate_input = 0; int framerate_sent = 0; int aggregated_framerate_sent = 0; int nominal_bitrate = 0; diff --git a/media/engine/webrtc_video_engine_unittest.cc b/media/engine/webrtc_video_engine_unittest.cc index a02c14ea7b..2265dd93be 100644 --- a/media/engine/webrtc_video_engine_unittest.cc +++ b/media/engine/webrtc_video_engine_unittest.cc @@ -5479,7 +5479,7 @@ TEST_F(WebRtcVideoChannelTest, GetStatsReportsPerLayerQpSum) { webrtc::VideoSendStream::Stats GetInitialisedStats() { webrtc::VideoSendStream::Stats stats; stats.encoder_implementation_name = "vp"; - stats.input_frame_rate = 1; + stats.input_frame_rate = 1.0; stats.encode_frame_rate = 2; stats.avg_encode_time_ms = 3; stats.encode_usage_percent = 4; diff --git a/pc/rtc_stats_collector_unittest.cc b/pc/rtc_stats_collector_unittest.cc index 4ee5dc8931..87a1bc0d2e 100644 --- a/pc/rtc_stats_collector_unittest.cc +++ b/pc/rtc_stats_collector_unittest.cc @@ -2701,11 +2701,11 @@ TEST_F(RTCStatsCollectorTest, RTCVideoSourceStatsCollectedForSenderWithTrack) { video_media_info.senders.push_back(cricket::VideoSenderInfo()); video_media_info.senders[0].local_stats.push_back(cricket::SsrcSenderInfo()); video_media_info.senders[0].local_stats[0].ssrc = kSsrc; - video_media_info.senders[0].framerate_input = 29; + video_media_info.senders[0].framerate_input = 29.0; video_media_info.aggregated_senders[0].local_stats.push_back( cricket::SsrcSenderInfo()); video_media_info.aggregated_senders[0].local_stats[0].ssrc = kSsrc; - video_media_info.aggregated_senders[0].framerate_input = 29; + video_media_info.aggregated_senders[0].framerate_input = 29.0; video_media_info.aggregated_senders[0].frames = 10001; auto* video_media_channel = pc_->AddVideoChannel("VideoMid", "TransportName"); video_media_channel->SetStats(video_media_info); @@ -2726,7 +2726,7 @@ TEST_F(RTCStatsCollectorTest, RTCVideoSourceStatsCollectedForSenderWithTrack) { expected_video.kind = "video"; expected_video.width = kVideoSourceWidth; expected_video.height = kVideoSourceHeight; - expected_video.frames_per_second = 29; + expected_video.frames_per_second = 29.0; expected_video.frames = 10001; ASSERT_TRUE(report->Get(expected_video.id())); @@ -2750,7 +2750,7 @@ TEST_F(RTCStatsCollectorTest, cricket::VideoMediaInfo video_media_info; video_media_info.senders.push_back(cricket::VideoSenderInfo()); video_media_info.senders[0].local_stats.push_back(cricket::SsrcSenderInfo()); - video_media_info.senders[0].framerate_input = 29; + video_media_info.senders[0].framerate_input = 29.0; auto* video_media_channel = pc_->AddVideoChannel("VideoMid", "TransportName"); video_media_channel->SetStats(video_media_info); @@ -2781,7 +2781,7 @@ TEST_F(RTCStatsCollectorTest, video_media_info.senders.push_back(cricket::VideoSenderInfo()); video_media_info.senders[0].local_stats.push_back(cricket::SsrcSenderInfo()); video_media_info.senders[0].local_stats[0].ssrc = kSsrc; - video_media_info.senders[0].framerate_input = 29; + video_media_info.senders[0].framerate_input = 29.0; auto* video_media_channel = pc_->AddVideoChannel("VideoMid", "TransportName"); video_media_channel->SetStats(video_media_info); @@ -3133,7 +3133,7 @@ TEST_F(RTCStatsCollectorTest, video_media_info.senders.push_back(cricket::VideoSenderInfo()); video_media_info.senders[0].local_stats.push_back(cricket::SsrcSenderInfo()); video_media_info.senders[0].local_stats[0].ssrc = kSsrc; - video_media_info.senders[0].framerate_input = 29; + video_media_info.senders[0].framerate_input = 29.0; auto* video_media_channel = pc_->AddVideoChannel("VideoMid", "TransportName"); video_media_channel->SetStats(video_media_info); diff --git a/pc/rtc_stats_integrationtest.cc b/pc/rtc_stats_integrationtest.cc index 32c567ee45..ca0df26bb0 100644 --- a/pc/rtc_stats_integrationtest.cc +++ b/pc/rtc_stats_integrationtest.cc @@ -1112,7 +1112,7 @@ class RTCStatsReportVerifier { verifier.TestMemberIsUndefined(video_source.width); verifier.TestMemberIsUndefined(video_source.height); verifier.TestMemberIsNonNegative(video_source.frames); - verifier.TestMemberIsNonNegative(video_source.frames_per_second); + verifier.TestMemberIsNonNegative(video_source.frames_per_second); return verifier.ExpectAllMembersSuccessfullyTested(); } diff --git a/pc/stats_collector.cc b/pc/stats_collector.cc index 01c519f307..f4b48f71ad 100644 --- a/pc/stats_collector.cc +++ b/pc/stats_collector.cc @@ -13,6 +13,7 @@ #include #include +#include #include #include #include @@ -385,7 +386,7 @@ void ExtractStats(const cricket::VideoSenderInfo& info, info.encode_usage_percent}, {StatsReport::kStatsValueNameFirsReceived, info.firs_rcvd}, {StatsReport::kStatsValueNameFrameHeightSent, info.send_frame_height}, - {StatsReport::kStatsValueNameFrameRateInput, info.framerate_input}, + {StatsReport::kStatsValueNameFrameRateInput, round(info.framerate_input)}, {StatsReport::kStatsValueNameFrameRateSent, info.framerate_sent}, {StatsReport::kStatsValueNameFrameWidthSent, info.send_frame_width}, {StatsReport::kStatsValueNameNacksReceived, info.nacks_rcvd}, diff --git a/video/send_statistics_proxy.cc b/video/send_statistics_proxy.cc index eeb379fb44..2eafa305c9 100644 --- a/video/send_statistics_proxy.cc +++ b/video/send_statistics_proxy.cc @@ -737,7 +737,7 @@ VideoSendStream::Stats SendStatisticsProxy::GetStats() { MutexLock lock(&mutex_); PurgeOldStats(); stats_.input_frame_rate = - round(uma_container_->input_frame_rate_tracker_.ComputeRate()); + uma_container_->input_frame_rate_tracker_.ComputeRate(); stats_.frames = uma_container_->input_frame_rate_tracker_.TotalSampleCount(); stats_.content_type =