2016-06-21 106 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