ffmpeg.org 설명서 페이지 [tutorial] [sample]에서 링크 된 자습서를 사용하여 첫 번째 ffmpeg 응용 프로그램을 작성하고 있습니다. 여기에 내 초기 코드가 있습니다 :for 루프 때문에 ffmpeg segfaults를 사용하는 응용 프로그램이 있습니까?
const char * fnmVideoIn = argv [1];
const char * fnmImageOut = argv [2];
av_register_all();
// [] Open the file
AVFormatContext * pcxFormat;
if (avformat_open_input (&pcxFormat, fnmVideoIn, NULL, NULL)) {
fprintf (stderr, "Could not open file %s for reading\n",
fnmVideoIn);
return -1;
}
// [] Get stream information
if (avformat_find_stream_info (pcxFormat, NULL) < 0) {
fprintf (stderr, "Could not find stream info\n");
return -1;
}
// [log] print stream info
av_dump_format (pcxFormat, 0, fnmVideoIn, 0);
그리고 모두 정상입니다. 프로그램은 오류없이 실행되고 비디오 정보를 올바르게 덤프합니다. 하지만 다음 단계로 넘어갔습니다.
...
// [log] print stream info
av_dump_format (pcxFormat, 0, fnmVideoIn, 0);
int ixVideoStream = -1, ixStrm;
for (ixStrm = 0; ixStrm < pcxFormat->nb_streams; ++ixStrm) {
if (pcxFormat->streams [ixStrm]->codec->codec_type == AVMEDIA_TYPE_VIDEO) {
ixVideoStream = ixStrm;
break;
}
}
그리고 세그먼트로 끝납니다. GDB는 말한다 :이 방법을
(gdb) r test.mp4 out
...
Program received signal SIGSEGV, Segmentation fault.
0xb7f572c5 in avformat_open_input() from /usr/lib/libavformat.so.53
라고 그것 때문에 코드의 avformat_open_input
세그먼테이션 폴트 (segfault)가 후 를 추가하는 것이 가능합니까? 심지어 정규 i = 0으로 테스트했습니다. 나는 < for-loop를 100으로 만들었고 여전히 segfaults! 이게 버그 야? 참고로, 내 시스템은 다음과 같습니다
$ gcc --version
gcc (GCC) 4.7.0 20120414 (prerelease)
$ uname -srvmpio
Linux 3.3.4-1-ARCH #1 SMP PREEMPT Sat Apr 28 06:04:27 UTC 2012 i686 Intel(R) Core(TM)2 Duo CPU P7450 @ 2.13GHz GenuineIntel GNU/Linux
$ ffmpeg -version
ffmpeg version 0.10.2
built on Mar 17 2012 08:53:01 with gcc 4.6.3
configuration: --prefix=/usr --enable-libmp3lame --enable-libvorbis --enable-libxvid --enable-libx264 --enable-libvpx --enable-libtheora --enable-libgsm --enable-libspeex --enable-postproc --enable-shared --enable-x11grab --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libschroedinger --enable-libopenjpeg --enable-librtmp --enable-libpulse --enable-gpl --enable-version3 --enable-runtime-cpudetect --disable-debug --disable-static
libavutil 51. 35.100/51. 35.100
libavcodec 53. 61.100/53. 61.100
libavformat 53. 32.100/53. 32.100
libavdevice 53. 4.100/53. 4.100
libavfilter 2. 61.100/2. 61.100
libswscale 2. 1.100/2. 1.100
libswresample 0. 6.100/0. 6.100
libpostproc 52. 0.100/52. 0.100
코드를 컴파일하고 gdb를 실행하여 전체 backtrace를 인쇄하려고 시도하십시오. – Mine