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 845b2adaef7071ae040978d2d9efa76904c252a1..4fddf75ce26d1e5ede4040911cda02415a24e6eb 100644 |
--- a/webrtc/modules/audio_coding/neteq/decoder_database.cc |
+++ b/webrtc/modules/audio_coding/neteq/decoder_database.cc |
@@ -19,9 +19,11 @@ |
namespace webrtc { |
-DecoderDatabase::DecoderDatabase() |
- : active_decoder_type_(-1), active_cng_decoder_type_(-1) { |
-} |
+DecoderDatabase::DecoderDatabase( |
+ std::unique_ptr<AudioDecoderFactory> decoder_factory) |
+ : active_decoder_type_(-1), |
+ active_cng_decoder_type_(-1), |
+ decoder_factory_(std::move(decoder_factory)) {} |
DecoderDatabase::~DecoderDatabase() = default; |
@@ -32,20 +34,23 @@ DecoderDatabase::DecoderInfo::DecoderInfo(NetEqDecoder ct, |
: codec_type(ct), |
name(nm), |
fs_hz(fs), |
- external_decoder(ext_dec) {} |
+ external_decoder(ext_dec), |
+ audio_format_(acm2::RentACodec::NetEqDecoderToSdpAudioFormat(ct)) {} |
DecoderDatabase::DecoderInfo::DecoderInfo(DecoderInfo&&) = default; |
DecoderDatabase::DecoderInfo::~DecoderInfo() = default; |
-AudioDecoder* DecoderDatabase::DecoderInfo::GetDecoder() { |
+AudioDecoder* DecoderDatabase::DecoderInfo::GetDecoder( |
+ AudioDecoderFactory* factory) { |
if (external_decoder) { |
RTC_DCHECK(!decoder_); |
return external_decoder; |
} |
+ RTC_DCHECK(audio_format_); |
if (!decoder_) { |
- decoder_.reset(CreateAudioDecoder(codec_type)); |
+ decoder_ = factory->MakeAudioDecoder(*audio_format_); |
} |
- RTC_DCHECK(decoder_); |
+ RTC_DCHECK(decoder_) << "Failed to create: " << *audio_format_; |
return decoder_.get(); |
} |
@@ -155,7 +160,7 @@ AudioDecoder* DecoderDatabase::GetDecoder(uint8_t rtp_payload_type) { |
return NULL; |
} |
DecoderInfo* info = &(*it).second; |
- return info->GetDecoder(); |
+ return info->GetDecoder(decoder_factory_.get()); |
} |
bool DecoderDatabase::IsType(uint8_t rtp_payload_type, |