| Index: webrtc/modules/audio_coding/neteq/decoder_database.cc
|
| diff --git a/webrtc/modules/audio_coding/neteq/decoder_database.cc b/webrtc/modules/audio_coding/neteq/decoder_database.cc
|
| index d147d676ed250307ab5aca7496b0308528c8ab9e..8cd438656a73efcf44237f6e50000b7bdda6e5ba 100644
|
| --- a/webrtc/modules/audio_coding/neteq/decoder_database.cc
|
| +++ b/webrtc/modules/audio_coding/neteq/decoder_database.cc
|
| @@ -123,6 +123,38 @@ void DecoderDatabase::Reset() {
|
| active_cng_decoder_type_ = -1;
|
| }
|
|
|
| +std::vector<int> DecoderDatabase::SetCodecs(
|
| + const std::map<int, SdpAudioFormat>& codecs) {
|
| + // First collect all payload types that we'll remove or reassign, then remove
|
| + // them from the database.
|
| + std::vector<int> changed_payload_types;
|
| + for (const std::pair<uint8_t, const DecoderInfo&> kv : decoders_) {
|
| + auto i = codecs.find(kv.first);
|
| + if (i == codecs.end() || i->second != kv.second.GetFormat()) {
|
| + changed_payload_types.push_back(kv.first);
|
| + }
|
| + }
|
| + for (int pl_type : changed_payload_types) {
|
| + Remove(pl_type);
|
| + }
|
| +
|
| + // Enter the new and changed payload type mappings into the database.
|
| + for (const auto& kv : codecs) {
|
| + const int& rtp_payload_type = kv.first;
|
| + const SdpAudioFormat& audio_format = kv.second;
|
| + RTC_DCHECK_GE(rtp_payload_type, 0);
|
| + RTC_DCHECK_LE(rtp_payload_type, 0x7f);
|
| + if (decoders_.count(rtp_payload_type) == 0) {
|
| + decoders_.insert(std::make_pair(
|
| + rtp_payload_type, DecoderInfo(audio_format, decoder_factory_.get())));
|
| + } else {
|
| + // The mapping for this payload type hasn't changed.
|
| + }
|
| + }
|
| +
|
| + return changed_payload_types;
|
| +}
|
| +
|
| int DecoderDatabase::RegisterPayload(uint8_t rtp_payload_type,
|
| NetEqDecoder codec_type,
|
| const std::string& name) {
|
|
|