2016-06-21 107 views
0

我正在尝试使用ffmpegs fft实用程序来处理名为real fft(rdft)的音频样本。真正的fft错误 - ffmpeg

但我有SIGSEGV错误。代码非常简单。

static void fft(float* data){ 
    RDFTContext * ctx = av_rdft_init(Globals::WindowSizePower, DFT_R2C) 
    av_rdft_calc(ctx, data); 
    av_rdft_end(ctx); 
    av_free(ctx); 
    } 

定义的常量是

static const int WindowSize = 1024; 
static const int WindowSizePower = 10; 

谁能告诉我什么,我做错了什么?我试图找到在互联网上使用这个ffmpeg实用程序的例子,但我没有找到任何。

编辑:

这是调用这个函数

void fftInit(float* correction){ 
     m_fft_data = new float[Globals::WindowSize](); 
     memcpy(m_fft_data, correction, sizeof(float)*Globals::WindowSize); 
     for(int i = 0; i < Globals::WindowSize; ++i){ 
      m_fft_data[i] *= m_data[i]; 
     } 

     FFMPEGFFT::fft(m_fft_data); 
    } 

输入数据被正确分配功能。在进入这部分之前,我测试了提取的数据。

回答

1

拨打av_freeav_rdft_end不正确av_rdft_end已经释放了由ctx指向的内存空间。

(此外,分号之后av_rdft_init丢失。)

编辑:

第二个问题是,操作者new[]返回正确对齐的指针。使用例如改为av_mallocav_malloc分配一个适合所有内存访问(包括SSE指令)的对齐块。

+0

分号丢失是复制错误。但是,我在av_rdft_calc函数上出现错误,不晚... – Steva

+1

@Steva:数据分配是否正确?你能展示如何调用'fft'函数吗? – DaBler

+0

当然,我编辑了问题。数据分配正确,我首先进行了测试。 – Steva