2016-06-21 9 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ユーティリティが使われているインターネット上の例を見つけようとしましたが、見つけられませんでした。

EDIT:

これは、入力データが適切に割り当てられている

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_rdft_endの後にav_freeを呼び出すと、が正しくないです。 av_rdft_endはすでにctxが指し示すメモリ空間を解放します。

(また、セミコロンはav_rdft_init後に欠落している。)

編集:

第二の問題は、オペレータnew[]戻りが不適切に整列することをポインタです。例えば代わりにav_mallocav_mallocは、すべてのメモリアクセス(SSE命令を含む)に適したアラインメントを持つブロックを割り当てます。

+0

セミコロンがありません。コピーエラーです。しかし、後でav_rdft_calc関数にエラーが発生する... – Steva

+1

@Steva: 'data'は正しく割り当てられていますか? 'fft'関数の呼び出し方法を教えてください。 – DaBler

+0

もちろん、私は質問を編集しました。データが適切に割り当てられているので、まずそれをテストしました。 – Steva