真实的FFT错误-FFMPEG



我正在尝试将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_mallocav_malloc分配一个适用于所有内存访问(包括SSE说明)的对齐的块。

最新更新