2013-01-21 2 views
1

FFmpeg 1.1을 사용하여 안드로이드에서 IP 카메라의 비디오 피드를 볼 프로젝트를 만들고 있습니다.swresample 1.1을 사용할 때 왜 FPE가 발생합니까?

안드로이드 프로젝트에서 swresample을 사용하고 swr_convert를 호출 할 때 부동 소수점 예외를 얻으려고합니다. swresample 코드를 통해 한 줄을 찾았습니다. libswresample/swresample.c function swri_realloc_audio 변수 a-> bps 및 a-> ch_count가 0 인 경우 FPE가 발생합니다.

int swri_realloc_audio(AudioData *a, int count){ 
    int i, countb; 
    AudioData old; 

    LOGD("in swri_realloc_audio - bps[%d], ch_count[%d]", a->bps, a->ch_count); 
    if(count < 0 || count > INT_MAX/2/a->bps/a->ch_count) 
    return AVERROR(EINVAL); 

01-21 17 : 29 : 09.612 : D/swresample.c (18,789)에 swri_realloc_audio - BPS [0]

I 그 소리 ffmpeg라는 프로젝트 bug ticket #1834 발견 [0] ch_count 정확한 문제와 같지만 swr_init을 호출하여 해결되었습니다. 그러나, 내 코드는이 함수를 호출하고 여전히 충돌합니다.

SwrContext* resampleCtx = swr_alloc_set_opts(NULL, 
     AV_CH_LAYOUT_MONO, AV_SAMPLE_FMT_S16, pAudioCodecCtx->sample_rate, 
     pAudioCodecCtx->channel_layout, pAudioCodecCtx->sample_fmt, 
     pAudioCodecCtx->sample_rate, 0, 0); 

swr_init(resampleCtx); 
LOGD("Resample context initialized"); 

int dataSize = swr_convert(resampleCtx, 
     &pAudioOutBuffer, AVCODEC_MAX_AUDIO_FRAME_SIZE/2, 
     (const uint8_t**) &(pFrame->data[0]), pFrame->nb_samples); 
LOGD("Resample conversion complete"); 

swr_free(&resampleCtx); 
LOGD("Obtained data size - dataSize[%d]", dataSize); 

나는 swri_realloc_audio 함수의 변수 에 대한 제어를하지 않는 것 때문에 혼란 스러워요 : 여기 내 JNI 코드입니다. 나는 코드를 밟아서 변수 resampleCtx-> postin에서 발견했습니다. 이 변수는 resampleCtx-> 함수에서에 복사되었지만의 이 아무 것도 설정되지 않은 것을 볼 수 없습니다.

내가 뭘 잘못하고 있니? 내 코드에 있습니까 아니면 swresample에 문제가 있습니까?

답변

1

여기에 대한 대답은 입력 내용을 잘못 입력 한 것입니다. AV_SAMPLE_FMT_S16은 swr_convert에서 지원하지 않으며 swr_init에 대한 함수 호출이 실패했습니다. 나는 이것을 알기 위해 결과를 확인하지 않고 있었다.

+0

동일한 문제가 있습니다. 그러나 swrinit을 호출하고 AV_SAMPLE_FMT_S16P를 사용합니다. 아직도, 나는 같은 충돌을 얻는다. – TheSHEEEP

관련 문제