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

Unified Diff: webrtc/modules/audio_coding/main/acm2/rent_a_codec.cc

Issue 1481493004: audio_coding: remove "main" directory (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebased Created 5 years, 1 month 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/main/acm2/rent_a_codec.cc
diff --git a/webrtc/modules/audio_coding/main/acm2/rent_a_codec.cc b/webrtc/modules/audio_coding/main/acm2/rent_a_codec.cc
deleted file mode 100644
index 229d367f6139115e9b377a11fff680d3630f35a4..0000000000000000000000000000000000000000
--- a/webrtc/modules/audio_coding/main/acm2/rent_a_codec.cc
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- * Copyright (c) 2015 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/modules/audio_coding/main/acm2/rent_a_codec.h"
-
-#include "webrtc/base/logging.h"
-#include "webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.h"
-#include "webrtc/modules/audio_coding/codecs/g711/audio_encoder_pcm.h"
-#ifdef WEBRTC_CODEC_G722
-#include "webrtc/modules/audio_coding/codecs/g722/audio_encoder_g722.h"
-#endif
-#ifdef WEBRTC_CODEC_ILBC
-#include "webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.h"
-#endif
-#ifdef WEBRTC_CODEC_ISACFX
-#include "webrtc/modules/audio_coding/codecs/isac/fix/include/audio_decoder_isacfix.h"
-#include "webrtc/modules/audio_coding/codecs/isac/fix/include/audio_encoder_isacfix.h"
-#endif
-#ifdef WEBRTC_CODEC_ISAC
-#include "webrtc/modules/audio_coding/codecs/isac/main/include/audio_decoder_isac.h"
-#include "webrtc/modules/audio_coding/codecs/isac/main/include/audio_encoder_isac.h"
-#endif
-#ifdef WEBRTC_CODEC_OPUS
-#include "webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.h"
-#endif
-#include "webrtc/modules/audio_coding/codecs/pcm16b/audio_encoder_pcm16b.h"
-#ifdef WEBRTC_CODEC_RED
-#include "webrtc/modules/audio_coding/codecs/red/audio_encoder_copy_red.h"
-#endif
-#include "webrtc/modules/audio_coding/main/acm2/acm_codec_database.h"
-#include "webrtc/modules/audio_coding/main/acm2/acm_common_defs.h"
-
-namespace webrtc {
-namespace acm2 {
-
-rtc::Optional<RentACodec::CodecId> RentACodec::CodecIdByParams(
- const char* payload_name,
- int sampling_freq_hz,
- int channels) {
- return CodecIdFromIndex(
- ACMCodecDB::CodecId(payload_name, sampling_freq_hz, channels));
-}
-
-rtc::Optional<CodecInst> RentACodec::CodecInstById(CodecId codec_id) {
- rtc::Optional<int> mi = CodecIndexFromId(codec_id);
- return mi ? rtc::Optional<CodecInst>(Database()[*mi])
- : rtc::Optional<CodecInst>();
-}
-
-rtc::Optional<RentACodec::CodecId> RentACodec::CodecIdByInst(
- const CodecInst& codec_inst) {
- return CodecIdFromIndex(ACMCodecDB::CodecNumber(codec_inst));
-}
-
-rtc::Optional<CodecInst> RentACodec::CodecInstByParams(const char* payload_name,
- int sampling_freq_hz,
- int channels) {
- rtc::Optional<CodecId> codec_id =
- CodecIdByParams(payload_name, sampling_freq_hz, channels);
- if (!codec_id)
- return rtc::Optional<CodecInst>();
- rtc::Optional<CodecInst> ci = CodecInstById(*codec_id);
- RTC_DCHECK(ci);
-
- // Keep the number of channels from the function call. For most codecs it
- // will be the same value as in default codec settings, but not for all.
- ci->channels = channels;
-
- return ci;
-}
-
-bool RentACodec::IsCodecValid(const CodecInst& codec_inst) {
- return ACMCodecDB::CodecNumber(codec_inst) >= 0;
-}
-
-rtc::Optional<bool> RentACodec::IsSupportedNumChannels(CodecId codec_id,
- int num_channels) {
- auto i = CodecIndexFromId(codec_id);
- return i ? rtc::Optional<bool>(
- ACMCodecDB::codec_settings_[*i].channel_support >=
- num_channels)
- : rtc::Optional<bool>();
-}
-
-rtc::ArrayView<const CodecInst> RentACodec::Database() {
- return rtc::ArrayView<const CodecInst>(ACMCodecDB::database_,
- NumberOfCodecs());
-}
-
-rtc::Optional<NetEqDecoder> RentACodec::NetEqDecoderFromCodecId(
- CodecId codec_id,
- int num_channels) {
- rtc::Optional<int> i = CodecIndexFromId(codec_id);
- if (!i)
- return rtc::Optional<NetEqDecoder>();
- const NetEqDecoder ned = ACMCodecDB::neteq_decoders_[*i];
- return rtc::Optional<NetEqDecoder>(
- (ned == NetEqDecoder::kDecoderOpus && num_channels == 2)
- ? NetEqDecoder::kDecoderOpus_2ch
- : ned);
-}
-
-RentACodec::RegistrationResult RentACodec::RegisterCngPayloadType(
- std::map<int, int>* pt_map,
- const CodecInst& codec_inst) {
- if (STR_CASE_CMP(codec_inst.plname, "CN") != 0)
- return RegistrationResult::kSkip;
- switch (codec_inst.plfreq) {
- case 8000:
- case 16000:
- case 32000:
- case 48000:
- (*pt_map)[codec_inst.plfreq] = codec_inst.pltype;
- return RegistrationResult::kOk;
- default:
- return RegistrationResult::kBadFreq;
- }
-}
-
-RentACodec::RegistrationResult RentACodec::RegisterRedPayloadType(
- std::map<int, int>* pt_map,
- const CodecInst& codec_inst) {
- if (STR_CASE_CMP(codec_inst.plname, "RED") != 0)
- return RegistrationResult::kSkip;
- switch (codec_inst.plfreq) {
- case 8000:
- (*pt_map)[codec_inst.plfreq] = codec_inst.pltype;
- return RegistrationResult::kOk;
- default:
- return RegistrationResult::kBadFreq;
- }
-}
-
-namespace {
-
-// Returns a new speech encoder, or null on error.
-// TODO(kwiberg): Don't handle errors here (bug 5033)
-rtc::scoped_ptr<AudioEncoder> CreateEncoder(
- const CodecInst& speech_inst,
- LockedIsacBandwidthInfo* bwinfo) {
-#if defined(WEBRTC_CODEC_ISACFX)
- if (STR_CASE_CMP(speech_inst.plname, "isac") == 0)
- return rtc_make_scoped_ptr(new AudioEncoderIsacFix(speech_inst, bwinfo));
-#endif
-#if defined(WEBRTC_CODEC_ISAC)
- if (STR_CASE_CMP(speech_inst.plname, "isac") == 0)
- return rtc_make_scoped_ptr(new AudioEncoderIsac(speech_inst, bwinfo));
-#endif
-#ifdef WEBRTC_CODEC_OPUS
- if (STR_CASE_CMP(speech_inst.plname, "opus") == 0)
- return rtc_make_scoped_ptr(new AudioEncoderOpus(speech_inst));
-#endif
- if (STR_CASE_CMP(speech_inst.plname, "pcmu") == 0)
- return rtc_make_scoped_ptr(new AudioEncoderPcmU(speech_inst));
- if (STR_CASE_CMP(speech_inst.plname, "pcma") == 0)
- return rtc_make_scoped_ptr(new AudioEncoderPcmA(speech_inst));
- if (STR_CASE_CMP(speech_inst.plname, "l16") == 0)
- return rtc_make_scoped_ptr(new AudioEncoderPcm16B(speech_inst));
-#ifdef WEBRTC_CODEC_ILBC
- if (STR_CASE_CMP(speech_inst.plname, "ilbc") == 0)
- return rtc_make_scoped_ptr(new AudioEncoderIlbc(speech_inst));
-#endif
-#ifdef WEBRTC_CODEC_G722
- if (STR_CASE_CMP(speech_inst.plname, "g722") == 0)
- return rtc_make_scoped_ptr(new AudioEncoderG722(speech_inst));
-#endif
- LOG_F(LS_ERROR) << "Could not create encoder of type " << speech_inst.plname;
- return rtc::scoped_ptr<AudioEncoder>();
-}
-
-rtc::scoped_ptr<AudioEncoder> CreateRedEncoder(AudioEncoder* encoder,
- int red_payload_type) {
-#ifdef WEBRTC_CODEC_RED
- AudioEncoderCopyRed::Config config;
- config.payload_type = red_payload_type;
- config.speech_encoder = encoder;
- return rtc::scoped_ptr<AudioEncoder>(new AudioEncoderCopyRed(config));
-#else
- return rtc::scoped_ptr<AudioEncoder>();
-#endif
-}
-
-rtc::scoped_ptr<AudioEncoder> CreateCngEncoder(AudioEncoder* encoder,
- int payload_type,
- ACMVADMode vad_mode) {
- AudioEncoderCng::Config config;
- config.num_channels = encoder->NumChannels();
- config.payload_type = payload_type;
- config.speech_encoder = encoder;
- switch (vad_mode) {
- case VADNormal:
- config.vad_mode = Vad::kVadNormal;
- break;
- case VADLowBitrate:
- config.vad_mode = Vad::kVadLowBitrate;
- break;
- case VADAggr:
- config.vad_mode = Vad::kVadAggressive;
- break;
- case VADVeryAggr:
- config.vad_mode = Vad::kVadVeryAggressive;
- break;
- default:
- FATAL();
- }
- return rtc::scoped_ptr<AudioEncoder>(new AudioEncoderCng(config));
-}
-
-rtc::scoped_ptr<AudioDecoder> CreateIsacDecoder(
- LockedIsacBandwidthInfo* bwinfo) {
-#if defined(WEBRTC_CODEC_ISACFX)
- return rtc_make_scoped_ptr(new AudioDecoderIsacFix(bwinfo));
-#elif defined(WEBRTC_CODEC_ISAC)
- return rtc_make_scoped_ptr(new AudioDecoderIsac(bwinfo));
-#else
- FATAL() << "iSAC is not supported.";
- return rtc::scoped_ptr<AudioDecoder>();
-#endif
-}
-
-} // namespace
-
-RentACodec::RentACodec() = default;
-RentACodec::~RentACodec() = default;
-
-AudioEncoder* RentACodec::RentEncoder(const CodecInst& codec_inst) {
- rtc::scoped_ptr<AudioEncoder> enc =
- CreateEncoder(codec_inst, &isac_bandwidth_info_);
- if (!enc)
- return nullptr;
- speech_encoder_ = enc.Pass();
- return speech_encoder_.get();
-}
-
-RentACodec::StackParameters::StackParameters() {
- // Register the default payload types for RED and CNG.
- for (const CodecInst& ci : RentACodec::Database()) {
- RentACodec::RegisterCngPayloadType(&cng_payload_types, ci);
- RentACodec::RegisterRedPayloadType(&red_payload_types, ci);
- }
-}
-
-RentACodec::StackParameters::~StackParameters() = default;
-
-AudioEncoder* RentACodec::RentEncoderStack(AudioEncoder* speech_encoder,
- StackParameters* param) {
- RTC_DCHECK(speech_encoder);
-
- if (param->use_codec_fec) {
- // Switch FEC on. On failure, remember that FEC is off.
- if (!speech_encoder->SetFec(true))
- param->use_codec_fec = false;
- } else {
- // Switch FEC off. This shouldn't fail.
- const bool success = speech_encoder->SetFec(false);
- RTC_DCHECK(success);
- }
-
- auto pt = [&speech_encoder](const std::map<int, int>& m) {
- auto it = m.find(speech_encoder->SampleRateHz());
- return it == m.end() ? rtc::Optional<int>()
- : rtc::Optional<int>(it->second);
- };
- auto cng_pt = pt(param->cng_payload_types);
- param->use_cng =
- param->use_cng && cng_pt && speech_encoder->NumChannels() == 1;
- auto red_pt = pt(param->red_payload_types);
- param->use_red = param->use_red && red_pt;
-
- if (param->use_cng || param->use_red) {
- // The RED and CNG encoders need to be in sync with the speech encoder, so
- // reset the latter to ensure its buffer is empty.
- speech_encoder->Reset();
- }
- encoder_stack_ = speech_encoder;
- if (param->use_red) {
- red_encoder_ = CreateRedEncoder(encoder_stack_, *red_pt);
- if (red_encoder_)
- encoder_stack_ = red_encoder_.get();
- } else {
- red_encoder_.reset();
- }
- if (param->use_cng) {
- cng_encoder_ = CreateCngEncoder(encoder_stack_, *cng_pt, param->vad_mode);
- encoder_stack_ = cng_encoder_.get();
- } else {
- cng_encoder_.reset();
- }
- return encoder_stack_;
-}
-
-AudioDecoder* RentACodec::RentIsacDecoder() {
- if (!isac_decoder_)
- isac_decoder_ = CreateIsacDecoder(&isac_bandwidth_info_);
- return isac_decoder_.get();
-}
-
-} // namespace acm2
-} // namespace webrtc
« no previous file with comments | « webrtc/modules/audio_coding/main/acm2/rent_a_codec.h ('k') | webrtc/modules/audio_coding/main/acm2/rent_a_codec_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698