| Index: webrtc/media/engine/payload_type_mapper.cc
 | 
| diff --git a/webrtc/media/engine/payload_type_mapper.cc b/webrtc/media/engine/payload_type_mapper.cc
 | 
| deleted file mode 100644
 | 
| index 87b54be33b51f530e0aac15da859d614bba7eedd..0000000000000000000000000000000000000000
 | 
| --- a/webrtc/media/engine/payload_type_mapper.cc
 | 
| +++ /dev/null
 | 
| @@ -1,159 +0,0 @@
 | 
| -/*
 | 
| - *  Copyright (c) 2016 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/media/engine/payload_type_mapper.h"
 | 
| -
 | 
| -#include "webrtc/common_types.h"
 | 
| -#include "webrtc/media/base/mediaconstants.h"
 | 
| -
 | 
| -namespace cricket {
 | 
| -
 | 
| -PayloadTypeMapper::PayloadTypeMapper()
 | 
| -    // RFC 3551 reserves payload type numbers in the range 96-127 exclusively
 | 
| -    // for dynamic assignment. Once those are used up, it is recommended that
 | 
| -    // payload types unassigned by the RFC are used for dynamic payload type
 | 
| -    // mapping, before any static payload ids. At this point, we only support
 | 
| -    // mapping within the exclusive range.
 | 
| -    : next_unused_payload_type_(96),
 | 
| -      max_payload_type_(127),
 | 
| -      mappings_({
 | 
| -          // Static payload type assignments according to RFC 3551.
 | 
| -          {{"PCMU",   8000, 1}, 0},
 | 
| -          {{"GSM",    8000, 1}, 3},
 | 
| -          {{"G723",   8000, 1}, 4},
 | 
| -          {{"DVI4",   8000, 1}, 5},
 | 
| -          {{"DVI4",  16000, 1}, 6},
 | 
| -          {{"LPC",    8000, 1}, 7},
 | 
| -          {{"PCMA",   8000, 1}, 8},
 | 
| -          {{"G722",   8000, 1}, 9},
 | 
| -          {{"L16",   44100, 2}, 10},
 | 
| -          {{"L16",   44100, 1}, 11},
 | 
| -          {{"QCELP",  8000, 1}, 12},
 | 
| -          {{"CN",     8000, 1}, 13},
 | 
| -          // RFC 4566 is a bit ambiguous on the contents of the "encoding
 | 
| -          // parameters" field, which, for audio, encodes the number of
 | 
| -          // channels. It is "optional and may be omitted if the number of
 | 
| -          // channels is one". Does that necessarily imply that an omitted
 | 
| -          // encoding parameter means one channel?  Since RFC 3551 doesn't
 | 
| -          // specify a value for this parameter for MPA, I've included both 0
 | 
| -          // and 1 here, to increase the chances it will be correctly used if
 | 
| -          // someone implements an MPEG audio encoder/decoder.
 | 
| -          {{"MPA",   90000, 0}, 14},
 | 
| -          {{"MPA",   90000, 1}, 14},
 | 
| -          {{"G728",   8000, 1}, 15},
 | 
| -          {{"DVI4",  11025, 1}, 16},
 | 
| -          {{"DVI4",  22050, 1}, 17},
 | 
| -          {{"G729",   8000, 1}, 18},
 | 
| -
 | 
| -          // Payload type assignments currently used by WebRTC.
 | 
| -          // Includes video, to reduce collisions (and thus reassignments)
 | 
| -          // RTX codecs mapping to specific video payload types
 | 
| -          {{kRtxCodecName,    90000, 0,
 | 
| -              {{kCodecParamAssociatedPayloadType,
 | 
| -                      std::to_string(kDefaultVp8PlType)}}},
 | 
| -                kDefaultRtxVp8PlType},
 | 
| -          {{kRtxCodecName,    90000, 0,
 | 
| -              {{kCodecParamAssociatedPayloadType,
 | 
| -                      std::to_string(kDefaultVp9PlType)}}},
 | 
| -                kDefaultRtxVp9PlType},
 | 
| -          {{kRtxCodecName,    90000, 0,
 | 
| -              {{kCodecParamAssociatedPayloadType,
 | 
| -                      std::to_string(kDefaultRedPlType)}}},
 | 
| -                kDefaultRtxRedPlType},
 | 
| -          {{kRtxCodecName,    90000, 0,
 | 
| -              {{kCodecParamAssociatedPayloadType,
 | 
| -                      std::to_string(kDefaultH264PlType)}}},
 | 
| -                kDefaultRtxH264PlType},
 | 
| -          // Other codecs
 | 
| -          {{kVp8CodecName,    90000, 0}, kDefaultVp8PlType},
 | 
| -          {{kVp9CodecName,    90000, 0}, kDefaultVp9PlType},
 | 
| -          {{kIlbcCodecName,    8000, 1}, 102},
 | 
| -          {{kIsacCodecName,   16000, 1}, 103},
 | 
| -          {{kIsacCodecName,   32000, 1}, 104},
 | 
| -          {{kCnCodecName,     16000, 1}, 105},
 | 
| -          {{kCnCodecName,     32000, 1}, 106},
 | 
| -          {{kH264CodecName,   90000, 0}, kDefaultH264PlType},
 | 
| -          {{kOpusCodecName,   48000, 2,
 | 
| -              {{"minptime", "10"}, {"useinbandfec", "1"}}}, 111},
 | 
| -          {{kRedCodecName,    90000, 0}, kDefaultRedPlType},
 | 
| -          {{kUlpfecCodecName, 90000, 0}, kDefaultUlpfecType},
 | 
| -          {{kDtmfCodecName,    8000, 1}, 126}}) {
 | 
| -  // TODO(ossu): Try to keep this as change-proof as possible until we're able
 | 
| -  // to remove the payload type constants from everywhere in the code.
 | 
| -  for (const auto& mapping : mappings_) {
 | 
| -    used_payload_types_.insert(mapping.second);
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -PayloadTypeMapper::~PayloadTypeMapper() = default;
 | 
| -
 | 
| -rtc::Optional<int> PayloadTypeMapper::GetMappingFor(
 | 
| -    const webrtc::SdpAudioFormat& format) {
 | 
| -  auto iter = mappings_.find(format);
 | 
| -  if (iter != mappings_.end())
 | 
| -    return rtc::Optional<int>(iter->second);
 | 
| -
 | 
| -  for (; next_unused_payload_type_ <= max_payload_type_;
 | 
| -       ++next_unused_payload_type_) {
 | 
| -    int payload_type = next_unused_payload_type_;
 | 
| -    if (used_payload_types_.find(payload_type) == used_payload_types_.end()) {
 | 
| -      used_payload_types_.insert(payload_type);
 | 
| -      mappings_[format] = payload_type;
 | 
| -      ++next_unused_payload_type_;
 | 
| -      return rtc::Optional<int>(payload_type);
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  return rtc::Optional<int>();
 | 
| -}
 | 
| -
 | 
| -rtc::Optional<int> PayloadTypeMapper::FindMappingFor(
 | 
| -    const webrtc::SdpAudioFormat& format) const {
 | 
| -  auto iter = mappings_.find(format);
 | 
| -  if (iter != mappings_.end())
 | 
| -    return rtc::Optional<int>(iter->second);
 | 
| -
 | 
| -  return rtc::Optional<int>();
 | 
| -}
 | 
| -
 | 
| -rtc::Optional<AudioCodec> PayloadTypeMapper::ToAudioCodec(
 | 
| -    const webrtc::SdpAudioFormat& format) {
 | 
| -  // TODO(ossu): We can safely set bitrate to zero here, since that field is
 | 
| -  // not presented in the SDP. It is used to ferry around some target bitrate
 | 
| -  // values for certain codecs (ISAC and Opus) and in ways it really
 | 
| -  // shouldn't. It should be removed once we no longer use CodecInsts in the
 | 
| -  // ACM or NetEq.
 | 
| -  auto opt_payload_type = GetMappingFor(format);
 | 
| -  if (opt_payload_type) {
 | 
| -    AudioCodec codec(*opt_payload_type, format.name, format.clockrate_hz, 0,
 | 
| -                     format.num_channels);
 | 
| -    codec.params = format.parameters;
 | 
| -    return rtc::Optional<AudioCodec>(std::move(codec));
 | 
| -  }
 | 
| -
 | 
| -  return rtc::Optional<AudioCodec>();
 | 
| -}
 | 
| -
 | 
| -bool PayloadTypeMapper::SdpAudioFormatOrdering::operator()(
 | 
| -    const webrtc::SdpAudioFormat& a,
 | 
| -    const webrtc::SdpAudioFormat& b) const {
 | 
| -  if (a.clockrate_hz == b.clockrate_hz) {
 | 
| -    if (a.num_channels == b.num_channels) {
 | 
| -      int name_cmp = STR_CASE_CMP(a.name.c_str(), b.name.c_str());
 | 
| -      if (name_cmp == 0)
 | 
| -        return a.parameters < b.parameters;
 | 
| -      return name_cmp < 0;
 | 
| -    }
 | 
| -    return a.num_channels < b.num_channels;
 | 
| -  }
 | 
| -  return a.clockrate_hz < b.clockrate_hz;
 | 
| -}
 | 
| -
 | 
| -}  // namespace cricket
 | 
| 
 |