gcov 는 사용하지 않는 함수를 찾는데 유용한 유틸리티 이다.
이녀석을 사용하기 위해서는 컴파일시 -fprofile-arcs -ftest-coverage 두개의 옵션을 줘야 하는데
gcc 문서를 보니 아래와 같이 --coverage 하나만 주어도 무방할 것으로 보인다.(2010.01.24 추가 : --coverage만 해도 된다)
위의 옵션을 주고 컴파일을 하면, [파일명.gcno] 라는 파일이 생성되고,
파일을 실행하면 [파일명.gcda] 라는 파일이 생성된다. gcov [소스파일] 을 입력하면 분석을 한다.
-fprofile-arcs
Add code so that program flow arcs are instrumented. During execution
the program records how many times each branch and call is executed and
how many times it is taken or returns. When the compiled program exits
it saves this data to a file called auxname.gcda for each source file.
The data may be used for profile-directed optimizations
(-fbranch-probabilities), or for test coverage analysis
(-ftest-coverage). Each object file's auxname is generated from the
name of the output file, if explicitly specified and it is not the
final executable, otherwise it is the basename of the source file. In
both cases any suffix is removed (e.g. foo.gcda for input file
dir/foo.c, or dir/foo.gcda for output file specified as -o dir/foo.o).
--coverage
This option is used to compile and link code instrumented for coverage analysis. The option is a synonym for -fprofile-arcs -ftest-coverage (when compiling) and -lgcov (when linking). See the documentation for those options for more details.
-ftest-coverage
Produce a notes file that the gcov code-coverage utility can use to
show program coverage. Each source file's note file is called
auxname.gcno. Refer to the -fprofile-arcs option above for a
description of auxname and instructions on how to generate test
coverage data. Coverage data will match the source files more closely,
if you do not optimize.
프로파일링은 어떤 함수가 몇번이나 불려지고(call), 누가 이 함수를 부르는지(call tree)
그리고 어떤 함수가 실행하는데 오래걸리는지를 분석하는 방법이다.
일반적으로 -pg 옵션을 주고 컴파일 한뒤, 한번 실행하면 프로파일링 파일이 생성된다.(정상종료 되어야 생성됨)
프로그램 실행이후에는 gmon.out 파일이 생성되고, 이 파일을 이용하여 분석한다.
-p
Generate extra code to write profile information suitable for the analysis program prof. You must use this option when compiling the source files you want data about, and you must also use it when linking.
-pg
Generate extra code to write profile information suitable for the analysis program gprof. You must use this option when compiling the source files you want data about, and you must also use it when linking.
우여곡절끝에 VLC를 컴파일 해서 samr / H.263 코덱으로 접속을 해도 에러는 나지 않도록 했는데..
RTSP 10초 timeout으로 플레이 까지는 하지 못한다.
도대체 VLC로 유튜브 플레이한 사람은.. 용자인가 -ㅁ-?
./configure --help
Input plugins:
--with-live555-tree=PATH live.com tree for static linking
--with-dv-raw1394=PATH libraw1394 headers and libraries
--with-dv-raw1394=PATH libraw1394 tree for static linking
--with-dv-avc1394=PATH libavc1394 headers and libraries
--with-dv-avc1394=PATH libavc1394 tree for static linking
--with-dvdread=PATH libdvdread headers and libraries
--with-dvdread-tree=PATH libdvdread tree for static linking
--with-dvdnav-config-path=PATH dvdnav-config path (default search in \$PATH)
--with-opencv-tree=PATH opencv tree for linking
--with-dvbpsi=PATH libdvbpsi headers and libraries
--with-dvbpsi-tree=PATH libdvbpsi tree for static linking
--with-v4l=PATH path to a v4l-enabled kernel tree
--with-v4l2=PATH path to a v4l2-enabled kernel tree
--with-videodev2=FILE Location of videodev2.h file (default /usr/include/linux/videodev2.h)
--with-dvb=PATH path to a dvb- and v4l2-enabled kernel tree
--with-ogg-tree=PATH ogg tree for static linking
--with-mod-tree=PATH mod tree for static linking
--with-gme-tree=PATH gme tree for static linking
Codec plugins:
--with-mad=PATH path to libmad
--with-mad-tree=PATH mad tree for static linking
--with-faad-tree=PATH faad tree for static linking
--with-twolame-tree=PATH twolame tree for static linking
--with-a52=PATH a52 headers and libraries
--with-a52-tree=PATH a52dec tree for static linking
--with-a52-fixed specify if liba52 has been compiled with fixed point support
--with-dca-tree=PATH libdca tree for static linking
--with-flac-tree=PATH flac tree for static linking
--with-libmpeg2-tree=PATH libmpeg2 tree for static linking
--with-vorbis-tree=PATH vorbis tree for static linking
--with-speex-tree=PATH speex tree for static linking
--with-tarkin-tree=PATH tarkin tree for static linking --with-x264-tree=PATH x264 tree for static linking
Video plugins:
--with-x use the X Window System
--with-sdl-config-path=PATH sdl-config path (default search in \$PATH)
--with-sdl-prefix=PATH path to libsdl (needed for cross-compiling),
e.g use as:
--with-sdl-prefix=/usr/local/arm/2.95.3/arm-linux/usr)
--with-qte=PATH Qt Embedded headers and libraries
--with-directx=PATH Win32 DirectX headers
--with-directfb=PATH path to DirectFB headers and libraries
--with-ggi=PATH path to libggi
--with-caca-config-path=PATH caca-config path (default search in \$PATH)
vlc의 트리구조는 다음과 같은데
vlc-1.0.4
|-- autotools
|-- bin
|-- compat
|-- doc
|-- extras
|-- include
|-- libs
|-- m4
|-- modules
|-- po
|-- projects
|-- share
|-- src
`-- test
vlc/extras 에 plugin들을 다운로드 한 다음
./configure --with-x264=tree=./extras/x264
이런식으로 설정해주면 하위까지 같이 컴파일하게 된다.
문제는, samr은 이전에 설정해 준, opencore-amr 쪽에서 알아서 samr 코덱이 들어간듯.
이건 어떻게 분리해서 넣어야 하나..
아무튼, youtube + RTSP로 검색하다보니, xHTML이 빠져서 그런거 같은 느낌이 강하게 든다..
도대체 이넘은 또 어떻게 산을 넘어가야 하나?
YouTube launched its mobile site, YouTube Mobile on 15 June 2007. It is based on xHTML and uses 3GP videos with H263/AMR codec and RTSP streaming. It is available via a web interface at m.youtube.com or via YouTube's Mobile Java Application.
libopencore-amrnb 와 libopencore-amrwb 를 사용하려면 version3로 라이센스를 바꾸어야 한다.
(upgrade (L)GPL to version 3)
$ ./configure --help
Usage: configure [options]
Options: [defaults in brackets after descriptions]
Standard options:
--help print this message
--logfile=FILE log tests and output to FILE [config.err]
--disable-logging do not log configure debug information
--prefix=PREFIX install in PREFIX []
--bindir=DIR install binaries in DIR [PREFIX/bin]
--datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]
--libdir=DIR install libs in DIR [PREFIX/lib]
--shlibdir=DIR install shared libs in DIR [PREFIX/lib]
--incdir=DIR install includes in DIR [PREFIX/include]
--mandir=DIR install man page in DIR [PREFIX/share/man]
Configuration options:
--disable-static do not build static libraries [no]
--enable-shared build shared libraries [no]
--enable-gpl allow use of GPL code, the resulting libs and binaries will be under GPL [no] --enable-version3 upgrade (L)GPL to version 3 [no]
--enable-nonfree allow use of nonfree code, the resulting libs and binaries will be unredistributable [no]
--disable-doc do not build documentation
--disable-ffmpeg disable ffmpeg build
--disable-ffplay disable ffplay build
--disable-ffserver disable ffserver build
--enable-postproc enable GPLed postprocessing support [no]
--enable-avfilter video filter support [no]
--enable-avfilter-lavf video filters dependent on avformat [no]
--enable-beosthreads use BeOS threads [no]
--enable-os2threads use OS/2 threads [no]
--enable-pthreads use pthreads [no]
--enable-w32threads use Win32 threads [no]
--enable-x11grab enable X11 grabbing [no]
--disable-network disable network support [no]
--disable-ipv6 disable IPv6 support [no]
--disable-mpegaudio-hp faster (but less accurate) MPEG audio decoding [no]
--enable-gray enable full grayscale support (slower color)
--disable-swscale-alpha disable alpha channel support in swscale
--disable-fastdiv disable table-based division
--enable-small optimize for size instead of speed
--disable-aandct disable AAN DCT code
--disable-fft disable FFT code
--disable-golomb disable Golomb code
--disable-lpc disable LPC code
--disable-mdct disable MDCT code
--disable-rdft disable RDFT code
--disable-vaapi disable VAAPI code
--disable-vdpau disable VDPAU code
--enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
--enable-hardcoded-tables use hardcoded tables instead of runtime generation
--enable-memalign-hack emulate memalign, interferes with memory debuggers
--enable-beos-netserver enable BeOS netserver
--disable-encoder=NAME disable encoder NAME
--enable-encoder=NAME enable encoder NAME
--disable-encoders disable all encoders
--disable-decoder=NAME disable decoder NAME
--enable-decoder=NAME enable decoder NAME
--disable-decoders disable all decoders
--disable-hwaccel=NAME disable hwaccel NAME
--enable-hwaccel=NAME enable hwaccel NAME
--disable-hwaccels disable all hwaccels
--disable-muxer=NAME disable muxer NAME
--enable-muxer=NAME enable muxer NAME
--disable-muxers disable all muxers
--disable-demuxer=NAME disable demuxer NAME
--enable-demuxer=NAME enable demuxer NAME
--disable-demuxers disable all demuxers
--enable-parser=NAME enable parser NAME
--disable-parser=NAME disable parser NAME
--disable-parsers disable all parsers
--enable-bsf=NAME enable bitstream filter NAME
--disable-bsf=NAME disable bitstream filter NAME
--disable-bsfs disable all bitstream filters
--enable-protocol=NAME enable protocol NAME
--disable-protocol=NAME disable protocol NAME
--disable-protocols disable all protocols
--disable-indev=NAME disable input device NAME
--disable-outdev=NAME disable output device NAME
--disable-indevs disable input devices
--disable-outdevs disable output devices
--disable-devices disable all devices
--enable-filter=NAME enable filter NAME
--disable-filter=NAME disable filter NAME
--disable-filters disable all filters
--list-decoders show all available decoders
--list-encoders show all available encoders
--list-hwaccels show all available hardware accelerators
--list-muxers show all available muxers
--list-demuxers show all available demuxers
--list-parsers show all available parsers
--list-protocols show all available protocols
--list-bsfs show all available bitstream filters
--list-indevs show all available input devices
--list-outdevs show all available output devices
--list-filters show all available filters
External library support:
--enable-avisynth enable reading of AVISynth script files [no]
--enable-bzlib enable bzlib [autodetect] --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
--enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
--enable-libdc1394 enable IIDC-1394 grabbing using libdc1394 and libraw1394 [no]
--enable-libdirac enable Dirac support via libdirac [no]
--enable-libfaac enable FAAC support via libfaac [no]
--enable-libfaad enable FAAD support via libfaad [no]
--enable-libfaadbin open libfaad.so.0 at runtime [no]
--enable-libgsm enable GSM support via libgsm [no]
--enable-libmp3lame enable MP3 encoding via libmp3lame [no]
--enable-libnut enable NUT (de)muxing via libnut, native (de)muxer exists [no]
--enable-libopenjpeg enable JPEG 2000 decoding via OpenJPEG [no]
--enable-libschroedinger enable Dirac support via libschroedinger [no]
--enable-libspeex enable Speex decoding via libspeex [no]
--enable-libtheora enable Theora encoding via libtheora [no]
--enable-libvorbis enable Vorbis encoding via libvorbis, native implementation exists [no]
--enable-libx264 enable H.264 encoding via x264 [no]
--enable-libxvid enable Xvid encoding via xvidcore, native MPEG-4/Xvid encoder exists [no]
--enable-mlib enable Sun medialib [no]
--enable-zlib enable zlib [autodetect]
Advanced options (experts only):
--source-path=PATH path to source code [/home/morpheuz/다운로드/ffmpeg]
--cross-prefix=PREFIX use PREFIX for compilation tools []
--enable-cross-compile assume a cross-compiler is used
--sysroot=PATH root of cross-build tree
--sysinclude=PATH location of cross-build system headers
--target-os=OS compiler targets OS [linux]
--target-exec=CMD command to run executables on target
--target-path=DIR path to view of build directory on target
--nm=NM use nm tool
--as=AS use assembler AS []
--cc=CC use C compiler CC [gcc]
--ld=LD use linker LD
--host-cc=HOSTCC use host C compiler HOSTCC
--host-cflags=HCFLAGS use HCFLAGS when compiling for host
--host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
--host-libs=HLIBS use libs HLIBS when linking for host
--extra-cflags=ECFLAGS add ECFLAGS to CFLAGS []
--extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS []
--extra-libs=ELIBS add ELIBS []
--extra-version=STRING version string suffix []
--build-suffix=SUFFIX library name suffix []
--arch=ARCH select architecture [i686]
--cpu=CPU select the minimum required CPU (affects instruction selection, may crash on older CPUs)
--enable-powerpc-perf enable performance report on PPC (requires enabling PMC)
--disable-altivec disable AltiVec optimizations
--disable-amd3dnow disable 3DNow! optimizations
--disable-amd3dnowext disable 3DNow! extended optimizations
--disable-mmx disable MMX optimizations
--disable-mmx2 disable MMX2 optimizations
--disable-sse disable SSE optimizations
--disable-ssse3 disable SSSE3 optimizations
--disable-armv5te disable armv5te optimizations
--disable-armv6 disable armv6 optimizations
--disable-armv6t2 disable armv6t2 optimizations
--disable-armvfp disable ARM VFP optimizations
--disable-iwmmxt disable iwmmxt optimizations
--disable-mmi disable MMI optimizations
--disable-neon disable neon optimizations
--disable-vis disable VIS optimizations
--disable-yasm disable use of yasm assembler
--enable-pic build position-independent code
Developer options (useful when working on FFmpeg itself):
--disable-debug disable debugging symbols
--enable-debug=LEVEL set the debug level []
--enable-gprof enable profiling with gprof []
--disable-optimizations disable compiler optimizations
--enable-extra-warnings enable more compiler warnings
--disable-stripping disable stripping of executables and shared libraries
NOTE: Object files are built at the place where configure is launched.
머.. 그 다음에는 make/make install
$ ffmpeg --help | grep amr
FFmpeg version SVN-r21186, Copyright (c) 2000-2010 Fabrice Bellard, et al.
built on Jan 14 2010 00:21:22 with gcc 4.4.1
configuration: --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3
libavutil 50. 7. 0 / 50. 7. 0
libavcodec 52.47. 0 / 52.47. 0
libavformat 52.46. 0 / 52.46. 0
libavdevice 52. 2. 0 / 52. 2. 0
libswscale 0. 8. 0 / 0. 8. 0