Implement qpSum stat for video send ssrc stats.
Implemented as defined by this pull request: https://github.com/w3c/webrtc-stats/pull/70 BUG=webrtc:6541 Review-Url: https://codereview.webrtc.org/2430603003 Cr-Commit-Position: refs/heads/master@{#14851}
This commit is contained in:
@ -253,6 +253,8 @@ void ExtractStats(const cricket::VideoSenderInfo& info, StatsReport* report) {
|
||||
(info.adapt_reason & 0x1) > 0);
|
||||
report->AddBoolean(StatsReport::kStatsValueNameViewLimitedResolution,
|
||||
(info.adapt_reason & 0x4) > 0);
|
||||
if (info.qp_sum)
|
||||
report->AddInt(StatsReport::kStatsValueNameQpSum, *info.qp_sum);
|
||||
|
||||
const IntForAdd ints[] = {
|
||||
{ StatsReport::kStatsValueNameAdaptationChanges, info.adapt_changes },
|
||||
|
||||
@ -1926,6 +1926,7 @@ TEST_F(StatsCollectorTest, VerifyVideoSendSsrcStats) {
|
||||
// Construct a stats value to read.
|
||||
video_sender_info.add_ssrc(1234);
|
||||
video_sender_info.frames_encoded = 10;
|
||||
video_sender_info.qp_sum = rtc::Optional<uint64_t>(11);
|
||||
stats_read.senders.push_back(video_sender_info);
|
||||
|
||||
EXPECT_CALL(session_, video_channel()).WillRepeatedly(Return(&video_channel));
|
||||
@ -1937,6 +1938,8 @@ TEST_F(StatsCollectorTest, VerifyVideoSendSsrcStats) {
|
||||
EXPECT_EQ(rtc::ToString(video_sender_info.frames_encoded),
|
||||
ExtractSsrcStatsValue(reports,
|
||||
StatsReport::kStatsValueNameFramesEncoded));
|
||||
EXPECT_EQ(rtc::ToString(*video_sender_info.qp_sum),
|
||||
ExtractSsrcStatsValue(reports, StatsReport::kStatsValueNameQpSum));
|
||||
}
|
||||
|
||||
// This test verifies that stats are correctly set in video receive ssrc stats.
|
||||
|
||||
@ -401,6 +401,8 @@ const char* StatsReport::Value::display_name() const {
|
||||
return "codecImplementationName";
|
||||
case kStatsValueNameMediaType:
|
||||
return "mediaType";
|
||||
case kStatsValueNameQpSum:
|
||||
return "qpSum";
|
||||
// 'goog' prefixed constants.
|
||||
case kStatsValueNameAccelerateRate:
|
||||
return "googAccelerateRate";
|
||||
|
||||
@ -113,6 +113,7 @@ class StatsReport {
|
||||
kStatsValueNamePacketsReceived,
|
||||
kStatsValueNamePacketsSent,
|
||||
kStatsValueNameProtocol,
|
||||
kStatsValueNameQpSum,
|
||||
kStatsValueNameReceiving,
|
||||
kStatsValueNameSelectedCandidatePairId,
|
||||
kStatsValueNameSsrc,
|
||||
|
||||
@ -709,6 +709,7 @@ struct VideoSenderInfo : public MediaSenderInfo {
|
||||
int avg_encode_ms;
|
||||
int encode_usage_percent;
|
||||
uint32_t frames_encoded;
|
||||
rtc::Optional<uint64_t> qp_sum;
|
||||
};
|
||||
|
||||
struct VideoReceiverInfo : public MediaReceiverInfo {
|
||||
|
||||
@ -2124,6 +2124,7 @@ VideoSenderInfo WebRtcVideoChannel2::WebRtcVideoSendStream::GetVideoSenderInfo(
|
||||
info.avg_encode_ms = stats.avg_encode_time_ms;
|
||||
info.encode_usage_percent = stats.encode_usage_percent;
|
||||
info.frames_encoded = stats.frames_encoded;
|
||||
info.qp_sum = stats.qp_sum;
|
||||
|
||||
info.nominal_bitrate = stats.media_bitrate_bps;
|
||||
info.preferred_bitrate = stats.preferred_media_bitrate_bps;
|
||||
|
||||
@ -2875,6 +2875,17 @@ TEST_F(WebRtcVideoChannel2Test, GetStatsReportsFramesEncoded) {
|
||||
EXPECT_EQ(stats.frames_encoded, info.senders[0].frames_encoded);
|
||||
}
|
||||
|
||||
TEST_F(WebRtcVideoChannel2Test, GetStatsReportsQpSum) {
|
||||
FakeVideoSendStream* stream = AddSendStream();
|
||||
webrtc::VideoSendStream::Stats stats;
|
||||
stats.qp_sum = rtc::Optional<uint64_t>(13);
|
||||
stream->SetStats(stats);
|
||||
|
||||
cricket::VideoMediaInfo info;
|
||||
ASSERT_TRUE(channel_->GetStats(&info));
|
||||
EXPECT_EQ(stats.qp_sum, info.senders[0].qp_sum);
|
||||
}
|
||||
|
||||
TEST_F(WebRtcVideoChannel2Test, GetStatsReportsUpperResolution) {
|
||||
FakeVideoSendStream* stream = AddSendStream();
|
||||
webrtc::VideoSendStream::Stats stats;
|
||||
|
||||
@ -495,17 +495,24 @@ void SendStatisticsProxy::OnSendEncodedImage(
|
||||
}
|
||||
}
|
||||
|
||||
if (encoded_image.qp_ != -1 && codec_info) {
|
||||
if (codec_info->codecType == kVideoCodecVP8) {
|
||||
int spatial_idx = (rtp_config_.ssrcs.size() == 1)
|
||||
? -1
|
||||
: static_cast<int>(simulcast_idx);
|
||||
uma_container_->qp_counters_[spatial_idx].vp8.Add(encoded_image.qp_);
|
||||
} else if (codec_info->codecType == kVideoCodecVP9) {
|
||||
int spatial_idx = (codec_info->codecSpecific.VP9.num_spatial_layers == 1)
|
||||
? -1
|
||||
: codec_info->codecSpecific.VP9.spatial_idx;
|
||||
uma_container_->qp_counters_[spatial_idx].vp9.Add(encoded_image.qp_);
|
||||
if (encoded_image.qp_ != -1) {
|
||||
if (!stats_.qp_sum)
|
||||
stats_.qp_sum = rtc::Optional<uint64_t>(0);
|
||||
*stats_.qp_sum += encoded_image.qp_;
|
||||
|
||||
if (codec_info) {
|
||||
if (codec_info->codecType == kVideoCodecVP8) {
|
||||
int spatial_idx = (rtp_config_.ssrcs.size() == 1)
|
||||
? -1
|
||||
: static_cast<int>(simulcast_idx);
|
||||
uma_container_->qp_counters_[spatial_idx].vp8.Add(encoded_image.qp_);
|
||||
} else if (codec_info->codecType == kVideoCodecVP9) {
|
||||
int spatial_idx =
|
||||
(codec_info->codecSpecific.VP9.num_spatial_layers == 1)
|
||||
? -1
|
||||
: codec_info->codecSpecific.VP9.spatial_idx;
|
||||
uma_container_->qp_counters_[spatial_idx].vp9.Add(encoded_image.qp_);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -311,6 +311,28 @@ TEST_F(SendStatisticsProxyTest, OnSendEncodedImageIncreasesFramesEncoded) {
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(SendStatisticsProxyTest, OnSendEncodedImageIncreasesQpSum) {
|
||||
EncodedImage encoded_image;
|
||||
CodecSpecificInfo codec_info;
|
||||
EXPECT_EQ(rtc::Optional<uint64_t>(), statistics_proxy_->GetStats().qp_sum);
|
||||
encoded_image.qp_ = 3;
|
||||
statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info);
|
||||
EXPECT_EQ(rtc::Optional<uint64_t>(3u), statistics_proxy_->GetStats().qp_sum);
|
||||
encoded_image.qp_ = 127;
|
||||
statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info);
|
||||
EXPECT_EQ(rtc::Optional<uint64_t>(130u),
|
||||
statistics_proxy_->GetStats().qp_sum);
|
||||
}
|
||||
|
||||
TEST_F(SendStatisticsProxyTest, OnSendEncodedImageWithoutQpQpSumWontExist) {
|
||||
EncodedImage encoded_image;
|
||||
CodecSpecificInfo codec_info;
|
||||
encoded_image.qp_ = -1;
|
||||
EXPECT_EQ(rtc::Optional<uint64_t>(), statistics_proxy_->GetStats().qp_sum);
|
||||
statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info);
|
||||
EXPECT_EQ(rtc::Optional<uint64_t>(), statistics_proxy_->GetStats().qp_sum);
|
||||
}
|
||||
|
||||
TEST_F(SendStatisticsProxyTest, SwitchContentTypeUpdatesHistograms) {
|
||||
const int kWidth = 640;
|
||||
const int kHeight = 480;
|
||||
|
||||
@ -57,6 +57,7 @@ class VideoSendStream {
|
||||
int avg_encode_time_ms = 0;
|
||||
int encode_usage_percent = 0;
|
||||
uint32_t frames_encoded = 0;
|
||||
rtc::Optional<uint64_t> qp_sum;
|
||||
// Bitrate the encoder is currently configured to use due to bandwidth
|
||||
// limitations.
|
||||
int target_media_bitrate_bps = 0;
|
||||
|
||||
Reference in New Issue
Block a user