Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(185)

Unified Diff: webrtc/modules/audio_coding/neteq/decoder_database.cc

Issue 2021063002: NetEq decoder database: Don't keep track of sample rate for builtin decoders (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@decoder-samp-rate
Patch Set: explicit capture Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 e5f4462384ebbe028e6e3391bb0ec44822029fe1..ce402a76ac06418a49c0cb69f60a3a43f5f71058 100644
--- a/webrtc/modules/audio_coding/neteq/decoder_database.cc
+++ b/webrtc/modules/audio_coding/neteq/decoder_database.cc
@@ -28,14 +28,22 @@ DecoderDatabase::DecoderDatabase(
DecoderDatabase::~DecoderDatabase() = default;
DecoderDatabase::DecoderInfo::DecoderInfo(NetEqDecoder ct,
+ const std::string& nm)
+ : codec_type(ct),
+ name(nm),
+ audio_format_(acm2::RentACodec::NetEqDecoderToSdpAudioFormat(ct)),
+ cng_decoder_(CngDecoder::Create(ct)) {}
+
+DecoderDatabase::DecoderInfo::DecoderInfo(NetEqDecoder ct,
const std::string& nm,
- int fs,
+ int sample_rate_hz,
AudioDecoder* ext_dec)
: codec_type(ct),
name(nm),
- fs_hz(fs),
- external_decoder(ext_dec),
- audio_format_(acm2::RentACodec::NetEqDecoderToSdpAudioFormat(ct)) {}
+ audio_format_(acm2::RentACodec::NetEqDecoderToSdpAudioFormat(ct)),
+ external_decoder({sample_rate_hz, ext_dec}) {
+ RTC_CHECK(ext_dec);
+}
DecoderDatabase::DecoderInfo::DecoderInfo(DecoderInfo&&) = default;
DecoderDatabase::DecoderInfo::~DecoderInfo() = default;
@@ -44,7 +52,8 @@ AudioDecoder* DecoderDatabase::DecoderInfo::GetDecoder(
AudioDecoderFactory* factory) {
if (external_decoder) {
RTC_DCHECK(!decoder_);
- return external_decoder;
+ RTC_DCHECK(external_decoder->decoder);
+ return external_decoder->decoder;
}
RTC_DCHECK(audio_format_);
if (!decoder_) {
@@ -54,6 +63,26 @@ AudioDecoder* DecoderDatabase::DecoderInfo::GetDecoder(
return decoder_.get();
}
+rtc::Optional<DecoderDatabase::DecoderInfo::CngDecoder>
+DecoderDatabase::DecoderInfo::CngDecoder::Create(NetEqDecoder ct) {
+ const auto cng = [](int sample_rate_hz) {
+ return rtc::Optional<DecoderDatabase::DecoderInfo::CngDecoder>(
+ {sample_rate_hz});
+ };
+ switch (ct) {
+ case NetEqDecoder::kDecoderCNGnb:
+ return cng(8000);
+ case NetEqDecoder::kDecoderCNGwb:
+ return cng(16000);
+ case NetEqDecoder::kDecoderCNGswb32kHz:
+ return cng(32000);
+ case NetEqDecoder::kDecoderCNGswb48kHz:
+ return cng(48000);
+ default:
+ return rtc::Optional<DecoderDatabase::DecoderInfo::CngDecoder>();
+ }
+}
+
bool DecoderDatabase::Empty() const { return decoders_.empty(); }
int DecoderDatabase::Size() const { return static_cast<int>(decoders_.size()); }
@@ -73,8 +102,7 @@ int DecoderDatabase::RegisterPayload(uint8_t rtp_payload_type,
if (!CodecSupported(codec_type)) {
return kCodecNotSupported;
}
- const int fs_hz = CodecSampleRateHz(codec_type);
- DecoderInfo info(codec_type, name, fs_hz, nullptr);
+ DecoderInfo info(codec_type, name);
auto ret =
decoders_.insert(std::make_pair(rtp_payload_type, std::move(info)));
if (ret.second == false) {
@@ -247,8 +275,6 @@ int DecoderDatabase::SetActiveCngDecoder(uint8_t rtp_payload_type) {
assert(false);
return kDecoderNotFound;
}
- // The CNG decoder should never be provided externally.
- RTC_CHECK(!it->second.external_decoder);
active_cng_decoder_.reset();
}
active_cng_decoder_type_ = rtp_payload_type;
« no previous file with comments | « webrtc/modules/audio_coding/neteq/decoder_database.h ('k') | webrtc/modules/audio_coding/neteq/decoder_database_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698