diff options
author | Benny Prijono <bennylp@teluu.com> | 2008-12-12 14:59:38 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2008-12-12 14:59:38 +0000 |
commit | 3b1adf8c9c943ef6c7f8166f4633f88cabb23e99 (patch) | |
tree | 1e1d116fa9931ca77298d37ef579c25eecf11bd9 /pjmedia | |
parent | 0bed543d71bf7635c659712709c19283ab1b2efc (diff) |
Workaround for ticket #683: Crash/segfault on pjmedia_wsola_create() on ARM9 platform with GCC optimizations
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@2378 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia')
-rw-r--r-- | pjmedia/src/pjmedia/wsola.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/pjmedia/src/pjmedia/wsola.c b/pjmedia/src/pjmedia/wsola.c index 7558c518..022225d0 100644 --- a/pjmedia/src/pjmedia/wsola.c +++ b/pjmedia/src/pjmedia/wsola.c @@ -30,6 +30,17 @@ */ #define THIS_FILE "wsola.c" +/* + * http://trac.pjsip.org/repos/ticket/683: + * Workaround for segfault problem in the fixed point version of create_win() + * on ARM9 platform, possibly due to gcc optimization bug. + * + * For now, we will use linear window when floating point is disabled. + */ +#ifndef PJMEDIA_WSOLA_LINEAR_WIN +# define PJMEDIA_WSOLA_LINEAR_WIN (!PJ_HAS_FLOATING_POINT) +#endif + #if 0 # define TRACE_(x) PJ_LOG(4,x) @@ -368,7 +379,7 @@ static void overlapp_add_simple(pj_int16_t dst[], unsigned count, } } -#if PJ_HAS_INT64 +#if PJ_HAS_INT64 && !PJMEDIA_WSOLA_LINEAR_WIN /* approx_cos(): * see: http://www.audiomulch.com/~rossb/code/sinusoids/ */ @@ -388,7 +399,7 @@ static pj_uint32_t approx_cos( pj_uint32_t x ) return j; } -#endif /* PJ_HAS_INT64 */ +#endif /* PJ_HAS_INT64 && .. */ static void create_win(pj_pool_t *pool, pj_uint16_t **pw, unsigned count) { @@ -400,7 +411,7 @@ static void create_win(pj_pool_t *pool, pj_uint16_t **pw, unsigned count) *pw = w; for (i=0; i<count; i++) { -#if PJ_HAS_INT64 +#if PJ_HAS_INT64 && !PJMEDIA_WSOLA_LINEAR_WIN pj_uint32_t phase; pj_uint64_t cos_val; |