Route time-stretching metrics through libjingle

This change connects currentAccelerateRate and currentPreemptiveRate
in webrtc::NetworkStatistics, through corresponding variables in
VoiceReceiverInfo, to googAccelerateRate and googPreemptiveExpandRate.

R=tommi@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/50179004

Cr-Commit-Position: refs/heads/master@{#9350}
This commit is contained in:
Henrik Lundin
2015-06-02 09:24:52 +02:00
parent 76cda01ae2
commit 8e6fd46cc3
7 changed files with 34 additions and 2 deletions

View File

@@ -129,6 +129,9 @@ void ExtractStats(const cricket::VoiceReceiverInfo& info, StatsReport* report) {
{ StatsReport::kStatsValueNameSecondaryDecodedRate,
info.secondary_decoded_rate },
{ StatsReport::kStatsValueNameSpeechExpandRate, info.speech_expand_rate },
{ StatsReport::kStatsValueNameAccelerateRate, info.accelerate_rate },
{ StatsReport::kStatsValueNamePreemptiveExpandRate,
info.preemptive_expand_rate },
};
const IntForAdd ints[] = {

View File

@@ -313,6 +313,12 @@ void VerifyVoiceReceiverInfoReport(
EXPECT_TRUE(GetValue(
report, StatsReport::kStatsValueNameSpeechExpandRate, &value_in_report));
EXPECT_EQ(rtc::ToString<float>(info.speech_expand_rate), value_in_report);
EXPECT_TRUE(GetValue(report, StatsReport::kStatsValueNameAccelerateRate,
&value_in_report));
EXPECT_EQ(rtc::ToString<float>(info.accelerate_rate), value_in_report);
EXPECT_TRUE(GetValue(report, StatsReport::kStatsValueNamePreemptiveExpandRate,
&value_in_report));
EXPECT_EQ(rtc::ToString<float>(info.preemptive_expand_rate), value_in_report);
EXPECT_TRUE(GetValue(report, StatsReport::kStatsValueNameSecondaryDecodedRate,
&value_in_report));
EXPECT_EQ(rtc::ToString<float>(info.secondary_decoded_rate), value_in_report);
@@ -451,6 +457,8 @@ void InitVoiceReceiverInfo(cricket::VoiceReceiverInfo* voice_receiver_info) {
voice_receiver_info->expand_rate = 121;
voice_receiver_info->speech_expand_rate = 122;
voice_receiver_info->secondary_decoded_rate = 123;
voice_receiver_info->accelerate_rate = 124;
voice_receiver_info->preemptive_expand_rate = 125;
}
class StatsCollectorForTest : public webrtc::StatsCollector {

View File

@@ -408,6 +408,8 @@ const char* StatsReport::Value::display_name() const {
return "datachannelid";
// 'goog' prefixed constants.
case kStatsValueNameAccelerateRate:
return "googAccelerateRate";
case kStatsValueNameActiveConnection:
return "googActiveConnection";
case kStatsValueNameActualEncBitrate:
@@ -544,6 +546,8 @@ const char* StatsReport::Value::display_name() const {
return "googNacksReceived";
case kStatsValueNameNacksSent:
return "googNacksSent";
case kStatsValueNamePreemptiveExpandRate:
return "googPreemptiveExpandRate";
case kStatsValueNamePlisReceived:
return "googPlisReceived";
case kStatsValueNamePlisSent:

View File

@@ -131,6 +131,7 @@ class StatsReport {
kStatsValueNameTransportId,
// Internal StatsValue names.
kStatsValueNameAccelerateRate,
kStatsValueNameActualEncBitrate,
kStatsValueNameAdaptationChanges,
kStatsValueNameAvailableReceiveBandwidth,
@@ -197,6 +198,7 @@ class StatsReport {
kStatsValueNameNacksSent,
kStatsValueNamePlisReceived,
kStatsValueNamePlisSent,
kStatsValueNamePreemptiveExpandRate,
kStatsValueNamePreferredJitterBufferMs,
kStatsValueNameRemoteAddress,
kStatsValueNameRemoteCandidateId,

View File

@@ -784,14 +784,15 @@ struct VoiceReceiverInfo : public MediaReceiverInfo {
expand_rate(0),
speech_expand_rate(0),
secondary_decoded_rate(0),
accelerate_rate(0),
preemptive_expand_rate(0),
decoding_calls_to_silence_generator(0),
decoding_calls_to_neteq(0),
decoding_normal(0),
decoding_plc(0),
decoding_cng(0),
decoding_plc_cng(0),
capture_start_ntp_time_ms(-1) {
}
capture_start_ntp_time_ms(-1) {}
int ext_seqnum;
int jitter_ms;
@@ -805,6 +806,10 @@ struct VoiceReceiverInfo : public MediaReceiverInfo {
float speech_expand_rate;
// fraction of data out of secondary decoding, including FEC and RED.
float secondary_decoded_rate;
// Fraction of data removed through time compression.
float accelerate_rate;
// Fraction of data inserted through time stretching.
float preemptive_expand_rate;
int decoding_calls_to_silence_generator;
int decoding_calls_to_neteq;
int decoding_normal;

View File

@@ -3345,6 +3345,10 @@ bool WebRtcVoiceMediaChannel::GetStats(VoiceMediaInfo* info) {
static_cast<float>(ns.currentSpeechExpandRate) / (1 << 14);
rinfo.secondary_decoded_rate =
static_cast<float>(ns.currentSecondaryDecodedRate) / (1 << 14);
rinfo.accelerate_rate =
static_cast<float>(ns.currentAccelerateRate) / (1 << 14);
rinfo.preemptive_expand_rate =
static_cast<float>(ns.currentPreemptiveRate) / (1 << 14);
}
webrtc::AudioDecodingCallStats ds;

View File

@@ -2066,6 +2066,12 @@ TEST_F(WebRtcVoiceEngineTestFake, GetStatsWithMultipleSendStreams) {
(1 << 14), info.receivers[0].speech_expand_rate);
EXPECT_EQ(static_cast<float>(cricket::kNetStats.currentSecondaryDecodedRate) /
(1 << 14), info.receivers[0].secondary_decoded_rate);
EXPECT_EQ(
static_cast<float>(cricket::kNetStats.currentAccelerateRate) / (1 << 14),
info.receivers[0].accelerate_rate);
EXPECT_EQ(
static_cast<float>(cricket::kNetStats.currentPreemptiveRate) / (1 << 14),
info.receivers[0].preemptive_expand_rate);
}
// Test that we can add and remove receive streams, and do proper send/playout.