/* * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com) * Copyright (C) 2003-2008 Benny Prijono * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef __PJMEDIA_CODEC_CONFIG_H__ #define __PJMEDIA_CODEC_CONFIG_H__ /** * @file config.h * @brief PJMEDIA-CODEC compile time settings */ /** * @defgroup pjmedia_codec_config PJMEDIA-CODEC Compile Time Settings * @ingroup PJMEDIA_CODEC * @brief Various compile time settings such as to enable/disable codecs * @{ */ #include /* * Include config_auto.h if autoconf is used (PJ_AUTOCONF is set) */ #if defined(PJ_AUTOCONF) # include #endif /** * Unless specified otherwise, L16 codec is included by default. */ #ifndef PJMEDIA_HAS_L16_CODEC # define PJMEDIA_HAS_L16_CODEC 1 #endif /** * Settings to enable L16 codec 8KHz, mono. By default it is disabled. */ #ifndef PJMEDIA_CODEC_L16_HAS_8KHZ_MONO # define PJMEDIA_CODEC_L16_HAS_8KHZ_MONO 0 #endif /** * Settings to enable L16 codec 8KHz, stereo. By default it is disabled. */ #ifndef PJMEDIA_CODEC_L16_HAS_8KHZ_STEREO # define PJMEDIA_CODEC_L16_HAS_8KHZ_STEREO 0 #endif /** * Settings to enable L16 codec 16KHz, mono. By default it is disabled. */ #ifndef PJMEDIA_CODEC_L16_HAS_16KHZ_MONO # define PJMEDIA_CODEC_L16_HAS_16KHZ_MONO 0 #endif /** * Settings to enable L16 codec 16KHz, stereo. By default it is disabled. */ #ifndef PJMEDIA_CODEC_L16_HAS_16KHZ_STEREO # define PJMEDIA_CODEC_L16_HAS_16KHZ_STEREO 0 #endif /** * Settings to enable L16 codec 48KHz, mono. By default it is disabled. */ #ifndef PJMEDIA_CODEC_L16_HAS_48KHZ_MONO # define PJMEDIA_CODEC_L16_HAS_48KHZ_MONO 0 #endif /** * Settings to enable L16 codec 48KHz, stereo. By default it is disabled. */ #ifndef PJMEDIA_CODEC_L16_HAS_48KHZ_STEREO # define PJMEDIA_CODEC_L16_HAS_48KHZ_STEREO 0 #endif /** * Unless specified otherwise, GSM codec is included by default. */ #ifndef PJMEDIA_HAS_GSM_CODEC # define PJMEDIA_HAS_GSM_CODEC 1 #endif /** * Unless specified otherwise, Speex codec is included by default. */ #ifndef PJMEDIA_HAS_SPEEX_CODEC # define PJMEDIA_HAS_SPEEX_CODEC 1 #endif /** * Speex codec default complexity setting. */ #ifndef PJMEDIA_CODEC_SPEEX_DEFAULT_COMPLEXITY # define PJMEDIA_CODEC_SPEEX_DEFAULT_COMPLEXITY 2 #endif /** * Speex codec default quality setting. Please note that pjsua-lib may override * this setting via its codec quality setting (i.e PJSUA_DEFAULT_CODEC_QUALITY). */ #ifndef PJMEDIA_CODEC_SPEEX_DEFAULT_QUALITY # define PJMEDIA_CODEC_SPEEX_DEFAULT_QUALITY 8 #endif /** * Unless specified otherwise, iLBC codec is included by default. */ #ifndef PJMEDIA_HAS_ILBC_CODEC # define PJMEDIA_HAS_ILBC_CODEC 1 #endif /** * Unless specified otherwise, G.722 codec is included by default. */ #ifndef PJMEDIA_HAS_G722_CODEC # define PJMEDIA_HAS_G722_CODEC 1 #endif /** * Initial memory block for G.722 codec implementation. */ #ifndef PJMEDIA_POOL_LEN_G722_CODEC # define PJMEDIA_POOL_LEN_G722_CODEC 1000 #endif /** * Memory increment for G.722 codec implementation. */ #ifndef PJMEDIA_POOL_INC_G722_CODEC # define PJMEDIA_POOL_INC_G722_CODEC 1000 #endif /** * Default G.722 codec encoder and decoder level adjustment. The G.722 * specifies that it uses 14 bit PCM for input and output, while PJMEDIA * normally uses 16 bit PCM, so the conversion is done by applying * level adjustment. If the value is non-zero, then PCM input samples to * the encoder will be shifted right by this value, and similarly PCM * output samples from the decoder will be shifted left by this value. * * This can be changed at run-time after initialization by calling * #pjmedia_codec_g722_set_pcm_shift(). * * Default: 2. */ #ifndef PJMEDIA_G722_DEFAULT_PCM_SHIFT # define PJMEDIA_G722_DEFAULT_PCM_SHIFT 2 #endif /** * Specifies whether G.722 PCM shifting should be stopped when clipping * detected in the decoder. Enabling this feature can be useful when * talking to G.722 implementation that uses 16 bit PCM for G.722 input/ * output (for any reason it seems to work) and the PCM shifting causes * audio clipping. * * See also #PJMEDIA_G722_DEFAULT_PCM_SHIFT. * * Default: enabled. */ #ifndef PJMEDIA_G722_STOP_PCM_SHIFT_ON_CLIPPING # define PJMEDIA_G722_STOP_PCM_SHIFT_ON_CLIPPING 1 #endif /** * Enable the features provided by Intel IPP libraries, for example * codecs such as G.729, G.723.1, G.726, G.728, G.722.1, and AMR. * * By default this is disabled. Please follow the instructions in * http://trac.pjsip.org/repos/wiki/Intel_IPP_Codecs on how to setup * Intel IPP with PJMEDIA. */ #ifndef PJMEDIA_HAS_INTEL_IPP # define PJMEDIA_HAS_INTEL_IPP 0 #endif /** * Visual Studio only: when this option is set, the Intel IPP libraries * will be automatically linked to application using pragma(comment) * constructs. This is convenient, however it will only link with * the stub libraries and the Intel IPP DLL's will be required when * distributing the application. * * If application wants to link with the different types of the Intel IPP * libraries (for example, the static libraries), it must set this option * to zero and specify the Intel IPP libraries in the application's input * library specification manually. * * Default 1. */ #ifndef PJMEDIA_AUTO_LINK_IPP_LIBS # define PJMEDIA_AUTO_LINK_IPP_LIBS 1 #endif /** * Enable Intel IPP AMR codec. This also needs to be enabled when AMR WB * codec is enabled. This option is only used when PJMEDIA_HAS_INTEL_IPP * is enabled. * * Default: 1 */ #ifndef PJMEDIA_HAS_INTEL_IPP_CODEC_AMR # define PJMEDIA_HAS_INTEL_IPP_CODEC_AMR 1 #endif /** * Enable Intel IPP AMR wideband codec. The PJMEDIA_HAS_INTEL_IPP_CODEC_AMR * option must also be enabled to use this codec. This option is only used * when PJMEDIA_HAS_INTEL_IPP is enabled. * * Default: 1 */ #ifndef PJMEDIA_HAS_INTEL_IPP_CODEC_AMRWB # define PJMEDIA_HAS_INTEL_IPP_CODEC_AMRWB 1 #endif /** * Enable Intel IPP G.729 codec. This option is only used when * PJMEDIA_HAS_INTEL_IPP is enabled. * * Default: 1 */ #ifndef PJMEDIA_HAS_INTEL_IPP_CODEC_G729 # define PJMEDIA_HAS_INTEL_IPP_CODEC_G729 1 #endif /** * Enable Intel IPP G.723.1 codec. This option is only used when * PJMEDIA_HAS_INTEL_IPP is enabled. * * Default: 1 */ #ifndef PJMEDIA_HAS_INTEL_IPP_CODEC_G723_1 # define PJMEDIA_HAS_INTEL_IPP_CODEC_G723_1 1 #endif /** * Enable Intel IPP G.726 codec. This option is only used when * PJMEDIA_HAS_INTEL_IPP is enabled. * * Default: 1 */ #ifndef PJMEDIA_HAS_INTEL_IPP_CODEC_G726 # define PJMEDIA_HAS_INTEL_IPP_CODEC_G726 1 #endif /** * Enable Intel IPP G.728 codec. This option is only used when * PJMEDIA_HAS_INTEL_IPP is enabled. * * Default: 1 */ #ifndef PJMEDIA_HAS_INTEL_IPP_CODEC_G728 # define PJMEDIA_HAS_INTEL_IPP_CODEC_G728 1 #endif /** * Enable Intel IPP G.722.1 codec. This option is only used when * PJMEDIA_HAS_INTEL_IPP is enabled. * * Default: 1 */ #ifndef PJMEDIA_HAS_INTEL_IPP_CODEC_G722_1 # define PJMEDIA_HAS_INTEL_IPP_CODEC_G722_1 1 #endif /** * Enable Passthrough codecs. * * Default: 0 */ #ifndef PJMEDIA_HAS_PASSTHROUGH_CODECS # define PJMEDIA_HAS_PASSTHROUGH_CODECS 0 #endif /** * Enable AMR passthrough codec. * * Default: 1 */ #ifndef PJMEDIA_HAS_PASSTHROUGH_CODEC_AMR # define PJMEDIA_HAS_PASSTHROUGH_CODEC_AMR 1 #endif /** * Enable G.729 passthrough codec. * * Default: 1 */ #ifndef PJMEDIA_HAS_PASSTHROUGH_CODEC_G729 # define PJMEDIA_HAS_PASSTHROUGH_CODEC_G729 1 #endif /** * Enable iLBC passthrough codec. * * Default: 1 */ #ifndef PJMEDIA_HAS_PASSTHROUGH_CODEC_ILBC # define PJMEDIA_HAS_PASSTHROUGH_CODEC_ILBC 1 #endif /** * Enable PCMU passthrough codec. * * Default: 1 */ #ifndef PJMEDIA_HAS_PASSTHROUGH_CODEC_PCMU # define PJMEDIA_HAS_PASSTHROUGH_CODEC_PCMU 1 #endif /** * Enable PCMA passthrough codec. * * Default: 1 */ #ifndef PJMEDIA_HAS_PASSTHROUGH_CODEC_PCMA # define PJMEDIA_HAS_PASSTHROUGH_CODEC_PCMA 1 #endif /* If passthrough and PCMU/PCMA are enabled, disable the software * G.711 codec */ #if PJMEDIA_HAS_PASSTHROUGH_CODECS && \ (PJMEDIA_HAS_PASSTHROUGH_CODEC_PCMU || PJMEDIA_HAS_PASSTHROUGH_CODEC_PCMA) # undef PJMEDIA_HAS_G711_CODEC # define PJMEDIA_HAS_G711_CODEC 0 #endif /** * G.722.1 codec is disabled by default. */ #ifndef PJMEDIA_HAS_G7221_CODEC # define PJMEDIA_HAS_G7221_CODEC 0 #endif /** * Enable OpenCORE AMR-NB codec. * See https://github.com/pjsip/pjproject/issues/1388 for some info. * * Default: 0 */ #ifndef PJMEDIA_HAS_OPENCORE_AMRNB_CODEC # define PJMEDIA_HAS_OPENCORE_AMRNB_CODEC 0 #endif /** * Enable OpenCORE AMR-WB codec. * See https://github.com/pjsip/pjproject/issues/1608 for some info. * * Default: 0 */ #ifndef PJMEDIA_HAS_OPENCORE_AMRWB_CODEC # define PJMEDIA_HAS_OPENCORE_AMRWB_CODEC 0 #endif /** * Link with libopencore-amrXX via pragma comment on Visual Studio. * This option only makes sense if PJMEDIA_HAS_OPENCORE_AMRNB/WB_CODEC * is enabled. * * Default: 1 */ #ifndef PJMEDIA_AUTO_LINK_OPENCORE_AMR_LIBS # define PJMEDIA_AUTO_LINK_OPENCORE_AMR_LIBS 1 #endif /** * Link with libopencore-amrXX.a that has been produced with gcc. * This option only makes sense if PJMEDIA_HAS_OPENCORE_AMRNB/WB_CODEC * and PJMEDIA_AUTO_LINK_OPENCORE_AMR_LIBS are enabled. * * Default: 1 */ #ifndef PJMEDIA_OPENCORE_AMR_BUILT_WITH_GCC # define PJMEDIA_OPENCORE_AMR_BUILT_WITH_GCC 1 #endif /** * Default G.722.1 codec encoder and decoder level adjustment. * If the value is non-zero, then PCM input samples to the encoder will * be shifted right by this value, and similarly PCM output samples from * the decoder will be shifted left by this value. * * This can be changed at run-time after initialization by calling * #pjmedia_codec_g7221_set_pcm_shift(). */ #ifndef PJMEDIA_G7221_DEFAULT_PCM_SHIFT # define PJMEDIA_G7221_DEFAULT_PCM_SHIFT 1 #endif /** * Enabling both G.722.1 codec implementations, internal PJMEDIA and IPP, * may cause problem in SDP, i.e: payload types duplications. So, let's * just trap such case here at compile time. * * Application can control which implementation to be used by manipulating * PJMEDIA_HAS_G7221_CODEC and PJMEDIA_HAS_INTEL_IPP_CODEC_G722_1 in * config_site.h. */ #if (PJMEDIA_HAS_G7221_CODEC != 0) && (PJMEDIA_HAS_INTEL_IPP != 0) && \ (PJMEDIA_HAS_INTEL_IPP_CODEC_G722_1 != 0) # error Only one G.722.1 implementation can be enabled at the same time. \ Please use PJMEDIA_HAS_G7221_CODEC and \ PJMEDIA_HAS_INTEL_IPP_CODEC_G722_1 in your config_site.h \ to control which implementation to be used. #endif /** * Enable SILK codec. * * Default: 0 */ #ifndef PJMEDIA_HAS_SILK_CODEC # define PJMEDIA_HAS_SILK_CODEC 0 #endif /** * SILK codec default complexity setting, valid values are 0 (lowest), 1, * and 2. * * Default: 2 */ #ifndef PJMEDIA_CODEC_SILK_DEFAULT_COMPLEXITY # define PJMEDIA_CODEC_SILK_DEFAULT_COMPLEXITY 2 #endif /** * SILK codec default quality setting, valid values are ranging from * 0 (lowest) to 10. Please note that pjsua-lib may override this setting * via its codec quality setting (i.e PJSUA_DEFAULT_CODEC_QUALITY). * * Default: 10 */ #ifndef PJMEDIA_CODEC_SILK_DEFAULT_QUALITY # define PJMEDIA_CODEC_SILK_DEFAULT_QUALITY 10 #endif /** * Enable OPUS codec. * * Default: 0 */ #ifndef PJMEDIA_HAS_OPUS_CODEC # define PJMEDIA_HAS_OPUS_CODEC 0 #endif /** * OPUS codec sample rate. * * Default: 48000 */ #ifndef PJMEDIA_CODEC_OPUS_DEFAULT_SAMPLE_RATE # define PJMEDIA_CODEC_OPUS_DEFAULT_SAMPLE_RATE 48000 #endif /** * OPUS codec default maximum average bit rate. * * Default: 0 (leave it to default value specified by Opus, which will * take into account factors such as media content (speech/music), sample * rate, channel count, etc). */ #ifndef PJMEDIA_CODEC_OPUS_DEFAULT_BIT_RATE # define PJMEDIA_CODEC_OPUS_DEFAULT_BIT_RATE 0 #endif /** * OPUS default encoding complexity, which is an integer from * 0 to 10, where 0 is the lowest complexity and 10 is the highest. * * Default: 5 */ #ifndef PJMEDIA_CODEC_OPUS_DEFAULT_COMPLEXITY # define PJMEDIA_CODEC_OPUS_DEFAULT_COMPLEXITY 5 #endif /** * OPUS default CBR (constant bit rate) setting * * Default: PJ_FALSE (which means Opus will use VBR (variable bit rate)) */ #ifndef PJMEDIA_CODEC_OPUS_DEFAULT_CBR # define PJMEDIA_CODEC_OPUS_DEFAULT_CBR PJ_FALSE #endif /** * Enable G.729 codec using BCG729 backend. * * Default: 0 */ #ifndef PJMEDIA_HAS_BCG729 # define PJMEDIA_HAS_BCG729 0 #endif /** * Enable Lyra codec. * * Default: 0 */ #ifndef PJMEDIA_HAS_LYRA_CODEC # define PJMEDIA_HAS_LYRA_CODEC 0 #endif /** * Lyra default bitrate setting * * Default: 3200 (available bitrate:3200, 6000, 9200) */ #ifndef PJMEDIA_CODEC_LYRA_DEFAULT_BIT_RATE # define PJMEDIA_CODEC_LYRA_DEFAULT_BIT_RATE 3200 #endif /** * Lyra default model path containing lyra_config.binarypb, lyragan.tflite, * quantizer.tflite and soundstream_encoder.tflite file. If autoconf is used, * it will be set to "[lyra src folder]/model_coeffs". * * Default: "model_coeffs" */ #ifndef PJMEDIA_CODEC_LYRA_DEFAULT_MODEL_PATH # define PJMEDIA_CODEC_LYRA_DEFAULT_MODEL_PATH "model_coeffs" #endif /** * Settings to enable Lyra codec 8KHz. This option is only used * when PJMEDIA_HAS_LYRA_CODEC is enabled. * * Default: 0 */ #ifndef PJMEDIA_CODEC_LYRA_HAS_8KHZ # define PJMEDIA_CODEC_LYRA_HAS_8KHZ 0 #endif /** * Settings to enable Lyra codec 16KHz. This option is only used * when PJMEDIA_HAS_LYRA_CODEC is enabled. * * Default: 1 */ #ifndef PJMEDIA_CODEC_LYRA_HAS_16KHZ # define PJMEDIA_CODEC_LYRA_HAS_16KHZ 1 #endif /** * Settings to enable Lyra codec 32KHz. This option is only used * when PJMEDIA_HAS_LYRA_CODEC is enabled. * * Default: 0 */ #ifndef PJMEDIA_CODEC_LYRA_HAS_32KHZ # define PJMEDIA_CODEC_LYRA_HAS_32KHZ 0 #endif /** * Settings to enable Lyra codec 48KHz. This option is only used * when PJMEDIA_HAS_LYRA_CODEC is enabled. * * Default: 0 */ #ifndef PJMEDIA_CODEC_LYRA_HAS_48KHZ # define PJMEDIA_CODEC_LYRA_HAS_48KHZ 0 #endif /** * Specify if FFMPEG codecs are available. * * Default: PJMEDIA_HAS_LIBAVFORMAT */ #ifndef PJMEDIA_HAS_FFMPEG_CODEC # define PJMEDIA_HAS_FFMPEG_CODEC PJMEDIA_HAS_LIBAVFORMAT #endif /** * Specify if FFMPEG video codecs are available. * * Default: PJMEDIA_HAS_FFMPEG_CODEC */ #ifndef PJMEDIA_HAS_FFMPEG_VID_CODEC # define PJMEDIA_HAS_FFMPEG_VID_CODEC PJMEDIA_HAS_FFMPEG_CODEC #endif /** * Enable FFMPEG H263+/H263-1998 codec. * * Default: 1 */ #ifndef PJMEDIA_HAS_FFMPEG_CODEC_H263P # define PJMEDIA_HAS_FFMPEG_CODEC_H263P PJMEDIA_HAS_FFMPEG_VID_CODEC #endif /** * Enable FFMPEG H264 codec (requires libx264). * * Default: disabled when OpenH264 is used, otherwise it is set to * PJMEDIA_HAS_FFMPEG_VID_CODEC */ #ifndef PJMEDIA_HAS_FFMPEG_CODEC_H264 # if defined(PJMEDIA_HAS_OPENH264_CODEC) && PJMEDIA_HAS_OPENH264_CODEC != 0 # define PJMEDIA_HAS_FFMPEG_CODEC_H264 0 # else # define PJMEDIA_HAS_FFMPEG_CODEC_H264 PJMEDIA_HAS_FFMPEG_VID_CODEC # endif #endif /** * Enable FFMPEG VPX codec (requires libvpx) */ #ifndef PJMEDIA_HAS_FFMPEG_CODEC_VP8 # if defined(PJMEDIA_HAS_VPX_CODEC) && PJMEDIA_HAS_VPX_CODEC != 0 # define PJMEDIA_HAS_FFMPEG_CODEC_VP8 0 # else # define PJMEDIA_HAS_FFMPEG_CODEC_VP8 1 # endif #endif #ifndef PJMEDIA_HAS_FFMPEG_CODEC_VP9 # if defined(PJMEDIA_HAS_VPX_CODEC) && PJMEDIA_HAS_VPX_CODEC != 0 # define PJMEDIA_HAS_FFMPEG_CODEC_VP9 0 # else # define PJMEDIA_HAS_FFMPEG_CODEC_VP9 1 # endif #endif /** * Determine the log level of the native openH264 log which will be forwarded * to the library's log. * Set to WELS_LOG_QUIET to disable logging, or WELS_LOG_DETAIL for debugging. * * Default: WELS_LOG_ERROR. */ #ifndef PJMEDIA_CODEC_OPENH264_LOG_LEVEL # define PJMEDIA_CODEC_OPENH264_LOG_LEVEL WELS_LOG_ERROR #endif /** * Enable VPX VP8 codec. * * Default: 1 */ #ifndef PJMEDIA_HAS_VPX_CODEC_VP8 # define PJMEDIA_HAS_VPX_CODEC_VP8 1 #endif /** * Enable VPX VP9 codec. * * Default: 0 (disabled) */ #ifndef PJMEDIA_HAS_VPX_CODEC_VP9 # define PJMEDIA_HAS_VPX_CODEC_VP9 0 #endif /** * Enable Android MediaCodec AMRNB codec. * * Default: 1 */ #ifndef PJMEDIA_HAS_AND_MEDIA_AMRNB # define PJMEDIA_HAS_AND_MEDIA_AMRNB 1 #endif /** * Enable Android MediaCodec AMRWB codec. * * Default: 1 */ #ifndef PJMEDIA_HAS_AND_MEDIA_AMRWB # define PJMEDIA_HAS_AND_MEDIA_AMRWB 1 #endif /** * Enable Android MediaCodec AVC/H264 codec. * * Default: 1 */ #ifndef PJMEDIA_HAS_AND_MEDIA_H264 # define PJMEDIA_HAS_AND_MEDIA_H264 1 #endif /** * Enable Android MediaCodec VP8 codec. * * Default: 1 */ #ifndef PJMEDIA_HAS_AND_MEDIA_VP8 # define PJMEDIA_HAS_AND_MEDIA_VP8 1 #endif /** * Enable Android MediaCodec VP9 codec. * * Default: 1 */ #ifndef PJMEDIA_HAS_AND_MEDIA_VP9 # define PJMEDIA_HAS_AND_MEDIA_VP9 1 #endif /** * Prioritize to use software video encoder on Android MediaCodec. * Set to 0 to prioritize Hardware encoder. * Note: based on test, software encoder configuration provided the most stable * configuration. * * Default: 1 */ #ifndef PJMEDIA_AND_MEDIA_PRIO_SW_VID_ENC # define PJMEDIA_AND_MEDIA_PRIO_SW_VID_ENC 1 #endif /** * Prioritize to use software video encoder on Android MediaCodec. * Set to 0 to prioritize Hardware encoder. * Note: based on test, software decoder configuration provided the most stable * configuration. * * Default: 1 */ #ifndef PJMEDIA_AND_MEDIA_PRIO_SW_VID_DEC # define PJMEDIA_AND_MEDIA_PRIO_SW_VID_DEC 1 #endif /** * Maximum interval between keyframes for Apple VideoToolbox codecs, * in second. * * Default: 5 (seconds) */ #ifndef PJMEDIA_CODEC_VID_TOOLBOX_MAX_KEYFRAME_INTERVAL # define PJMEDIA_CODEC_VID_TOOLBOX_MAX_KEYFRAME_INTERVAL 5 #endif /** * @} */ #endif /* __PJMEDIA_CODEC_CONFIG_H__ */