| Index: webrtc/modules/rtp_rtcp/source/rtcp_packet/voip_metric.cc
 | 
| diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/voip_metric.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet/voip_metric.cc
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..a79d48e1ca78c5725e47bf105ec1e8c2a0bdf885
 | 
| --- /dev/null
 | 
| +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/voip_metric.cc
 | 
| @@ -0,0 +1,107 @@
 | 
| +/*
 | 
| + *  Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
 | 
| + *
 | 
| + *  Use of this source code is governed by a BSD-style license
 | 
| + *  that can be found in the LICENSE file in the root of the source
 | 
| + *  tree. An additional intellectual property rights grant can be found
 | 
| + *  in the file PATENTS.  All contributing project authors may
 | 
| + *  be found in the AUTHORS file in the root of the source tree.
 | 
| + */
 | 
| +
 | 
| +#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/voip_metric.h"
 | 
| +
 | 
| +#include "webrtc/base/checks.h"
 | 
| +#include "webrtc/modules/rtp_rtcp/source/byte_io.h"
 | 
| +
 | 
| +namespace webrtc {
 | 
| +namespace rtcp {
 | 
| +// VoIP Metrics Report Block (RFC 3611).
 | 
| +//
 | 
| +//     0                   1                   2                   3
 | 
| +//     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 | 
| +//    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | 
| +//  0 |     BT=7      |   reserved    |       block length = 8        |
 | 
| +//    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | 
| +//  4 |                        SSRC of source                         |
 | 
| +//    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | 
| +//  8 |   loss rate   | discard rate  | burst density |  gap density  |
 | 
| +//    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | 
| +// 12 |       burst duration          |         gap duration          |
 | 
| +//    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | 
| +// 16 |     round trip delay          |       end system delay        |
 | 
| +//    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | 
| +// 20 | signal level  |  noise level  |     RERL      |     Gmin      |
 | 
| +//    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | 
| +// 24 |   R factor    | ext. R factor |    MOS-LQ     |    MOS-CQ     |
 | 
| +//    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | 
| +// 28 |   RX config   |   reserved    |          JB nominal           |
 | 
| +//    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | 
| +// 32 |          JB maximum           |          JB abs max           |
 | 
| +// 36 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | 
| +VoipMetric::VoipMetric() : ssrc_(0) {
 | 
| +  memset(&voip_metric_, 0, sizeof(voip_metric_));
 | 
| +}
 | 
| +
 | 
| +void VoipMetric::Parse(const uint8_t* buffer) {
 | 
| +  RTC_DCHECK(buffer[0] == kBlockType);
 | 
| +  // reserved = buffer[1];
 | 
| +  RTC_DCHECK(ByteReader<uint16_t>::ReadBigEndian(&buffer[2]) == kBlockLength);
 | 
| +  ssrc_ = ByteReader<uint32_t>::ReadBigEndian(&buffer[4]);
 | 
| +  voip_metric_.lossRate = buffer[8];
 | 
| +  voip_metric_.discardRate = buffer[9];
 | 
| +  voip_metric_.burstDensity = buffer[10];
 | 
| +  voip_metric_.gapDensity = buffer[11];
 | 
| +  voip_metric_.burstDuration = ByteReader<uint16_t>::ReadBigEndian(&buffer[12]);
 | 
| +  voip_metric_.gapDuration = ByteReader<uint16_t>::ReadBigEndian(&buffer[14]);
 | 
| +  voip_metric_.roundTripDelay =
 | 
| +      ByteReader<uint16_t>::ReadBigEndian(&buffer[16]);
 | 
| +  voip_metric_.endSystemDelay =
 | 
| +      ByteReader<uint16_t>::ReadBigEndian(&buffer[18]);
 | 
| +  voip_metric_.signalLevel = buffer[20];
 | 
| +  voip_metric_.noiseLevel = buffer[21];
 | 
| +  voip_metric_.RERL = buffer[22];
 | 
| +  voip_metric_.Gmin = buffer[23];
 | 
| +  voip_metric_.Rfactor = buffer[24];
 | 
| +  voip_metric_.extRfactor = buffer[25];
 | 
| +  voip_metric_.MOSLQ = buffer[26];
 | 
| +  voip_metric_.MOSCQ = buffer[27];
 | 
| +  voip_metric_.RXconfig = buffer[28];
 | 
| +  // reserved = buffer[29];
 | 
| +  voip_metric_.JBnominal = ByteReader<uint16_t>::ReadBigEndian(&buffer[30]);
 | 
| +  voip_metric_.JBmax = ByteReader<uint16_t>::ReadBigEndian(&buffer[32]);
 | 
| +  voip_metric_.JBabsMax = ByteReader<uint16_t>::ReadBigEndian(&buffer[34]);
 | 
| +}
 | 
| +
 | 
| +void VoipMetric::Create(uint8_t* buffer) const {
 | 
| +  const uint8_t kReserved = 0;
 | 
| +  buffer[0] = kBlockType;
 | 
| +  buffer[1] = kReserved;
 | 
| +  ByteWriter<uint16_t>::WriteBigEndian(&buffer[2], kBlockLength);
 | 
| +  ByteWriter<uint32_t>::WriteBigEndian(&buffer[4], ssrc_);
 | 
| +  buffer[8] = voip_metric_.lossRate;
 | 
| +  buffer[9] = voip_metric_.discardRate;
 | 
| +  buffer[10] = voip_metric_.burstDensity;
 | 
| +  buffer[11] = voip_metric_.gapDensity;
 | 
| +  ByteWriter<uint16_t>::WriteBigEndian(&buffer[12], voip_metric_.burstDuration);
 | 
| +  ByteWriter<uint16_t>::WriteBigEndian(&buffer[14], voip_metric_.gapDuration);
 | 
| +  ByteWriter<uint16_t>::WriteBigEndian(&buffer[16],
 | 
| +                                       voip_metric_.roundTripDelay);
 | 
| +  ByteWriter<uint16_t>::WriteBigEndian(&buffer[18],
 | 
| +                                       voip_metric_.endSystemDelay);
 | 
| +  buffer[20] = voip_metric_.signalLevel;
 | 
| +  buffer[21] = voip_metric_.noiseLevel;
 | 
| +  buffer[22] = voip_metric_.RERL;
 | 
| +  buffer[23] = voip_metric_.Gmin;
 | 
| +  buffer[24] = voip_metric_.Rfactor;
 | 
| +  buffer[25] = voip_metric_.extRfactor;
 | 
| +  buffer[26] = voip_metric_.MOSLQ;
 | 
| +  buffer[27] = voip_metric_.MOSCQ;
 | 
| +  buffer[28] = voip_metric_.RXconfig;
 | 
| +  buffer[29] = kReserved;
 | 
| +  ByteWriter<uint16_t>::WriteBigEndian(&buffer[30], voip_metric_.JBnominal);
 | 
| +  ByteWriter<uint16_t>::WriteBigEndian(&buffer[32], voip_metric_.JBmax);
 | 
| +  ByteWriter<uint16_t>::WriteBigEndian(&buffer[34], voip_metric_.JBabsMax);
 | 
| +}
 | 
| +
 | 
| +}  // namespace rtcp
 | 
| +}  // namespace webrtc
 | 
| 
 |