2016-06-21 3 views
0

실제 fft (rdft)라는 오디오 샘플에 ffmpegs fft 유틸리티를 사용하려고합니다.Real 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_malloc 대신 av_malloc은 모든 메모리 액세스 (SSE 명령 포함)에 적합한 정렬로 블록을 할당합니다.

+0

세미콜론이 누락되었습니다. 복사 오류입니다. 하지만 나중에 av_rdft_calc 함수에 오류가 발생합니다 ... – Steva

+1

@Steva :'data'가 제대로 할당 되었습니까? 'fft' 함수가 어떻게 불려지는지 보여줄 수 있습니까? – DaBler

+0

물론 편집 된 질문입니다. 데이터가 올바르게 할당되었으므로 먼저 테스트했습니다. – Steva