我正在尝试将ffmpegs fft实用程序用于称为真实FFT(RDFT)的音频样本。
但是我有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;
有人可以告诉我我做错了什么吗?我试图在Internet上找到使用此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);
}
输入数据已正确分配。我在进入此部分之前对提取的数据进行了测试。
av_rdft_end
之后调用av_free
是不正确。av_rdft_end
已经释放了ctx
指向的内存空间。
(此外,av_rdft_init
之后缺少半分号。)
编辑:
第二个问题是操作员new[]
返回不当对齐指针。使用例如av_malloc
。av_malloc
分配一个适用于所有内存访问(包括SSE说明)的对齐的块。