13f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org/* 23f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 33f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org * 43f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org * Use of this source code is governed by a BSD-style license 53f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org * that can be found in the LICENSE file in the root of the source 63f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org * tree. An additional intellectual property rights grant can be found 73f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org * in the file PATENTS. All contributing project authors may 83f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org * be found in the AUTHORS file in the root of the source tree. 93f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org */ 103f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 113f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org/* 123f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org * This file generates databases with information about all supported audio 133f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org * codecs. 143f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org */ 153f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 163f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// TODO(tlegrand): Change constant input pointers in all functions to constant 173f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// references, where appropriate. 18ed0b4fb2f28fa291e726fc1cf6852611f2176392turaj@webrtc.org#include "webrtc/modules/audio_coding/main/acm2/acm_codec_database.h" 193f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 203f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#include <assert.h> 213f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 22ed0b4fb2f28fa291e726fc1cf6852611f2176392turaj@webrtc.org#include "webrtc/modules/audio_coding/main/acm2/acm_common_defs.h" 23e5abc854f3dc47de16067c2a41476c39b7626722henrik.lundin@webrtc.org#include "webrtc/modules/audio_coding/neteq/interface/audio_decoder.h" 243f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#include "webrtc/system_wrappers/interface/trace.h" 253f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 263f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Includes needed to create the codecs. 273f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// G711, PCM mu-law and A-law 28ed0b4fb2f28fa291e726fc1cf6852611f2176392turaj@webrtc.org#include "webrtc/modules/audio_coding/main/acm2/acm_pcma.h" 29ed0b4fb2f28fa291e726fc1cf6852611f2176392turaj@webrtc.org#include "webrtc/modules/audio_coding/main/acm2/acm_pcmu.h" 303f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#include "webrtc/modules/audio_coding/codecs/g711/include/g711_interface.h" 313f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// CNG 323f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#include "webrtc/modules/audio_coding/codecs/cng/include/webrtc_cng.h" 33ed0b4fb2f28fa291e726fc1cf6852611f2176392turaj@webrtc.org#include "webrtc/modules/audio_coding/main/acm2/acm_cng.h" 343f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_ISAC 353f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#include "webrtc/modules/audio_coding/codecs/isac/main/interface/isac.h" 363f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 373f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_ISACFX 383f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#include "webrtc/modules/audio_coding/codecs/isac/fix/interface/isacfix.h" 393f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 403f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#if (defined WEBRTC_CODEC_ISACFX) || (defined WEBRTC_CODEC_ISAC) 41ed0b4fb2f28fa291e726fc1cf6852611f2176392turaj@webrtc.org#include "webrtc/modules/audio_coding/main/acm2/acm_isac.h" 42ed0b4fb2f28fa291e726fc1cf6852611f2176392turaj@webrtc.org#include "webrtc/modules/audio_coding/main/acm2/acm_isac_macros.h" 433f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 443f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_PCM16 453f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#include "webrtc/modules/audio_coding/codecs/pcm16b/include/pcm16b.h" 46ed0b4fb2f28fa291e726fc1cf6852611f2176392turaj@webrtc.org#include "webrtc/modules/audio_coding/main/acm2/acm_pcm16b.h" 473f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 483f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_ILBC 493f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#include "webrtc/modules/audio_coding/codecs/ilbc/interface/ilbc.h" 50ed0b4fb2f28fa291e726fc1cf6852611f2176392turaj@webrtc.org#include "webrtc/modules/audio_coding/main/acm2/acm_ilbc.h" 513f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 523f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_AMR 533f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#include "webrtc/modules/audio_coding/codecs/amr/include/amr_interface.h" 54ed0b4fb2f28fa291e726fc1cf6852611f2176392turaj@webrtc.org#include "webrtc/modules/audio_coding/main/acm2/acm_amr.h" 553f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 563f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_AMRWB 573f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#include "webrtc/modules/audio_coding/codecs/amrwb/include/amrwb_interface.h" 58ed0b4fb2f28fa291e726fc1cf6852611f2176392turaj@webrtc.org#include "webrtc/modules/audio_coding/main/acm2/acm_amrwb.h" 593f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 603f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_CELT 613f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#include "webrtc/modules/audio_coding/codecs/celt/include/celt_interface.h" 62ed0b4fb2f28fa291e726fc1cf6852611f2176392turaj@webrtc.org#include "webrtc/modules/audio_coding/main/acm2/acm_celt.h" 633f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 643f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_G722 653f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#include "webrtc/modules/audio_coding/codecs/g722/include/g722_interface.h" 66ed0b4fb2f28fa291e726fc1cf6852611f2176392turaj@webrtc.org#include "webrtc/modules/audio_coding/main/acm2/acm_g722.h" 673f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 683f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_G722_1 693f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#include "webrtc/modules/audio_coding/codecs/g7221/include/g7221_interface.h" 70ed0b4fb2f28fa291e726fc1cf6852611f2176392turaj@webrtc.org#include "webrtc/modules/audio_coding/main/acm2/acm_g7221.h" 713f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 723f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_G722_1C 733f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#include "webrtc/modules/audio_coding/codecs/g7221c/include/g7221c_interface.h" 74ed0b4fb2f28fa291e726fc1cf6852611f2176392turaj@webrtc.org#include "webrtc/modules/audio_coding/main/acm2/acm_g7221c.h" 753f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 763f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_G729 773f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#include "webrtc/modules/audio_coding/codecs/g729/include/g729_interface.h" 78ed0b4fb2f28fa291e726fc1cf6852611f2176392turaj@webrtc.org#include "webrtc/modules/audio_coding/main/acm2/acm_g729.h" 793f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 803f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_G729_1 813f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#include "webrtc/modules/audio_coding/codecs/g7291/include/g7291_interface.h" 82ed0b4fb2f28fa291e726fc1cf6852611f2176392turaj@webrtc.org#include "webrtc/modules/audio_coding/main/acm2/acm_g7291.h" 833f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 843f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_GSMFR 853f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#include "webrtc/modules/audio_coding/codecs/gsmfr/include/gsmfr_interface.h" 86ed0b4fb2f28fa291e726fc1cf6852611f2176392turaj@webrtc.org#include "webrtc/modules/audio_coding/main/acm2/acm_gsmfr.h" 873f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 883f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_OPUS 893f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#include "webrtc/modules/audio_coding/codecs/opus/interface/opus_interface.h" 90ed0b4fb2f28fa291e726fc1cf6852611f2176392turaj@webrtc.org#include "webrtc/modules/audio_coding/main/acm2/acm_opus.h" 913f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 923f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_SPEEX 933f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#include "webrtc/modules/audio_coding/codecs/speex/include/speex_interface.h" 94ed0b4fb2f28fa291e726fc1cf6852611f2176392turaj@webrtc.org#include "webrtc/modules/audio_coding/main/acm2/acm_speex.h" 953f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 963f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_AVT 97ed0b4fb2f28fa291e726fc1cf6852611f2176392turaj@webrtc.org#include "webrtc/modules/audio_coding/main/acm2/acm_dtmf_playout.h" 983f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 993f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_RED 100ed0b4fb2f28fa291e726fc1cf6852611f2176392turaj@webrtc.org#include "webrtc/modules/audio_coding/main/acm2/acm_red.h" 1013f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 1023f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 1033f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.orgnamespace webrtc { 1043f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 1050a1c75a50d10621f70d5921c5b8b9c0eb144bb42turaj@webrtc.orgnamespace acm2 { 1060a1c75a50d10621f70d5921c5b8b9c0eb144bb42turaj@webrtc.org 1074d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org// Not yet used payload-types. 1084d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org// 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 1094d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org// 67, 66, 65 1103f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 1113f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.orgconst CodecInst ACMCodecDB::database_[] = { 1123f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#if (defined(WEBRTC_CODEC_ISAC) || defined(WEBRTC_CODEC_ISACFX)) 1133f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {103, "ISAC", 16000, kIsacPacSize480, 1, kIsacWbDefaultRate}, 1143f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org# if (defined(WEBRTC_CODEC_ISAC)) 1153f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {104, "ISAC", 32000, kIsacPacSize960, 1, kIsacSwbDefaultRate}, 1163f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {105, "ISAC", 48000, kIsacPacSize1440, 1, kIsacSwbDefaultRate}, 1173f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org# endif 1183f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 1193f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_PCM16 1203f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Mono 1214d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org {107, "L16", 8000, 80, 1, 128000}, 1224d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org {108, "L16", 16000, 160, 1, 256000}, 1234d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org {109, "L16", 32000, 320, 1, 512000}, 1243f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Stereo 1254d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org {111, "L16", 8000, 80, 2, 128000}, 1264d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org {112, "L16", 16000, 160, 2, 256000}, 1274d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org {113, "L16", 32000, 320, 2, 512000}, 1283f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 1293f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // G.711, PCM mu-law and A-law. 1303f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Mono 1313f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {0, "PCMU", 8000, 160, 1, 64000}, 1323f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {8, "PCMA", 8000, 160, 1, 64000}, 1333f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Stereo 1343f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {110, "PCMU", 8000, 160, 2, 64000}, 1353f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {118, "PCMA", 8000, 160, 2, 64000}, 1363f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_ILBC 1373f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {102, "ILBC", 8000, 240, 1, 13300}, 1383f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 1393f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_AMR 1404d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org {114, "AMR", 8000, 160, 1, 12200}, 1413f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 1423f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_AMRWB 1434d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org {115, "AMR-WB", 16000, 320, 1, 20000}, 1443f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 1453f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_CELT 1463f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Mono 1474d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org {116, "CELT", 32000, 640, 1, 64000}, 1483f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Stereo 1494d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org {117, "CELT", 32000, 640, 2, 64000}, 1503f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 1513f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_G722 1523f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Mono 1533f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {9, "G722", 16000, 320, 1, 64000}, 1543f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Stereo 1553f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {119, "G722", 16000, 320, 2, 64000}, 1563f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 1573f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_G722_1 1584d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org {92, "G7221", 16000, 320, 1, 32000}, 1594d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org {91, "G7221", 16000, 320, 1, 24000}, 1604d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org {90, "G7221", 16000, 320, 1, 16000}, 1613f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 1623f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_G722_1C 1634d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org {89, "G7221", 32000, 640, 1, 48000}, 1644d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org {88, "G7221", 32000, 640, 1, 32000}, 1654d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org {87, "G7221", 32000, 640, 1, 24000}, 1663f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 1673f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_G729 1683f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {18, "G729", 8000, 240, 1, 8000}, 1693f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 1703f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_G729_1 1714d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org {86, "G7291", 16000, 320, 1, 32000}, 1723f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 1733f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_GSMFR 1743f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {3, "GSM", 8000, 160, 1, 13200}, 1753f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 1763f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_OPUS 1773f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Opus internally supports 48, 24, 16, 12, 8 kHz. 1783f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Mono and stereo. 1793f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {120, "opus", 48000, 960, 2, 64000}, 1803f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 1813f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_SPEEX 1824d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org {85, "speex", 8000, 160, 1, 11000}, 1834d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org {84, "speex", 16000, 320, 1, 22000}, 1843f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 1853f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Comfort noise for four different sampling frequencies. 1863f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {13, "CN", 8000, 240, 1, 0}, 1873f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {98, "CN", 16000, 480, 1, 0}, 1883f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {99, "CN", 32000, 960, 1, 0}, 1894d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org#ifdef ENABLE_48000_HZ 1903f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {100, "CN", 48000, 1440, 1, 0}, 1914d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org#endif 1923f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_AVT 1933f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {106, "telephone-event", 8000, 240, 1, 0}, 1943f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 1953f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_RED 1963f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {127, "red", 8000, 0, 1, 0}, 1973f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 1983f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // To prevent compile errors due to trailing commas. 1993f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {-1, "Null", -1, -1, -1, -1} 2003f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org}; 2013f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 2023f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Create database with all codec settings at compile time. 2033f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Each entry needs the following parameters in the given order: 2043f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Number of allowed packet sizes, a vector with the allowed packet sizes, 2053f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Basic block samples, max number of channels that are supported. 2063f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.orgconst ACMCodecDB::CodecSettings ACMCodecDB::codec_settings_[] = { 2073f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#if (defined(WEBRTC_CODEC_ISAC) || defined(WEBRTC_CODEC_ISACFX)) 2083f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {2, {kIsacPacSize480, kIsacPacSize960}, 0, 1, true}, 2093f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org# if (defined(WEBRTC_CODEC_ISAC)) 2103f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {1, {kIsacPacSize960}, 0, 1, false}, 2113f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {1, {kIsacPacSize1440}, 0, 1, true}, 2123f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org# endif 2133f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 2143f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_PCM16 2153f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Mono 2163f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {4, {80, 160, 240, 320}, 0, 2, false}, 2173f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {4, {160, 320, 480, 640}, 0, 2, false}, 2183f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {2, {320, 640}, 0, 2, false}, 2193f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Stereo 2203f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {4, {80, 160, 240, 320}, 0, 2, false}, 2213f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {4, {160, 320, 480, 640}, 0, 2, false}, 2223f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {2, {320, 640}, 0, 2}, 2233f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 2243f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // G.711, PCM mu-law and A-law. 2253f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Mono 2263f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {6, {80, 160, 240, 320, 400, 480}, 0, 2, false}, 2273f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {6, {80, 160, 240, 320, 400, 480}, 0, 2, false}, 2283f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Stereo 2293f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {6, {80, 160, 240, 320, 400, 480}, 0, 2, false}, 2303f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {6, {80, 160, 240, 320, 400, 480}, 0, 2, false}, 2313f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_ILBC 2323f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {4, {160, 240, 320, 480}, 0, 1, false}, 2333f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 2343f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_AMR 2353f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {3, {160, 320, 480}, 0, 1, true}, 2363f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 2373f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_AMRWB 2383f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {3, {320, 640, 960}, 0, 1, true}, 2393f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 2403f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_CELT 2413f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Mono 2423f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {1, {640}, 0, 2, false}, 2433f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Stereo 2443f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {1, {640}, 0, 2, false}, 2453f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 2463f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_G722 2473f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Mono 2483f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {6, {160, 320, 480, 640, 800, 960}, 0, 2, false}, 2493f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Stereo 2503f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {6, {160, 320, 480, 640, 800, 960}, 0, 2, false}, 2513f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 2523f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_G722_1 2533f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {1, {320}, 320, 1, false}, 2543f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {1, {320}, 320, 1, false}, 2553f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {1, {320}, 320, 1, false}, 2563f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 2573f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_G722_1C 2583f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {1, {640}, 640, 1, false}, 2593f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {1, {640}, 640, 1, false}, 2603f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {1, {640}, 640, 1, false}, 2613f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 2623f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_G729 2633f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {6, {80, 160, 240, 320, 400, 480}, 0, 1, false}, 2643f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 2653f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_G729_1 2663f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {3, {320, 640, 960}, 0, 1, false}, 2673f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 2683f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_GSMFR 2693f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {3, {160, 320, 480}, 160, 1, false}, 2703f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 2713f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_OPUS 2723f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Opus supports frames shorter than 10ms, 2733f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // but it doesn't help us to use them. 2743f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Mono and stereo. 275933267f0b6fddf3fe62b5f990188da5980bca984turaj@webrtc.org {4, {480, 960, 1920, 2880}, 0, 2, false}, 2763f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 2773f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_SPEEX 2783f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {3, {160, 320, 480}, 0, 1, false}, 2793f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {3, {320, 640, 960}, 0, 1, false}, 2803f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 2813f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Comfort noise for three different sampling frequencies. 2823f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {1, {240}, 240, 1, false}, 2833f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {1, {480}, 480, 1, false}, 2843f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {1, {960}, 960, 1, false}, 2854d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org#ifdef ENABLE_48000_HZ 2863f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {1, {1440}, 1440, 1, false}, 2874d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org#endif 2883f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_AVT 2893f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {1, {240}, 240, 1, false}, 2903f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 2913f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_RED 2923f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {1, {0}, 0, 1, false}, 2933f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 2943f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // To prevent compile errors due to trailing commas. 2953f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org {-1, {-1}, -1, -1, false} 2963f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org}; 2973f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 2983f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Create a database of all NetEQ decoders at compile time. 2993f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.orgconst NetEqDecoder ACMCodecDB::neteq_decoders_[] = { 3003f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#if (defined(WEBRTC_CODEC_ISAC) || defined(WEBRTC_CODEC_ISACFX)) 3013f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderISAC, 3023f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org# if (defined(WEBRTC_CODEC_ISAC)) 3033f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderISACswb, 3043f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderISACfb, 3053f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org# endif 3063f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 3073f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_PCM16 3083f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Mono 3093f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderPCM16B, 3103f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderPCM16Bwb, 3113f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderPCM16Bswb32kHz, 3123f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Stereo 3133f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderPCM16B_2ch, 3143f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderPCM16Bwb_2ch, 3153f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderPCM16Bswb32kHz_2ch, 3163f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 3173f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // G.711, PCM mu-las and A-law. 3183f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Mono 3193f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderPCMu, 3203f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderPCMa, 3213f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Stereo 3223f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderPCMu_2ch, 3233f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderPCMa_2ch, 3243f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_ILBC 3253f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderILBC, 3263f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 3273f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_AMR 3283f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderAMR, 3293f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 3303f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_AMRWB 3313f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderAMRWB, 3323f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 3333f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_CELT 3343f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Mono 3353f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderCELT_32, 3363f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Stereo 3373f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderCELT_32_2ch, 3383f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 3393f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_G722 3403f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Mono 3413f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderG722, 3423f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Stereo 3433f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderG722_2ch, 3443f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 3453f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_G722_1 3463f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderG722_1_32, 3473f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderG722_1_24, 3483f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderG722_1_16, 3493f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 3503f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_G722_1C 3513f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderG722_1C_48, 3523f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderG722_1C_32, 3533f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderG722_1C_24, 3543f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 3553f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_G729 3563f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderG729, 3573f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 3583f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_G729_1 3593f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderG729_1, 3603f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 3613f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_GSMFR 3623f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderGSMFR, 3633f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 3643f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_OPUS 3653f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Mono and stereo. 3663f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderOpus, 3673f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 3683f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_SPEEX 3693f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderSPEEX_8, 3703f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderSPEEX_16, 3713f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 3723f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Comfort noise for three different sampling frequencies. 3733f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderCNGnb, 3743f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kDecoderCNGwb, 3754d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org kDecoderCNGswb32kHz 3764d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org#ifdef ENABLE_48000_HZ 3774d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org , kDecoderCNGswb48kHz 3784d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org#endif 3793f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_AVT 3803f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org , kDecoderAVT 3813f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 3823f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_RED 3833f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org , kDecoderRED 3843f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 3853f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org}; 3863f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 3873f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Get codec information from database. 3883f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// TODO(tlegrand): replace memcpy with a pointer to the data base memory. 3893f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.orgint ACMCodecDB::Codec(int codec_id, CodecInst* codec_inst) { 3903f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Error check to see that codec_id is not out of bounds. 3913f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if ((codec_id < 0) || (codec_id >= kNumCodecs)) { 3923f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return -1; 3933f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 3943f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 3953f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Copy database information for the codec to the output. 3963f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org memcpy(codec_inst, &database_[codec_id], sizeof(CodecInst)); 3973f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 3983f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return 0; 3993f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org} 4003f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 4013f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Enumerator for error codes when asking for codec database id. 4023f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.orgenum { 4033f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kInvalidCodec = -10, 4043f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kInvalidPayloadtype = -30, 4053f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kInvalidPacketSize = -40, 4063f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org kInvalidRate = -50 4073f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org}; 4083f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 4093f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Gets the codec id number from the database. If there is some mismatch in 4103f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// the codec settings, the function will return an error code. 4113f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// NOTE! The first mismatch found will generate the return value. 4123f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.orgint ACMCodecDB::CodecNumber(const CodecInst& codec_inst, int* mirror_id) { 4133f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Look for a matching codec in the database. 4143f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org int codec_id = CodecId(codec_inst); 4153f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 4163f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Checks if we found a matching codec. 4173f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if (codec_id == -1) { 4183f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return kInvalidCodec; 4193f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 4203f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 4213f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Checks the validity of payload type 4223f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if (!ValidPayloadType(codec_inst.pltype)) { 4233f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return kInvalidPayloadtype; 4243f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 4253f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 4263f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Comfort Noise is special case, packet-size & rate is not checked. 4273f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if (STR_CASE_CMP(database_[codec_id].plname, "CN") == 0) { 4283f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org *mirror_id = codec_id; 4293f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return codec_id; 4303f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 4313f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 4323f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // RED is special case, packet-size & rate is not checked. 4333f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if (STR_CASE_CMP(database_[codec_id].plname, "red") == 0) { 4343f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org *mirror_id = codec_id; 4353f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return codec_id; 4363f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 4373f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 4383f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Checks the validity of packet size. 4393f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if (codec_settings_[codec_id].num_packet_sizes > 0) { 4403f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org bool packet_size_ok = false; 4413f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org int i; 4423f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org int packet_size_samples; 4433f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org for (i = 0; i < codec_settings_[codec_id].num_packet_sizes; i++) { 4443f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org packet_size_samples = 4453f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org codec_settings_[codec_id].packet_sizes_samples[i]; 4463f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if (codec_inst.pacsize == packet_size_samples) { 4473f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org packet_size_ok = true; 4483f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org break; 4493f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 4503f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 4513f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 4523f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if (!packet_size_ok) { 4533f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return kInvalidPacketSize; 4543f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 4553f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 4563f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 4573f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if (codec_inst.pacsize < 1) { 4583f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return kInvalidPacketSize; 4593f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 4603f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 4613f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Check the validity of rate. Codecs with multiple rates have their own 4623f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // function for this. 4633f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org *mirror_id = codec_id; 4643f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if (STR_CASE_CMP("isac", codec_inst.plname) == 0) { 4653f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if (IsISACRateValid(codec_inst.rate)) { 4663f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Set mirrorID to iSAC WB which is only created once to be used both for 4673f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // iSAC WB and SWB, because they need to share struct. 4683f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org *mirror_id = kISAC; 4693f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return codec_id; 4703f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else { 4713f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return kInvalidRate; 4723f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 4733f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else if (STR_CASE_CMP("ilbc", codec_inst.plname) == 0) { 4743f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return IsILBCRateValid(codec_inst.rate, codec_inst.pacsize) 4753f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org ? codec_id : kInvalidRate; 4763f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else if (STR_CASE_CMP("amr", codec_inst.plname) == 0) { 4773f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return IsAMRRateValid(codec_inst.rate) 4783f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org ? codec_id : kInvalidRate; 4793f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else if (STR_CASE_CMP("amr-wb", codec_inst.plname) == 0) { 4803f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return IsAMRwbRateValid(codec_inst.rate) 4813f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org ? codec_id : kInvalidRate; 4823f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else if (STR_CASE_CMP("g7291", codec_inst.plname) == 0) { 4833f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return IsG7291RateValid(codec_inst.rate) 4843f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org ? codec_id : kInvalidRate; 4853f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else if (STR_CASE_CMP("opus", codec_inst.plname) == 0) { 4863f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return IsOpusRateValid(codec_inst.rate) 4873f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org ? codec_id : kInvalidRate; 4883f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else if (STR_CASE_CMP("speex", codec_inst.plname) == 0) { 4893f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return IsSpeexRateValid(codec_inst.rate) 4903f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org ? codec_id : kInvalidRate; 4913f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else if (STR_CASE_CMP("celt", codec_inst.plname) == 0) { 4923f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return IsCeltRateValid(codec_inst.rate) 4933f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org ? codec_id : kInvalidRate; 4943f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 4953f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 4963f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return IsRateValid(codec_id, codec_inst.rate) ? 4973f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org codec_id : kInvalidRate; 4983f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org} 4993f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 5003f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Looks for a matching payload name, frequency, and channels in the 5013f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// codec list. Need to check all three since some codecs have several codec 5023f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// entries with different frequencies and/or channels. 5033f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Does not check other codec settings, such as payload type and packet size. 5043f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Returns the id of the codec, or -1 if no match is found. 5053f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.orgint ACMCodecDB::CodecId(const CodecInst& codec_inst) { 5063f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return (CodecId(codec_inst.plname, codec_inst.plfreq, 5073f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org codec_inst.channels)); 5083f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org} 5093f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 5103f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.orgint ACMCodecDB::CodecId(const char* payload_name, int frequency, int channels) { 5113f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org for (int id = 0; id < kNumCodecs; id++) { 5123f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org bool name_match = false; 5133f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org bool frequency_match = false; 5143f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org bool channels_match = false; 5153f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 5163f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Payload name, sampling frequency and number of channels need to match. 5173f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // NOTE! If |frequency| is -1, the frequency is not applicable, and is 5183f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // always treated as true, like for RED. 5193f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org name_match = (STR_CASE_CMP(database_[id].plname, payload_name) == 0); 5203f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org frequency_match = (frequency == database_[id].plfreq) || (frequency == -1); 5213f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // The number of channels must match for all codecs but Opus. 5223f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if (STR_CASE_CMP(payload_name, "opus") != 0) { 5233f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org channels_match = (channels == database_[id].channels); 5243f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else { 5253f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // For opus we just check that number of channels is valid. 5263f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org channels_match = (channels == 1 || channels == 2); 5273f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 5283f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 5293f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if (name_match && frequency_match && channels_match) { 5303f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // We have found a matching codec in the list. 5313f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return id; 5323f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 5333f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 5343f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 5353f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // We didn't find a matching codec. 5363f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return -1; 5373f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org} 5383f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Gets codec id number, and mirror id, from database for the receiver. 5393f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.orgint ACMCodecDB::ReceiverCodecNumber(const CodecInst& codec_inst, 5403f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org int* mirror_id) { 5413f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Look for a matching codec in the database. 5423f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org int codec_id = CodecId(codec_inst); 5433f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 5443f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Set |mirror_id| to |codec_id|, except for iSAC. In case of iSAC we always 5453f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // set |mirror_id| to iSAC WB (kISAC) which is only created once to be used 5463f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // both for iSAC WB and SWB, because they need to share struct. 5473f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if (STR_CASE_CMP(codec_inst.plname, "ISAC") != 0) { 5483f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org *mirror_id = codec_id; 5493f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else { 5503f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org *mirror_id = kISAC; 5513f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 5523f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 5533f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return codec_id; 5543f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org} 5553f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 5563f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Returns the codec sampling frequency for codec with id = "codec_id" in 5573f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// database. 5583f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.orgint ACMCodecDB::CodecFreq(int codec_id) { 5593f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Error check to see that codec_id is not out of bounds. 5603f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if (codec_id < 0 || codec_id >= kNumCodecs) { 5613f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return -1; 5623f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 5633f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 5643f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return database_[codec_id].plfreq; 5653f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org} 5663f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 5673f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Returns the codec's basic coding block size in samples. 5683f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.orgint ACMCodecDB::BasicCodingBlock(int codec_id) { 5693f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // Error check to see that codec_id is not out of bounds. 5703f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if (codec_id < 0 || codec_id >= kNumCodecs) { 5713f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return -1; 5723f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 5733f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 5743f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return codec_settings_[codec_id].basic_block_samples; 5753f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org} 5763f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 5773f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Returns the NetEQ decoder database. 5783f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.orgconst NetEqDecoder* ACMCodecDB::NetEQDecoders() { 5793f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return neteq_decoders_; 5803f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org} 5813f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 5823f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Gets mirror id. The Id is used for codecs sharing struct for settings that 5833f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// need different payload types. 5843f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.orgint ACMCodecDB::MirrorID(int codec_id) { 5853f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if (STR_CASE_CMP(database_[codec_id].plname, "isac") == 0) { 5863f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return kISAC; 5873f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else { 5883f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return codec_id; 5893f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 5903f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org} 5913f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 5923f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Creates memory/instance for storing codec state. 5933f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.orgACMGenericCodec* ACMCodecDB::CreateCodecInstance(const CodecInst& codec_inst) { 5943f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // All we have support for right now. 5953f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if (!STR_CASE_CMP(codec_inst.plname, "ISAC")) { 5963f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#if (defined(WEBRTC_CODEC_ISAC) || defined(WEBRTC_CODEC_ISACFX)) 5973f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return new ACMISAC(kISAC); 5983f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 5993f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else if (!STR_CASE_CMP(codec_inst.plname, "PCMU")) { 6003f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if (codec_inst.channels == 1) { 6013f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return new ACMPCMU(kPCMU); 6023f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else { 6033f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return new ACMPCMU(kPCMU_2ch); 6043f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 6053f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else if (!STR_CASE_CMP(codec_inst.plname, "PCMA")) { 6063f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if (codec_inst.channels == 1) { 6073f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return new ACMPCMA(kPCMA); 6083f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else { 6093f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return new ACMPCMA(kPCMA_2ch); 6103f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 6113f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else if (!STR_CASE_CMP(codec_inst.plname, "ILBC")) { 6123f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_ILBC 6133f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return new ACMILBC(kILBC); 6143f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 6153f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else if (!STR_CASE_CMP(codec_inst.plname, "AMR")) { 6163f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_AMR 6173f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return new ACMAMR(kGSMAMR); 6183f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 6193f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else if (!STR_CASE_CMP(codec_inst.plname, "AMR-WB")) { 6203f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_AMRWB 6213f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return new ACMAMRwb(kGSMAMRWB); 6223f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 6233f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else if (!STR_CASE_CMP(codec_inst.plname, "CELT")) { 6243f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_CELT 6253f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if (codec_inst.channels == 1) { 6263f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return new ACMCELT(kCELT32); 6273f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else { 6283f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return new ACMCELT(kCELT32_2ch); 6293f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 6303f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 6313f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else if (!STR_CASE_CMP(codec_inst.plname, "G722")) { 6323f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_G722 6333f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if (codec_inst.channels == 1) { 6343f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return new ACMG722(kG722); 6353f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else { 6363f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return new ACMG722(kG722_2ch); 6373f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 6383f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 6393f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else if (!STR_CASE_CMP(codec_inst.plname, "G7221")) { 6403f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org switch (codec_inst.plfreq) { 6413f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 16000: { 6423f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_G722_1 6433f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org int codec_id; 6443f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org switch (codec_inst->rate) { 6453f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 16000 : { 6463f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org codec_id = kG722_1_16; 6473f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org break; 6483f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 6493f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 24000 : { 6503f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org codec_id = kG722_1_24; 6513f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org break; 6523f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 6533f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 32000 : { 6543f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org codec_id = kG722_1_32; 6553f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org break; 6563f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 6573f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org default: { 6583f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return NULL; 6593f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 6603f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return new ACMG722_1(codec_id); 6613f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 6623f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 6633f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 6643f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 32000: { 6653f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_G722_1C 6663f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org int codec_id; 6673f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org switch (codec_inst->rate) { 6683f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 24000 : { 6693f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org codec_id = kG722_1C_24; 6703f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org break; 6713f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 6723f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 32000 : { 6733f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org codec_id = kG722_1C_32; 6743f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org break; 6753f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 6763f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 48000 : { 6773f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org codec_id = kG722_1C_48; 6783f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org break; 6793f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 6803f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org default: { 6813f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return NULL; 6823f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 6833f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return new ACMG722_1C(codec_id); 6843f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 6853f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 6863f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 6873f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 6883f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else if (!STR_CASE_CMP(codec_inst.plname, "CN")) { 6893f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // For CN we need to check sampling frequency to know what codec to create. 6903f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org int codec_id; 6913f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org switch (codec_inst.plfreq) { 6923f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 8000: { 6933f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org codec_id = kCNNB; 6943f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org break; 6953f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 6963f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 16000: { 6973f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org codec_id = kCNWB; 6983f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org break; 6993f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 7003f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 32000: { 7013f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org codec_id = kCNSWB; 7023f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org break; 7033f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 7044d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org#ifdef ENABLE_48000_HZ 7053f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 48000: { 7063f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org codec_id = kCNFB; 7073f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org break; 7083f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 7094d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org#endif 7103f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org default: { 7113f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return NULL; 7123f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 7133f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 7143f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return new ACMCNG(codec_id); 7153f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else if (!STR_CASE_CMP(codec_inst.plname, "G729")) { 7163f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_G729 7173f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return new ACMG729(kG729); 7183f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 7193f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else if (!STR_CASE_CMP(codec_inst.plname, "G7291")) { 7203f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_G729_1 7213f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return new ACMG729_1(kG729_1); 7223f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 7233f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else if (!STR_CASE_CMP(codec_inst.plname, "opus")) { 7243f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_OPUS 7253f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return new ACMOpus(kOpus); 7263f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 7273f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else if (!STR_CASE_CMP(codec_inst.plname, "speex")) { 7283f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_SPEEX 7293f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org int codec_id; 7303f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org switch (codec_inst->plfreq) { 7313f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 8000: { 7323f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org codec_id = kSPEEX8; 7333f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org break; 7343f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 7353f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 16000: { 7363f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org codec_id = kSPEEX16; 7373f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org break; 7383f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 7393f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org default: { 7403f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return NULL; 7413f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 7423f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 7433f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return new ACMSPEEX(codec_id); 7443f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 7453f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else if (!STR_CASE_CMP(codec_inst.plname, "CN")) { 7463f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // For CN we need to check sampling frequency to know what codec to create. 7473f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org int codec_id; 7483f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org switch (codec_inst.plfreq) { 7493f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 8000: { 7503f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org codec_id = kCNNB; 7513f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org break; 7523f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 7533f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 16000: { 7543f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org codec_id = kCNWB; 7553f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org break; 7563f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 7573f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 32000: { 7583f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org codec_id = kCNSWB; 7593f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org break; 7603f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 7614d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org#ifdef ENABLE_48000_HZ 7623f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 48000: { 7633f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org codec_id = kCNFB; 7643f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org break; 7653f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 7664d081990603c0fc3c08a81523efc811b8e0828baturaj@webrtc.org#endif 7673f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org default: { 7683f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return NULL; 7693f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 7703f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 7713f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return new ACMCNG(codec_id); 7723f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else if (!STR_CASE_CMP(codec_inst.plname, "L16")) { 7733f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_PCM16 7743f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org // For L16 we need to check sampling frequency to know what codec to create. 7753f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org int codec_id; 7763f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if (codec_inst.channels == 1) { 7773f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org switch (codec_inst.plfreq) { 7783f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 8000: { 7793f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org codec_id = kPCM16B; 7803f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org break; 7813f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 7823f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 16000: { 7833f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org codec_id = kPCM16Bwb; 7843f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org break; 7853f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 7863f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 32000: { 7873f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org codec_id = kPCM16Bswb32kHz; 7883f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org break; 7893f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 7903f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org default: { 7913f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return NULL; 7923f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 7933f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 7943f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else { 7953f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org switch (codec_inst.plfreq) { 7963f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 8000: { 7973f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org codec_id = kPCM16B_2ch; 7983f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org break; 7993f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 8003f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 16000: { 8013f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org codec_id = kPCM16Bwb_2ch; 8023f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org break; 8033f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 8043f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 32000: { 8053f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org codec_id = kPCM16Bswb32kHz_2ch; 8063f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org break; 8073f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 8083f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org default: { 8093f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return NULL; 8103f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 8113f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 8123f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 8133f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return new ACMPCM16B(codec_id); 8143f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 8153f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else if (!STR_CASE_CMP(codec_inst.plname, "telephone-event")) { 8163f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_AVT 8173f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return new ACMDTMFPlayout(kAVT); 8183f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 8193f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else if (!STR_CASE_CMP(codec_inst.plname, "red")) { 8203f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#ifdef WEBRTC_CODEC_RED 8213f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return new ACMRED(kRED); 8223f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org#endif 8233f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 8243f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return NULL; 8253f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org} 8263f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 8273f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Checks if the bitrate is valid for the codec. 8283f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.orgbool ACMCodecDB::IsRateValid(int codec_id, int rate) { 8293f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if (database_[codec_id].rate == rate) { 8303f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return true; 8313f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else { 8323f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return false; 8333f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 8343f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org} 8353f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 8363f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Checks if the bitrate is valid for iSAC. 8373f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.orgbool ACMCodecDB::IsISACRateValid(int rate) { 8383f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if ((rate == -1) || ((rate <= 56000) && (rate >= 10000))) { 8393f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return true; 8403f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else { 8413f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return false; 8423f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 8433f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org} 8443f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 8453f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Checks if the bitrate is valid for iLBC. 8463f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.orgbool ACMCodecDB::IsILBCRateValid(int rate, int frame_size_samples) { 8473f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if (((frame_size_samples == 240) || (frame_size_samples == 480)) && 8483f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org (rate == 13300)) { 8493f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return true; 8503f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else if (((frame_size_samples == 160) || (frame_size_samples == 320)) && 8513f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org (rate == 15200)) { 8523f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return true; 8533f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else { 8543f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return false; 8553f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 8563f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org} 8573f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 8583f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Check if the bitrate is valid for the GSM-AMR. 8593f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.orgbool ACMCodecDB::IsAMRRateValid(int rate) { 8603f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org switch (rate) { 8613f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 4750: 8623f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 5150: 8633f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 5900: 8643f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 6700: 8653f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 7400: 8663f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 7950: 8673f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 10200: 8683f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 12200: { 8693f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return true; 8703f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 8713f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org default: { 8723f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return false; 8733f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 8743f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 8753f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org} 8763f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 8773f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Check if the bitrate is valid for GSM-AMR-WB. 8783f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.orgbool ACMCodecDB::IsAMRwbRateValid(int rate) { 8793f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org switch (rate) { 8803f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 7000: 8813f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 9000: 8823f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 12000: 8833f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 14000: 8843f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 16000: 8853f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 18000: 8863f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 20000: 8873f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 23000: 8883f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 24000: { 8893f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return true; 8903f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 8913f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org default: { 8923f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return false; 8933f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 8943f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 8953f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org} 8963f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 8973f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Check if the bitrate is valid for G.729.1. 8983f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.orgbool ACMCodecDB::IsG7291RateValid(int rate) { 8993f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org switch (rate) { 9003f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 8000: 9013f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 12000: 9023f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 14000: 9033f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 16000: 9043f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 18000: 9053f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 20000: 9063f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 22000: 9073f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 24000: 9083f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 26000: 9093f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 28000: 9103f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 30000: 9113f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org case 32000: { 9123f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return true; 9133f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 9143f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org default: { 9153f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return false; 9163f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 9173f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 9183f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org} 9193f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 9203f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Checks if the bitrate is valid for Speex. 9213f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.orgbool ACMCodecDB::IsSpeexRateValid(int rate) { 9223f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if (rate > 2000) { 9233f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return true; 9243f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else { 9253f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return false; 9263f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 9273f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org} 9283f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 9293f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Checks if the bitrate is valid for Opus. 9303f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.orgbool ACMCodecDB::IsOpusRateValid(int rate) { 9313f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if ((rate < 6000) || (rate > 510000)) { 9323f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return false; 9333f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 9343f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return true; 9353f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org} 9363f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 9373f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Checks if the bitrate is valid for Celt. 9383f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.orgbool ACMCodecDB::IsCeltRateValid(int rate) { 9393f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if ((rate >= 48000) && (rate <= 128000)) { 9403f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return true; 9413f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } else { 9423f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return false; 9433f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 9443f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org} 9453f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 9463f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org// Checks if the payload type is in the valid range. 9473f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.orgbool ACMCodecDB::ValidPayloadType(int payload_type) { 9483f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org if ((payload_type < 0) || (payload_type > 127)) { 9493f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return false; 9503f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org } 9513f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return true; 9523f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org} 9533f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 9543f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.orgbool ACMCodecDB::OwnsDecoder(int codec_id) { 9553f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org assert(codec_id >= 0 && codec_id < ACMCodecDB::kNumCodecs); 9563f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org return ACMCodecDB::codec_settings_[codec_id].owns_decoder; 9573f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org} 9583f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org 9590a1c75a50d10621f70d5921c5b8b9c0eb144bb42turaj@webrtc.org} // namespace acm2 9600a1c75a50d10621f70d5921c5b8b9c0eb144bb42turaj@webrtc.org 9613f39c00d9875d7e09062725757b789f4da375ef9turaj@webrtc.org} // namespace webrtc 962