in lear_gist-1.2/gist.c [162:193]
static void fftshift(float *data, int w, int h)
{
int i, j;
float *buff = (float *) malloc(w*h*sizeof(float));
memcpy(buff, data, w*h*sizeof(float));
for(j = 0; j < (h+1)/2; j++)
{
for(i = 0; i < (w+1)/2; i++) {
data[(j+h/2)*w + i+w/2] = buff[j*w + i];
}
for(i = 0; i < w/2; i++) {
data[(j+h/2)*w + i] = buff[j*w + i+(w+1)/2];
}
}
for(j = 0; j < h/2; j++)
{
for(i = 0; i < (w+1)/2; i++) {
data[j*w + i+w/2] = buff[(j+(h+1)/2)*w + i];
}
for(i = 0; i < w/2; i++) {
data[j*w + i] = buff[(j+(h+1)/2)*w + i+(w+1)/2];
}
}
free(buff);
}