Chromium Code Reviews| 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 |
|
the sun
2017/03/14 20:07:01
As discussed, we're not allowed to remove or reass
kwiberg-webrtc
2017/03/16 10:24:12
I tried to do this (DCHECK that the old map is a s
|
| + // 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) { |