mirror of
https://github.com/mborgerding/kissfft.git
synced 2026-10-30 11:39:01 -04:00
Merge branch 'mborgerding:master' into master
This commit is contained in:
@@ -10,12 +10,12 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout source code
|
- name: Checkout source code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
submodules: true
|
fetch-depth: 1
|
||||||
|
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: '3.13'
|
python-version: '3.13'
|
||||||
|
|
||||||
@@ -24,9 +24,7 @@ jobs:
|
|||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install -y \
|
sudo apt-get install -y \
|
||||||
libfftw3-dev \
|
libfftw3-dev \
|
||||||
libpng-dev \
|
libpng-dev
|
||||||
gcc-14 \
|
|
||||||
g++-14
|
|
||||||
|
|
||||||
- name: Use GCC 14 to avoid a bug in tests with old gcc - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79700
|
- name: Use GCC 14 to avoid a bug in tests with old gcc - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79700
|
||||||
run: |
|
run: |
|
||||||
@@ -47,12 +45,12 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout source code
|
- name: Checkout source code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
|
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: '3.13'
|
python-version: '3.13'
|
||||||
|
|
||||||
|
|||||||
+20
-8
@@ -13,15 +13,15 @@
|
|||||||
struct kiss_fftndr_state
|
struct kiss_fftndr_state
|
||||||
{
|
{
|
||||||
int dimReal;
|
int dimReal;
|
||||||
int dimOther;
|
size_t dimOther;
|
||||||
kiss_fftr_cfg cfg_r;
|
kiss_fftr_cfg cfg_r;
|
||||||
kiss_fftnd_cfg cfg_nd;
|
kiss_fftnd_cfg cfg_nd;
|
||||||
void * tmpbuf;
|
void * tmpbuf;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int prod(const int *dims, int ndims)
|
static size_t prod(const int *dims, int ndims)
|
||||||
{
|
{
|
||||||
int x=1;
|
size_t x=1;
|
||||||
while (ndims--)
|
while (ndims--)
|
||||||
x *= *dims++;
|
x *= *dims++;
|
||||||
return x;
|
return x;
|
||||||
@@ -34,18 +34,30 @@ kiss_fftndr_cfg kiss_fftndr_alloc(const int *dims,int ndims,int inverse_fft,void
|
|||||||
kiss_fftndr_cfg st = NULL;
|
kiss_fftndr_cfg st = NULL;
|
||||||
size_t nr=0 , nd=0,ntmp=0;
|
size_t nr=0 , nd=0,ntmp=0;
|
||||||
int dimReal = dims[ndims-1];
|
int dimReal = dims[ndims-1];
|
||||||
int dimOther = prod(dims,ndims-1);
|
size_t dimOther = prod(dims,ndims-1);
|
||||||
size_t memneeded;
|
size_t memneeded;
|
||||||
char * ptr = NULL;
|
char * ptr = NULL;
|
||||||
|
int k,check;
|
||||||
|
|
||||||
(void)kiss_fftr_alloc(dimReal,inverse_fft,NULL,&nr);
|
(void)kiss_fftr_alloc(dimReal,inverse_fft,NULL,&nr);
|
||||||
(void)kiss_fftnd_alloc(dims,ndims-1,inverse_fft,NULL,&nd);
|
(void)kiss_fftnd_alloc(dims,ndims-1,inverse_fft,NULL,&nd);
|
||||||
ntmp =
|
ntmp =
|
||||||
MAX( 2*dimOther , dimReal+2) * sizeof(kiss_fft_scalar) // freq buffer for one pass
|
MAX( 2*dimOther , dimReal+2) * sizeof(kiss_fft_scalar) // freq buffer for one pass
|
||||||
+ dimOther*(dimReal+2) * sizeof(kiss_fft_scalar); // large enough to hold entire input in case of in-place
|
+ dimOther*(size_t)(dimReal+2) * sizeof(kiss_fft_scalar); // large enough to hold entire input in case of in-place
|
||||||
|
|
||||||
memneeded = KISS_FFT_ALIGN_SIZE_UP(sizeof( struct kiss_fftndr_state )) + KISS_FFT_ALIGN_SIZE_UP(nr) + KISS_FFT_ALIGN_SIZE_UP(nd) + KISS_FFT_ALIGN_SIZE_UP(ntmp);
|
memneeded = KISS_FFT_ALIGN_SIZE_UP(sizeof( struct kiss_fftndr_state )) + KISS_FFT_ALIGN_SIZE_UP(nr) + KISS_FFT_ALIGN_SIZE_UP(nd) + KISS_FFT_ALIGN_SIZE_UP(ntmp);
|
||||||
|
|
||||||
|
/* check for overflow */
|
||||||
|
check = memneeded;
|
||||||
|
for (k=0;k<ndims;++k) {
|
||||||
|
check /= dims[k];
|
||||||
|
if (check <= sizeof(kiss_fft_scalar)) {
|
||||||
|
if (lenmem!=NULL)
|
||||||
|
*lenmem = (size_t)(-1);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (lenmem==NULL) {
|
if (lenmem==NULL) {
|
||||||
ptr = (char*) malloc(memneeded);
|
ptr = (char*) malloc(memneeded);
|
||||||
}else{
|
}else{
|
||||||
@@ -73,9 +85,9 @@ kiss_fftndr_cfg kiss_fftndr_alloc(const int *dims,int ndims,int inverse_fft,void
|
|||||||
|
|
||||||
void kiss_fftndr(kiss_fftndr_cfg st,const kiss_fft_scalar *timedata,kiss_fft_cpx *freqdata)
|
void kiss_fftndr(kiss_fftndr_cfg st,const kiss_fft_scalar *timedata,kiss_fft_cpx *freqdata)
|
||||||
{
|
{
|
||||||
int k1,k2;
|
size_t k1,k2;
|
||||||
int dimReal = st->dimReal;
|
size_t dimReal = (size_t)st->dimReal;
|
||||||
int dimOther = st->dimOther;
|
size_t dimOther = st->dimOther;
|
||||||
int nrbins = dimReal/2+1;
|
int nrbins = dimReal/2+1;
|
||||||
|
|
||||||
kiss_fft_cpx * tmp1 = (kiss_fft_cpx*)st->tmpbuf;
|
kiss_fft_cpx * tmp1 = (kiss_fft_cpx*)st->tmpbuf;
|
||||||
|
|||||||
Reference in New Issue
Block a user