From e58d19666ee71630cbc267928b4f9cac1fa09580 Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Mon, 9 Apr 2007 07:06:08 +0000 Subject: Fixed all VS6 and VS8 projects with new third party projects layout git-svn-id: http://svn.pjsip.org/repos/pjproject/branches/split-3rd-party@1177 74dad513-b988-da41-8d7b-12977e46ad98 --- pjmedia/build/pjmedia.dsp | 22 +- pjmedia/build/pjmedia.vcproj | 522 +------- pjmedia/build/pjmedia_codec.vcproj | 2198 +------------------------------ pjmedia/include/pjmedia.h | 1 - pjmedia/include/pjmedia/config.h | 48 +- pjmedia/include/pjmedia/mp3_port.h | 147 --- pjmedia/src/pjmedia-codec/gsm.c | 25 +- pjmedia/src/pjmedia/g711.c | 30 +- pjmedia/src/pjmedia/resample_resample.c | 526 +------- pjmedia/src/pjmedia/resample_speex.c | 11 +- 10 files changed, 138 insertions(+), 3392 deletions(-) delete mode 100644 pjmedia/include/pjmedia/mp3_port.h (limited to 'pjmedia') diff --git a/pjmedia/build/pjmedia.dsp b/pjmedia/build/pjmedia.dsp index 6846ffe5..801b96a0 100644 --- a/pjmedia/build/pjmedia.dsp +++ b/pjmedia/build/pjmedia.dsp @@ -42,7 +42,7 @@ RSC=rc.exe # PROP Target_Dir "" F90=df.exe # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /MD /W4 /GX /Zi /O2 /I "../include" /I "../../pjlib/include" /I "../../pjlib-util/include" /I "../src/pjmedia/portaudio" /I "../src/pjmedia-codec" /I "../../pjnath/include" /I "../../third_party/portaudio/include" /I "../../third_party/speex/include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D PJ_WIN32=1 /D PJ_M_I386=1 /FR /FD /c +# ADD CPP /nologo /MD /W4 /GX /Zi /O2 /I "../include" /I "../../pjlib/include" /I "../../pjlib-util/include" /I "../../pjnath/include" /I "../../third_party/portaudio/include" /I "../../third_party/speex/include" /I "../.." /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D PJ_WIN32=1 /D PJ_M_I386=1 /FR /FD /c # SUBTRACT CPP /YX # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" @@ -67,7 +67,7 @@ LIB32=link.exe -lib # PROP Target_Dir "" F90=df.exe # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W4 /Gm /GX /ZI /Od /I "../include" /I "../../pjlib/include" /I "../../pjlib-util/include" /I "../src/pjmedia/portaudio" /I "../src/pjmedia-codec" /I "../../pjnath/include" /I "../../third_party/portaudio/include" /I "../../third_party/speex/include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D PJ_WIN32=1 /D PJ_M_I386=1 /FR /FD /GZ /c +# ADD CPP /nologo /MTd /W4 /Gm /GX /ZI /Od /I "../include" /I "../../pjlib/include" /I "../../pjlib-util/include" /I "../../pjnath/include" /I "../../third_party/portaudio/include" /I "../../third_party/speex/include" /I "../.." /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D PJ_WIN32=1 /D PJ_M_I386=1 /FR /FD /GZ /c # SUBTRACT CPP /YX # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" @@ -161,10 +161,6 @@ SOURCE=..\src\pjmedia\mem_player.c # End Source File # Begin Source File -SOURCE=..\src\pjmedia\mp3_writer.c -# End Source File -# Begin Source File - SOURCE=..\src\pjmedia\null_port.c # End Source File # Begin Source File @@ -181,15 +177,6 @@ SOURCE=..\src\pjmedia\plc_common.c # End Source File # Begin Source File -SOURCE=..\src\pjmedia\plc_steveu.c -# ADD CPP /W2 -# End Source File -# Begin Source File - -SOURCE=..\src\pjmedia\plc_steveu.h -# End Source File -# Begin Source File - SOURCE=..\src\pjmedia\port.c # End Source File # Begin Source File @@ -203,7 +190,6 @@ SOURCE=..\src\pjmedia\resample_resample.c # Begin Source File SOURCE=..\src\pjmedia\resample_speex.c -# PROP Exclude_From_Build 1 # End Source File # Begin Source File @@ -339,10 +325,6 @@ SOURCE=..\include\pjmedia\mem_port.h # End Source File # Begin Source File -SOURCE=..\include\pjmedia\mp3_port.h -# End Source File -# Begin Source File - SOURCE=..\include\pjmedia\null_port.h # End Source File # Begin Source File diff --git a/pjmedia/build/pjmedia.vcproj b/pjmedia/build/pjmedia.vcproj index 8a4dd066..03343089 100644 --- a/pjmedia/build/pjmedia.vcproj +++ b/pjmedia/build/pjmedia.vcproj @@ -3,7 +3,7 @@ ProjectType="Visual C++" Version="8.00" Name="pjmedia" - ProjectGUID="{1434FE6C-89C6-4E13-8150-D5A4B1038AAA}" + ProjectGUID="{7FDE3880-A4AB-49E3-B439-EBEF0A0C7A65}" RootNamespace="pjmedia" > @@ -43,8 +43,8 @@ Name="VCCLCompilerTool" Optimization="2" InlineFunctionExpansion="1" - AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include,../src/pjmedia/portaudio,../src/pjmedia-codec,../../pjnath/include" - PreprocessorDefinitions="NDEBUG;PA_NO_ASIO;WIN32;_LIB;PJ_WIN32=1;PJ_M_I386=1" + AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include,../../pjnath/include,../../third_party/portaudio/include,../../third_party/speex/include,../.." + PreprocessorDefinitions="NDEBUG;WIN32;_LIB;PJ_WIN32=1;PJ_M_I386=1" StringPooling="true" RuntimeLibrary="2" EnableFunctionLevelLinking="true" @@ -119,8 +119,8 @@ - - - - - - - - @@ -682,7 +660,7 @@ - - - - - - - - - - - - - - - - @@ -1293,442 +1225,6 @@ > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pjmedia/build/pjmedia_codec.vcproj b/pjmedia/build/pjmedia_codec.vcproj index 661f59e0..e8e293bf 100644 --- a/pjmedia/build/pjmedia_codec.vcproj +++ b/pjmedia/build/pjmedia_codec.vcproj @@ -3,7 +3,7 @@ ProjectType="Visual C++" Version="8.00" Name="pjmedia_codec" - ProjectGUID="{0545EB9B-CE7C-4EDC-86E8-FB46A8DC1236}" + ProjectGUID="{855DC8C0-D3E9-4A2E-AE47-116605A7BC9B}" > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pjmedia/include/pjmedia.h b/pjmedia/include/pjmedia.h index 6db9bbe7..4a104512 100644 --- a/pjmedia/include/pjmedia.h +++ b/pjmedia/include/pjmedia.h @@ -38,7 +38,6 @@ #include #include #include -#include #include #include #include diff --git a/pjmedia/include/pjmedia/config.h b/pjmedia/include/pjmedia/config.h index 2d64e0ec..23e1318d 100644 --- a/pjmedia/include/pjmedia/config.h +++ b/pjmedia/include/pjmedia/config.h @@ -108,22 +108,55 @@ #endif -/** +/* + * ** THIS MACRO IS DEPRECATED in 0.6. ** + * ** See libresample for configuring this ** + * * Include small filter table in resample. * This adds about 9KB in rdata. */ +/* #ifndef PJMEDIA_HAS_SMALL_FILTER # define PJMEDIA_HAS_SMALL_FILTER 1 #endif +*/ - -/** +/* + * ** THIS MACRO IS DEPRECATED in 0.6. ** + * ** See libresample for configuring this ** + * * Include large filter table in resample. * This adds about 32KB in rdata. */ +/* #ifndef PJMEDIA_HAS_LARGE_FILTER # define PJMEDIA_HAS_LARGE_FILTER 1 #endif +*/ + +/** + * Specify whether libresample should be used for the sampling + * rate conversion. This macro and PJMEDIA_HAS_SPEEX_RESAMPLE + * are mutually exclusive. + * + * Default: 1 (Yes) + */ +#ifndef PJMEDIA_HAS_LIBRESAMPLE +# define PJMEDIA_HAS_LIBRESAMPLE 1 +#endif + + +/** + * Specify whether Speex sample rate convertor should be used for the + * sampling rate conversion. This macro and PJMEDIA_HAS_LIBRESAMPLE + * are mutually exclusive. + * + * Default: 0 + */ +#ifndef PJMEDIA_HAS_SPEEX_RESAMPLE +# define PJMEDIA_HAS_SPEEX_RESAMPLE 0 +#endif + /** @@ -243,9 +276,14 @@ /** * Enable Steve Underwood's PLC. + * + * ** This has now been deprecated. If the codec does not have ** + * ** PLC, then no PLC will be used for that particular codec. ** + * + * Set this to zero, or other link error will occur. */ #ifndef PJMEDIA_HAS_STEVEU_PLC -# define PJMEDIA_HAS_STEVEU_PLC PJ_HAS_FLOATING_POINT +# define PJMEDIA_HAS_STEVEU_PLC 0 #endif @@ -275,7 +313,7 @@ * 16 will effectively zero the signal. */ #ifndef PJMEDIA_ECHO_SUPPRESS_FACTOR -# define PJMEDIA_ECHO_SUPPRESS_FACTOR 4 +# define PJMEDIA_ECHO_SUPPRESS_FACTOR 10 #endif diff --git a/pjmedia/include/pjmedia/mp3_port.h b/pjmedia/include/pjmedia/mp3_port.h deleted file mode 100644 index a4fc7e5f..00000000 --- a/pjmedia/include/pjmedia/mp3_port.h +++ /dev/null @@ -1,147 +0,0 @@ -/* $Id$ */ -/* - * Copyright (C) 2003-2007 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 - */ - -/* - * Contributed by: - * Toni < buldozer at aufbix dot org > - */ - -#ifndef __PJMEDIA_MP3_PORT_H__ -#define __PJMEDIA_MP3_PORT_H__ - - -/** - * @file mp3_port.h - * @brief MP3 writer - */ -#include - -/** - * @defgroup PJMEDIA_MP3_FILE_REC MP3 Audio File Writer (Recorder) - * @ingroup PJMEDIA_PORT - * @brief MP3 Audio File Writer (Recorder) - * @{ - * - * This section describes MP3 file writer. Currently it only works on Windows - * using BladeEncDLL of the LAME MP3 encoder. Note that the LAME_ENC.DLL - * file must exist in the PATH so that the encoder can work properly. - * - * The MP3 file writer is created with #pjmedia_mp3_writer_port_create() which - * among other things specifies the desired file name and audio properties. - * It then takes PCM input when #pjmedia_port_put_frame() is called and encode - * the PCM input into MP3 streams before writing it to the .mp3 file. - */ - - -PJ_BEGIN_DECL - - -/** - * This structure contains encoding options that can be specified during - * MP3 writer port creation. Application should always zero the structure - * before setting some value to make sure that default options will be used. - */ -typedef struct pjmedia_mp3_encoder_option -{ - /** Specify whether variable bit rate should be used. Variable bitrate - * would normally produce better quality at the expense of probably - * larger file. - */ - pj_bool_t vbr; - - /** Target bitrate, in bps. If VBR is enabled, this settings specifies - * the average bit-rate requested, and will make the encoder ignore - * the quality setting. For CBR, this specifies the actual bitrate, - * and if this option is zero, it will be set to the sampling rate - * multiplied by number of channels. - */ - unsigned bit_rate; - - /** Encoding quality, 0-9, with 0 is the highest quality. For VBR, the - * quality setting will only take effect when bit_rate setting is zero. - */ - unsigned quality; - -} pjmedia_mp3_encoder_option; - - -/** - * Create a media port to record PCM media to a MP3 file. After the port - * is created, application can call #pjmedia_port_put_frame() to feed the - * port with PCM frames. The port then will encode the PCM frame into MP3 - * stream, and store it to MP3 file specified in the argument. - * - * When application has finished with writing MP3 file, it must destroy the - * media port with #pjmedia_port_destroy() so that the MP3 file can be - * closed properly. - * - * @param pool Pool to create memory buffers for this port. - * @param filename File name. - * @param clock_rate The sampling rate. - * @param channel_count Number of channels. - * @param samples_per_frame Number of samples per frame. - * @param bits_per_sample Number of bits per sample (eg 16). - * @param option Optional option to set encoding parameters. - * @param p_port Pointer to receive the file port instance. - * - * @return PJ_SUCCESS on success. - */ -PJ_DECL(pj_status_t) -pjmedia_mp3_writer_port_create(pj_pool_t *pool, - const char *filename, - unsigned clock_rate, - unsigned channel_count, - unsigned samples_per_frame, - unsigned bits_per_sample, - const pjmedia_mp3_encoder_option *option, - pjmedia_port **p_port ); - -/** - * Register the callback to be called when the file writing has reached - * certain size. Application can use this callback, for example, to limit - * the size of the output file. - * - * @param port The file writer port. - * @param pos The file position on which the callback will be called. - * @param user_data User data to be specified in the callback, and will be - * given on the callback. - * @param cb Callback to be called. If the callback returns non- - * PJ_SUCCESS, the writing will stop. Note that if - * application destroys the port in the callback, it must - * return non-PJ_SUCCESS here. - * - * @return PJ_SUCCESS on success. - */ -PJ_DECL(pj_status_t) -pjmedia_mp3_writer_port_set_cb( pjmedia_port *port, - pj_size_t pos, - void *user_data, - pj_status_t (*cb)(pjmedia_port *port, - void *usr_data)); - - -/** - * @} - */ - - -PJ_END_DECL - -#endif /* __PJMEDIA_MP3_PORT_H__ */ - diff --git a/pjmedia/src/pjmedia-codec/gsm.c b/pjmedia/src/pjmedia-codec/gsm.c index 34f538b2..d21956ae 100644 --- a/pjmedia/src/pjmedia-codec/gsm.c +++ b/pjmedia/src/pjmedia-codec/gsm.c @@ -34,6 +34,9 @@ */ #if defined(PJMEDIA_HAS_GSM_CODEC) && PJMEDIA_HAS_GSM_CODEC != 0 +/* We removed PLC in 0.6 */ +#define PLC_DISABLED 1 + /* Prototypes for GSM factory */ static pj_status_t gsm_test_alloc( pjmedia_codec_factory *factory, @@ -72,9 +75,11 @@ static pj_status_t gsm_codec_decode( pjmedia_codec *codec, const struct pjmedia_frame *input, unsigned output_buf_len, struct pjmedia_frame *output); +#if !PLC_DISABLED static pj_status_t gsm_codec_recover(pjmedia_codec *codec, unsigned output_buf_len, struct pjmedia_frame *output); +#endif /* Definition for GSM codec operations. */ static pjmedia_codec_op gsm_op = @@ -86,7 +91,11 @@ static pjmedia_codec_op gsm_op = &gsm_codec_parse, &gsm_codec_encode, &gsm_codec_decode, +#if !PLC_DISABLED &gsm_codec_recover +#else + NULL +#endif }; /* Definition for GSM codec factory operations. */ @@ -116,7 +125,9 @@ struct gsm_data void *encoder; void *decoder; pj_bool_t plc_enabled; +#if !PLC_DISABLED pjmedia_plc *plc; +#endif pj_bool_t vad_enabled; pjmedia_silence_det *vad; pj_timestamp last_tx; @@ -259,7 +270,9 @@ static pj_status_t gsm_default_attr (pjmedia_codec_factory *factory, attr->setting.frm_per_pkt = 1; attr->setting.vad = 1; +#if !PLC_DISABLED attr->setting.plc = 1; +#endif /* Default all other flag bits disabled. */ @@ -320,6 +333,7 @@ static pj_status_t gsm_alloc_codec( pjmedia_codec_factory *factory, sizeof(struct gsm_data)); codec->codec_data = gsm_data; +#if !PLC_DISABLED /* Create PLC */ status = pjmedia_plc_create(gsm_codec_factory.pool, 8000, 160, 0, &gsm_data->plc); @@ -327,6 +341,7 @@ static pj_status_t gsm_alloc_codec( pjmedia_codec_factory *factory, pj_mutex_unlock(gsm_codec_factory.mutex); return status; } +#endif /* Create silence detector */ status = pjmedia_silence_det_create(gsm_codec_factory.pool, @@ -351,7 +366,6 @@ static pj_status_t gsm_dealloc_codec( pjmedia_codec_factory *factory, pjmedia_codec *codec ) { struct gsm_data *gsm_data; - pj_int16_t frame[160]; int i; PJ_ASSERT_RETURN(factory && codec, PJ_EINVAL); @@ -362,13 +376,18 @@ static pj_status_t gsm_dealloc_codec( pjmedia_codec_factory *factory, /* Close codec, if it's not closed. */ gsm_codec_close(codec); +#if !PLC_DISABLED /* Clear left samples in the PLC, since codec+plc will be reused * next time. */ for (i=0; i<2; ++i) { + pj_int16_t frame[160]; pjmedia_zero_samples(frame, PJ_ARRAY_SIZE(frame)); pjmedia_plc_save(gsm_data->plc, frame); } +#else + PJ_UNUSED_ARG(i); +#endif /* Re-init silence_period */ pj_set_timestamp32(&gsm_data->last_tx, 0, 0); @@ -569,13 +588,16 @@ static pj_status_t gsm_codec_decode( pjmedia_codec *codec, output->size = 320; output->type = PJMEDIA_FRAME_TYPE_AUDIO; +#if !PLC_DISABLED if (gsm_data->plc_enabled) pjmedia_plc_save( gsm_data->plc, output->buf); +#endif return PJ_SUCCESS; } +#if !PLC_DISABLED /* * Recover lost frame. */ @@ -594,6 +616,7 @@ static pj_status_t gsm_codec_recover(pjmedia_codec *codec, return PJ_SUCCESS; } +#endif #endif /* PJMEDIA_HAS_GSM_CODEC */ diff --git a/pjmedia/src/pjmedia/g711.c b/pjmedia/src/pjmedia/g711.c index 38306d0b..da9b7586 100644 --- a/pjmedia/src/pjmedia/g711.c +++ b/pjmedia/src/pjmedia/g711.c @@ -32,6 +32,9 @@ #if defined(PJMEDIA_HAS_G711_CODEC) && PJMEDIA_HAS_G711_CODEC!=0 +/* We removed PLC in 0.6 */ +#define PLC_DISABLED 1 + #define G711_BPS 64000 #define G711_CODEC_CNT 0 /* number of codec to preallocate in memory */ @@ -80,9 +83,11 @@ static pj_status_t g711_decode( pjmedia_codec *codec, const struct pjmedia_frame *input, unsigned output_buf_len, struct pjmedia_frame *output); +#if !PLC_DISABLED static pj_status_t g711_recover( pjmedia_codec *codec, unsigned output_buf_len, struct pjmedia_frame *output); +#endif /* Definition for G711 codec operations. */ static pjmedia_codec_op g711_op = @@ -94,7 +99,11 @@ static pjmedia_codec_op g711_op = &g711_parse, &g711_encode, &g711_decode, +#if !PLC_DISABLED &g711_recover +#else + NULL +#endif }; /* Definition for G711 codec factory operations. */ @@ -121,8 +130,10 @@ static struct g711_factory struct g711_private { unsigned pt; +#if !PLC_DISABLED pj_bool_t plc_enabled; pjmedia_plc *plc; +#endif pj_bool_t vad_enabled; pjmedia_silence_det *vad; pj_timestamp last_tx; @@ -249,8 +260,10 @@ static pj_status_t g711_default_attr (pjmedia_codec_factory *factory, /* Set default frames per packet to 2 (or 20ms) */ attr->setting.frm_per_pkt = 2; +#if !PLC_DISABLED /* Enable plc by default. */ attr->setting.plc = 1; +#endif /* Enable VAD by default. */ attr->setting.vad = 1; @@ -317,6 +330,7 @@ static pj_status_t g711_alloc_codec( pjmedia_codec_factory *factory, /* Set the payload type */ codec_priv->pt = id->pt; +#if !PLC_DISABLED /* Create PLC, always with 10ms ptime */ status = pjmedia_plc_create(g711_factory.pool, 8000, 80, 0, &codec_priv->plc); @@ -324,6 +338,7 @@ static pj_status_t g711_alloc_codec( pjmedia_codec_factory *factory, pj_mutex_unlock(g711_factory.mutex); return status; } +#endif /* Create VAD */ status = pjmedia_silence_det_create(g711_factory.pool, @@ -357,7 +372,6 @@ static pj_status_t g711_dealloc_codec(pjmedia_codec_factory *factory, pjmedia_codec *codec ) { struct g711_private *priv = codec->codec_data; - pj_int16_t frame[SAMPLES_PER_FRAME]; int i; PJ_ASSERT_RETURN(factory==&g711_factory.base, PJ_EINVAL); @@ -368,13 +382,19 @@ static pj_status_t g711_dealloc_codec(pjmedia_codec_factory *factory, return PJ_EINVALIDOP; } +#if !PLC_DISABLED /* Clear left samples in the PLC, since codec+plc will be reused * next time. */ for (i=0; i<2; ++i) { + pj_int16_t frame[SAMPLES_PER_FRAME]; pjmedia_zero_samples(frame, PJ_ARRAY_SIZE(frame)); pjmedia_plc_save(priv->plc, frame); } +#else + PJ_UNUSED_ARG(i); + PJ_UNUSED_ARG(priv); +#endif /* Lock mutex. */ pj_mutex_lock(g711_factory.mutex); @@ -402,7 +422,9 @@ static pj_status_t g711_open(pjmedia_codec *codec, { struct g711_private *priv = codec->codec_data; priv->pt = attr->info.pt; +#if !PLC_DISABLED priv->plc_enabled = (attr->setting.plc != 0); +#endif priv->vad_enabled = (attr->setting.vad != 0); return PJ_SUCCESS; } @@ -422,7 +444,9 @@ static pj_status_t g711_modify(pjmedia_codec *codec, if (attr->info.pt != priv->pt) return PJMEDIA_EINVALIDPT; +#if !PLC_DISABLED priv->plc_enabled = (attr->setting.plc != 0); +#endif priv->vad_enabled = (attr->setting.vad != 0); return PJ_SUCCESS; @@ -561,12 +585,15 @@ static pj_status_t g711_decode(pjmedia_codec *codec, output->type = PJMEDIA_FRAME_TYPE_AUDIO; output->size = (input->size << 1); +#if !PLC_DISABLED if (priv->plc_enabled) pjmedia_plc_save( priv->plc, output->buf); +#endif return PJ_SUCCESS; } +#if !PLC_DISABLED static pj_status_t g711_recover( pjmedia_codec *codec, unsigned output_buf_len, struct pjmedia_frame *output) @@ -584,6 +611,7 @@ static pj_status_t g711_recover( pjmedia_codec *codec, return PJ_SUCCESS; } +#endif #endif /* PJMEDIA_HAS_G711_CODEC */ diff --git a/pjmedia/src/pjmedia/resample_resample.c b/pjmedia/src/pjmedia/resample_resample.c index fbb4a727..0dc755d9 100644 --- a/pjmedia/src/pjmedia/resample_resample.c +++ b/pjmedia/src/pjmedia/resample_resample.c @@ -17,451 +17,21 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -/* - * Based on: - * resample-1.8.tar.gz from the - * Digital Audio Resampling Home Page located at - * http://www-ccrma.stanford.edu/~jos/resample/. - * - * SOFTWARE FOR SAMPLING-RATE CONVERSION AND FIR DIGITAL FILTER DESIGN - * - * Snippet from the resample.1 man page: - * - * HISTORY - * - * The first version of this software was written by Julius O. Smith III - * at CCRMA in - * 1981. It was called SRCONV and was written in SAIL for PDP-10 - * compatible machines. The algorithm was first published in - * - * Smith, Julius O. and Phil Gossett. ``A Flexible Sampling-Rate - * Conversion Method,'' Proceedings (2): 19.4.1-19.4.4, IEEE Conference - * on Acoustics, Speech, and Signal Processing, San Diego, March 1984. - * - * An expanded tutorial based on this paper is available at the Digital - * Audio Resampling Home Page given above. - * - * Circa 1988, the SRCONV program was translated from SAIL to C by - * Christopher Lee Fraley working with Roger Dannenberg at CMU. - * - * Since then, the C version has been maintained by jos. - * - * Sndlib support was added 6/99 by John Gibson . - * - * The resample program is free software distributed in accordance - * with the Lesser GNU Public License (LGPL). There is NO warranty; not - * even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - */ - -/* PJMEDIA modification: - * - remove resample(), just use SrcUp, SrcUD, and SrcLinear directly. - * - move FilterUp() and FilterUD() from filterkit.c - * - move stddefs.h and resample.h to this file. - * - const correctness. - */ #include + #include #include #include #include -#define THIS_FILE "resample.c" - - -/* - * Taken from stddefs.h - */ -#ifndef PI -#define PI (3.14159265358979232846) -#endif - -#ifndef PI2 -#define PI2 (6.28318530717958465692) -#endif - -#define D2R (0.01745329348) /* (2*pi)/360 */ -#define R2D (57.29577951) /* 360/(2*pi) */ - -#ifndef MAX -#define MAX(x,y) ((x)>(y) ?(x):(y)) -#endif -#ifndef MIN -#define MIN(x,y) ((x)<(y) ?(x):(y)) -#endif - -#ifndef ABS -#define ABS(x) ((x)<0 ?(-(x)):(x)) -#endif - -#ifndef SGN -#define SGN(x) ((x)<0 ?(-1):((x)==0?(0):(1))) -#endif - -typedef char RES_BOOL; -typedef short RES_HWORD; -typedef int RES_WORD; -typedef unsigned short RES_UHWORD; -typedef unsigned int RES_UWORD; - -#define MAX_HWORD (32767) -#define MIN_HWORD (-32768) - -#ifdef DEBUG -#define INLINE -#else -#define INLINE inline -#endif - -/* - * Taken from resample.h - * - * The configuration constants below govern - * the number of bits in the input sample and filter coefficients, the - * number of bits to the right of the binary-point for fixed-point math, etc. - * - */ - -/* Conversion constants */ -#define Nhc 8 -#define Na 7 -#define Np (Nhc+Na) -#define Npc (1<>= scl; - if (v>MAX_HWORD) { - v = MAX_HWORD; - } else if (v < MIN_HWORD) { - v = MIN_HWORD; - } - out = (RES_HWORD) v; - return out; -} +#if defined(PJMEDIA_HAS_LIBRESAMPLE) && PJMEDIA_HAS_LIBRESAMPLE != 0 -/* Sampling rate conversion using linear interpolation for maximum speed. - */ -static int - SrcLinear(const RES_HWORD X[], RES_HWORD Y[], double pFactor, RES_UHWORD nx) -{ - RES_HWORD iconst; - RES_UWORD time = 0; - const RES_HWORD *xp; - RES_HWORD *Ystart, *Yend; - RES_WORD v,x1,x2; - - double dt; /* Step through input signal */ - RES_UWORD dtb; /* Fixed-point version of Dt */ - RES_UWORD endTime; /* When time reaches EndTime, return to user */ - - dt = 1.0/pFactor; /* Output sampling period */ - dtb = dt*(1<>Np]; /* Ptr to current input sample */ - x1 = *xp++; - x2 = *xp; - x1 *= ((1< -static RES_WORD FilterUp(const RES_HWORD Imp[], const RES_HWORD ImpD[], - RES_UHWORD Nwing, RES_BOOL Interp, - const RES_HWORD *Xp, RES_HWORD Ph, RES_HWORD Inc) -{ - const RES_HWORD *Hp; - const RES_HWORD *Hdp = NULL; - const RES_HWORD *End; - RES_HWORD a = 0; - RES_WORD v, t; - - v=0; - Hp = &Imp[Ph>>Na]; - End = &Imp[Nwing]; - if (Interp) { - Hdp = &ImpD[Ph>>Na]; - a = Ph & Amask; - } - if (Inc == 1) /* If doing right wing... */ - { /* ...drop extra coeff, so when Ph is */ - End--; /* 0.5, we don't do too many mult's */ - if (Ph == 0) /* If the phase is zero... */ - { /* ...then we've already skipped the */ - Hp += Npc; /* first sample, so we must also */ - Hdp += Npc; /* skip ahead in Imp[] and ImpD[] */ - } - } - if (Interp) - while (Hp < End) { - t = *Hp; /* Get filter coeff */ - t += (((RES_WORD)*Hdp)*a)>>Na; /* t is now interp'd filter coeff */ - Hdp += Npc; /* Filter coeff differences step */ - t *= *Xp; /* Mult coeff by input sample */ - if (t & (1<<(Nhxn-1))) /* Round, if needed */ - t += (1<<(Nhxn-1)); - t >>= Nhxn; /* Leave some guard bits, but come back some */ - v += t; /* The filter output */ - Hp += Npc; /* Filter coeff step */ - - Xp += Inc; /* Input signal step. NO CHECK ON BOUNDS */ - } - else - while (Hp < End) { - t = *Hp; /* Get filter coeff */ - t *= *Xp; /* Mult coeff by input sample */ - if (t & (1<<(Nhxn-1))) /* Round, if needed */ - t += (1<<(Nhxn-1)); - t >>= Nhxn; /* Leave some guard bits, but come back some */ - v += t; /* The filter output */ - Hp += Npc; /* Filter coeff step */ - Xp += Inc; /* Input signal step. NO CHECK ON BOUNDS */ - } - return(v); -} - - -static RES_WORD FilterUD(const RES_HWORD Imp[], const RES_HWORD ImpD[], - RES_UHWORD Nwing, RES_BOOL Interp, - const RES_HWORD *Xp, RES_HWORD Ph, RES_HWORD Inc, RES_UHWORD dhb) -{ - RES_HWORD a; - const RES_HWORD *Hp, *Hdp, *End; - RES_WORD v, t; - RES_UWORD Ho; - - v=0; - Ho = (Ph*(RES_UWORD)dhb)>>Np; - End = &Imp[Nwing]; - if (Inc == 1) /* If doing right wing... */ - { /* ...drop extra coeff, so when Ph is */ - End--; /* 0.5, we don't do too many mult's */ - if (Ph == 0) /* If the phase is zero... */ - Ho += dhb; /* ...then we've already skipped the */ - } /* first sample, so we must also */ - /* skip ahead in Imp[] and ImpD[] */ - if (Interp) - while ((Hp = &Imp[Ho>>Na]) < End) { - t = *Hp; /* Get IR sample */ - Hdp = &ImpD[Ho>>Na]; /* get interp (lower Na) bits from diff table*/ - a = Ho & Amask; /* a is logically between 0 and 1 */ - t += (((RES_WORD)*Hdp)*a)>>Na; /* t is now interp'd filter coeff */ - t *= *Xp; /* Mult coeff by input sample */ - if (t & 1<<(Nhxn-1)) /* Round, if needed */ - t += 1<<(Nhxn-1); - t >>= Nhxn; /* Leave some guard bits, but come back some */ - v += t; /* The filter output */ - Ho += dhb; /* IR step */ - Xp += Inc; /* Input signal step. NO CHECK ON BOUNDS */ - } - else - while ((Hp = &Imp[Ho>>Na]) < End) { - t = *Hp; /* Get IR sample */ - t *= *Xp; /* Mult coeff by input sample */ - if (t & 1<<(Nhxn-1)) /* Round, if needed */ - t += 1<<(Nhxn-1); - t >>= Nhxn; /* Leave some guard bits, but come back some */ - v += t; /* The filter output */ - Ho += dhb; /* IR step */ - Xp += Inc; /* Input signal step. NO CHECK ON BOUNDS */ - } - return(v); -} - -/* Sampling rate up-conversion only subroutine; - * Slightly faster than down-conversion; - */ -static int SrcUp(const RES_HWORD X[], RES_HWORD Y[], double pFactor, - RES_UHWORD nx, RES_UHWORD pNwing, RES_UHWORD pLpScl, - const RES_HWORD pImp[], const RES_HWORD pImpD[], RES_BOOL Interp) -{ - const RES_HWORD *xp; - RES_HWORD *Ystart, *Yend; - RES_WORD v; - - double dt; /* Step through input signal */ - RES_UWORD dtb; /* Fixed-point version of Dt */ - RES_UWORD time = 0; - RES_UWORD endTime; /* When time reaches EndTime, return to user */ - - dt = 1.0/pFactor; /* Output sampling period */ - dtb = dt*(1<>Np]; /* Ptr to current input sample */ - /* Perform left-wing inner product */ - v = 0; - v = FilterUp(pImp, pImpD, pNwing, Interp, xp, (RES_HWORD)(time&Pmask),-1); - - /* Perform right-wing inner product */ - v += FilterUp(pImp, pImpD, pNwing, Interp, xp+1, (RES_HWORD)((-time)&Pmask),1); - - v >>= Nhg; /* Make guard bits */ - v *= pLpScl; /* Normalize for unity filter gain */ - *Y++ = WordToHword(v,NLpScl); /* strip guard bits, deposit output */ - time += dtb; /* Move to next sample by time increment */ - } - return (Y - Ystart); /* Return the number of output samples */ -} +#define THIS_FILE "resample.c" -/* Sampling rate conversion subroutine */ - -static int SrcUD(const RES_HWORD X[], RES_HWORD Y[], double pFactor, - RES_UHWORD nx, RES_UHWORD pNwing, RES_UHWORD pLpScl, - const RES_HWORD pImp[], const RES_HWORD pImpD[], RES_BOOL Interp) -{ - const RES_HWORD *xp; - RES_HWORD *Ystart, *Yend; - RES_WORD v; - - double dh; /* Step through filter impulse response */ - double dt; /* Step through input signal */ - RES_UWORD time = 0; - RES_UWORD endTime; /* When time reaches EndTime, return to user */ - RES_UWORD dhb, dtb; /* Fixed-point versions of Dh,Dt */ - - dt = 1.0/pFactor; /* Output sampling period */ - dtb = dt*(1<>Np]; /* Ptr to current input sample */ - v = FilterUD(pImp, pImpD, pNwing, Interp, xp, (RES_HWORD)(time&Pmask), - -1, dhb); /* Perform left-wing inner product */ - v += FilterUD(pImp, pImpD, pNwing, Interp, xp+1, (RES_HWORD)((-time)&Pmask), - 1, dhb); /* Perform right-wing inner product */ - v >>= Nhg; /* Make guard bits */ - v *= pLpScl; /* Normalize for unity filter gain */ - *Y++ = WordToHword(v,NLpScl); /* strip guard bits, deposit output */ - time += dtb; /* Move to next sample by time increment */ - } - return (Y - Ystart); /* Return the number of output samples */ -} - - -/* *************************************************************************** - * - * PJMEDIA RESAMPLE - * - * *************************************************************************** - */ struct pjmedia_resample { @@ -503,31 +73,6 @@ PJ_DEF(pj_status_t) pjmedia_resample_create( pj_pool_t *pool, //high_quality = 0; } -#if !defined(PJMEDIA_HAS_LARGE_FILTER) || PJMEDIA_HAS_LARGE_FILTER==0 - /* - * If large filter is excluded in the build, then prevent application - * from using it. - */ - if (high_quality && large_filter) { - large_filter = PJ_FALSE; - PJ_LOG(5,(THIS_FILE, - "Resample uses small filter because large filter is " - "disabled")); - } -#endif - -#if !defined(PJMEDIA_HAS_SMALL_FILTER) || PJMEDIA_HAS_SMALL_FILTER==0 - /* - * If small filter is excluded in the build and application wants to - * use it, then drop to linear conversion. - */ - if (high_quality && large_filter == 0) { - high_quality = PJ_FALSE; - PJ_LOG(4,(THIS_FILE, - "Resample uses linear because small filter is disabled")); - } -#endif - resample->factor = rate_out * 1.0 / rate_in; resample->large_filter = large_filter; resample->high_quality = high_quality; @@ -540,13 +85,7 @@ PJ_DEF(pj_status_t) pjmedia_resample_create( pj_pool_t *pool, * of Macadamian dot com. * resample->xoff = large_filter ? 32 : 6; */ - if (large_filter) - resample->xoff = (LARGE_FILTER_NMULT + 1) / 2.0 * - MAX(1.0, 1.0/resample->factor); - else - resample->xoff = (SMALL_FILTER_NMULT + 1) / 2.0 * - MAX(1.0, 1.0/resample->factor); - + resample->xoff = res_GetXOFF(resample->factor, (char)large_filter); size = (samples_per_frame + 2*resample->xoff) * sizeof(pj_int16_t); resample->buffer = pj_pool_alloc(pool, size); @@ -649,53 +188,18 @@ PJ_DEF(void) pjmedia_resample_run( pjmedia_resample *resample, */ dst_buf = resample->buffer + resample->xoff*2; pjmedia_copy_samples(dst_buf, input, resample->frame_size); - - if (resample->factor >= 1) { - - if (resample->large_filter) { - SrcUp(resample->buffer + resample->xoff, output, - resample->factor, resample->frame_size, - LARGE_FILTER_NWING, LARGE_FILTER_SCALE, - LARGE_FILTER_IMP, LARGE_FILTER_IMPD, - PJ_TRUE); - } else { - SrcUp(resample->buffer + resample->xoff, output, - resample->factor, resample->frame_size, - SMALL_FILTER_NWING, SMALL_FILTER_SCALE, - SMALL_FILTER_IMP, SMALL_FILTER_IMPD, - PJ_TRUE); - } - - } else { - - if (resample->large_filter) { - - SrcUD( resample->buffer + resample->xoff, output, - resample->factor, resample->frame_size, - LARGE_FILTER_NWING, - LARGE_FILTER_SCALE * resample->factor + 0.5, - LARGE_FILTER_IMP, LARGE_FILTER_IMPD, - PJ_TRUE); - - } else { - - SrcUD( resample->buffer + resample->xoff, output, - resample->factor, resample->frame_size, - SMALL_FILTER_NWING, - SMALL_FILTER_SCALE * resample->factor + 0.5, - SMALL_FILTER_IMP, SMALL_FILTER_IMPD, - PJ_TRUE); - - } - - } + + res_Resample(resample->buffer + resample->xoff, output, + resample->factor, (pj_uint16_t)resample->frame_size, + (char)resample->large_filter, (char)PJ_TRUE); dst_buf = resample->buffer; src_buf = input + resample->frame_size - resample->xoff*2; pjmedia_copy_samples(dst_buf, src_buf, resample->xoff * 2); } else { - SrcLinear( input, output, resample->factor, resample->frame_size); + res_SrcLinear( input, output, resample->factor, + (pj_uint16_t)resample->frame_size); } } @@ -709,3 +213,11 @@ PJ_DEF(void) pjmedia_resample_destroy(pjmedia_resample *resample) { PJ_UNUSED_ARG(resample); } + + +#else /* PJMEDIA_HAS_LIBRESAMPLE */ + +int pjmedia_resample_resample_excluded; + +#endif /* PJMEDIA_HAS_LIBRESAMPLE */ + diff --git a/pjmedia/src/pjmedia/resample_speex.c b/pjmedia/src/pjmedia/resample_speex.c index 447d3f6a..fcc42115 100644 --- a/pjmedia/src/pjmedia/resample_speex.c +++ b/pjmedia/src/pjmedia/resample_speex.c @@ -16,16 +16,17 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - #include #include #include #include #include +#if defined(PJMEDIA_HAS_SPEEX_RESAMPLE) && PJMEDIA_HAS_SPEEX_RESAMPLE != 0 + #include -#define THIS_FILE "resample.c" +#define THIS_FILE "resample_speex.c" struct pjmedia_resample @@ -117,3 +118,9 @@ PJ_DEF(void) pjmedia_resample_destroy(pjmedia_resample *resample) } } +#else /* PJMEDIA_HAS_SPEEX_RESAMPLE */ + +int pjmedia_resample_speex_excluded; + +#endif /* PJMEDIA_HAS_SPEEX_RESAMPLE */ + -- cgit v1.2.3