| Index: talk/media/webrtc/webrtcvoiceengine.cc
|
| diff --git a/talk/media/webrtc/webrtcvoiceengine.cc b/talk/media/webrtc/webrtcvoiceengine.cc
|
| index eed1195975704aea781d564eefca5a9953b164d4..fd93535bea0672c35b64e13e80d1d794475a0dd2 100644
|
| --- a/talk/media/webrtc/webrtcvoiceengine.cc
|
| +++ b/talk/media/webrtc/webrtcvoiceengine.cc
|
| @@ -2649,11 +2649,6 @@ bool WebRtcVoiceMediaChannel::GetStats(VoiceMediaInfo* info) {
|
| }
|
| }
|
|
|
| - webrtc::CallStatistics cs;
|
| - unsigned int ssrc;
|
| - webrtc::CodecInst codec;
|
| - unsigned int level;
|
| -
|
| for (const auto& ch : send_streams_) {
|
| const int channel = ch.second->channel();
|
|
|
| @@ -2661,6 +2656,8 @@ bool WebRtcVoiceMediaChannel::GetStats(VoiceMediaInfo* info) {
|
| // remote side told us it got from its RTCP report.
|
| VoiceSenderInfo sinfo;
|
|
|
| + webrtc::CallStatistics cs = {0};
|
| + unsigned int ssrc = 0;
|
| if (engine()->voe()->rtp()->GetRTCPStatistics(channel, cs) == -1 ||
|
| engine()->voe()->rtp()->GetLocalSSRC(channel, ssrc) == -1) {
|
| continue;
|
| @@ -2681,6 +2678,7 @@ bool WebRtcVoiceMediaChannel::GetStats(VoiceMediaInfo* info) {
|
| sinfo.packets_lost = -1;
|
| sinfo.ext_seqnum = -1;
|
| std::vector<webrtc::ReportBlock> receive_blocks;
|
| + webrtc::CodecInst codec = {0};
|
| if (engine()->voe()->rtp()->GetRemoteRTCPReportBlocks(
|
| channel, &receive_blocks) != -1 &&
|
| engine()->voe()->codec()->GetSendCodec(channel, codec) != -1) {
|
| @@ -2701,6 +2699,7 @@ bool WebRtcVoiceMediaChannel::GetStats(VoiceMediaInfo* info) {
|
| }
|
|
|
| // Local speech level.
|
| + unsigned int level = 0;
|
| sinfo.audio_level = (engine()->voe()->volume()->
|
| GetSpeechInputLevelFullRange(level) != -1) ? level : -1;
|
|
|
| @@ -2721,76 +2720,36 @@ bool WebRtcVoiceMediaChannel::GetStats(VoiceMediaInfo* info) {
|
| }
|
|
|
| // Get the SSRC and stats for each receiver.
|
| - for (const auto& ch : receive_channels_) {
|
| - int ch_id = ch.second->channel();
|
| - memset(&cs, 0, sizeof(cs));
|
| - if (engine()->voe()->rtp()->GetRemoteSSRC(ch_id, ssrc) != -1 &&
|
| - engine()->voe()->rtp()->GetRTCPStatistics(ch_id, cs) != -1 &&
|
| - engine()->voe()->codec()->GetRecCodec(ch_id, codec) != -1) {
|
| - VoiceReceiverInfo rinfo;
|
| - rinfo.add_ssrc(ssrc);
|
| - rinfo.bytes_rcvd = cs.bytesReceived;
|
| - rinfo.packets_rcvd = cs.packetsReceived;
|
| - // The next four fields are from the most recently sent RTCP report.
|
| - // Convert Q8 to floating point.
|
| - rinfo.fraction_lost = static_cast<float>(cs.fractionLost) / (1 << 8);
|
| - rinfo.packets_lost = cs.cumulativeLost;
|
| - rinfo.ext_seqnum = cs.extendedMax;
|
| - rinfo.capture_start_ntp_time_ms = cs.capture_start_ntp_time_ms_;
|
| - if (codec.pltype != -1) {
|
| - rinfo.codec_name = codec.plname;
|
| - }
|
| - // Convert samples to milliseconds.
|
| - if (codec.plfreq / 1000 > 0) {
|
| - rinfo.jitter_ms = cs.jitterSamples / (codec.plfreq / 1000);
|
| - }
|
| -
|
| - // Get jitter buffer and total delay (alg + jitter + playout) stats.
|
| - webrtc::NetworkStatistics ns;
|
| - if (engine()->voe()->neteq() &&
|
| - engine()->voe()->neteq()->GetNetworkStatistics(
|
| - ch_id, ns) != -1) {
|
| - rinfo.jitter_buffer_ms = ns.currentBufferSize;
|
| - rinfo.jitter_buffer_preferred_ms = ns.preferredBufferSize;
|
| - rinfo.expand_rate =
|
| - static_cast<float>(ns.currentExpandRate) / (1 << 14);
|
| - rinfo.speech_expand_rate =
|
| - 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;
|
| - if (engine()->voe()->neteq() &&
|
| - engine()->voe()->neteq()->GetDecodingCallStatistics(
|
| - ch_id, &ds) != -1) {
|
| - rinfo.decoding_calls_to_silence_generator =
|
| - ds.calls_to_silence_generator;
|
| - rinfo.decoding_calls_to_neteq = ds.calls_to_neteq;
|
| - rinfo.decoding_normal = ds.decoded_normal;
|
| - rinfo.decoding_plc = ds.decoded_plc;
|
| - rinfo.decoding_cng = ds.decoded_cng;
|
| - rinfo.decoding_plc_cng = ds.decoded_plc_cng;
|
| - }
|
| -
|
| - if (engine()->voe()->sync()) {
|
| - int jitter_buffer_delay_ms = 0;
|
| - int playout_buffer_delay_ms = 0;
|
| - engine()->voe()->sync()->GetDelayEstimate(
|
| - ch_id, &jitter_buffer_delay_ms, &playout_buffer_delay_ms);
|
| - rinfo.delay_estimate_ms = jitter_buffer_delay_ms +
|
| - playout_buffer_delay_ms;
|
| - }
|
| -
|
| - // Get speech level.
|
| - rinfo.audio_level = (engine()->voe()->volume()->
|
| - GetSpeechOutputLevelFullRange(ch_id, level) != -1) ? level : -1;
|
| - info->receivers.push_back(rinfo);
|
| - }
|
| + info->receivers.clear();
|
| + for (const auto& stream : receive_streams_) {
|
| + webrtc::AudioReceiveStream::Stats stats = stream.second->GetStats();
|
| + VoiceReceiverInfo rinfo;
|
| + rinfo.add_ssrc(stats.remote_ssrc);
|
| + rinfo.bytes_rcvd = stats.bytes_rcvd;
|
| + rinfo.packets_rcvd = stats.packets_rcvd;
|
| + rinfo.packets_lost = stats.packets_lost;
|
| + rinfo.fraction_lost = stats.fraction_lost;
|
| + rinfo.codec_name = stats.codec_name;
|
| + rinfo.ext_seqnum = stats.ext_seqnum;
|
| + rinfo.jitter_ms = stats.jitter_ms;
|
| + rinfo.jitter_buffer_ms = stats.jitter_buffer_ms;
|
| + rinfo.jitter_buffer_preferred_ms = stats.jitter_buffer_preferred_ms;
|
| + rinfo.delay_estimate_ms = stats.delay_estimate_ms;
|
| + rinfo.audio_level = stats.audio_level;
|
| + rinfo.expand_rate = stats.expand_rate;
|
| + rinfo.speech_expand_rate = stats.speech_expand_rate;
|
| + rinfo.secondary_decoded_rate = stats.secondary_decoded_rate;
|
| + rinfo.accelerate_rate = stats.accelerate_rate;
|
| + rinfo.preemptive_expand_rate = stats.preemptive_expand_rate;
|
| + rinfo.decoding_calls_to_silence_generator =
|
| + stats.decoding_calls_to_silence_generator;
|
| + rinfo.decoding_calls_to_neteq = stats.decoding_calls_to_neteq;
|
| + rinfo.decoding_normal = stats.decoding_normal;
|
| + rinfo.decoding_plc = stats.decoding_plc;
|
| + rinfo.decoding_cng = stats.decoding_cng;
|
| + rinfo.decoding_plc_cng = stats.decoding_plc_cng;
|
| + rinfo.capture_start_ntp_time_ms = stats.capture_start_ntp_time_ms;
|
| + info->receivers.push_back(rinfo);
|
| }
|
|
|
| return true;
|
|
|