Mercurial > hg > libxtract
view src/helper.c @ 113:72a9a393d5bd
- Fixed bugs in xtract_flatness(), or at least added necessary
documentation and error checking to avoid problems
- Added xtract_is_denormal() helper function and XTRACT_DENORMAL_FOUND
return code
- Replaced all instances of log, sqrt, exp etc. with respective
floating point counterparts (logf etc.)
- Added check for architecture endianness to configure script
- Bug fix to PD example, now no longer crashes if no arguments are
given
- Minor documentation updates
author | Jamie Bullock <jamie@postlude.co.uk> |
---|---|
date | Fri, 15 Feb 2008 12:43:13 +0000 |
parents | c7e1fe63eedb |
children | 67f6b6e63d45 |
line wrap: on
line source
/* libxtract feature extraction library * * Copyright (C) 2006 Jamie Bullock * * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. */ /* helper.c: helper functions. */ #include <config.h> #include <stdio.h> #include "xtract/libxtract.h" #ifdef WORDS_BIGENDIAN #define INDEX 0 #else #define INDEX 1 #endif int xtract_windowed(const float *data, const int N, const void *argv, float *result){ int n; const float *window; n = N; window = (const float *)argv; while(n--) result[n] = data[n] * window[n]; return XTRACT_SUCCESS; } int xtract_features_from_subframes(const float *data, const int N, const int feature, const void *argv, float *result){ const float *frame1, *frame2; float *result1, *result2; int n, rv; n = N >> 1; frame1 = data; frame2 = data + n; result1 = result; result2 = result + n; rv = xtract[feature](frame1, n, argv, result1); if(rv == XTRACT_SUCCESS) rv = xtract[feature](frame2, n, argv, result2); return rv; } inline int xtract_is_denormal(double const d){ if(sizeof(d) != 2 * sizeof(int)) fprintf(stderr, "libxtract: Error: xtract_is_denormal() detects inconsistent wordlength for type 'double'\n"); int l = ((int *)&d)[INDEX]; return (l&0x7ff00000) == 0 && d!=0; //Check for 0 may not be necessary }