COSMETICS: Remove all trailing whitespace.
authorDiego Biurrun <diego@biurrun.de>
Sat, 17 Dec 2005 18:14:38 +0000 (18:14 +0000)
committerDiego Biurrun <diego@biurrun.de>
Sat, 17 Dec 2005 18:14:38 +0000 (18:14 +0000)
Originally committed as revision 4749 to svn://svn.ffmpeg.org/ffmpeg/trunk

340 files changed:
COPYING
Changelog
Doxyfile
INSTALL
Makefile
README
berrno.h
build_avopt
cmdutils.c
configure
cws2fws.c
doc/TODO
doc/faq.texi
doc/ffmpeg-doc.texi
doc/ffmpeg_powerpc_performance_evaluation_howto.txt
doc/ffplay-doc.texi
doc/ffserver-doc.texi
doc/ffserver.conf
doc/hooks.texi
doc/texi2pod.pl
ffmpeg.c
ffplay.c
ffserver.c
libavcodec/4xm.c
libavcodec/8bps.c
libavcodec/Makefile
libavcodec/ac3.h
libavcodec/ac3dec.c
libavcodec/ac3enc.c
libavcodec/ac3tab.h
libavcodec/adpcm.c
libavcodec/adx.c
libavcodec/alac.c
libavcodec/allcodecs.c
libavcodec/alpha/asm.h
libavcodec/alpha/dsputil_alpha.c
libavcodec/alpha/dsputil_alpha_asm.S
libavcodec/alpha/motion_est_alpha.c
libavcodec/alpha/motion_est_mvi_asm.S
libavcodec/alpha/mpegvideo_alpha.c
libavcodec/alpha/simple_idct_alpha.c
libavcodec/amr.c
libavcodec/apiexample.c
libavcodec/armv4l/dsputil_arm_s.S
libavcodec/armv4l/jrevdct_arm.S
libavcodec/armv4l/simple_idct_arm.S
libavcodec/asv1.c
libavcodec/avcodec.h
libavcodec/beosthread.c
libavcodec/bitstream.c
libavcodec/bitstream.h
libavcodec/bmp.c
libavcodec/cabac.c
libavcodec/cabac.h
libavcodec/cinepak.c
libavcodec/cljr.c
libavcodec/cyuv.c
libavcodec/dct-test.c
libavcodec/dpcm.c
libavcodec/dsputil.c
libavcodec/dsputil.h
libavcodec/dtsdec.c
libavcodec/dv.c
libavcodec/dvbsub.c
libavcodec/dvbsubdec.c
libavcodec/dvdata.h
libavcodec/dvdsub.c
libavcodec/dvdsubenc.c
libavcodec/error_resilience.c
libavcodec/eval.c
libavcodec/faac.c
libavcodec/faad.c
libavcodec/faandct.c
libavcodec/faandct.h
libavcodec/fdctref.c
libavcodec/fft-test.c
libavcodec/fft.c
libavcodec/ffv1.c
libavcodec/flac.c
libavcodec/flicvideo.c
libavcodec/fraps.c
libavcodec/g726.c
libavcodec/golomb.c
libavcodec/golomb.h
libavcodec/h261.c
libavcodec/h263.c
libavcodec/h263data.h
libavcodec/h263dec.c
libavcodec/h264.c
libavcodec/h264data.h
libavcodec/h264idct.c
libavcodec/huffyuv.c
libavcodec/i386/cputest.c
libavcodec/i386/dsputil_mmx.c
libavcodec/i386/dsputil_mmx_avg.h
libavcodec/i386/dsputil_mmx_rnd.h
libavcodec/i386/fdct_mmx.c
libavcodec/i386/fft_sse.c
libavcodec/i386/h264dsp_mmx.c
libavcodec/i386/idct_mmx_xvid.c
libavcodec/i386/motion_est_mmx.c
libavcodec/i386/mpegvideo_mmx.c
libavcodec/i386/mpegvideo_mmx_template.c
libavcodec/i386/simple_idct_mmx.c
libavcodec/i386/vp3dsp_mmx.c
libavcodec/i386/vp3dsp_sse2.c
libavcodec/imgconvert.c
libavcodec/imgconvert_template.h
libavcodec/imgresample.c
libavcodec/indeo2.c
libavcodec/indeo2data.h
libavcodec/indeo3.c
libavcodec/indeo3data.h
libavcodec/jfdctfst.c
libavcodec/jfdctint.c
libavcodec/jrevdct.c
libavcodec/lcl.c
libavcodec/liba52/bitstream.c
libavcodec/liba52/bitstream.h
libavcodec/liba52/crc.c
libavcodec/liba52/imdct.c
libavcodec/liba52/parse.c
libavcodec/liba52/resample.c
libavcodec/liba52/resample_mmx.c
libavcodec/libgsm.c
libavcodec/libpostproc/postprocess.c
libavcodec/libpostproc/postprocess.h
libavcodec/libpostproc/postprocess_altivec_template.c
libavcodec/libpostproc/postprocess_internal.h
libavcodec/libpostproc/postprocess_template.c
libavcodec/loco.c
libavcodec/mace.c
libavcodec/mdct.c
libavcodec/mdec.c
libavcodec/mem.c
libavcodec/mjpeg.c
libavcodec/mlib/dsputil_mlib.c
libavcodec/motion_est.c
libavcodec/motion_est_template.c
libavcodec/motion_test.c
libavcodec/mp3lameaudio.c
libavcodec/mpeg12.c
libavcodec/mpeg12data.h
libavcodec/mpeg4data.h
libavcodec/mpegaudio.c
libavcodec/mpegaudio.h
libavcodec/mpegaudiodec.c
libavcodec/mpegaudiodectab.h
libavcodec/mpegaudiotab.h
libavcodec/mpegvideo.c
libavcodec/mpegvideo.h
libavcodec/msmpeg4.c
libavcodec/msmpeg4data.h
libavcodec/msvideo1.c
libavcodec/oggvorbis.c
libavcodec/opt.c
libavcodec/opt.h
libavcodec/parser.c
libavcodec/pcm.c
libavcodec/png.c
libavcodec/pnm.c
libavcodec/ppc/dsputil_altivec.c
libavcodec/ppc/dsputil_h264_altivec.c
libavcodec/ppc/dsputil_h264_template_altivec.c
libavcodec/ppc/dsputil_ppc.c
libavcodec/ppc/fft_altivec.c
libavcodec/ppc/gcc_fixes.h
libavcodec/ppc/gmc_altivec.c
libavcodec/ppc/idct_altivec.c
libavcodec/ppc/mpegvideo_altivec.c
libavcodec/ppc/mpegvideo_ppc.c
libavcodec/ps2/dsputil_mmi.c
libavcodec/ps2/idct_mmi.c
libavcodec/ps2/mpegvideo_mmi.c
libavcodec/pthread.c
libavcodec/qdm2.c
libavcodec/qdm2data.h
libavcodec/qdrw.c
libavcodec/qpeg.c
libavcodec/ra144.c
libavcodec/ra144.h
libavcodec/ra288.c
libavcodec/rangecoder.c
libavcodec/rangecoder.h
libavcodec/ratecontrol.c
libavcodec/raw.c
libavcodec/resample.c
libavcodec/resample2.c
libavcodec/roqvideo.c
libavcodec/rpza.c
libavcodec/rv10.c
libavcodec/sh4/dsputil_align.c
libavcodec/sh4/dsputil_sh4.c
libavcodec/sh4/idct_sh4.c
libavcodec/sh4/qpel.c
libavcodec/simple_idct.c
libavcodec/simple_idct.h
libavcodec/smc.c
libavcodec/snow.c
libavcodec/sonic.c
libavcodec/sp5x.h
libavcodec/sparc/dsputil_vis.c
libavcodec/svq1.c
libavcodec/svq1_cb.h
libavcodec/svq1_vlc.h
libavcodec/svq3.c
libavcodec/truemotion1.c
libavcodec/truemotion2.c
libavcodec/tscc.c
libavcodec/ulti.c
libavcodec/utils.c
libavcodec/vc9.c
libavcodec/vc9data.h
libavcodec/vcr1.c
libavcodec/vmdav.c
libavcodec/vorbis.c
libavcodec/vp3.c
libavcodec/vp3data.h
libavcodec/vp3dsp.c
libavcodec/vqavideo.c
libavcodec/w32thread.c
libavcodec/wmadata.h
libavcodec/wmadec.c
libavcodec/wmv2.c
libavcodec/wnv1.c
libavcodec/ws-snd1.c
libavcodec/xan.c
libavcodec/xl.c
libavcodec/xvidff.c
libavcodec/xvmcvideo.c
libavformat/4xm.c
libavformat/Makefile
libavformat/allformats.c
libavformat/amr.c
libavformat/asf-enc.c
libavformat/asf.c
libavformat/asf.h
libavformat/au.c
libavformat/audio.c
libavformat/avformat.h
libavformat/avi.h
libavformat/avidec.c
libavformat/avienc.c
libavformat/avio.c
libavformat/avio.h
libavformat/aviobuf.c
libavformat/barpainet.c
libavformat/crc.c
libavformat/cutils.c
libavformat/dc1394.c
libavformat/dv.c
libavformat/dv.h
libavformat/dv1394.c
libavformat/dv1394.h
libavformat/electronicarts.c
libavformat/ffm.c
libavformat/file.c
libavformat/flic.c
libavformat/flvdec.c
libavformat/flvenc.c
libavformat/framehook.h
libavformat/gif.c
libavformat/gifdec.c
libavformat/grab.c
libavformat/grab_bktr.c
libavformat/http.c
libavformat/idcin.c
libavformat/idroq.c
libavformat/img.c
libavformat/img2.c
libavformat/ipmovie.c
libavformat/jpeg.c
libavformat/matroska.c
libavformat/mmf.c
libavformat/mov.c
libavformat/movenc.c
libavformat/mp3.c
libavformat/mpeg.c
libavformat/mpegts.c
libavformat/mpegts.h
libavformat/mpegtsenc.c
libavformat/nsvdec.c
libavformat/nut.c
libavformat/ogg.c
libavformat/ogg2.c
libavformat/oggparseflac.c
libavformat/oggparsetheora.c
libavformat/oggparsevorbis.c
libavformat/os_support.c
libavformat/png.c
libavformat/pnm.c
libavformat/psxstr.c
libavformat/qtpalette.h
libavformat/raw.c
libavformat/rm.c
libavformat/rtp.c
libavformat/rtp.h
libavformat/rtpproto.c
libavformat/rtsp.c
libavformat/rtsp.h
libavformat/segafilm.c
libavformat/sgi.c
libavformat/sierravmd.c
libavformat/sol.c
libavformat/swf.c
libavformat/tcp.c
libavformat/udp.c
libavformat/utils.c
libavformat/wav.c
libavformat/wc3movie.c
libavformat/westwood.c
libavformat/yuv.c
libavformat/yuv4mpeg.c
libavutil/Makefile
libavutil/bswap.h
libavutil/common.h
libavutil/integer.c
libavutil/integer.h
libavutil/intfloat_readwrite.c
libavutil/mathematics.c
libavutil/rational.c
libavutil/rational.h
output_example.c
pktdumper.c
tests/Makefile
tests/audiogen.c
tests/regression.sh
tests/rotozoom.c
tests/server-regression.sh
tests/test.conf
tests/tiny_psnr.c
tests/videogen.c
vhook/Makefile
vhook/drawtext.c
vhook/fish.c
vhook/imlib2.c
vhook/null.c
vhook/ppm.c
vhook/watermark.c
xvmc_render.h

diff --git a/COPYING b/COPYING
index 223ede7..7c8d84f 100644 (file)
--- a/COPYING
+++ b/COPYING
@@ -146,7 +146,7 @@ such a program is covered only if its contents constitute a work based
 on the Library (independent of the use of the Library in a tool for
 writing it).  Whether that is true depends on what the Library does
 and what the program that uses the Library does.
-  
+
   1. You may copy and distribute verbatim copies of the Library's
 complete source code as you receive it, in any medium, provided that
 you conspicuously and appropriately publish on each copy an
index b616c18..346d812 100644 (file)
--- a/Changelog
+++ b/Changelog
@@ -11,7 +11,7 @@ version <next>
 - Nullsoft Video (NSV) file demuxer
 - Shorten audio decoder
 - LOCO video decoder
-- Apple Lossless Audio Codec (ALAC) decoder 
+- Apple Lossless Audio Codec (ALAC) decoder
 - Winnov WNV1 video decoder
 - Autodesk Animator Studio Codec (AASC) decoder
 - Indeo 2 video decoder
index 8ed314b..73b4e99 100644 (file)
--- a/Doxyfile
+++ b/Doxyfile
 # General configuration options
 #---------------------------------------------------------------------------
 
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
 # by quotes) that should identify the project.
 
 PROJECT_NAME           = ffmpeg
 
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
-# This could be handy for archiving the generated documentation or 
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
 # if some version control system is used.
 
-PROJECT_NUMBER         = 
+PROJECT_NUMBER         =
 
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
-# base path where the generated documentation will be put. 
-# If a relative path is entered, it will be relative to the location 
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
 # where doxygen was started. If left blank the current directory will be used.
 
 OUTPUT_DIRECTORY       = doxy
 
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
-# documentation generated by doxygen is written. Doxygen will use this 
-# information to generate all constant output in the proper language. 
-# The default language is English, other supported languages are: 
-# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, 
-# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en 
-# (Japanese with english messages), Korean, Norwegian, Polish, Portuguese, 
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch,
+# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en
+# (Japanese with english messages), Korean, Norwegian, Polish, Portuguese,
 # Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish and Ukrainian.
 
 OUTPUT_LANGUAGE        = English
 
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
-# documentation are documented, even if no documentation was available. 
-# Private class members and static file members will be hidden unless 
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
 # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
 
 EXTRACT_ALL            = YES
 
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
 # will be included in the documentation.
 
 EXTRACT_PRIVATE        = YES
 
-# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
 # will be included in the documentation.
 
 EXTRACT_STATIC         = YES
 
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
-# defined locally in source files will be included in the documentation. 
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
 # If set to NO only classes defined in header files are included.
 
 EXTRACT_LOCAL_CLASSES  = YES
 
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
-# undocumented members of documented classes, files or namespaces. 
-# If set to NO (the default) these members will be included in the 
-# various overviews, but no documentation section is generated. 
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
 # This option has no effect if EXTRACT_ALL is enabled.
 
 HIDE_UNDOC_MEMBERS     = NO
 
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
-# undocumented classes that are normally visible in the class hierarchy. 
-# If set to NO (the default) these class will be included in the various 
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these class will be included in the various
 # overviews. This option has no effect if EXTRACT_ALL is enabled.
 
 HIDE_UNDOC_CLASSES     = NO
 
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
-# friend (class|struct|union) declarations. 
-# If set to NO (the default) these declarations will be included in the 
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
 # documentation.
 
 HIDE_FRIEND_COMPOUNDS  = NO
 
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
-# documentation blocks found inside the body of a function. 
-# If set to NO (the default) these blocks will be appended to the 
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
 # function's detailed documentation block.
 
 HIDE_IN_BODY_DOCS      = NO
 
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
-# include brief member descriptions after the members that are listed in 
-# the file and class documentation (similar to JavaDoc). 
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
 # Set to NO to disable this.
 
 BRIEF_MEMBER_DESC      = YES
 
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
-# the brief description of a member or function before the detailed description. 
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
 # brief descriptions will be completely suppressed.
 
 REPEAT_BRIEF           = YES
 
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
-# Doxygen will generate a detailed section even if there is only a brief 
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
 # description.
 
 ALWAYS_DETAILED_SEC    = NO
 
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited 
-# members of a class in the documentation of that class as if those members were 
-# ordinary class members. Constructors, destructors and assignment operators of 
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited
+# members of a class in the documentation of that class as if those members were
+# ordinary class members. Constructors, destructors and assignment operators of
 # the base classes will not be shown.
 
 INLINE_INHERITED_MEMB  = NO
 
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
-# path before files name in the file list and in the header files. If set 
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
 # to NO the shortest path that makes the file name unique will be used.
 
 FULL_PATH_NAMES        = YES
 
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
-# can be used to strip a user defined part of the path. Stripping is 
-# only done if one of the specified strings matches the left-hand part of 
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
 # the path. It is allowed to use relative paths in the argument list.
 
 STRIP_FROM_PATH        = .
 
-# The INTERNAL_DOCS tag determines if documentation 
-# that is typed after a \internal command is included. If the tag is set 
-# to NO (the default) then the documentation will be excluded. 
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
 # Set it to YES to include the internal documentation.
 
 INTERNAL_DOCS          = NO
 
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
-# file names in lower case letters. If set to YES upper case letters are also 
-# allowed. This is useful if you have classes or files whose names only differ 
-# in case and if your file system supports case sensitive file names. Windows 
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower case letters. If set to YES upper case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
 # users are adviced to set this option to NO.
 
 CASE_SENSE_NAMES       = YES
 
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
-# (but less readable) file names. This can be useful is your file systems 
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
 # doesn't support long names like on DOS, Mac, or CD-ROM.
 
 SHORT_NAMES            = NO
 
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
-# will show members with their full class and namespace scopes in the 
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
 # documentation. If set to YES the scope will be hidden.
 
 HIDE_SCOPE_NAMES       = NO
 
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
-# will generate a verbatim copy of the header file for each class for 
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
 # which an include is specified. Set to NO to disable this.
 
 VERBATIM_HEADERS       = YES
 
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
-# will put list of the files that are included by a file in the documentation 
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put list of the files that are included by a file in the documentation
 # of that file.
 
 SHOW_INCLUDE_FILES     = YES
 
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
-# will interpret the first line (until the first dot) of a JavaDoc-style 
-# comment as the brief description. If set to NO, the JavaDoc 
-# comments  will behave just like the Qt-style comments (thus requiring an 
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments  will behave just like the Qt-style comments (thus requiring an
 # explict @brief command for a brief description.
 
 JAVADOC_AUTOBRIEF      = YES
 
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
-# comments) as a brief description. This used to be the default behaviour. 
-# The new default is to treat a multi-line C++ comment block as a detailed 
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
 # description. Set this tag to YES if you prefer the old behaviour instead.
 
 MULTILINE_CPP_IS_BRIEF = NO
 
-# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen
 # will output the detailed description near the top, like JavaDoc.
-# If set to NO, the detailed description appears after the member 
+# If set to NO, the detailed description appears after the member
 # documentation.
 
 DETAILS_AT_TOP         = NO
 
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
-# member inherits the documentation from any documented member that it 
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
 # reimplements.
 
 INHERIT_DOCS           = YES
 
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
 # is inserted in the documentation for inline members.
 
 INLINE_INFO            = YES
 
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
-# will sort the (detailed) documentation of file and class members 
-# alphabetically by member name. If set to NO the members will appear in 
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
 # declaration order.
 
 SORT_MEMBER_DOCS       = YES
 
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
-# tag is set to YES, then doxygen will reuse the documentation of the first 
-# member in the group (if any) for the other members of the group. By default 
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
 # all members of a group must be documented explicitly.
 
 DISTRIBUTE_GROUP_DOC   = NO
 
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
 # Doxygen uses this value to replace tabs by spaces in code fragments.
 
 TAB_SIZE               = 8
 
-# The GENERATE_TODOLIST tag can be used to enable (YES) or 
-# disable (NO) the todo list. This list is created by putting \todo 
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
 # commands in the documentation.
 
 GENERATE_TODOLIST      = YES
 
-# The GENERATE_TESTLIST tag can be used to enable (YES) or 
-# disable (NO) the test list. This list is created by putting \test 
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
 # commands in the documentation.
 
 GENERATE_TESTLIST      = YES
 
-# The GENERATE_BUGLIST tag can be used to enable (YES) or 
-# disable (NO) the bug list. This list is created by putting \bug 
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
 # commands in the documentation.
 
 GENERATE_BUGLIST       = YES
 
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
-# disable (NO) the deprecated list. This list is created by putting 
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
 # \deprecated commands in the documentation.
 
 GENERATE_DEPRECATEDLIST= YES
 
-# This tag can be used to specify a number of aliases that acts 
-# as commands in the documentation. An alias has the form "name=value". 
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
-# put the command \sideeffect (or @sideeffect) in the documentation, which 
-# will result in a user defined paragraph with heading "Side Effects:". 
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user defined paragraph with heading "Side Effects:".
 # You can put \n's in the value part of an alias to insert newlines.
 
-ALIASES                = 
+ALIASES                =
 
-# The ENABLED_SECTIONS tag can be used to enable conditional 
+# The ENABLED_SECTIONS tag can be used to enable conditional
 # documentation sections, marked by \if sectionname ... \endif.
 
-ENABLED_SECTIONS       = 
+ENABLED_SECTIONS       =
 
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
-# the initial value of a variable or define consist of for it to appear in 
-# the documentation. If the initializer consists of more lines than specified 
-# here it will be hidden. Use a value of 0 to hide initializers completely. 
-# The appearance of the initializer of individual variables and defines in the 
-# documentation can be controlled using \showinitializer or \hideinitializer 
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consist of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
 # command in the documentation regardless of this setting.
 
 MAX_INITIALIZER_LINES  = 30
 
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources 
-# only. Doxygen will then generate output that is more tailored for C. 
-# For instance some of the names that are used will be different. The list 
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C.
+# For instance some of the names that are used will be different. The list
 # of all members will be omitted, etc.
 
 OPTIMIZE_OUTPUT_FOR_C  = YES
 
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources 
-# only. Doxygen will then generate output that is more tailored for Java. 
-# For instance namespaces will be presented as packages, qualified scopes 
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources
+# only. Doxygen will then generate output that is more tailored for Java.
+# For instance namespaces will be presented as packages, qualified scopes
 # will look different, etc.
 
 OPTIMIZE_OUTPUT_JAVA   = NO
 
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
-# at the bottom of the documentation of classes and structs. If set to YES the 
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
 # list will mention the files that were used to generate the documentation.
 
 SHOW_USED_FILES        = YES
@@ -299,116 +299,116 @@ SHOW_USED_FILES        = YES
 # configuration options related to warning and progress messages
 #---------------------------------------------------------------------------
 
-# The QUIET tag can be used to turn on/off the messages that are generated 
+# The QUIET tag can be used to turn on/off the messages that are generated
 # by doxygen. Possible values are YES and NO. If left blank NO is used.
 
 QUIET                  = NO
 
-# The WARNINGS tag can be used to turn on/off the warning messages that are 
-# generated by doxygen. Possible values are YES and NO. If left blank 
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
 # NO is used.
 
 WARNINGS               = YES
 
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
 # automatically be disabled.
 
 WARN_IF_UNDOCUMENTED   = YES
 
-# The WARN_FORMAT tag determines the format of the warning messages that 
-# doxygen can produce. The string should contain the $file, $line, and $text 
-# tags, which will be replaced by the file and line number from which the 
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
 # warning originated and the warning text.
 
 WARN_FORMAT            = "$file:$line: $text"
 
-# The WARN_LOGFILE tag can be used to specify a file to which warning 
-# and error messages should be written. If left blank the output is written 
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
 # to stderr.
 
-WARN_LOGFILE           = 
+WARN_LOGFILE           =
 
 #---------------------------------------------------------------------------
 # configuration options related to the input files
 #---------------------------------------------------------------------------
 
-# The INPUT tag can be used to specify the files and/or directories that contain 
-# documented source files. You may enter file names like "myfile.cpp" or 
-# directories like "/usr/src/myproject". Separate the files or directories 
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
 # with spaces.
 
-INPUT                  = 
+INPUT                  =
 
-# If the value of the INPUT tag contains directories, you can use the 
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
-# and *.h) to filter out the source-files in the directories. If left 
-# blank the following patterns are tested: 
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp 
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
 # *.h++ *.idl *.odl
 
-FILE_PATTERNS          = 
+FILE_PATTERNS          =
 
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
-# should be searched for input files as well. Possible values are YES and NO. 
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
 # If left blank NO is used.
 
 RECURSIVE              = YES
 
-# The EXCLUDE tag can be used to specify files and/or directories that should 
-# excluded from the INPUT source files. This way you can easily exclude a 
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
 # subdirectory from a directory tree whose root is specified with the INPUT tag.
 
-EXCLUDE                = 
+EXCLUDE                =
 
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories 
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories
 # that are symbolic links (a Unix filesystem feature) are excluded from the input.
 
 EXCLUDE_SYMLINKS       = NO
 
-# If the value of the INPUT tag contains directories, you can use the 
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
 # certain files from those directories.
 
-EXCLUDE_PATTERNS       = 
+EXCLUDE_PATTERNS       =
 
-# The EXAMPLE_PATH tag can be used to specify one or more files or 
-# directories that contain example code fragments that are included (see 
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
 # the \include command).
 
-EXAMPLE_PATH           = 
+EXAMPLE_PATH           =
 
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
-# and *.h) to filter out the source-files in the directories. If left 
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
 # blank all files are included.
 
-EXAMPLE_PATTERNS       = 
+EXAMPLE_PATTERNS       =
 
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
-# searched for input files to be used with the \include or \dontinclude 
-# commands irrespective of the value of the RECURSIVE tag. 
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
 # Possible values are YES and NO. If left blank NO is used.
 
 EXAMPLE_RECURSIVE      = NO
 
-# The IMAGE_PATH tag can be used to specify one or more files or 
-# directories that contain image that are included in the documentation (see 
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
 # the \image command).
 
-IMAGE_PATH             = 
+IMAGE_PATH             =
 
-# The INPUT_FILTER tag can be used to specify a program that doxygen should 
-# invoke to filter for each input file. Doxygen will invoke the filter program 
-# by executing (via popen()) the command <filter> <input-file>, where <filter> 
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
-# input file. Doxygen will then use the output that the filter program writes 
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
 # to standard output.
 
-INPUT_FILTER           = 
+INPUT_FILTER           =
 
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
-# INPUT_FILTER) will be used to filter the input files when producing source 
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
 # files to browse (i.e. when SOURCE_BROWSER is set to YES).
 
 FILTER_SOURCE_FILES    = NO
@@ -417,30 +417,30 @@ FILTER_SOURCE_FILES    = NO
 # configuration options related to source browsing
 #---------------------------------------------------------------------------
 
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
 # be generated. Documented entities will be cross-referenced with these sources.
 
 SOURCE_BROWSER         = YES
 
-# Setting the INLINE_SOURCES tag to YES will include the body 
+# Setting the INLINE_SOURCES tag to YES will include the body
 # of functions and classes directly in the documentation.
 
 INLINE_SOURCES         = NO
 
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
-# doxygen to hide any special comment blocks from generated source code 
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
 # fragments. Normal C and C++ comments will always remain visible.
 
 STRIP_CODE_COMMENTS    = YES
 
-# If the REFERENCED_BY_RELATION tag is set to YES (the default) 
-# then for each documented function all documented 
+# If the REFERENCED_BY_RELATION tag is set to YES (the default)
+# then for each documented function all documented
 # functions referencing it will be listed.
 
 REFERENCED_BY_RELATION = YES
 
-# If the REFERENCES_RELATION tag is set to YES (the default) 
-# then for each documented function all documented entities 
+# If the REFERENCES_RELATION tag is set to YES (the default)
+# then for each documented function all documented entities
 # called/used by that function will be listed.
 
 REFERENCES_RELATION    = NO
@@ -449,132 +449,132 @@ REFERENCES_RELATION    = NO
 # configuration options related to the alphabetical class index
 #---------------------------------------------------------------------------
 
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
-# of all compounds will be generated. Enable this if the project 
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
 # contains a lot of classes, structs, unions or interfaces.
 
 ALPHABETICAL_INDEX     = YES
 
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
 # in which this list will be split (can be a number in the range [1..20])
 
 COLS_IN_ALPHA_INDEX    = 5
 
-# In case all classes in a project start with a common prefix, all 
-# classes will be put under the same header in the alphabetical index. 
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
 # should be ignored while generating the index headers.
 
-IGNORE_PREFIX          = 
+IGNORE_PREFIX          =
 
 #---------------------------------------------------------------------------
 # configuration options related to the HTML output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
 # generate HTML output.
 
 GENERATE_HTML          = YES
 
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
 # put in front of it. If left blank `html' will be used as the default path.
 
 HTML_OUTPUT            = html
 
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
 # doxygen will generate files with .html extension.
 
 HTML_FILE_EXTENSION    = .html
 
-# The HTML_HEADER tag can be used to specify a personal HTML header for 
-# each generated HTML page. If it is left blank doxygen will generate a 
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
 # standard header.
 
-HTML_HEADER            = 
+HTML_HEADER            =
 
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
-# each generated HTML page. If it is left blank doxygen will generate a 
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
 # standard footer.
 
-HTML_FOOTER            = 
+HTML_FOOTER            =
 
-# The HTML_STYLESHEET tag can be used to specify a user defined cascading 
-# style sheet that is used by each HTML page. It can be used to 
-# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# The HTML_STYLESHEET tag can be used to specify a user defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
 # will generate a default style sheet
 
-HTML_STYLESHEET        = 
+HTML_STYLESHEET        =
 
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
-# files or namespaces will be aligned in HTML using tables. If set to 
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
 # NO a bullet list will be used.
 
 HTML_ALIGN_MEMBERS     = YES
 
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
-# will be generated that can be used as input for tools like the 
-# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
 # of the generated HTML documentation.
 
 GENERATE_HTMLHELP      = NO
 
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
-# be used to specify the file name of the resulting .chm file. You 
-# can add a path in front of the file if the result should not be 
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
 # written to the html output dir.
 
-CHM_FILE               = 
+CHM_FILE               =
 
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
-# be used to specify the location (absolute path including file name) of 
-# the HTML help compiler (hhc.exe). If non empty doxygen will try to run 
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non empty doxygen will try to run
 # the html help compiler on the generated index.hhp.
 
-HHC_LOCATION           = 
+HHC_LOCATION           =
 
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
-# controls if a separate .chi index file is generated (YES) or that 
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
 # it should be included in the master .chm file (NO).
 
 GENERATE_CHI           = NO
 
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
-# controls whether a binary table of contents is generated (YES) or a 
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
 # normal table of contents (NO) in the .chm file.
 
 BINARY_TOC             = NO
 
-# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
 # to the contents of the Html help documentation and to the tree view.
 
 TOC_EXPAND             = NO
 
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
-# top of each HTML page. The value NO (the default) enables the index and 
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
 # the value YES disables it.
 
 DISABLE_INDEX          = NO
 
-# This tag can be used to set the number of enum values (range [1..20]) 
+# This tag can be used to set the number of enum values (range [1..20])
 # that doxygen will group on one line in the generated HTML documentation.
 
 ENUM_VALUES_PER_LINE   = 4
 
 # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
-# generated containing a tree-like index structure (just like the one that 
-# is generated for HTML Help). For this to work a browser that supports 
-# JavaScript and frames is required (for instance Mozilla, Netscape 4.0+, 
-# or Internet explorer 4.0+). Note that for large projects the tree generation 
-# can take a very long time. In such cases it is better to disable this feature. 
+# generated containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript and frames is required (for instance Mozilla, Netscape 4.0+,
+# or Internet explorer 4.0+). Note that for large projects the tree generation
+# can take a very long time. In such cases it is better to disable this feature.
 # Windows users are probably better off using the HTML help feature.
 
 GENERATE_TREEVIEW      = NO
 
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
-# used to set the initial width (in pixels) of the frame in which the tree 
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
 # is shown.
 
 TREEVIEW_WIDTH         = 250
@@ -583,68 +583,68 @@ TREEVIEW_WIDTH         = 250
 # configuration options related to the LaTeX output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
 # generate Latex output.
 
 GENERATE_LATEX         = YES
 
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
 # put in front of it. If left blank `latex' will be used as the default path.
 
 LATEX_OUTPUT           = latex
 
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
 # invoked. If left blank `latex' will be used as the default command name.
 
 LATEX_CMD_NAME         = latex
 
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
-# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
 # default command name.
 
 MAKEINDEX_CMD_NAME     = makeindex
 
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
-# LaTeX documents. This may be useful for small projects and may help to 
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
 # save some trees in general.
 
 COMPACT_LATEX          = NO
 
-# The PAPER_TYPE tag can be used to set the paper type that is used 
-# by the printer. Possible values are: a4, a4wide, letter, legal and 
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
 # executive. If left blank a4wide will be used.
 
 PAPER_TYPE             = a4wide
 
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
 # packages that should be included in the LaTeX output.
 
-EXTRA_PACKAGES         = 
+EXTRA_PACKAGES         =
 
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
-# the generated latex document. The header should contain everything until 
-# the first chapter. If it is left blank doxygen will generate a 
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
 # standard header. Notice: only use this tag if you know what you are doing!
 
-LATEX_HEADER           = 
+LATEX_HEADER           =
 
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
-# contain links (just like the HTML output) instead of page references 
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
 # This makes the output suitable for online browsing using a pdf viewer.
 
 PDF_HYPERLINKS         = NO
 
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
-# plain latex in the generated Makefile. Set this option to YES to get a 
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
 # higher quality PDF documentation.
 
 USE_PDFLATEX           = NO
 
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
-# command to the generated LaTeX files. This will instruct LaTeX to keep 
-# running if errors occur, instead of asking the user for help. 
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
 # This option is also used when generating formulas in HTML.
 
 LATEX_BATCHMODE        = NO
@@ -653,68 +653,68 @@ LATEX_BATCHMODE        = NO
 # configuration options related to the RTF output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
-# The RTF output is optimised for Word 97 and may not look very pretty with 
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimised for Word 97 and may not look very pretty with
 # other RTF readers or editors.
 
 GENERATE_RTF           = NO
 
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
 # put in front of it. If left blank `rtf' will be used as the default path.
 
 RTF_OUTPUT             = rtf
 
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
-# RTF documents. This may be useful for small projects and may help to 
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
 # save some trees in general.
 
 COMPACT_RTF            = NO
 
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
-# will contain hyperlink fields. The RTF file will 
-# contain links (just like the HTML output) instead of page references. 
-# This makes the output suitable for online browsing using WORD or other 
-# programs which support those fields. 
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
 # Note: wordpad (write) and others do not support links.
 
 RTF_HYPERLINKS         = NO
 
-# Load stylesheet definitions from file. Syntax is similar to doxygen's 
-# config file, i.e. a series of assigments. You only have to provide 
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assigments. You only have to provide
 # replacements, missing definitions are set to their default value.
 
-RTF_STYLESHEET_FILE    = 
+RTF_STYLESHEET_FILE    =
 
-# Set optional variables used in the generation of an rtf document. 
+# Set optional variables used in the generation of an rtf document.
 # Syntax is similar to doxygen's config file.
 
-RTF_EXTENSIONS_FILE    = 
+RTF_EXTENSIONS_FILE    =
 
 #---------------------------------------------------------------------------
 # configuration options related to the man page output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
 # generate man pages
 
 GENERATE_MAN           = NO
 
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
 # put in front of it. If left blank `man' will be used as the default path.
 
 MAN_OUTPUT             = man
 
-# The MAN_EXTENSION tag determines the extension that is added to 
+# The MAN_EXTENSION tag determines the extension that is added to
 # the generated man pages (default is the subroutine's section .3)
 
 MAN_EXTENSION          = .3
 
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
-# then it will generate one additional man file for each entity 
-# documented in the real man page(s). These additional files 
-# only source the real man page, but without them the man command 
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
 # would be unable to find the correct page. The default is NO.
 
 MAN_LINKS              = NO
@@ -723,34 +723,34 @@ MAN_LINKS              = NO
 # configuration options related to the XML output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_XML tag is set to YES Doxygen will 
-# generate an XML file that captures the structure of 
-# the code including all documentation. Note that this 
-# feature is still experimental and incomplete at the 
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
 # moment.
 
 GENERATE_XML           = NO
 
-# The XML_SCHEMA tag can be used to specify an XML schema, 
-# which can be used by a validating XML parser to check the 
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
 # syntax of the XML files.
 
-XML_SCHEMA             = 
+XML_SCHEMA             =
 
-# The XML_DTD tag can be used to specify an XML DTD, 
-# which can be used by a validating XML parser to check the 
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
 # syntax of the XML files.
 
-XML_DTD                = 
+XML_DTD                =
 
 #---------------------------------------------------------------------------
 # configuration options for the AutoGen Definitions output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
-# generate an AutoGen Definitions (see autogen.sf.net) file 
-# that captures the structure of the code including all 
-# documentation. Note that this feature is still experimental 
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
 # and incomplete at the moment.
 
 GENERATE_AUTOGEN_DEF   = NO
@@ -759,280 +759,280 @@ GENERATE_AUTOGEN_DEF   = NO
 # configuration options related to the Perl module output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
-# generate a Perl module file that captures the structure of 
-# the code including all documentation. Note that this 
-# feature is still experimental and incomplete at the 
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
 # moment.
 
 GENERATE_PERLMOD       = NO
 
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
 # to generate PDF and DVI output from the Perl module output.
 
 PERLMOD_LATEX          = NO
 
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
-# nicely formatted so it can be parsed by a human reader.  This is useful 
-# if you want to understand what is going on.  On the other hand, if this 
-# tag is set to NO the size of the Perl module output will be much smaller 
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.  This is useful
+# if you want to understand what is going on.  On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
 # and Perl will parse it just the same.
 
 PERLMOD_PRETTY         = YES
 
-# The names of the make variables in the generated doxyrules.make file 
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
-# This is useful so different doxyrules.make files included by the same 
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
 # Makefile don't overwrite each other's variables.
 
-PERLMOD_MAKEVAR_PREFIX = 
+PERLMOD_MAKEVAR_PREFIX =
 
 #---------------------------------------------------------------------------
-# Configuration options related to the preprocessor   
+# Configuration options related to the preprocessor
 #---------------------------------------------------------------------------
 
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
-# evaluate all C-preprocessor directives found in the sources and include 
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
 # files.
 
 ENABLE_PREPROCESSING   = YES
 
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
-# names in the source code. If set to NO (the default) only conditional 
-# compilation will be performed. Macro expansion can be done in a controlled 
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
 # way by setting EXPAND_ONLY_PREDEF to YES.
 
 MACRO_EXPANSION        = YES
 
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
-# then the macro expansion is limited to the macros specified with the 
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
 # PREDEFINED and EXPAND_AS_PREDEFINED tags.
 
 EXPAND_ONLY_PREDEF     = YES
 
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
 # in the INCLUDE_PATH (see below) will be search if a #include is found.
 
 SEARCH_INCLUDES        = YES
 
-# The INCLUDE_PATH tag can be used to specify one or more directories that 
-# contain include files that are not input files but should be processed by 
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
 # the preprocessor.
 
-INCLUDE_PATH           = 
+INCLUDE_PATH           =
 
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
-# patterns (like *.h and *.hpp) to filter out the header-files in the 
-# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
 # be used.
 
-INCLUDE_FILE_PATTERNS  = 
+INCLUDE_FILE_PATTERNS  =
 
-# The PREDEFINED tag can be used to specify one or more macro names that 
-# are defined before the preprocessor is started (similar to the -D option of 
-# gcc). The argument of the tag is a list of macros of the form: name 
-# or name=definition (no spaces). If the definition and the = are 
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
 # omitted =1 is assumed.
 
 PREDEFINED             = __attribute__(x)="" "RENAME(x)=x ## _TMPL" "DEF(x)=x ## _TMPL" \
                          HAVE_BUILTIN_VECTOR HAVE_AV_CONFIG_H HAVE_MMX HAVE_MMX2 HAVE_3DNOW \
                          ATTR_ALIGN(x)=""
 
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
-# this tag can be used to specify a list of macro names that should be expanded. 
-# The macro definition that is found in the sources will be used. 
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
 # Use the PREDEFINED tag if you want to use a different macro definition.
 
 #EXPAND_AS_DEFINED      = FF_COMMON_FRAME
 EXPAND_AS_DEFINED      = declare_idct(idct, table, idct_row_head, idct_row, idct_row_tail, idct_row_mid)
 
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
-# doxygen's preprocessor will remove all function-like macros that are alone 
-# on a line, have an all uppercase name, and do not end with a semicolon. Such 
-# function macros are typically used for boiler-plate code, and will confuse the 
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse the
 # parser if not removed.
 
 SKIP_FUNCTION_MACROS   = YES
 
 #---------------------------------------------------------------------------
-# Configuration::addtions related to external references   
+# Configuration::addtions related to external references
 #---------------------------------------------------------------------------
 
 # The TAGFILES tag can be used to specify one or more tagfiles.
 
-TAGFILES               = 
+TAGFILES               =
 
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
 # a tag file that is based on the input files it reads.
 
-GENERATE_TAGFILE       = 
+GENERATE_TAGFILE       =
 
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
-# in the class index. If set to NO only the inherited external classes 
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
 # will be listed.
 
 ALLEXTERNALS           = NO
 
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
-# in the modules index. If set to NO, only the current project's groups will 
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
 # be listed.
 
 EXTERNAL_GROUPS        = YES
 
-# The PERL_PATH should be the absolute path and name of the perl script 
+# The PERL_PATH should be the absolute path and name of the perl script
 # interpreter (i.e. the result of `which perl').
 
 PERL_PATH              = /usr/bin/perl
 
 #---------------------------------------------------------------------------
-# Configuration options related to the dot tool   
+# Configuration options related to the dot tool
 #---------------------------------------------------------------------------
 
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
-# generate a inheritance diagram (in Html, RTF and LaTeX) for classes with base or 
-# super classes. Setting the tag to NO turns the diagrams off. Note that this 
-# option is superceded by the HAVE_DOT option below. This is only a fallback. It is 
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in Html, RTF and LaTeX) for classes with base or
+# super classes. Setting the tag to NO turns the diagrams off. Note that this
+# option is superceded by the HAVE_DOT option below. This is only a fallback. It is
 # recommended to install and use dot, since it yield more powerful graphs.
 
 CLASS_DIAGRAMS         = YES
 
-# If set to YES, the inheritance and collaboration graphs will hide 
-# inheritance and usage relations if the target is undocumented 
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
 # or is not a class.
 
 HIDE_UNDOC_RELATIONS   = YES
 
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
-# available from the path. This tool is part of Graphviz, a graph visualization 
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
 # have no effect if this option is set to NO (the default)
 
 HAVE_DOT               = NO
 
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for each documented class showing the direct and 
-# indirect inheritance relations. Setting this tag to YES will force the 
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
 # the CLASS_DIAGRAMS tag to NO.
 
 CLASS_GRAPH            = YES
 
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for each documented class showing the direct and 
-# indirect implementation dependencies (inheritance, containment, and 
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
 # class references variables) of the class with other documented classes.
 
 COLLABORATION_GRAPH    = YES
 
-# If set to YES, the inheritance and collaboration graphs will show the 
+# If set to YES, the inheritance and collaboration graphs will show the
 # relations between templates and their instances.
 
 TEMPLATE_RELATIONS     = YES
 
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
-# tags are set to YES then doxygen will generate a graph for each documented 
-# file showing the direct and indirect include dependencies of the file with 
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
 # other documented files.
 
 INCLUDE_GRAPH          = YES
 
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
-# documented header file showing the documented files that directly or 
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
 # indirectly include this file.
 
 INCLUDED_BY_GRAPH      = YES
 
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
 # will graphical hierarchy of all classes instead of a textual one.
 
 GRAPHICAL_HIERARCHY    = YES
 
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
 # generated by dot. Possible values are png, jpg, or gif
 # If left blank png will be used.
 
 DOT_IMAGE_FORMAT       = png
 
-# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
 # found. If left blank, it is assumed the dot tool can be found on the path.
 
-DOT_PATH               = 
+DOT_PATH               =
 
-# The DOTFILE_DIRS tag can be used to specify one or more directories that 
-# contain dot files that are included in the documentation (see the 
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
 # \dotfile command).
 
-DOTFILE_DIRS           = 
+DOTFILE_DIRS           =
 
-# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width 
-# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
-# this value, doxygen will try to truncate the graph, so that it fits within 
-# the specified constraint. Beware that most browsers cannot cope with very 
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
 # large images.
 
 MAX_DOT_GRAPH_WIDTH    = 1024
 
-# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height 
-# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
-# this value, doxygen will try to truncate the graph, so that it fits within 
-# the specified constraint. Beware that most browsers cannot cope with very 
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
 # large images.
 
 MAX_DOT_GRAPH_HEIGHT   = 1024
 
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
-# generate a legend page explaining the meaning of the various boxes and 
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
 # arrows in the dot generated graphs.
 
 GENERATE_LEGEND        = YES
 
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
-# remove the intermedate dot files that are used to generate 
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermedate dot files that are used to generate
 # the various graphs.
 
 DOT_CLEANUP            = YES
 
 #---------------------------------------------------------------------------
-# Configuration::addtions related to the search engine   
+# Configuration::addtions related to the search engine
 #---------------------------------------------------------------------------
 
-# The SEARCHENGINE tag specifies whether or not a search engine should be 
+# The SEARCHENGINE tag specifies whether or not a search engine should be
 # used. If set to NO the values of all tags below this one will be ignored.
 
 SEARCHENGINE           = NO
 
-# The CGI_NAME tag should be the name of the CGI script that 
-# starts the search engine (doxysearch) with the correct parameters. 
+# The CGI_NAME tag should be the name of the CGI script that
+# starts the search engine (doxysearch) with the correct parameters.
 # A script with this name will be generated by doxygen.
 
 CGI_NAME               = search.cgi
 
-# The CGI_URL tag should be the absolute URL to the directory where the 
-# cgi binaries are located. See the documentation of your http daemon for 
+# The CGI_URL tag should be the absolute URL to the directory where the
+# cgi binaries are located. See the documentation of your http daemon for
 # details.
 
-CGI_URL                = 
+CGI_URL                =
 
-# The DOC_URL tag should be the absolute URL to the directory where the 
-# documentation is located. If left blank the absolute path to the 
+# The DOC_URL tag should be the absolute URL to the directory where the
+# documentation is located. If left blank the absolute path to the
 # documentation, with file:// prepended to it, will be used.
 
-DOC_URL                = 
+DOC_URL                =
 
-# The DOC_ABSPATH tag should be the absolute path to the directory where the 
-# documentation is located. If left blank the directory on the local machine 
+# The DOC_ABSPATH tag should be the absolute path to the directory where the
+# documentation is located. If left blank the directory on the local machine
 # will be used.
 
-DOC_ABSPATH            = 
+DOC_ABSPATH            =
 
-# The BIN_ABSPATH tag must point to the directory where the doxysearch binary 
+# The BIN_ABSPATH tag must point to the directory where the doxysearch binary
 # is installed.
 
 BIN_ABSPATH            = /usr/local/bin/
 
-# The EXT_DOC_PATHS tag can be used to specify one or more paths to 
-# documentation generated for other projects. This allows doxysearch to search 
+# The EXT_DOC_PATHS tag can be used to specify one or more paths to
+# documentation generated for other projects. This allows doxysearch to search
 # the documentation for these projects as well.
 
-EXT_DOC_PATHS          = 
+EXT_DOC_PATHS          =
diff --git a/INSTALL b/INSTALL
index 28ea77d..12bd957 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -1,6 +1,6 @@
 
 1) Type './configure' create the configuration (use './configure
---help' to have the configure options). 
+--help' to have the configure options).
 
 'configure' can be launched from another directory than the ffmpeg
 sources to put the objects at that place. In that case, use an
index 058bc14..8d9c223 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -7,7 +7,7 @@ include config.mak
 VPATH=$(SRC_PATH)
 
 CFLAGS=$(OPTFLAGS) -I. -I$(SRC_PATH) -I$(SRC_PATH)/libavutil -I$(SRC_PATH)/libavcodec -I$(SRC_PATH)/libavformat -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE
-LDFLAGS+= -g 
+LDFLAGS+= -g
 
 ifeq ($(TARGET_GPROF),yes)
 CFLAGS+=-p
@@ -75,7 +75,7 @@ ffmpeg$(EXESUF): ffmpeg_g$(EXESUF)
        $(STRIP) $@
 
 ffserver$(EXESUF): ffserver.o .libs
-       $(CC) $(LDFLAGS) $(FFSLDFLAGS) -o $@ ffserver.o $(FFLIBS) $(EXTRALIBS) 
+       $(CC) $(LDFLAGS) $(FFSLDFLAGS) -o $@ ffserver.o $(FFLIBS) $(EXTRALIBS)
 
 ffplay_g$(EXESUF): ffplay.o cmdutils.o .libs
        $(CC) $(LDFLAGS) -o $@ ffplay.o cmdutils.o $(FFLIBS) $(EXTRALIBS) $(SDL_LIBS)
@@ -94,10 +94,10 @@ cws2fws$(EXESUF): cws2fws.c
        $(CC) $(SRC_PATH)/cws2fws.c -o cws2fws$(EXESUF) -lz
 
 ffplay.o: ffplay.c
-       $(CC) $(CFLAGS) $(SDL_CFLAGS) -c -o $@ $< 
+       $(CC) $(CFLAGS) $(SDL_CFLAGS) -c -o $@ $<
 
 %.o: %.c
-       $(CC) $(CFLAGS) -c -o $@ $< 
+       $(CC) $(CFLAGS) -c -o $@ $<
 
 videohook: .libs
        $(MAKE) -C vhook all
diff --git a/README b/README
index 9bc0f6e..ce3e0d6 100644 (file)
--- a/README
+++ b/README
@@ -11,7 +11,7 @@ FFmpeg README
 
 * Read the file COPYING. ffmpeg and the associated libraries EXCEPT
   liba52 and libpostproc are licensed under the Lesser GNU General
-  Public License. 
+  Public License.
 
 * liba52 and libpostproc are distributed under the GNU General Public
   License and their compilation and use is optional in ffmpeg.
index bfb91a0..eb3bd0c 100644 (file)
--- a/berrno.h
+++ b/berrno.h
@@ -8,37 +8,37 @@
 
 #ifdef ENOENT
 #undef ENOENT
-#endif 
+#endif
 #define ENOENT 2
 
 #ifdef EINTR
 #undef EINTR
-#endif 
+#endif
 #define EINTR  4
 
 #ifdef EIO
 #undef EIO
-#endif 
+#endif
 #define EIO    5
 
 #ifdef EAGAIN
 #undef EAGAIN
-#endif 
+#endif
 #define EAGAIN 11
 
 #ifdef ENOMEM
 #undef ENOMEM
-#endif 
+#endif
 #define ENOMEM 12
 
 #ifdef EINVAL
 #undef EINVAL
-#endif 
+#endif
 #define EINVAL 22
 
 #ifdef EPIPE
 #undef EPIPE
-#endif 
+#endif
 #define EPIPE  32
 
 #endif /* BERRNO_H */
index fc5d66d..fcf1657 100755 (executable)
@@ -7,4 +7,3 @@ sed 's/unsigned//g' |\
  sed 's/TYPE_AVRATIONAL/TYPE_RATIONAL/g'|\
  sed 's/FLOAT_M/FLT_M/g'|\
  sed 's/FF_OPT_TYPE_CHAR/FF_OPT_TYPE_STRING/g'
\ No newline at end of file
index 4fae966..db28bde 100644 (file)
@@ -64,7 +64,7 @@ void parse_options(int argc, char **argv, const OptionDef *options)
     optindex = 1;
     while (optindex < argc) {
         opt = argv[optindex++];
-        
+
         if (opt[0] == '-' && opt[1] != '\0') {
             po= find_option(options, opt + 1);
             if (!po->name)
@@ -111,7 +111,7 @@ void print_error(const char *filename, int err)
         fprintf(stderr, "%s: Incorrect image filename syntax.\n"
                 "Use '%%d' to specify the image number:\n"
                 "  for img1.jpg, img2.jpg, ..., use 'img%%d.jpg';\n"
-                "  for img001.jpg, img002.jpg, ..., use 'img%%03d.jpg'.\n", 
+                "  for img001.jpg, img002.jpg, ..., use 'img%%03d.jpg'.\n",
                 filename);
         break;
     case AVERROR_INVALIDDATA:
index 8094878..32dc287 100755 (executable)
--- a/configure
+++ b/configure
@@ -555,7 +555,7 @@ for opt do
   --enable-amr_nb-fixed) amr_nb_fixed="yes"
   ;;
   --enable-amr_wb) amr_wb="yes"
-  ;; 
+  ;;
   --enable-amr_if2) amr_if2="yes"
   ;;
   --enable-sunmlib) sunmlib="yes"
@@ -629,13 +629,13 @@ if test "$gpl" != "yes"; then
         echo "libdts is under GPL and --enable-gpl is not specified."
         fail="yes"
     fi
-    
+
     if test "$faad" != "no" -o "$faadbin" != "no"; then
         cat > $TMPC << EOF
             #include <faad.h>
             int main( void ) { return 0; }
 EOF
-    
+
         if $cc $CFLAGS -o $TMPE $TMPC 2> /dev/null ; then
             cat > $TMPC << EOF
                 #include <faad.h>
@@ -654,7 +654,7 @@ EOF
             echo "FAAD test failed."
         fi
     fi
-   
+
 
     if test "$fail" = "yes"; then
         exit 1
@@ -673,7 +673,7 @@ fi
 # check iwmmxt support
 if test $iwmmxt = "default" -a $cpu = "armv4l"; then
     cat > $TMPC << EOF
-        int main(void) { 
+        int main(void) {
         __asm__ __volatile__ ("wunpckelub wr6, wr4");
         }
 EOF
@@ -692,7 +692,7 @@ if test $targetos = Darwin; then
     else
        gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
        case "$gcc_version" in
-           *2.95*) 
+           *2.95*)
                CFLAGS="$CFLAGS -no-cpp-precomp -pipe -fomit-frame-pointer"
                ;;
            *[34].*)
@@ -784,7 +784,7 @@ if test $tune != "generic"; then
     esac
 fi
 
-# AltiVec flags: The FSF version of GCC differs from the Apple version 
+# AltiVec flags: The FSF version of GCC differs from the Apple version
 if test $cpu = "powerpc"; then
     if test $altivec = "yes"; then
         if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
@@ -1009,7 +1009,7 @@ done
 # currently only used on i386 for MMX builtins
 cat > $TMPC << EOF
 #include <xmmintrin.h>
-int main(void) { 
+int main(void) {
 #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2)
 return 0;
 #else
@@ -1812,7 +1812,7 @@ includedir=\${prefix}/include
 Name: libavutil
 Description: FFmpeg utility library
 Version: $lavu_version
-Requires: 
+Requires:
 Conflicts:
 Libs: -L\${libdir} -lavutil
 Cflags: -I\${includedir} -I\${includedir}/ffmpeg
@@ -1827,7 +1827,7 @@ includedir=\${pcfiledir}/libavutil
 Name: libavutil
 Description: FFmpeg utility library
 Version: $lavu_version
-Requires: 
+Requires:
 Conflicts:
 Libs: \${libdir}/${LIBPREF}avutil${LIBSUF}
 Cflags: -I\${includedir}
@@ -1906,7 +1906,7 @@ includedir=\${prefix}/include
 Name: libpostproc
 Description: FFmpeg post processing library
 Version: $lavc_version
-Requires: 
+Requires:
 Conflicts:
 Libs: -L\${libdir} -lpostproc
 Cflags: -I\${includedir} -I\${includedir}/postproc
@@ -1921,7 +1921,7 @@ includedir=\${pcfiledir}/libavcodec/libpostproc
 Name: libpostproc
 Description: FFmpeg post processing library
 Version: $lavc_version
-Requires: 
+Requires:
 Conflicts:
 Libs: \${libdir}/${LIBPREF}postproc${LIBSUF}
 Cflags: -I\${includedir}
index 5fc6d08..9f20816 100644 (file)
--- a/cws2fws.c
+++ b/cws2fws.c
@@ -28,7 +28,7 @@ main(int argc, char *argv[])
        printf("Usage: %s <infile.swf> <outfile.swf>\n", argv[0]);
        exit(1);
     }
-    
+
     fd_in = open(argv[1], O_RDONLY);
     if (fd_in < 0)
     {
@@ -43,7 +43,7 @@ main(int argc, char *argv[])
        close(fd_in);
        exit(1);
     }
-    
+
     if (read(fd_in, &buf_in, 8) != 8)
     {
        printf("Header error\n");
@@ -51,7 +51,7 @@ main(int argc, char *argv[])
        close(fd_out);
        exit(1);
     }
-    
+
     if (buf_in[0] != 'C' || buf_in[1] != 'W' || buf_in[2] != 'S')
     {
        printf("Not a compressed flash file\n");
@@ -61,7 +61,7 @@ main(int argc, char *argv[])
     fstat(fd_in, &statbuf);
     comp_len = statbuf.st_size;
     uncomp_len = buf_in[4] | (buf_in[5] << 8) | (buf_in[6] << 16) | (buf_in[7] << 24);
-    
+
     printf("Compressed size: %d Uncompressed size: %d\n", comp_len-4, uncomp_len-4);
 
     // write out modified header
@@ -72,20 +72,20 @@ main(int argc, char *argv[])
     zstream.zfree = NULL;
     zstream.opaque = NULL;
     inflateInit(&zstream);
-    
+
     for (i = 0; i < comp_len-4;)
     {
        int ret, len = read(fd_in, &buf_in, 1024);
 
        dbgprintf("read %d bytes\n", len);
-       
+
        last_out = zstream.total_out;
-       
+
        zstream.next_in = &buf_in[0];
        zstream.avail_in = len;
        zstream.next_out = &buf_out[0];
        zstream.avail_out = 1024;
-               
+
        ret = inflate(&zstream, Z_SYNC_FLUSH);
        if (ret == Z_STREAM_END || ret == Z_BUF_ERROR)
            break;
@@ -95,16 +95,16 @@ main(int argc, char *argv[])
            inflateEnd(&zstream);
            exit(1);
        }
-       
+
        dbgprintf("a_in: %d t_in: %d a_out: %d t_out: %d -- %d out\n",
            zstream.avail_in, zstream.total_in, zstream.avail_out, zstream.total_out,
            zstream.total_out-last_out);
-       
+
        write(fd_out, &buf_out, zstream.total_out-last_out);
 
        i += len;
     }
-    
+
     if (zstream.total_out != uncomp_len-8)
     {
        printf("Size mismatch (%d != %d), updating header...\n",
@@ -114,11 +114,11 @@ main(int argc, char *argv[])
        buf_in[1] = (zstream.total_out+8 >> 8) & 0xff;
        buf_in[2] = (zstream.total_out+8 >> 16) & 0xff;
        buf_in[3] = (zstream.total_out+8 >> 24) & 0xff;
-       
+
        lseek(fd_out, 4, SEEK_SET);
        write(fd_out, &buf_in, 4);
     }
-    
+
     inflateEnd(&zstream);
     close(fd_in);
     close(fd_out);
index 033547c..ed0b637 100644 (file)
--- a/doc/TODO
+++ b/doc/TODO
@@ -5,13 +5,13 @@ Fabrice's TODO list: (unordered)
 -------------------
 Short term:
 
-- av_read_frame() API 
+- av_read_frame() API
 - seeking API and example in ffplay
 - parse_only mode
 - use AVFMTCTX_DISCARD_PKT in ffplay so that DV has a chance to work
 - add RTSP regression test (both client and server)
 - make ffserver allocate AVFormatContext
-- clean up (incompatible change, for 0.5.0): 
+- clean up (incompatible change, for 0.5.0):
     * AVStream -> AVComponent
     * AVFormatContext -> AVInputStream/AVOutputStream
     * suppress rate_emu from AVCodecContext
@@ -54,7 +54,7 @@ Francois' TODO list: (unordered, without any timeframe)
 Philip'a TODO list: (alphabetically ordered) (please help)
 ------------------
 - Add a multi-ffm filetype so that feeds can be recorded into multiple files rather
-  than one big file. 
+  than one big file.
 - Authenticated users support -- where the authentication is in the URL
 - Change ASF files so that the embedded timestamp in the frames is right rather
   than being an offset from the start of the stream
index 9497903..40b7c84 100644 (file)
@@ -53,7 +53,7 @@ Use @file{-} as filename.
 @section Why does ffmpeg not decode audio in VOB files ?
 
 The audio is AC3 (a.k.a. A/52). AC3 decoding is an optional component in ffmpeg
-as the component that handles AC3 decoding (liba52) is currently released under 
+as the component that handles AC3 decoding (liba52) is currently released under
 the GPL. If you have liba52 installed on your system, enable AC3 decoding
 with @code{./configure --enable-a52}. Take care: by
 enabling AC3, you automatically change the license of libavcodec from
@@ -61,7 +61,7 @@ LGPL to GPL.
 
 @section Which codecs are supported by Windows ?
 
-Windows does not support standard formats like MPEG very well, unless you 
+Windows does not support standard formats like MPEG very well, unless you
 install some additional codecs
 
 The following list of video codecs should work on most Windows systems:
@@ -79,8 +79,8 @@ only if you have some MPEG-4 codec installed like ffdshow or XviD
 @item mpeg1
 .mpg only
 @end table
-Note, ASF files often have .wmv or .wma extensions in Windows. It should also 
-be mentioned that Microsoft claims a patent on the ASF format, and may sue 
+Note, ASF files often have .wmv or .wma extensions in Windows. It should also
+be mentioned that Microsoft claims a patent on the ASF format, and may sue
 or threaten users who create ASF files with non-Microsoft software. It is
 strongly advised to avoid ASF where possible.
 
@@ -95,7 +95,7 @@ if some MP3 codec like LAME is installed
 
 @section Why does the chrominance data seem to be sampled at a different time from the luminance data on bt8x8 captures on Linux?
 
-This is a well-known bug in the bt8x8 driver. For 2.4.26 there is a patch at 
+This is a well-known bug in the bt8x8 driver. For 2.4.26 there is a patch at
 (@url{http://www.mplayerhq.hu/~michael/bttv-420-2.4.26.patch}). This may also
 apply cleanly to other 2.4-series kernels.
 
@@ -132,8 +132,8 @@ Both XviD and DivX (version 4+) are implementations of the ISO MPEG-4
 standard (note that there are many other coding formats that use this
 same standard). Thus, use '-vcodec mpeg4' to encode these formats. The
 default fourcc stored in an MPEG-4-coded file will be 'FMP4'. If you want
-a different fourcc, use the '-vtag' option. E.g., '-vtag xvid' will 
-force the fourcc 'xvid' to be stored as the video fourcc rather than the 
+a different fourcc, use the '-vtag' option. E.g., '-vtag xvid' will
+force the fourcc 'xvid' to be stored as the video fourcc rather than the
 default.
 
 @chapter Development
@@ -149,7 +149,7 @@ it implemented is to undertake the task yourself.
 @section Are there examples illustrating how to use the FFmpeg libraries, particularly libavcodec and libavformat ?
 
 Yes. Read the Developers Guide of the FFmpeg documentation. Alternatively,
-examine the source code for one of the many open source projects that 
+examine the source code for one of the many open source projects that
 already incorporate ffmpeg at (@url{projects.php}).
 
 @section Can you support my C compiler XXX ?
@@ -174,7 +174,7 @@ terms of portability.
 @section Why not rewrite ffmpeg in object-oriented C++ ?
 
 ffmpeg is already organized in a highly modular manner and does not need to
-be rewritten in a formal object language. Further, many of the developers 
+be rewritten in a formal object language. Further, many of the developers
 favor straight C; it works for them. For more arguments on this matter,
 read "Programming Religion" at (@url{http://lkml.org/faq/lkmlfaq-15.html}).
 
index d83c672..bb4cf04 100644 (file)
@@ -12,7 +12,7 @@
 
 FFmpeg is a very fast video and audio converter. It can also grab from
 a live audio/video source.
-  
+
 The command line interface is designed to be intuitive, in the sense
 that FFmpeg tries to figure out all parameters that can possibly be
 derived automatically. You usually only have to specify the target
@@ -30,7 +30,7 @@ FFmpeg can use a video4linux compatible video source and any Open Sound
 System audio source:
 
 @example
-ffmpeg /tmp/out.mpg 
+ffmpeg /tmp/out.mpg
 @end example
 
 Note that you must activate the right video source and channel before
@@ -48,10 +48,10 @@ Examples:
 * You can use YUV files as input:
 
 @example
-ffmpeg -i /tmp/test%d.Y /tmp/out.mpg 
+ffmpeg -i /tmp/test%d.Y /tmp/out.mpg
 @end example
 
-It will use the files: 
+It will use the files:
 @example
 /tmp/test0.Y, /tmp/test0.U, /tmp/test0.V,
 /tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc...
@@ -130,7 +130,7 @@ NOTE: To see the supported input formats, use @code{ffmpeg -formats}.
 
 The generic syntax is:
 
-@example 
+@example
 @c man begin SYNOPSIS
 ffmpeg [[infile options][@option{-i} @var{infile}]]... @{[outfile options] @var{outfile}@}...
 @c man end
@@ -161,16 +161,16 @@ Show help.
 @item -formats
 Show available formats, codecs, protocols, ...
 
-@item -f fmt              
+@item -f fmt
 Force format.
 
-@item -i filename         
+@item -i filename
 input filename
 
-@item -y                  
+@item -y
 Overwrite output files.
 
-@item -t duration         
+@item -t duration
 Set the recording time in seconds.
 @code{hh:mm:ss[.xxx]} syntax is also supported.
 
@@ -178,16 +178,16 @@ Set the recording time in seconds.
 Seek to given time position in seconds.
 @code{hh:mm:ss[.xxx]} syntax is also supported.
 
-@item -title string       
+@item -title string
 Set the title.
 
-@item -author string      
+@item -author string
 Set the author.
 
-@item -copyright string   
+@item -copyright string
 Set the copyright.
 
-@item -comment string     
+@item -comment string
 Set the comment.
 
 @item -target type
@@ -224,9 +224,9 @@ streams are delayed by 'offset' seconds.
 @table @option
 @item -b bitrate
 Set the video bitrate in kbit/s (default = 200 kb/s).
-@item -r fps           
+@item -r fps
 Set frame rate (default = 25).
-@item -s size             
+@item -s size
 Set frame size. The format is @samp{wxh} (default = 160x128).
 The following abbreviations are recognized:
 @table @samp
@@ -265,7 +265,7 @@ represent red, the middle two digits green and last two digits
 blue (default = 000000 (black)).
 @item -vn
 Disable video recording.
-@item -bt tolerance       
+@item -bt tolerance
 Set video bitrate tolerance (in kbit/s).
 @item -maxrate bitrate
 Set max video bitrate tolerance (in kbit/s).
@@ -273,19 +273,19 @@ Set max video bitrate tolerance (in kbit/s).
 Set min video bitrate tolerance (in kbit/s).
 @item -bufsize size
 Set rate control buffer size (in kbit).
-@item -vcodec codec       
+@item -vcodec codec
 Force video codec to @var{codec}. Use the @code{copy} special value to
 tell that the raw codec data must be copied as is.
 @item -sameq
 Use same video quality as source (implies VBR).
 
-@item -pass n  
+@item -pass n
 Select the pass number (1 or 2). It is useful to do two pass
 encoding. The statistics of the video are recorded in the first
 pass and the video is generated at the exact requested bitrate
 in the second pass.
 
-@item -passlogfile file   
+@item -passlogfile file
 Set two pass logfile name to @var{file}.
 
 @end table
@@ -293,21 +293,21 @@ Set two pass logfile name to @var{file}.
 @section Advanced Video Options
 
 @table @option
-@item -g gop_size         
+@item -g gop_size
 Set the group of pictures size.
-@item -intra              
+@item -intra
 Use only intra frames.
-@item -qscale q           
+@item -qscale q
 Use fixed video quantiser scale (VBR).
-@item -qmin q             
+@item -qmin q
 minimum video quantiser scale (VBR)
-@item -qmax q             
+@item -qmax q
 maximum video quantiser scale (VBR)
-@item -qdiff q            
+@item -qdiff q
 maximum difference between the quantiser scales (VBR)
-@item -qblur blur         
+@item -qblur blur
 video quantiser scale blur (VBR)
-@item -qcomp compression  
+@item -qcomp compression
 video quantiser scale compression (VBR)
 
 @item -rc_init_cplx complexity
@@ -363,31 +363,31 @@ Set IDCT algorithm to @var{algo}. Available values are:
 @item 0
 FF_IDCT_AUTO (default)
 @item 1
-FF_IDCT_INT          
+FF_IDCT_INT
 @item 2
-FF_IDCT_SIMPLE       
+FF_IDCT_SIMPLE
 @item 3
-FF_IDCT_SIMPLEMMX    
+FF_IDCT_SIMPLEMMX
 @item 4
-FF_IDCT_LIBMPEG2MMX  
+FF_IDCT_LIBMPEG2MMX
 @item 5
-FF_IDCT_PS2          
+FF_IDCT_PS2
 @item 6
-FF_IDCT_MLIB         
+FF_IDCT_MLIB
 @item 7
-FF_IDCT_ARM          
+FF_IDCT_ARM
 @item 8
-FF_IDCT_ALTIVEC      
+FF_IDCT_ALTIVEC
 @item 9
-FF_IDCT_SH4          
+FF_IDCT_SH4
 @item 10
-FF_IDCT_SIMPLEARM    
+FF_IDCT_SIMPLEARM
 @end table
 
 @item -er n
 Set error resilience to @var{n}.
 @table @samp
-@item 1 
+@item 1
 FF_ER_CAREFUL (default)
 @item 2
 FF_ER_COMPLIANT
@@ -453,9 +453,9 @@ name and its parameters separated by spaces.
 @section Audio Options
 
 @table @option
-@item -ar freq    
+@item -ar freq
 Set the audio sampling frequency (default = 44100 Hz).
-@item -ab bitrate 
+@item -ab bitrate
 Set the audio bitrate in kbit/s (default = 64).
 @item -ac channels
 Set the number of audio channels (default = 1).
@@ -484,13 +484,13 @@ Set audio device (e.g. @file{/dev/dsp}).
 @section Advanced options
 
 @table @option
-@item -map file:stream    
+@item -map file:stream
 Set input stream mapping.
 @item -debug
 Print specific debug info.
-@item -benchmark          
+@item -benchmark
 Add timings for benchmarking.
-@item -hex                
+@item -hex
 Dump each input packet.
 @item -bitexact
 Only use bit exact algorithms (for codec testing).
@@ -510,7 +510,7 @@ Repeatedly loop output for formats that support looping such as animated GIF
 @section FFmpeg formula evaluator
 
 When evaluating a rate control string, FFmpeg uses an internal formula
-evaluator. 
+evaluator.
 
 The following binary operators are available: @code{+}, @code{-},
 @code{*}, @code{/}, @code{^}.
@@ -650,26 +650,26 @@ library:
 @tab also known as @code{VOB} file
 @item MPEG-2 TS @tab    @tab  X
 @tab also known as DVB Transport Stream
-@item ASF@tab X @tab X 
-@item AVI@tab X @tab X 
-@item WAV@tab X @tab X 
+@item ASF@tab X @tab X
+@item AVI@tab X @tab X
+@item WAV@tab X @tab X
 @item Macromedia Flash@tab X @tab X
 @tab Only embedded audio is decoded.
 @item FLV              @tab  X @tab X
 @tab Macromedia Flash video files
-@item Real Audio and Video @tab X @tab X 
-@item Raw AC3 @tab X  @tab  X 
-@item Raw MJPEG @tab X  @tab  X 
-@item Raw MPEG video @tab X  @tab  X 
-@item Raw PCM8/16 bits, mulaw/Alaw@tab X  @tab  X 
-@item Raw CRI ADX audio @tab X  @tab  X 
-@item Raw Shorten audio @tab    @tab  X 
-@item SUN AU format @tab X  @tab  X 
+@item Real Audio and Video @tab X @tab X
+@item Raw AC3 @tab X  @tab  X
+@item Raw MJPEG @tab X  @tab  X
+@item Raw MPEG video @tab X  @tab  X
+@item Raw PCM8/16 bits, mulaw/Alaw@tab X  @tab  X
+@item Raw CRI ADX audio @tab X  @tab  X
+@item Raw Shorten audio @tab    @tab  X
+@item SUN AU format @tab X  @tab  X
 @item NUT @tab X @tab X @tab NUT Open Container Format
-@item QuickTime        @tab X @tab  X 
+@item QuickTime        @tab X @tab  X
 @item MPEG-4           @tab X @tab  X
 @tab MPEG-4 is a variant of QuickTime.
-@item Raw MPEG4 video  @tab  X @tab  X 
+@item Raw MPEG4 video  @tab  X @tab  X
 @item DV               @tab  X @tab  X
 @item 4xm              @tab    @tab X
 @tab 4X Technologies format, used in some games.
@@ -707,7 +707,7 @@ following image formats are supported:
 
 @multitable @columnfractions .4 .1 .1 .4
 @item Supported Image Format @tab Encoding @tab Decoding @tab Comments
-@item PGM, PPM     @tab X @tab X 
+@item PGM, PPM     @tab X @tab X
 @item PAM          @tab X @tab X @tab PAM is a PNM extension with alpha support.
 @item PGMYUV       @tab X @tab X @tab PGM with U and V components in YUV 4:2:0
 @item JPEG         @tab X @tab X @tab Progressive JPEG is not supported.
@@ -734,11 +734,11 @@ following image formats are supported:
 @item H.261                  @tab  X  @tab  X
 @item H.263(+)               @tab  X  @tab  X @tab also known as RealVideo 1.0
 @item H.264                  @tab     @tab  X
-@item MJPEG                  @tab  X  @tab  X 
+@item MJPEG                  @tab  X  @tab  X
 @item lossless MJPEG         @tab  X  @tab  X
 @item Apple MJPEG-B          @tab     @tab  X
 @item Sunplus MJPEG          @tab     @tab  X @tab fourcc: SP5X
-@item DV                     @tab  X  @tab  X 
+@item DV                     @tab  X  @tab  X
 @item HuffYUV                @tab  X  @tab  X
 @item FFmpeg Video 1         @tab  X  @tab  X @tab experimental lossless codec (fourcc: FFV1)
 @item FFmpeg Snow            @tab  X  @tab  X @tab experimental wavelet codec (fourcc: SNOW)
@@ -755,7 +755,7 @@ following image formats are supported:
 @item ATI VCR2               @tab     @tab  X @tab fourcc: VCR2
 @item Cirrus Logic AccuPak   @tab     @tab  X @tab fourcc: CLJR
 @item 4X Video               @tab     @tab  X @tab Used in certain computer games.
-@item Sony Playstation MDEC  @tab     @tab  X 
+@item Sony Playstation MDEC  @tab     @tab  X
 @item Id RoQ                 @tab     @tab  X @tab Used in Quake III, Jedi Knight 2, other computer games.
 @item Xan/WC3                @tab     @tab  X @tab Used in Wing Commander III .MVE files.
 @item Interplay Video        @tab     @tab  X @tab Used in Interplay .MVE files.
@@ -779,10 +779,10 @@ following image formats are supported:
 @item IBM Ultimotion         @tab     @tab  X @tab fourcc: ULTI
 @item Miro VideoXL           @tab     @tab  X @tab fourcc: VIXL
 @item QPEG                   @tab     @tab  X @tab fourccs: QPEG, Q1.0, Q1.1
-@item LOCO                   @tab     @tab  X @tab 
-@item Winnov WNV1            @tab     @tab  X @tab 
+@item LOCO                   @tab     @tab  X @tab
+@item Winnov WNV1            @tab     @tab  X @tab
 @item Autodesk Animator Studio Codec  @tab     @tab  X @tab fourcc: AASC
-@item Fraps FPS1             @tab     @tab  X @tab 
+@item Fraps FPS1             @tab     @tab  X @tab
 @end multitable
 
 @code{X} means that encoding (resp. decoding) is supported.
@@ -795,7 +795,7 @@ other implementations.
 
 @multitable @columnfractions .4 .1 .1 .1 .7
 @item Supported Codec @tab Encoding @tab Decoding @tab Comments
-@item MPEG audio layer 2     @tab  IX  @tab  IX 
+@item MPEG audio layer 2     @tab  IX  @tab  IX
 @item MPEG audio layer 1/3   @tab IX   @tab  IX
 @tab MP3 encoding is supported through the external library LAME.
 @item AC3                    @tab  IX  @tab  IX
@@ -890,7 +890,7 @@ directory. Edit the @file{sdl-config} script so that it gives the
 correct SDL directory when invoked.
 
 @item Extract the current version of FFmpeg.
+
 @item Start the MSYS shell (file @file{msys.bat}).
 
 @item Change to the FFmpeg directory and follow
@@ -905,7 +905,7 @@ you launch @file{ffplay} from.
 
 @end itemize
 
-Notes: 
+Notes:
 @itemize
 
 @item The target @file{make wininstaller} can be used to create a
@@ -916,7 +916,7 @@ installer.
 @item By using @code{./configure --enable-shared} when configuring FFmpeg,
 you can build @file{avcodec.dll} and @file{avformat.dll}. With
 @code{make install} you install the FFmpeg DLLs and the associated
-headers in @file{Program Files/FFmpeg}. 
+headers in @file{Program Files/FFmpeg}.
 
 @item Visual C++ compatibility: If you used @code{./configure --enable-shared}
 when configuring FFmpeg, FFmpeg tries to use the Microsoft Visual
@@ -1068,13 +1068,13 @@ Old stuff:
 
 Fran├žois Revol - revol at free dot fr - April 2002
 
-The configure script should guess the configuration itself, 
+The configure script should guess the configuration itself,
 however I still didn't test building on the net_server version of BeOS.
 
 FFserver is broken (needs poll() implementation).
 
 There are still issues with errno codes, which are negative in BeOS, and
-that FFmpeg negates when returning. This ends up turning errors into 
+that FFmpeg negates when returning. This ends up turning errors into
 valid results, then crashes.
 (To be fixed)
 
@@ -1180,33 +1180,33 @@ int myfunc(int my_parameter)
 ...
 @end example
 
-fprintf and printf are forbidden in libavformat and libavcodec, 
+fprintf and printf are forbidden in libavformat and libavcodec,
 please use av_log() instead.
 
 @node CVS Policy
 @section CVS Policy
 
 @enumerate
-@item 
+@item
    You must not commit code which breaks FFmpeg! (Meaning unfinished but
    enabled code which breaks compilation or compiles but does not work or
    breaks the regression tests)
    You can commit unfinished stuff (for testing etc), but it must be disabled
    (#ifdef etc) by default so it does not interfere with other developers'
    work.
-@item 
+@item
    You don't have to over-test things. If it works for you, and you think it
    should work for others, then commit. If your code has problems
    (portability, triggers compiler bugs, unusual environment etc) they will be
    reported and eventually fixed.
-@item 
+@item
    Do not commit unrelated changes together, split them into self-contained
    pieces.
 @item
    Do not change behavior of the program (renaming options etc) without
    first discussing it on the ffmpeg-devel mailing list. Do not remove
    functionality from the code. Just improve!
-   
+
    Note: Redundant code can be removed.
 @item
    Do not commit changes to the build system (Makefiles, configure script)
@@ -1227,7 +1227,7 @@ please use av_log() instead.
    changes.
 
    NOTE: If you had to put if()@{ .. @} over a large (> 5 lines) chunk of code,
-   then either do NOT change the indentation of the inner part within (don't 
+   then either do NOT change the indentation of the inner part within (don't
    move it to the right)! or do so in a separate commit
 @item
    Always fill out the commit log message. Describe in a few lines what you
@@ -1281,7 +1281,7 @@ When you submit your patch, try to send a unified diff (diff '-up'
 option). I cannot read other diffs :-)
 
 Also please do not submit patches which contain several unrelated changes.
-Split them into individual self-contained patches; this makes reviewing 
+Split them into individual self-contained patches; this makes reviewing
 them much easier.
 
 Run the regression tests before submitting a patch so that you can
@@ -1289,7 +1289,7 @@ verify that there are no big problems.
 
 Patches should be posted as base64 encoded attachments (or any other
 encoding which ensures that the patch won't be trashed during
-transmission) to the ffmpeg-devel mailing list, see 
+transmission) to the ffmpeg-devel mailing list, see
 @url{http://www1.mplayerhq.hu/mailman/listinfo/ffmpeg-devel}
 
 It also helps quite a bit if you tell us what the patch does (for example
index b1bb484..a331212 100644 (file)
@@ -158,6 +158,6 @@ V) Enabling the PMC on Linux
 
 I don't know how to do it, sorry :-) Any idea very much welcome.
 
--- 
+--
 Romain Dolbeau
 <romain@dolbeau.org>
index 20525ed..f3e9dc3 100644 (file)
@@ -19,7 +19,7 @@ various FFmpeg APIs.
 @chapter Invocation
 
 @section Syntax
-@example 
+@example
 @c man begin SYNOPSIS
 ffplay [options] @file{input_file}
 @c man end
index 1780f6e..ed67bb6 100644 (file)
@@ -64,13 +64,13 @@ have a V4L video capture card):
 @end example
 
 At this point you should be able to go to your Windows machine and fire up
-Windows Media Player (WMP). Go to Open URL and enter 
+Windows Media Player (WMP). Go to Open URL and enter
 
 @example
     http://<linuxbox>:8090/test.asf
 @end example
 
-You should (after a short delay) see video and hear audio. 
+You should (after a short delay) see video and hear audio.
 
 WARNING: trying to stream test1.mpg doesn't work with WMP as it tries to
 transfer the entire file before starting to play.
@@ -78,7 +78,7 @@ The same is true of AVI files.
 
 @section What happens next?
 
-You should edit the ffserver.conf file to suit your needs (in terms of 
+You should edit the ffserver.conf file to suit your needs (in terms of
 frame rates etc). Then install ffserver and ffmpeg, write a script to start
 them up, and off you go.
 
@@ -89,10 +89,10 @@ them up, and off you go.
 Maybe you didn't install LAME, or got your ./configure statement wrong. Check
 the ffmpeg output to see if a line referring to MP3 is present. If not, then
 your configuration was incorrect. If it is, then maybe your wiring is not
-set up correctly. Maybe the sound card is not getting data from the right 
+set up correctly. Maybe the sound card is not getting data from the right
 input source. Maybe you have a really awful audio interface (like I do)
-that only captures in stereo and also requires that one channel be flipped. 
-If you are one of these people, then export 'AUDIO_FLIP_LEFT=1' before 
+that only captures in stereo and also requires that one channel be flipped.
+If you are one of these people, then export 'AUDIO_FLIP_LEFT=1' before
 starting ffmpeg.
 
 @subsection The audio and video loose sync after a while.
@@ -114,7 +114,7 @@ I suspect that the new one is not available unless you have installed WMP 7].
 @section What else can it do?
 
 You can replay video from .ffm files that was recorded earlier.
-However, there are a number of caveats, including the fact that the 
+However, there are a number of caveats, including the fact that the
 ffserver parameters must match the original parameters used to record the
 file. If they do not, then ffserver deletes the file before recording into it.
 (Now that I write this, it seems broken).
@@ -129,7 +129,7 @@ in browsers. These files are actually redirections to the underlying ASF
 or RM file. The reason for this is that the browser often fetches the
 entire file before starting up the external viewer. The redirection files
 are very small and can be transferred quickly. [The stream itself is
-often 'infinite' and thus the browser tries to download it and never 
+often 'infinite' and thus the browser tries to download it and never
 finishes.]
 
 @section Tips
@@ -140,7 +140,7 @@ signal continuously. However, ffserver (by default) starts sending data
 in realtime. This means that there is a pause of a few seconds while the
 buffering is being done by the player. The good news is that this can be
 cured by adding a '?buffer=5' to the end of the URL. This means that the
-stream should start 5 seconds in the past -- and so the first 5 seconds 
+stream should start 5 seconds in the past -- and so the first 5 seconds
 of the stream are sent as fast as the network will allow. It will then
 slow down to real time. This noticeably improves the startup experience.
 
@@ -161,14 +161,14 @@ means that the timestamp in the encoded data stream gets behind realtime.
 This means that if you say 'Preroll 10', then when the stream gets 10
 or more seconds behind, there is no Preroll left.
 
-Fixing this requires a change in the internals of how timestamps are 
+Fixing this requires a change in the internals of how timestamps are
 handled.
 
 @section Does the @code{?date=} stuff work.
 
 Yes (subject to the limitation outlined above). Also note that whenever you
 start ffserver, it deletes the ffm file (if any parameters have changed),
-thus wiping out what you had recorded before. 
+thus wiping out what you had recorded before.
 
 The format of the @code{?date=xxxxxx} is fairly flexible. You should use one
 of the following formats (the 'T' is literal):
@@ -178,7 +178,7 @@ of the following formats (the 'T' is literal):
 * YYYY-MM-DDTHH:MM:SSZ    (UTC)
 @end example
 
-You can omit the YYYY-MM-DD, and then it refers to the current day. However 
+You can omit the YYYY-MM-DD, and then it refers to the current day. However
 note that @samp{?date=16:00:00} refers to 16:00 on the current day -- this
 may be in the future and so is unlikely to be useful.
 
@@ -187,7 +187,7 @@ For example:   @samp{http://localhost:8080/test.asf?date=2002-07-26T23:05:00}.
 
 @chapter Invocation
 @section Syntax
-@example 
+@example
 @c man begin SYNOPSIS
 ffserver [options]
 @c man end
index 431ef93..a3b3ff4 100644 (file)
@@ -34,7 +34,7 @@ NoDaemon
 
 # You must use 'ffmpeg' to send a live feed to ffserver. In this
 # example, you can type:
-# 
+#
 # ffmpeg http://localhost:8090/feed1.ffm
 
 # ffserver can also do time shifting. It means that it can stream any
@@ -88,7 +88,7 @@ Feed feed1.ffm
 Format mpeg
 
 # Bitrate for the audio stream. Codecs usually support only a few
-# different bitrates. 
+# different bitrates.
 AudioBitRate 32
 
 # Number of audio channels: 1 = mono, 2 = stereo
@@ -123,7 +123,7 @@ VideoGopSize 12
 # VideoHighQuality
 # Video4MotionVector
 
-# Choose your codecs: 
+# Choose your codecs:
 #AudioCodec mp2
 #VideoCodec mpeg1video
 
@@ -153,7 +153,7 @@ VideoGopSize 12
 # stream basis. The first match defines the action. If there are no matches,
 # then the default is the inverse of the last ACL statement.
 #
-# Thus 'ACL allow localhost' only allows access from localhost. 
+# Thus 'ACL allow localhost' only allows access from localhost.
 # 'ACL deny 1.0.0.0 1.255.255.255' would deny the whole of network 1 and
 # allow everybody else.
 
@@ -181,7 +181,7 @@ VideoGopSize 12
 #<Stream test.jpg>
 #Feed feed1.ffm
 #Format jpeg
-#VideoFrameRate 2 
+#VideoFrameRate 2
 #VideoIntraOnly
 ##VideoSize 352x240
 #NoAudio
@@ -215,7 +215,7 @@ StartSendOnKey
 </Stream>
 
 
-# MP3 audio 
+# MP3 audio
 
 #<Stream test.mp3>
 #Feed feed1.ffm
@@ -310,7 +310,7 @@ StartSendOnKey
 # 'sdp' extension to the stream name (here
 # http://localhost:8090/test1-sdp.sdp). You should usually give this
 # file to your player to play the stream.
-# 
+#
 # The 'NoLoop' option can be used to avoid looping when the stream is
 # terminated.
 
index fff226f..a9c1255 100644 (file)
@@ -18,7 +18,7 @@ Any number of hook modules can be placed inline, and they are run in the
 order that they were specified on the ffmpeg command line.
 
 Three modules are provided and are described below. They are all intended to
-be used as a base for your own modules. 
+be used as a base for your own modules.
 
 Modules are loaded using the -vhook option to ffmpeg. The value of this parameter
 is a space separated list of arguments. The first is the module name, and the rest
index 52e7050..6971e6c 100755 (executable)
@@ -229,7 +229,7 @@ while(<$inf>) {
        $inf = gensym();
 
        # Try cwd and $ibase.
-       open($inf, "<" . $1) 
+       open($inf, "<" . $1)
            or open($inf, "<" . $ibase . "/" . $1)
                or die "cannot open $1 or $ibase/$1: $!\n";
        next;
index 3d3b65b..51e7189 100644 (file)
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -1,5 +1,5 @@
 /*
- * FFmpeg main 
+ * FFmpeg main
  * Copyright (c) 2000-2003 Fabrice Bellard
  *
  * This library is free software; you can redistribute it and/or
@@ -269,13 +269,13 @@ typedef struct AVOutputStream {
     int video_crop;          /* video_resample and video_crop are mutually exclusive */
     int topBand;             /* cropping area sizes */
     int leftBand;
-    
+
     int video_pad;           /* video_resample and video_pad are mutually exclusive */
     int padtop;              /* padding area sizes */
     int padbottom;
     int padleft;
     int padright;
-    
+
     /* audio only */
     int audio_resample;
     ReSampleContext *resample; /* for audio resampling */
@@ -342,7 +342,7 @@ static void term_init(void)
     tty.c_cflag |= CS8;
     tty.c_cc[VMIN] = 1;
     tty.c_cc[VTIME] = 0;
-    
+
     tcsetattr (0, TCSANOW, &tty);
 
     signal(SIGINT , sigterm_handler); /* Interrupt (ANSI).  */
@@ -441,8 +441,8 @@ get_sync_ipts(const AVOutputStream *ost)
 
 #define MAX_AUDIO_PACKET_SIZE (128 * 1024)
 
-static void do_audio_out(AVFormatContext *s, 
-                         AVOutputStream *ost, 
+static void do_audio_out(AVFormatContext *s,
+                         AVOutputStream *ost,
                          AVInputStream *ist,
                          unsigned char *buf, int size)
 {
@@ -463,7 +463,7 @@ static void do_audio_out(AVFormatContext *s,
         return;               /* Should signal an error ! */
 
     if(audio_sync_method){
-        double delta = get_sync_ipts(ost) * enc->sample_rate - ost->sync_opts 
+        double delta = get_sync_ipts(ost) * enc->sample_rate - ost->sync_opts
                 - fifo_size(&ost->fifo, ost->fifo.rptr)/(ost->st->codec->channels * 2);
         double idelta= delta*ist->st->codec->sample_rate / enc->sample_rate;
         int byte_delta= ((int)idelta)*2*ist->st->codec->channels;
@@ -504,14 +504,14 @@ static void do_audio_out(AVFormatContext *s,
 //                fprintf(stderr, "drift:%f len:%d opts:%lld ipts:%lld fifo:%d\n", delta, -1, ost->sync_opts, (int64_t)(get_sync_ipts(ost) * enc->sample_rate), fifo_size(&ost->fifo, ost->fifo.rptr)/(ost->st->codec->channels * 2));
                 av_resample_compensate(*(struct AVResampleContext**)ost->resample, comp, enc->sample_rate);
             }
-        } 
+        }
     }else
         ost->sync_opts= lrintf(get_sync_ipts(ost) * enc->sample_rate)
                         - fifo_size(&ost->fifo, ost->fifo.rptr)/(ost->st->codec->channels * 2); //FIXME wrong
 
     if (ost->audio_resample) {
         buftmp = audio_buf;
-        size_out = audio_resample(ost->resample, 
+        size_out = audio_resample(ost->resample,
                                   (short *)buftmp, (short *)buf,
                                   size / (ist->st->codec->channels * 2));
         size_out = size_out * enc->channels * 2;
@@ -523,17 +523,17 @@ static void do_audio_out(AVFormatContext *s,
     /* now encode as many frames as possible */
     if (enc->frame_size > 1) {
         /* output resampled raw samples */
-        fifo_write(&ost->fifo, buftmp, size_out, 
+        fifo_write(&ost->fifo, buftmp, size_out,
                    &ost->fifo.wptr);
 
         frame_bytes = enc->frame_size * 2 * enc->channels;
-        
-        while (fifo_read(&ost->fifo, audio_buf, frame_bytes, 
+
+        while (fifo_read(&ost->fifo, audio_buf, frame_bytes,
                      &ost->fifo.rptr) == 0) {
             AVPacket pkt;
             av_init_packet(&pkt);
 
-            ret = avcodec_encode_audio(enc, audio_out, audio_out_size, 
+            ret = avcodec_encode_audio(enc, audio_out, audio_out_size,
                                        (short *)audio_buf);
             audio_size += ret;
             pkt.stream_index= ost->index;
@@ -543,7 +543,7 @@ static void do_audio_out(AVFormatContext *s,
                 pkt.pts= av_rescale_q(enc->coded_frame->pts, enc->time_base, ost->st->time_base);
             pkt.flags |= PKT_FLAG_KEY;
             av_interleaved_write_frame(s, &pkt);
-            
+
             ost->sync_opts += enc->frame_size;
         }
     } else {
@@ -577,7 +577,7 @@ static void do_audio_out(AVFormatContext *s,
             size_out = size_out >> 1;
             break;
         }
-        ret = avcodec_encode_audio(enc, audio_out, size_out, 
+        ret = avcodec_encode_audio(enc, audio_out, size_out,
                                   (short *)buftmp);
         audio_size += ret;
         pkt.stream_index= ost->index;
@@ -608,12 +608,12 @@ static void pre_process_video_frame(AVInputStream *ist, AVPicture *picture, void
         buf = av_malloc(size);
         if (!buf)
             return;
-        
+
         picture2 = &picture_tmp;
         avpicture_fill(picture2, buf, dec->pix_fmt, dec->width, dec->height);
 
         if (do_deinterlace){
-            if(avpicture_deinterlace(picture2, picture, 
+            if(avpicture_deinterlace(picture2, picture,
                                      dec->pix_fmt, dec->width, dec->height) < 0) {
                 /* if error, do not deinterlace */
                 av_free(buf);
@@ -621,7 +621,7 @@ static void pre_process_video_frame(AVInputStream *ist, AVPicture *picture, void
                 picture2 = picture;
             }
         } else {
-            if (img_convert(picture2, dec->pix_fmt, picture, 
+            if (img_convert(picture2, dec->pix_fmt, picture,
                             dec->pix_fmt, dec->width, dec->height) < 0) {
                 /* if error, do not copy */
                 av_free(buf);
@@ -647,15 +647,15 @@ static void pre_process_video_frame(AVInputStream *ist, AVPicture *picture, void
 /* Expects img to be yuv420 */
 static void fill_pad_region(AVPicture* img, int height, int width,
         int padtop, int padbottom, int padleft, int padright, int *color) {
-  
+
     int i, y, shift;
     uint8_t *optr;
-    
+
     for (i = 0; i < 3; i++) {
         shift = (i == 0) ? 0 : 1;
-        
+
         if (padtop || padleft) {
-            memset(img->data[i], color[i], (((img->linesize[i] * padtop) + 
+            memset(img->data[i], color[i], (((img->linesize[i] * padtop) +
                             padleft) >> shift));
         }
 
@@ -668,7 +668,7 @@ static void fill_pad_region(AVPicture* img, int height, int width,
                 optr += img->linesize[i];
             }
         }
-      
+
         if (padbottom || padright) {
             optr = img->data[i] + (((img->linesize[i] * (height - padbottom)) - padright) >> shift);
             memset(optr, color[i], (((img->linesize[i] * padbottom) + padright) >> shift));
@@ -676,8 +676,8 @@ static void fill_pad_region(AVPicture* img, int height, int width,
     }
 }
 
-static void do_subtitle_out(AVFormatContext *s, 
-                            AVOutputStream *ost, 
+static void do_subtitle_out(AVFormatContext *s,
+                            AVOutputStream *ost,
                             AVInputStream *ist,
                             AVSubtitle *sub,
                             int64_t pts)
@@ -708,9 +708,9 @@ static void do_subtitle_out(AVFormatContext *s,
         nb = 1;
 
     for(i = 0; i < nb; i++) {
-        subtitle_out_size = avcodec_encode_subtitle(enc, subtitle_out, 
+        subtitle_out_size = avcodec_encode_subtitle(enc, subtitle_out,
                                                     subtitle_out_max_size, sub);
-        
+
         av_init_packet(&pkt);
         pkt.stream_index = ost->index;
         pkt.data = subtitle_out;
@@ -731,8 +731,8 @@ static void do_subtitle_out(AVFormatContext *s,
 static int bit_buffer_size= 1024*256;
 static uint8_t *bit_buffer= NULL;
 
-static void do_video_out(AVFormatContext *s, 
-                         AVOutputStream *ost, 
+static void do_video_out(AVFormatContext *s,
+                         AVOutputStream *ost,
                          AVInputStream *ist,
                          AVFrame *in_picture,
                          int *frame_size)
@@ -743,7 +743,7 @@ static void do_video_out(AVFormatContext *s,
     uint8_t *buf = NULL, *buf1 = NULL;
     AVCodecContext *enc, *dec;
     enum PixelFormat target_pixfmt;
-    
+
     avcodec_get_frame_defaults(&picture_format_temp);
     avcodec_get_frame_defaults(&picture_crop_temp);
 
@@ -777,7 +777,7 @@ static void do_video_out(AVFormatContext *s,
         ost->sync_opts= lrintf(get_sync_ipts(ost) / av_q2d(enc->time_base));
 
     nb_frames= FFMIN(nb_frames, max_frames[CODEC_TYPE_VIDEO] - ost->frame_number);
-    if (nb_frames <= 0) 
+    if (nb_frames <= 0)
         return;
 
     /* convert pixel format if needed */
@@ -793,9 +793,9 @@ static void do_video_out(AVFormatContext *s,
             return;
         formatted_picture = &picture_format_temp;
         avpicture_fill((AVPicture*)formatted_picture, buf, target_pixfmt, dec->width, dec->height);
-        
-        if (img_convert((AVPicture*)formatted_picture, target_pixfmt, 
-                        (AVPicture *)in_picture, dec->pix_fmt, 
+
+        if (img_convert((AVPicture*)formatted_picture, target_pixfmt,
+                        (AVPicture *)in_picture, dec->pix_fmt,
                         dec->width, dec->height) < 0) {
 
             if (verbose >= 0)
@@ -813,16 +813,16 @@ static void do_video_out(AVFormatContext *s,
     if (ost->video_resample) {
         final_picture = &ost->pict_tmp;
         img_resample(ost->img_resample_ctx, (AVPicture*)final_picture, (AVPicture*)formatted_picture);
-       
+
         if (ost->padtop || ost->padbottom || ost->padleft || ost->padright) {
             fill_pad_region((AVPicture*)final_picture, enc->height, enc->width,
                     ost->padtop, ost->padbottom, ost->padleft, ost->padright,
                     padcolor);
         }
-        
+
        if (enc->pix_fmt != PIX_FMT_YUV420P) {
             int size;
-           
+
            av_free(buf);
             /* create temporary picture */
             size = avpicture_get_size(enc->pix_fmt, enc->width, enc->height);
@@ -831,9 +831,9 @@ static void do_video_out(AVFormatContext *s,
                 return;
             final_picture = &picture_format_temp;
             avpicture_fill((AVPicture*)final_picture, buf, enc->pix_fmt, enc->width, enc->height);
-        
-            if (img_convert((AVPicture*)final_picture, enc->pix_fmt, 
-                            (AVPicture*)&ost->pict_tmp, PIX_FMT_YUV420P, 
+
+            if (img_convert((AVPicture*)final_picture, enc->pix_fmt,
+                            (AVPicture*)&ost->pict_tmp, PIX_FMT_YUV420P,
                             enc->width, enc->height) < 0) {
 
                 if (verbose >= 0)
@@ -865,9 +865,9 @@ static void do_video_out(AVFormatContext *s,
             uint8_t *optr, *iptr;
             int shift = (i == 0) ? 0 : 1;
             int y, yheight;
-            
+
             /* set offset to start writing image into */
-            optr = final_picture->data[i] + (((final_picture->linesize[i] * 
+            optr = final_picture->data[i] + (((final_picture->linesize[i] *
                             ost->padtop) + ost->padleft) >> shift);
             iptr = formatted_picture->data[i];
 
@@ -883,7 +883,7 @@ static void do_video_out(AVFormatContext *s,
         fill_pad_region((AVPicture*)final_picture, enc->height, enc->width,
                 ost->padtop, ost->padbottom, ost->padleft, ost->padright,
                 padcolor);
-        
+
         if (enc->pix_fmt != PIX_FMT_YUV420P) {
             int size;
 
@@ -896,8 +896,8 @@ static void do_video_out(AVFormatContext *s,
             final_picture = &picture_format_temp;
             avpicture_fill((AVPicture*)final_picture, buf, enc->pix_fmt, enc->width, enc->height);
 
-            if (img_convert((AVPicture*)final_picture, enc->pix_fmt, 
-                        (AVPicture*)&ost->pict_tmp, PIX_FMT_YUV420P, 
+            if (img_convert((AVPicture*)final_picture, enc->pix_fmt,
+                        (AVPicture*)&ost->pict_tmp, PIX_FMT_YUV420P,
                         enc->width, enc->height) < 0) {
 
                 if (verbose >= 0)
@@ -956,7 +956,7 @@ static void do_video_out(AVFormatContext *s,
             big_picture.pts= ost->sync_opts;
 //            big_picture.pts= av_rescale(ost->sync_opts, AV_TIME_BASE*(int64_t)enc->time_base.num, enc->time_base.den);
 //av_log(NULL, AV_LOG_DEBUG, "%lld -> encoder\n", ost->sync_opts);
-            ret = avcodec_encode_video(enc, 
+            ret = avcodec_encode_video(enc,
                                        bit_buffer, bit_buffer_size,
                                        &big_picture);
             //enc->frame_number = enc->real_pict_num;
@@ -965,7 +965,7 @@ static void do_video_out(AVFormatContext *s,
                 pkt.size= ret;
                 if(enc->coded_frame && enc->coded_frame->pts != AV_NOPTS_VALUE)
                     pkt.pts= av_rescale_q(enc->coded_frame->pts, enc->time_base, ost->st->time_base);
-/*av_log(NULL, AV_LOG_DEBUG, "encoder -> %lld/%lld\n", 
+/*av_log(NULL, AV_LOG_DEBUG, "encoder -> %lld/%lld\n",
    pkt.pts != AV_NOPTS_VALUE ? av_rescale(pkt.pts, enc->time_base.den, AV_TIME_BASE*(int64_t)enc->time_base.num) : -1,
    pkt.dts != AV_NOPTS_VALUE ? av_rescale(pkt.dts, enc->time_base.den, AV_TIME_BASE*(int64_t)enc->time_base.num) : -1);*/
 
@@ -995,7 +995,7 @@ static double psnr(double d){
     return -10.0*log(d)/log(10.0);
 }
 
-static void do_video_stats(AVFormatContext *os, AVOutputStream *ost, 
+static void do_video_stats(AVFormatContext *os, AVOutputStream *ost,
                            int frame_size)
 {
     static FILE *fvstats=NULL;
@@ -1006,7 +1006,7 @@ static void do_video_stats(AVFormatContext *os, AVOutputStream *ost,
     int frame_number;
     int64_t ti;
     double ti1, bitrate, avg_bitrate;
-    
+
     if (!fvstats) {
         today2 = time(NULL);
         today = localtime(&today2);
@@ -1019,7 +1019,7 @@ static void do_video_stats(AVFormatContext *os, AVOutputStream *ost,
             exit(1);
         }
     }
-    
+
     ti = MAXINT64;
     enc = ost->st->codec;
     if (enc->codec_type == CODEC_TYPE_VIDEO) {
@@ -1027,18 +1027,18 @@ static void do_video_stats(AVFormatContext *os, AVOutputStream *ost,
         fprintf(fvstats, "frame= %5d q= %2.1f ", frame_number, enc->coded_frame->quality/(float)FF_QP2LAMBDA);
         if (enc->flags&CODEC_FLAG_PSNR)
             fprintf(fvstats, "PSNR= %6.2f ", psnr(enc->coded_frame->error[0]/(enc->width*enc->height*255.0*255.0)));
-        
+
         fprintf(fvstats,"f_size= %6d ", frame_size);
         /* compute pts value */
         ti1 = ost->sync_opts * av_q2d(enc->time_base);
         if (ti1 < 0.01)
             ti1 = 0.01;
-    
+
         bitrate = (frame_size * 8) / av_q2d(enc->time_base) / 1000.0;
         avg_bitrate = (double)(video_size * 8) / ti1 / 1000.0;
         fprintf(fvstats, "s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s ",
             (double)video_size / 1024, ti1, bitrate, avg_bitrate);
-        fprintf(fvstats,"type= %c\n", av_get_pict_type_char(enc->coded_frame->pict_type));        
+        fprintf(fvstats,"type= %c\n", av_get_pict_type_char(enc->coded_frame->pict_type));
     }
 }
 
@@ -1054,7 +1054,7 @@ static void print_report(AVFormatContext **output_files,
     int frame_number, vid, i;
     double bitrate, ti1, pts;
     static int64_t last_time = -1;
-    
+
     if (!is_last_report) {
         int64_t cur_time;
         /* display the report every 0.5 seconds */
@@ -1062,7 +1062,7 @@ static void print_report(AVFormatContext **output_files,
         if (last_time == -1) {
             last_time = cur_time;
             return;
-        } 
+        }
         if ((cur_time - last_time) < 500000)
             return;
         last_time = cur_time;
@@ -1072,7 +1072,7 @@ static void print_report(AVFormatContext **output_files,
     oc = output_files[0];
 
     total_size = url_ftell(&oc->pb);
-    
+
     buf[0] = '\0';
     ti1 = 1e10;
     vid = 0;
@@ -1120,24 +1120,24 @@ static void print_report(AVFormatContext **output_files,
     }
     if (ti1 < 0.01)
         ti1 = 0.01;
-    
+
     if (verbose || is_last_report) {
         bitrate = (double)(total_size * 8) / ti1 / 1000.0;
-        
-        snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), 
+
+        snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),
             "size=%8.0fkB time=%0.1f bitrate=%6.1fkbits/s",
             (double)total_size / 1024, ti1, bitrate);
 
        if (verbose > 1)
          snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), " dup=%d drop=%d",
                  nb_frames_dup, nb_frames_drop);
-        
+
         if (verbose >= 0)
             fprintf(stderr, "%s    \r", buf);
 
         fflush(stderr);
     }
-        
+
     if (is_last_report && verbose >= 0){
         int64_t raw= audio_size + video_size + extra_size;
         fprintf(stderr, "\n");
@@ -1167,7 +1167,7 @@ static int output_packet(AVInputStream *ist, int ist_index,
     static short *samples= NULL;
     AVSubtitle subtitle, *subtitle_to_free;
     int got_subtitle;
-    
+
     if(!pkt){
         ist->pts= ist->next_pts; // needed for last packet if vsync=0
     } else if (pkt->dts != AV_NOPTS_VALUE) { //FIXME seems redundant, as libavformat does this too
@@ -1175,7 +1175,7 @@ static int output_packet(AVInputStream *ist, int ist_index,
     } else {
 //        assert(ist->pts == ist->next_pts);
     }
-    
+
     if (pkt == NULL) {
         /* EOF handling */
         ptr = NULL;
@@ -1194,7 +1194,7 @@ static int output_packet(AVInputStream *ist, int ist_index,
         if (ist->decoding_needed) {
             switch(ist->st->codec->codec_type) {
             case CODEC_TYPE_AUDIO:{
-                if(pkt) 
+                if(pkt)
                     samples= av_fast_realloc(samples, &samples_size, FFMAX(pkt->size, AVCODEC_MAX_AUDIO_FRAME_SIZE));
                     /* XXX: could avoid copy if PCM 16 bits with same
                        endianness as CPU */
@@ -1211,7 +1211,7 @@ static int output_packet(AVInputStream *ist, int ist_index,
                     continue;
                 }
                 data_buf = (uint8_t *)samples;
-                ist->next_pts += ((int64_t)AV_TIME_BASE/2 * data_size) / 
+                ist->next_pts += ((int64_t)AV_TIME_BASE/2 * data_size) /
                     (ist->st->codec->sample_rate * ist->st->codec->channels);
                 break;}
             case CODEC_TYPE_VIDEO:
@@ -1219,24 +1219,24 @@ static int output_packet(AVInputStream *ist, int ist_index,
                     /* XXX: allocate picture correctly */
                     avcodec_get_frame_defaults(&picture);
 
-                    ret = avcodec_decode_video(ist->st->codec, 
+                    ret = avcodec_decode_video(ist->st->codec,
                                                &picture, &got_picture, ptr, len);
                     ist->st->quality= picture.quality;
-                    if (ret < 0) 
+                    if (ret < 0)
                         goto fail_decode;
                     if (!got_picture) {
                         /* no picture yet */
                         goto discard_packet;
                     }
                     if (ist->st->codec->time_base.num != 0) {
-                        ist->next_pts += ((int64_t)AV_TIME_BASE * 
+                        ist->next_pts += ((int64_t)AV_TIME_BASE *
                                           ist->st->codec->time_base.num) /
                             ist->st->codec->time_base.den;
                     }
                     len = 0;
                     break;
             case CODEC_TYPE_SUBTITLE:
-                ret = avcodec_decode_subtitle(ist->st->codec, 
+                ret = avcodec_decode_subtitle(ist->st->codec,
                                               &subtitle, &got_subtitle, ptr, len);
                 if (ret < 0)
                     goto fail_decode;
@@ -1252,12 +1252,12 @@ static int output_packet(AVInputStream *ist, int ist_index,
         } else {
                 switch(ist->st->codec->codec_type) {
                 case CODEC_TYPE_AUDIO:
-                    ist->next_pts += ((int64_t)AV_TIME_BASE * ist->st->codec->frame_size) / 
+                    ist->next_pts += ((int64_t)AV_TIME_BASE * ist->st->codec->frame_size) /
                         (ist->st->codec->sample_rate * ist->st->codec->channels);
                     break;
                 case CODEC_TYPE_VIDEO:
                     if (ist->st->codec->time_base.num != 0) {
-                        ist->next_pts += ((int64_t)AV_TIME_BASE * 
+                        ist->next_pts += ((int64_t)AV_TIME_BASE *
                                           ist->st->codec->time_base.num) /
                             ist->st->codec->time_base.den;
                     }
@@ -1271,7 +1271,7 @@ static int output_packet(AVInputStream *ist, int ist_index,
 
             buffer_to_free = NULL;
             if (ist->st->codec->codec_type == CODEC_TYPE_VIDEO) {
-                pre_process_video_frame(ist, (AVPicture *)&picture, 
+                pre_process_video_frame(ist, (AVPicture *)&picture,
                                         &buffer_to_free);
             }
 
@@ -1312,7 +1312,7 @@ static int output_packet(AVInputStream *ist, int ist_index,
                 }
             }
 #endif
-            /* if output time reached then transcode raw format, 
+            /* if output time reached then transcode raw format,
               encode packets and output them */
             if (start_time == 0 || ist->pts >= start_time)
                 for(i=0;i<nb_ostreams;i++) {
@@ -1323,9 +1323,9 @@ static int output_packet(AVInputStream *ist, int ist_index,
                         os = output_files[ost->file_index];
 
 #if 0
-                        printf("%d: got pts=%0.3f %0.3f\n", i, 
-                               (double)pkt->pts / AV_TIME_BASE, 
-                               ((double)ist->pts / AV_TIME_BASE) - 
+                        printf("%d: got pts=%0.3f %0.3f\n", i,
+                               (double)pkt->pts / AV_TIME_BASE,
+                               ((double)ist->pts / AV_TIME_BASE) -
                                ((double)ost->st->pts.val * ost->st->time_base.num / ost->st->time_base.den));
 #endif
                         /* set the input output pts pairs */
@@ -1356,10 +1356,10 @@ static int output_packet(AVInputStream *ist, int ist_index,
 
                             /* no reencoding needed : output the packet directly */
                             /* force the input stream PTS */
-                        
+
                             avcodec_get_frame_defaults(&avframe);
                             ost->st->codec->coded_frame= &avframe;
-                            avframe.key_frame = pkt->flags & PKT_FLAG_KEY; 
+                            avframe.key_frame = pkt->flags & PKT_FLAG_KEY;
 
                             if(ost->st->codec->codec_type == CODEC_TYPE_AUDIO)
                                 audio_size += data_size;
@@ -1409,13 +1409,13 @@ static int output_packet(AVInputStream *ist, int ist_index,
  discard_packet:
     if (pkt == NULL) {
         /* EOF handling */
-  
+
         for(i=0;i<nb_ostreams;i++) {
             ost = ost_table[i];
             if (ost->source_index == ist_index) {
                 AVCodecContext *enc= ost->st->codec;
                 os = output_files[ost->file_index];
-                
+
                 if(ost->st->codec->codec_type == CODEC_TYPE_AUDIO && enc->frame_size <=1)
                     continue;
                 if(ost->st->codec->codec_type == CODEC_TYPE_VIDEO && (os->oformat->flags & AVFMT_RAWPICTURE))
@@ -1426,9 +1426,9 @@ static int output_packet(AVInputStream *ist, int ist_index,
                         AVPacket pkt;
                         av_init_packet(&pkt);
                         pkt.stream_index= ost->index;
+
                         switch(ost->st->codec->codec_type) {
-                        case CODEC_TYPE_AUDIO:        
+                        case CODEC_TYPE_AUDIO:
                             ret = avcodec_encode_audio(enc, bit_buffer, bit_buffer_size, NULL);
                             audio_size += ret;
                             pkt.flags |= PKT_FLAG_KEY;
@@ -1445,7 +1445,7 @@ static int output_packet(AVInputStream *ist, int ist_index,
                         default:
                             ret=-1;
                         }
-                            
+
                         if(ret<=0)
                             break;
                         pkt.data= bit_buffer;
@@ -1458,7 +1458,7 @@ static int output_packet(AVInputStream *ist, int ist_index,
             }
         }
     }
+
     return 0;
  fail_decode:
     return -1;
@@ -1486,7 +1486,7 @@ static int av_encode(AVFormatContext **output_files,
     file_table= (AVInputFile*) av_mallocz(nb_input_files * sizeof(AVInputFile));
     if (!file_table)
         goto fail;
-        
+
     /* input stream init */
     j = 0;
     for(i=0;i<nb_input_files;i++) {
@@ -1500,7 +1500,7 @@ static int av_encode(AVFormatContext **output_files,
     ist_table = av_mallocz(nb_istreams * sizeof(AVInputStream *));
     if (!ist_table)
         goto fail;
-    
+
     for(i=0;i<nb_istreams;i++) {
         ist = av_mallocz(sizeof(AVInputStream));
         if (!ist)
@@ -1540,7 +1540,7 @@ static int av_encode(AVFormatContext **output_files,
     for(i=0;i<nb_stream_maps;i++) {
         int fi = stream_maps[i].file_index;
         int si = stream_maps[i].stream_index;
-        
+
         if (fi < 0 || fi > nb_input_files - 1 ||
             si < 0 || si > file_table[fi].nb_streams - 1) {
             fprintf(stderr,"Could not find input stream #%d.%d\n", fi, si);
@@ -1554,7 +1554,7 @@ static int av_encode(AVFormatContext **output_files,
             exit(1);
         }
     }
-    
+
     ost_table = av_mallocz(sizeof(AVOutputStream *) * nb_ostreams);
     if (!ost_table)
         goto fail;
@@ -1564,7 +1564,7 @@ static int av_encode(AVFormatContext **output_files,
             goto fail;
         ost_table[i] = ost;
     }
-    
+
     n = 0;
     for(k=0;k<nb_output_files;k++) {
         os = output_files[k];
@@ -1575,9 +1575,9 @@ static int av_encode(AVFormatContext **output_files,
             ost->index = i;
             ost->st = os->streams[i];
             if (nb_stream_maps > 0) {
-                ost->source_index = file_table[stream_maps[n-1].file_index].ist_index + 
+                ost->source_index = file_table[stream_maps[n-1].file_index].ist_index +
                     stream_maps[n-1].stream_index;
-                    
+
                 /* Sanity check that the stream types match */
                 if (ist_table[ost->source_index]->st->codec->codec_type != ost->st->codec->codec_type) {
                     fprintf(stderr, "Codec type mismatch for mapping #%d.%d -> #%d.%d\n",
@@ -1585,20 +1585,20 @@ static int av_encode(AVFormatContext **output_files,
                         ost->file_index, ost->index);
                     exit(1);
                 }
-                
+
             } else {
                 /* get corresponding input stream index : we select the first one with the right type */
                 found = 0;
                 for(j=0;j<nb_istreams;j++) {
                     ist = ist_table[j];
-                    if (ist->discard && 
+                    if (ist->discard &&
                         ist->st->codec->codec_type == ost->st->codec->codec_type) {
                         ost->source_index = j;
                         found = 1;
                         break;
                     }
                 }
-                
+
                 if (!found) {
                     /* try again and reuse existing stream */
                     for(j=0;j<nb_istreams;j++) {
@@ -1662,7 +1662,7 @@ static int av_encode(AVFormatContext **output_files,
             case CODEC_TYPE_AUDIO:
                 if (fifo_init(&ost->fifo, 2 * MAX_AUDIO_PACKET_SIZE))
                     goto fail;
-                
+
                 if (codec->channels == icodec->channels &&
                     codec->sample_rate == icodec->sample_rate) {
                     ost->audio_resample = 0;
@@ -1680,7 +1680,7 @@ static int av_encode(AVFormatContext **output_files,
                             ost->audio_resample = 1;
                         }
                     } else {
-                        ost->audio_resample = 1; 
+                        ost->audio_resample = 1;
                     }
                 }
                 if(audio_sync_method>1)
@@ -1703,7 +1703,7 @@ static int av_encode(AVFormatContext **output_files,
                     frame_topBand == 0 &&
                     frame_bottomBand == 0 &&
                     frame_leftBand == 0 &&
-                    frame_rightBand == 0 && 
+                    frame_rightBand == 0 &&
                     frame_padtop == 0 &&
                     frame_padbottom == 0 &&
                     frame_padleft == 0 &&
@@ -1721,7 +1721,7 @@ static int av_encode(AVFormatContext **output_files,
                     ost->video_crop = 1;
                     ost->topBand = frame_topBand;
                     ost->leftBand = frame_leftBand;
-                } else if ((codec->width == icodec->width + 
+                } else if ((codec->width == icodec->width +
                                 (frame_padleft + frame_padright)) &&
                         (codec->height == icodec->height +
                                 (frame_padtop + frame_padbottom))) {
@@ -1744,19 +1744,19 @@ static int av_encode(AVFormatContext **output_files,
                                          codec->width, codec->height ) )
                         goto fail;
 
-                    ost->img_resample_ctx = img_resample_full_init( 
+                    ost->img_resample_ctx = img_resample_full_init(
                                       codec->width, codec->height,
                                       icodec->width, icodec->height,
                                       frame_topBand, frame_bottomBand,
-                            frame_leftBand, frame_rightBand, 
-                            frame_padtop, frame_padbottom, 
+                            frame_leftBand, frame_rightBand,
+                            frame_padtop, frame_padbottom,
                             frame_padleft, frame_padright);
-                    
+
                     ost->padtop = frame_padtop;
                     ost->padleft = frame_padleft;
                     ost->padbottom = frame_padbottom;
                     ost->padright = frame_padright;
-                   
+
                 }
                 ost->encoding_needed = 1;
                 ist->decoding_needed = 1;
@@ -1770,15 +1770,15 @@ static int av_encode(AVFormatContext **output_files,
                 break;
             }
             /* two pass mode */
-            if (ost->encoding_needed && 
+            if (ost->encoding_needed &&
                 (codec->flags & (CODEC_FLAG_PASS1 | CODEC_FLAG_PASS2))) {
                 char logfilename[1024];
                 FILE *f;
                 int size;
                 char *logbuffer;
-                
-                snprintf(logfilename, sizeof(logfilename), "%s-%d.log", 
-                         pass_logfilename ? 
+
+                snprintf(logfilename, sizeof(logfilename), "%s-%d.log",
+                         pass_logfilename ?
                          pass_logfilename : DEFAULT_PASS_LOGFILENAME, i);
                 if (codec->flags & CODEC_FLAG_PASS1) {
                     f = fopen(logfilename, "w");
@@ -1834,7 +1834,7 @@ static int av_encode(AVFormatContext **output_files,
             fprintf(stderr, "  Stream #%d.%d -> #%d.%d",
                     ist_table[ost->source_index]->file_index,
                     ist_table[ost->source_index]->index,
-                    ost->file_index, 
+                    ost->file_index,
                     ost->index);
             if (ost->sync_ist != ist_table[ost->source_index])
                 fprintf(stderr, " [sync #%d.%d]",
@@ -1851,12 +1851,12 @@ static int av_encode(AVFormatContext **output_files,
             AVCodec *codec;
             codec = avcodec_find_encoder(ost->st->codec->codec_id);
             if (!codec) {
-                fprintf(stderr, "Unsupported codec for output stream #%d.%d\n", 
+                fprintf(stderr, "Unsupported codec for output stream #%d.%d\n",
                         ost->file_index, ost->index);
                 exit(1);
             }
             if (avcodec_open(ost->st->codec, codec) < 0) {
-                fprintf(stderr, "Error while opening codec for output stream #%d.%d - maybe incorrect parameters such as bit_rate, rate, width or height\n", 
+                fprintf(stderr, "Error while opening codec for output stream #%d.%d - maybe incorrect parameters such as bit_rate, rate, width or height\n",
                         ost->file_index, ost->index);
                 exit(1);
             }
@@ -1871,12 +1871,12 @@ static int av_encode(AVFormatContext **output_files,
             AVCodec *codec;
             codec = avcodec_find_decoder(ist->st->codec->codec_id);
             if (!codec) {
-                fprintf(stderr, "Unsupported codec (id=%d) for input stream #%d.%d\n", 
+                fprintf(stderr, "Unsupported codec (id=%d) for input stream #%d.%d\n",
                         ist->st->codec->codec_id, ist->file_index, ist->index);
                 exit(1);
             }
             if (avcodec_open(ist->st->codec, codec) < 0) {
-                fprintf(stderr, "Error while opening codec for input stream #%d.%d\n", 
+                fprintf(stderr, "Error while opening codec for input stream #%d.%d\n",
                         ist->file_index, ist->index);
                 exit(1);
             }
@@ -1891,7 +1891,7 @@ static int av_encode(AVFormatContext **output_files,
        is = input_files[ist->file_index];
         ist->pts = 0;
         ist->next_pts = av_rescale_q(ist->st->start_time, ist->st->time_base, AV_TIME_BASE_Q);
-        if(ist->st->start_time == AV_NOPTS_VALUE) 
+        if(ist->st->start_time == AV_NOPTS_VALUE)
             ist->next_pts=0;
         if(input_files_ts_offset[ist->file_index])
             ist->next_pts= AV_NOPTS_VALUE;
@@ -1919,8 +1919,8 @@ static int av_encode(AVFormatContext **output_files,
             fprintf(stderr, "Invalid input file index %d map_meta_data(%d,%d)\n", in_file_index, out_file_index, in_file_index);
             ret = -EINVAL;
             goto fail;
-        }              
-                
+        }
+
         out_file = output_files[out_file_index];
         in_file = input_files[in_file_index];
 
@@ -1933,7 +1933,7 @@ static int av_encode(AVFormatContext **output_files,
         out_file->track = in_file->track;
         strcpy(out_file->genre, in_file->genre);
     }
-       
+
     /* open files and write file headers */
     for(i=0;i<nb_output_files;i++) {
         os = output_files[i];
@@ -2067,7 +2067,7 @@ static int av_encode(AVFormatContext **output_files,
 
     discard_packet:
         av_free_packet(&pkt);
-        
+
         /* dump report by using the output first video and audio streams */
         print_report(output_files, ost_table, nb_ostreams, 0);
     }
@@ -2099,7 +2099,7 @@ static int av_encode(AVFormatContext **output_files,
             avcodec_close(ost->st->codec);
         }
     }
-    
+
     /* close each decoder */
     for(i=0;i<nb_istreams;i++) {
         ist = ist_table[i];
@@ -2109,7 +2109,7 @@ static int av_encode(AVFormatContext **output_files,
     }
 
     /* finished ! */
-    
+
     ret = 0;
  fail1:
     av_freep(&bit_buffer);
@@ -2173,7 +2173,7 @@ int file_read(const char *filename)
 static void opt_image_format(const char *arg)
 {
     AVImageFormat *f;
-    
+
     for(f = first_image_format; f != NULL; f = f->next) {
         if (!strcmp(arg, f->name))
             break;
@@ -2269,7 +2269,7 @@ static void opt_frame_rate(const char *arg)
 
 static void opt_frame_crop_top(const char *arg)
 {
-    frame_topBand = atoi(arg); 
+    frame_topBand = atoi(arg);
     if (frame_topBand < 0) {
         fprintf(stderr, "Incorrect top crop size\n");
         exit(1);
@@ -2294,7 +2294,7 @@ static void opt_frame_crop_bottom(const char *arg)
     }
     if ((frame_bottomBand % 2) != 0) {
         fprintf(stderr, "Bottom crop size must be a multiple of 2\n");
-        exit(1);        
+        exit(1);
     }
     if ((frame_bottomBand) >= frame_height){
        fprintf(stderr, "Vertical crop dimensions are outside the range of the original image.\nRemember to crop first and scale second.\n");
@@ -2330,7 +2330,7 @@ static void opt_frame_crop_right(const char *arg)
     }
     if ((frame_rightBand % 2) != 0) {
         fprintf(stderr, "Right crop size must be a multiple of 2\n");
-        exit(1);        
+        exit(1);
     }
     if ((frame_rightBand) >= frame_width){
        fprintf(stderr, "Horizontal crop dimensions are outside the range of the original image.\nRemember to crop first and scale second.\n");
@@ -2373,8 +2373,8 @@ static void opt_pad_color(const char *arg) {
        how colors are expressed in html tags (but without the #) */
     int rgb = strtol(arg, NULL, 16);
     int r,g,b;
-    
-    r = (rgb >> 16); 
+
+    r = (rgb >> 16);
     g = ((rgb >> 8) & 255);
     b = (rgb & 255);
 
@@ -2385,7 +2385,7 @@ static void opt_pad_color(const char *arg) {
 
 static void opt_frame_pad_top(const char *arg)
 {
-    frame_padtop = atoi(arg); 
+    frame_padtop = atoi(arg);
     if (frame_padtop < 0) {
         fprintf(stderr, "Incorrect top pad size\n");
         exit(1);
@@ -2398,7 +2398,7 @@ static void opt_frame_pad_top(const char *arg)
 
 static void opt_frame_pad_bottom(const char *arg)
 {
-    frame_padbottom = atoi(arg); 
+    frame_padbottom = atoi(arg);
     if (frame_padbottom < 0) {
         fprintf(stderr, "Incorrect bottom pad size\n");
         exit(1);
@@ -2412,7 +2412,7 @@ static void opt_frame_pad_bottom(const char *arg)
 
 static void opt_frame_pad_left(const char *arg)
 {
-    frame_padleft = atoi(arg); 
+    frame_padleft = atoi(arg);
     if (frame_padleft < 0) {
         fprintf(stderr, "Incorrect left pad size\n");
         exit(1);
@@ -2426,7 +2426,7 @@ static void opt_frame_pad_left(const char *arg)
 
 static void opt_frame_pad_right(const char *arg)
 {
-    frame_padright = atoi(arg); 
+    frame_padright = atoi(arg);
     if (frame_padright < 0) {
         fprintf(stderr, "Incorrect right pad size\n");
         exit(1);
@@ -2448,7 +2448,7 @@ static void opt_frame_aspect_ratio(const char *arg)
     int x = 0, y = 0;
     double ar = 0;
     const char *p;
-    
+
     p = strchr(arg, ':');
     if (p) {
         x = strtol(arg, (char **)&arg, 10);
@@ -2819,7 +2819,7 @@ static void opt_map_meta_data(const char *arg)
 {
     AVMetaDataMap *m;
     const char *p;
-       
+
     p = arg;
     m = &meta_data_maps[nb_meta_data_maps++];
 
@@ -2860,7 +2860,7 @@ static void opt_input_file(const char *filename)
     if (!strcmp(filename, "-"))
         filename = "pipe:";
 
-    using_stdin |= !strncmp(filename, "pipe:", 5) || 
+    using_stdin |= !strncmp(filename, "pipe:", 5) ||
                    !strcmp( filename, "/dev/stdin" );
 
     /* get default parameters from command line */
@@ -2890,7 +2890,7 @@ static void opt_input_file(const char *filename)
 
     if(genpts)
         ic->flags|= AVFMT_FLAG_GENPTS;
-    
+
     /* If not enough info to get the stream parameters, we decode the
        first frames to get it. (used in mpeg case for example) */
     ret = av_find_stream_info(ic);
@@ -2908,7 +2908,7 @@ static void opt_input_file(const char *filename)
     if (start_time != 0) {
         ret = av_seek_frame(ic, -1, timestamp, AVSEEK_FLAG_BACKWARD);
         if (ret < 0) {
-            fprintf(stderr, "%s: could not seek to position %0.3f\n", 
+            fprintf(stderr, "%s: could not seek to position %0.3f\n",
                     filename, (double)timestamp / AV_TIME_BASE);
         }
         /* reset seek info */
@@ -2956,7 +2956,7 @@ static void opt_input_file(const char *filename)
             if(me_threshold)
                 enc->debug |= FF_DEBUG_MV;
 
-            if (enc->time_base.den != rfps || enc->time_base.num != rfps_base) { 
+            if (enc->time_base.den != rfps || enc->time_base.num != rfps_base) {
 
                 if (verbose >= 0)
                     fprintf(stderr,"\nSeems that stream %d comes from film source: %2.2f (%d/%d) -> %2.2f (%d/%d)\n",
@@ -2984,7 +2984,7 @@ static void opt_input_file(const char *filename)
             av_abort();
         }
     }
-    
+
     input_files[nb_input_files] = ic;
     input_files_ts_offset[nb_input_files] = input_ts_offset - (copy_ts ? 0 : timestamp);
     /* dump the file content */
@@ -2998,7 +2998,7 @@ static void opt_input_file(const char *filename)
 
     grab_device = NULL;
     video_channel = 0;
-    
+
     rate_emu = 0;
 }
 
@@ -3044,7 +3044,7 @@ static void new_video_stream(AVFormatContext *oc)
     AVStream *st;
     AVCodecContext *video_enc;
     int codec_id;
-    
+
     st = av_new_stream(oc, oc->nb_streams);
     if (!st) {
         fprintf(stderr, "Could not alloc stream\n");
@@ -3054,12 +3054,12 @@ static void new_video_stream(AVFormatContext *oc)
     if(thread_count>1)
         avcodec_thread_init(st->codec, thread_count);
 #endif
-    
+
     video_enc = st->codec;
-    
+
     if(video_codec_tag)
         video_enc->codec_tag= video_codec_tag;
-    
+
     if(   (video_global_header&1)
        || (video_global_header==0 && (oc->oformat->flags & AVFMT_GLOBALHEADER))){
         video_enc->flags |= CODEC_FLAG_GLOBAL_HEADER;
@@ -3077,25 +3077,25 @@ static void new_video_stream(AVFormatContext *oc)
         char *p;
         int i;
         AVCodec *codec;
-        
+
         codec_id = av_guess_codec(oc->oformat, NULL, oc->filename, NULL, CODEC_TYPE_VIDEO);
         if (video_codec_id != CODEC_ID_NONE)
             codec_id = video_codec_id;
-                
+
         video_enc->codec_id = codec_id;
         codec = avcodec_find_encoder(codec_id);
-        
+
         for(i=0; i<opt_name_count; i++){
              AVOption *opt;
              double d= av_get_double(avctx_opts, opt_names[i], &opt);
              if(d==d && (opt->flags&AV_OPT_FLAG_VIDEO_PARAM) && (opt->flags&AV_OPT_FLAG_ENCODING_PARAM))
                  av_set_double(video_enc, opt_names[i], d);
         }
-                
+
         video_enc->bit_rate = video_bit_rate;
         video_enc->bit_rate_tolerance = video_bit_rate_tolerance;
-        video_enc->time_base.den = frame_rate; 
-        video_enc->time_base.num = frame_rate_base; 
+        video_enc->time_base.den = frame_rate;
+        video_enc->time_base.num = frame_rate_base;
         if(codec && codec->supported_framerates){
             const AVRational *p= codec->supported_framerates;
             AVRational req= (AVRational){frame_rate, frame_rate_base};
@@ -3112,7 +3112,7 @@ static void new_video_stream(AVFormatContext *oc)
             video_enc->time_base.den= best->num;
             video_enc->time_base.num= best->den;
         }
-                
+
         video_enc->width = frame_width + frame_padright + frame_padleft;
         video_enc->height = frame_height + frame_padtop + frame_padbottom;
         video_enc->sample_aspect_ratio = av_d2q(frame_aspect_ratio*frame_height/frame_width, 255);
@@ -3134,7 +3134,7 @@ static void new_video_stream(AVFormatContext *oc)
             video_enc->gop_size = 0;
         if (video_qscale || same_quality) {
             video_enc->flags |= CODEC_FLAG_QSCALE;
-            video_enc->global_quality= 
+            video_enc->global_quality=
                 st->quality = FF_QP2LAMBDA * video_qscale;
         }
 
@@ -3144,7 +3144,7 @@ static void new_video_stream(AVFormatContext *oc)
             video_enc->inter_matrix = inter_matrix;
 
         video_enc->pre_me = pre_me;
-                
+
         if (b_frames) {
             video_enc->max_b_frames = b_frames;
             video_enc->b_frame_strategy = b_strategy;
@@ -3171,8 +3171,8 @@ static void new_video_stream(AVFormatContext *oc)
                 fprintf(stderr, "error parsing rc_override\n");
                 exit(1);
             }
-            video_enc->rc_override= 
-                av_realloc(video_enc->rc_override, 
+            video_enc->rc_override=
+                av_realloc(video_enc->rc_override,
                            sizeof(RcOverride)*(i+1));
             video_enc->rc_override[i].start_frame= start;
             video_enc->rc_override[i].end_frame  = end;
@@ -3217,10 +3217,10 @@ static void new_video_stream(AVFormatContext *oc)
             video_enc->rtp_mode= 1;
             video_enc->rtp_payload_size= packet_size;
         }
-            
+
         if (do_psnr)
             video_enc->flags|= CODEC_FLAG_PSNR;
-            
+
         video_enc->me_method = me_method;
 
         /* two pass mode */
@@ -3244,7 +3244,7 @@ static void new_audio_stream(AVFormatContext *oc)
     AVStream *st;
     AVCodecContext *audio_enc;
     int codec_id, i;
-            
+
     st = av_new_stream(oc, oc->nb_streams);
     if (!st) {
         fprintf(stderr, "Could not alloc stream\n");
@@ -3254,13 +3254,13 @@ static void new_audio_stream(AVFormatContext *oc)
     if(thread_count>1)
         avcodec_thread_init(st->codec, thread_count);
 #endif
-    
+
     audio_enc = st->codec;
     audio_enc->codec_type = CODEC_TYPE_AUDIO;
-    
+
     if(audio_codec_tag)
         audio_enc->codec_tag= audio_codec_tag;
-    
+
     if (oc->oformat->flags & AVFMT_GLOBALHEADER) {
         audio_enc->flags |= CODEC_FLAG_GLOBAL_HEADER;
         avctx_opts->flags|= CODEC_FLAG_GLOBAL_HEADER;
@@ -3270,18 +3270,18 @@ static void new_audio_stream(AVFormatContext *oc)
         audio_enc->channels = audio_channels;
     } else {
         codec_id = av_guess_codec(oc->oformat, NULL, oc->filename, NULL, CODEC_TYPE_AUDIO);
-       
+
         for(i=0; i<opt_name_count; i++){
             AVOption *opt;
             double d= av_get_double(avctx_opts, opt_names[i], &opt);
             if(d==d && (opt->flags&AV_OPT_FLAG_AUDIO_PARAM) && (opt->flags&AV_OPT_FLAG_ENCODING_PARAM))
                 av_set_double(audio_enc, opt_names[i], d);
         }
-       
+
         if (audio_codec_id != CODEC_ID_NONE)
             codec_id = audio_codec_id;
         audio_enc->codec_id = codec_id;
-        
+
         audio_enc->bit_rate = audio_bit_rate;
         if (audio_qscale > QSCALE_NONE) {
             audio_enc->flags |= CODEC_FLAG_QSCALE;
@@ -3317,7 +3317,7 @@ static void opt_new_subtitle_stream(void)
     AVStream *st;
     AVCodecContext *subtitle_enc;
     int i;
-            
+
     if (nb_output_files <= 0) {
         fprintf(stderr, "At least one output file must be specified\n");
         exit(1);
@@ -3395,11 +3395,11 @@ static void opt_output_file(const char *filename)
             exit(1);
         }
     }
-    
+
     oc->oformat = file_oformat;
     pstrcpy(oc->filename, sizeof(oc->filename), filename);
 
-    if (!strcmp(file_oformat->name, "ffm") && 
+    if (!strcmp(file_oformat->name, "ffm") &&
         strstart(filename, "http:", NULL)) {
         /* special case for files sent to ffserver: we get the stream
            parameters from ffserver */
@@ -3428,11 +3428,11 @@ static void opt_output_file(const char *filename)
         if (video_disable) {
             use_video = 0;
         }
-        
+
         if (use_video) {
             new_video_stream(oc);
         }
-    
+
         if (use_audio) {
             new_audio_stream(oc);
         }
@@ -3443,7 +3443,7 @@ static void opt_output_file(const char *filename)
         }
 
         oc->timestamp = rec_timestamp;
-           
+
        if (str_title)
             pstrcpy(oc->title, sizeof(oc->title), str_title);
         if (str_author)
@@ -3466,12 +3466,12 @@ static void opt_output_file(const char *filename)
 
     if (!(oc->oformat->flags & AVFMT_NOFILE)) {
         /* test if it already exists to avoid loosing precious files */
-        if (!file_overwrite && 
+        if (!file_overwrite &&
             (strchr(filename, ':') == NULL ||
              strstart(filename, "file:", NULL))) {
             if (url_exist(filename)) {
                 int c;
-                
+
                 if ( !using_stdin ) {
                     fprintf(stderr,"File '%s' already exists. Overwrite ? [y/N] ", filename);
                     fflush(stderr);
@@ -3487,7 +3487,7 @@ static void opt_output_file(const char *filename)
                                }
             }
         }
-        
+
         /* open the file */
         if (url_fopen(&oc->pb, filename, URL_WRONLY) < 0) {
             fprintf(stderr, "Could not open '%s'\n", filename);
@@ -3523,7 +3523,7 @@ static void prepare_grab(void)
     AVFormatContext *ic;
     AVFormatParameters vp1, *vp = &vp1;
     AVFormatParameters ap1, *ap = &ap1;
-    
+
     /* see if audio/video inputs are needed */
     has_video = 0;
     has_audio = 0;
@@ -3547,7 +3547,7 @@ static void prepare_grab(void)
                     vp->width = enc->width;
                 if (enc->height > vp->height)
                     vp->height = enc->height;
-                
+
                 if (vp->time_base.num*(int64_t)enc->time_base.den > enc->time_base.num*(int64_t)vp->time_base.den){
                     vp->time_base = enc->time_base;
                 }
@@ -3558,12 +3558,12 @@ static void prepare_grab(void)
             }
         }
     }
-    
+
     if (has_video == 0 && has_audio == 0) {
         fprintf(stderr, "Output file must have at least one audio or video stream\n");
         exit(1);
     }
-    
+
     if (has_video) {
         AVInputFormat *fmt1;
         fmt1 = av_find_input_format(video_grab_format);
@@ -3674,18 +3674,18 @@ static void show_formats(void)
         if(name==NULL)
             break;
         last_name= name;
-        
+
         printf(
-            " %s%s %-15s %s\n", 
-            decode ? "D":" ", 
-            encode ? "E":" ", 
+            " %s%s %-15s %s\n",
+            decode ? "D":" ",
+            encode ? "E":" ",
             name,
             long_name ? long_name:" ");
     }
     printf("\n");
 
     printf("Image formats (filename extensions, if any, follow):\n");
-    for(image_fmt = first_image_format; image_fmt != NULL; 
+    for(image_fmt = first_image_format; image_fmt != NULL;
         image_fmt = image_fmt->next) {
         printf(
             " %s%s %-6s %s\n",
@@ -3720,7 +3720,7 @@ static void show_formats(void)
         if(p2==NULL)
             break;
         last_name= p2->name;
-        
+
         switch(p2->type) {
         case CODEC_TYPE_VIDEO:
             type_str = "V";
@@ -3736,9 +3736,9 @@ static void show_formats(void)
             break;
         }
         printf(
-            " %s%s%s%s%s%s %s", 
-            decode ? "D": (/*p2->decoder ? "d":*/" "), 
-            encode ? "E":" ", 
+            " %s%s%s%s%s%s %s",
+            decode ? "D": (/*p2->decoder ? "d":*/" "),
+            encode ? "E":" ",
             type_str,
             cap & CODEC_CAP_DRAW_HORIZ_BAND ? "S":" ",
             cap & CODEC_CAP_DR1 ? "D":" ",
@@ -3754,17 +3754,17 @@ static void show_formats(void)
     for(up = first_protocol; up != NULL; up = up->next)
         printf(" %s:", up->name);
     printf("\n");
-    
+
     printf("Frame size, frame rate abbreviations:\n ntsc pal qntsc qpal sntsc spal film ntsc-film sqcif qcif cif 4cif\n");
     printf("Motion estimation methods:\n");
     pp = motion_str;
     while (*pp) {
         printf(" %s", *pp);
-        if ((pp - motion_str + 1) == ME_ZERO) 
+        if ((pp - motion_str + 1) == ME_ZERO)
             printf("(fastest)");
-        else if ((pp - motion_str + 1) == ME_FULL) 
+        else if ((pp - motion_str + 1) == ME_FULL)
             printf("(slowest)");
-        else if ((pp - motion_str + 1) == ME_EPZS) 
+        else if ((pp - motion_str + 1) == ME_EPZS)
             printf("(default)");
         pp++;
     }
@@ -3880,7 +3880,7 @@ static void opt_target(const char *arg)
 
         audio_bit_rate = 224000;
         audio_sample_rate = 44100;
-        
+
         mux_packet_size= 2324;
         mux_rate= 2352 * 75 * 8;
 
@@ -3953,7 +3953,7 @@ static void show_version(void)
 {
     fprintf(stderr, "ffmpeg      " FFMPEG_VERSION "\n"
            "libavcodec  %d\n"
-           "libavformat %d\n", 
+           "libavformat %d\n",
            avcodec_build(), LIBAVFORMAT_BUILD);
     exit(1);
 }
@@ -3962,13 +3962,13 @@ static int opt_default(const char *opt, const char *arg){
     AVOption *o= av_set_string(avctx_opts, opt, arg);
     if(!o)
         return -1;
-        
+
 //    av_log(NULL, AV_LOG_ERROR, "%s:%s: %f 0x%0X\n", opt, arg, av_get_double(avctx_opts, opt, NULL), (int)av_get_int(avctx_opts, opt, NULL));
 
     //FIXME we should always use avctx_opts, ... for storing options so there wont be any need to keep track of whats set over this
     opt_names= av_realloc(opt_names, sizeof(void*)*(opt_name_count+1));
     opt_names[opt_name_count++]= o->name;
-    
+
     /* disable generate of real time pts in ffm (need to be supressed anyway) */
     if(avctx_opts->flags & CODEC_FLAG_BITEXACT)
         ffm_nopts = 1;
@@ -3999,11 +3999,11 @@ const OptionDef options[] = {
     { "author", HAS_ARG | OPT_STRING, {(void*)&str_author}, "set the author", "string" },
     { "copyright", HAS_ARG | OPT_STRING, {(void*)&str_copyright}, "set the copyright", "string" },
     { "comment", HAS_ARG | OPT_STRING, {(void*)&str_comment}, "set the comment", "string" },
-    { "benchmark", OPT_BOOL | OPT_EXPERT, {(void*)&do_benchmark}, 
+    { "benchmark", OPT_BOOL | OPT_EXPERT, {(void*)&do_benchmark},
       "add timings for benchmarking" },
-    { "dump", OPT_BOOL | OPT_EXPERT, {(void*)&do_pkt_dump}, 
+    { "dump", OPT_BOOL | OPT_EXPERT, {(void*)&do_pkt_dump},
       "dump each input packet" },
-    { "hex", OPT_BOOL | OPT_EXPERT, {(void*)&do_hex_dump}, 
+    { "hex", OPT_BOOL | OPT_EXPERT, {(void*)&do_hex_dump},
       "when dumping packets, also dump the payload" },
     { "re", OPT_BOOL | OPT_EXPERT, {(void*)&rate_emu}, "read input at native frame rate", "" },
     { "loop", OPT_BOOL | OPT_EXPERT, {(void*)&loop_input}, "loop (current only works with images)" },
@@ -4065,7 +4065,7 @@ const OptionDef options[] = {
     { "minrate", HAS_ARG | OPT_VIDEO, {(void*)opt_video_bitrate_min}, "set min video bitrate tolerance (in kbit/s)", "bitrate" },
     { "bufsize", HAS_ARG | OPT_VIDEO, {(void*)opt_video_buffer_size}, "set ratecontrol buffer size (in kByte)", "size" },
     { "vcodec", HAS_ARG | OPT_VIDEO, {(void*)opt_video_codec}, "force video codec ('copy' to copy stream)", "codec" },
-    { "me", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_motion_estimation}, "set motion estimation method", 
+    { "me", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_motion_estimation}, "set motion estimation method",
       "method" },
     { "me_threshold", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_me_threshold}, "motion estimaton threshold",  "" },
     { "mb_threshold", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_mb_threshold}, "macroblock threshold",  "" },
@@ -4075,14 +4075,14 @@ const OptionDef options[] = {
     { "ps", HAS_ARG | OPT_EXPERT, {(void*)opt_packet_size}, "set packet size in bits", "size" },
     { "error", HAS_ARG | OPT_EXPERT, {(void*)opt_error_rate}, "error rate", "rate" },
     { "strict", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_strict}, "how strictly to follow the standards", "strictness" },
-    { "sameq", OPT_BOOL | OPT_VIDEO, {(void*)&same_quality}, 
+    { "sameq", OPT_BOOL | OPT_VIDEO, {(void*)&same_quality},
       "use same video quality as source (implies VBR)" },
     { "pass", HAS_ARG | OPT_VIDEO, {(void*)&opt_pass}, "select the pass number (1 or 2)", "n" },
     { "passlogfile", HAS_ARG | OPT_STRING | OPT_VIDEO, {(void*)&pass_logfilename}, "select two pass log file name", "file" },
-    { "deinterlace", OPT_BOOL | OPT_EXPERT | OPT_VIDEO, {(void*)&do_deinterlace}, 
+    { "deinterlace", OPT_BOOL | OPT_EXPERT | OPT_VIDEO, {(void*)&do_deinterlace},
       "deinterlace pictures" },
     { "psnr", OPT_BOOL | OPT_EXPERT | OPT_VIDEO, {(void*)&do_psnr}, "calculate PSNR of compressed frames" },
-    { "vstats", OPT_BOOL | OPT_EXPERT | OPT_VIDEO, {(void*)&do_vstats}, "dump video coding statistics to file" }, 
+    { "vstats", OPT_BOOL | OPT_EXPERT | OPT_VIDEO, {(void*)&do_vstats}, "dump video coding statistics to file" },
     { "vhook", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)add_frame_hooker}, "insert video processing module", "module" },
     { "intra_matrix", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_intra_matrix}, "specify intra matrix coeffs", "matrix" },
     { "inter_matrix", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_inter_matrix}, "specify inter matrix coeffs", "matrix" },
@@ -4114,18 +4114,18 @@ const OptionDef options[] = {
     { "scodec", HAS_ARG | OPT_SUBTITLE, {(void*)opt_subtitle_codec}, "force subtitle codec ('copy' to copy stream)", "codec" },
     { "newsubtitle", OPT_SUBTITLE, {(void*)opt_new_subtitle_stream}, "add a new subtitle stream to the current output stream" },
     { "slang", HAS_ARG | OPT_STRING | OPT_SUBTITLE, {(void *)&subtitle_language}, "set the ISO 639 language code (3 letters) of the current subtitle stream" , "code" },
-    
+
     /* grab options */
     { "vd", HAS_ARG | OPT_EXPERT | OPT_VIDEO | OPT_GRAB, {(void*)opt_video_device}, "set video grab device", "device" },
     { "vc", HAS_ARG | OPT_EXPERT | OPT_VIDEO | OPT_GRAB, {(void*)opt_video_channel}, "set video grab channel (DV1394 only)", "channel" },
     { "tvstd", HAS_ARG | OPT_EXPERT | OPT_VIDEO | OPT_GRAB, {(void*)opt_video_standard}, "set television standard (NTSC, PAL (SECAM))", "standard" },
     { "ad", HAS_ARG | OPT_EXPERT | OPT_AUDIO | OPT_GRAB, {(void*)opt_audio_device}, "set audio device", "device" },
 
-    /* G.2 grab options */ 
+    /* G.2 grab options */
     { "grab", HAS_ARG | OPT_EXPERT | OPT_GRAB, {(void*)opt_grab}, "request grabbing using", "format" },
     { "gd", HAS_ARG | OPT_EXPERT | OPT_VIDEO | OPT_GRAB, {(void*)opt_grab_device}, "set grab device", "device" },
-    /* muxer options */   
+
+    /* muxer options */
     { "muxrate", OPT_INT | HAS_ARG | OPT_EXPERT, {(void*)&mux_rate}, "set mux rate", "rate" },
     { "packetsize", OPT_INT | HAS_ARG | OPT_EXPERT, {(void*)&mux_packet_size}, "set packet size", "size" },
     { "muxdelay", OPT_FLOAT | HAS_ARG | OPT_EXPERT, {(void*)&mux_max_delay}, "set the maximum demux-decode delay", "seconds" },
@@ -4152,7 +4152,7 @@ static void show_license(void)
     show_banner();
 #ifdef CONFIG_GPL
     printf(
-    "This program is free software; you can redistribute it and/or modify\n"   
+    "This program is free software; you can redistribute it and/or modify\n"
     "it under the terms of the GNU General Public License as published by\n"
     "the Free Software Foundation; either version 2 of the License, or\n"
     "(at your option) any later version.\n"
@@ -4195,28 +4195,28 @@ static void show_help(void)
     show_help_options(options, "Main options:\n",
                       OPT_EXPERT | OPT_AUDIO | OPT_VIDEO, 0);
     show_help_options(options, "\nVideo options:\n",
-                      OPT_EXPERT | OPT_AUDIO | OPT_VIDEO | OPT_GRAB, 
+                      OPT_EXPERT | OPT_AUDIO | OPT_VIDEO | OPT_GRAB,
                       OPT_VIDEO);
     show_help_options(options, "\nAdvanced Video options:\n",
-                      OPT_EXPERT | OPT_AUDIO | OPT_VIDEO | OPT_GRAB, 
+                      OPT_EXPERT | OPT_AUDIO | OPT_VIDEO | OPT_GRAB,
                       OPT_VIDEO | OPT_EXPERT);
     show_help_options(options, "\nAudio options:\n",
-                      OPT_EXPERT | OPT_AUDIO | OPT_VIDEO | OPT_GRAB, 
+                      OPT_EXPERT | OPT_AUDIO | OPT_VIDEO | OPT_GRAB,
                       OPT_AUDIO);
     show_help_options(options, "\nAdvanced Audio options:\n",
-                      OPT_EXPERT | OPT_AUDIO | OPT_VIDEO | OPT_GRAB, 
+                      OPT_EXPERT | OPT_AUDIO | OPT_VIDEO | OPT_GRAB,
                       OPT_AUDIO | OPT_EXPERT);
     show_help_options(options, "\nSubtitle options:\n",
-                      OPT_SUBTITLE | OPT_GRAB, 
+                      OPT_SUBTITLE | OPT_GRAB,
                       OPT_SUBTITLE);
     show_help_options(options, "\nAudio/Video grab options:\n",
-                      OPT_GRAB, 
+                      OPT_GRAB,
                       OPT_GRAB);
     show_help_options(options, "\nAdvanced options:\n",
-                      OPT_EXPERT | OPT_AUDIO | OPT_VIDEO | OPT_GRAB, 
+                      OPT_EXPERT | OPT_AUDIO | OPT_VIDEO | OPT_GRAB,
                       OPT_EXPERT);
     av_opt_show(avctx_opts, NULL);
-                         
+
     exit(1);
 }
 
@@ -4231,14 +4231,14 @@ int main(int argc, char **argv)
     int64_t ti;
 
     av_register_all();
-    
+
     avctx_opts= avcodec_alloc_context();
 
     if (argc <= 1)
         show_help();
     else
         show_banner();
-    
+
     /* parse options */
     parse_options(argc, argv, options);
 
@@ -4247,14 +4247,14 @@ int main(int argc, char **argv)
         fprintf(stderr, "Must supply at least one output file\n");
         exit(1);
     }
-    
+
     if (nb_input_files == 0) {
         input_sync = 1;
         prepare_grab();
     }
 
     ti = getutime();
-    av_encode(output_files, nb_output_files, input_files, nb_input_files, 
+    av_encode(output_files, nb_output_files, input_files, nb_input_files,
               stream_maps, nb_stream_maps);
     ti = getutime() - ti;
     if (do_benchmark) {
@@ -4281,7 +4281,7 @@ int main(int argc, char **argv)
         av_free(intra_matrix);
     if(inter_matrix)
         av_free(inter_matrix);
-    
+
 #ifdef POWERPC_PERFORMANCE_REPORT
     extern void powerpc_display_perf_report(void);
     powerpc_display_perf_report();
index c8db5bd..3438dab 100644 (file)
--- a/ffplay.c
+++ b/ffplay.c
 #define INCL_DOS
  #include <os2.h>
  #include <stdio.h>
+
  void MorphToPM()
  {
    PPIB pib;
    PTIB tib;
+
    DosGetInfoBlocks(&tib, &pib);
+
    // Change flag from VIO to PM:
    if (pib->pib_ultype==2) pib->pib_ultype = 3;
  }
@@ -122,11 +122,11 @@ typedef struct VideoState {
     int dtg_active_format;
 
     int audio_stream;
-    
+
     int av_sync_type;
     double external_clock; /* external clock base */
     int64_t external_clock_time;
-    
+
     double audio_clock;
     double audio_diff_cum; /* used for AV difference average computation */
     double audio_diff_avg_coef;
@@ -137,18 +137,18 @@ typedef struct VideoState {
     int audio_hw_buf_size;
     /* samples output by the codec. we reserve more space for avsync
        compensation */
-    uint8_t audio_buf[(AVCODEC_MAX_AUDIO_FRAME_SIZE * 3) / 2]; 
+    uint8_t audio_buf[(AVCODEC_MAX_AUDIO_FRAME_SIZE * 3) / 2];
     unsigned int audio_buf_size; /* in bytes */
     int audio_buf_index; /* in bytes */
     AVPacket audio_pkt;
     uint8_t *audio_pkt_data;
     int audio_pkt_size;
-    
+
     int show_audio; /* if true, display audio samples */
     int16_t sample_array[SAMPLE_ARRAY_SIZE];
     int sample_array_index;
     int last_i_start;
-    
+
     SDL_Thread *subtitle_tid;
     int subtitle_stream;
     int subtitle_stream_changed;
@@ -158,11 +158,11 @@ typedef struct VideoState {
     int subpq_size, subpq_rindex, subpq_windex;
     SDL_mutex *subpq_mutex;
     SDL_cond *subpq_cond;
-        
+
     double frame_timer;
     double frame_last_pts;
     double frame_last_delay;
-    double video_clock;                          ///<pts of last decoded frame / predicted pts of next decoded frame 
+    double video_clock;                          ///<pts of last decoded frame / predicted pts of next decoded frame
     int video_stream;
     AVStream *video_st;
     PacketQueue videoq;
@@ -172,7 +172,7 @@ typedef struct VideoState {
     int pictq_size, pictq_rindex, pictq_windex;
     SDL_mutex *pictq_mutex;
     SDL_cond *pictq_cond;
-    
+
     SDL_mutex *video_decoder_mutex;
     SDL_mutex *audio_decoder_mutex;
     SDL_mutex *subtitle_decoder_mutex;
@@ -264,7 +264,7 @@ static int packet_queue_put(PacketQueue *q, AVPacket *pkt)
     /* duplicate the packet */
     if (av_dup_packet(pkt) < 0)
         return -1;
-    
+
     pkt1 = av_malloc(sizeof(AVPacketList));
     if (!pkt1)
         return -1;
@@ -294,7 +294,7 @@ static void packet_queue_abort(PacketQueue *q)
     SDL_LockMutex(q->mutex);
 
     q->abort_request = 1;
-    
+
     SDL_CondSignal(q->cond);
 
     SDL_UnlockMutex(q->mutex);
@@ -313,7 +313,7 @@ static int packet_queue_get(PacketQueue *q, AVPacket *pkt, int block)
             ret = -1;
             break;
         }
-            
+
         pkt1 = q->first_pkt;
         if (pkt1) {
             q->first_pkt = pkt1->next;
@@ -336,7 +336,7 @@ static int packet_queue_get(PacketQueue *q, AVPacket *pkt, int block)
     return ret;
 }
 
-static inline void fill_rectangle(SDL_Surface *screen, 
+static inline void fill_rectangle(SDL_Surface *screen,
                                   int x, int y, int w, int h, int color)
 {
     SDL_Rect rect;
@@ -366,19 +366,19 @@ void fill_border(VideoState *s, int x, int y, int w, int h, int color)
     h2 = s->height - (y + h);
     if (h2 < 0)
         h2 = 0;
-    fill_rectangle(screen, 
-                   s->xleft, s->ytop, 
-                   w1, s->height, 
+    fill_rectangle(screen,
+                   s->xleft, s->ytop,
+                   w1, s->height,
                    color);
-    fill_rectangle(screen, 
-                   s->xleft + s->width - w2, s->ytop, 
-                   w2, s->height, 
+    fill_rectangle(screen,
+                   s->xleft + s->width - w2, s->ytop,
+                   w2, s->height,
                    color);
-    fill_rectangle(screen, 
-                   s->xleft + w1, s->ytop, 
-                   s->width - w1 - w2, h1, 
+    fill_rectangle(screen,
+                   s->xleft + w1, s->ytop,
+                   s->width - w1 - w2, h1,
                    color);
-    fill_rectangle(screen, 
+    fill_rectangle(screen,
                    s->xleft + w1, s->ytop + s->height - h2,
                    s->width - w1 - w2, h2,
                    color);
@@ -450,12 +450,12 @@ static void blend_subrect(AVPicture *dst, const AVSubtitleRect *rect)
     wrap3 = rect->linesize;
     p = rect->bitmap;
     pal = rect->rgba_palette;  /* Now in YCrCb! */
-    
+
     if (rect->y & 1) {
         lum += rect->x;
         cb += skip2;
         cr += skip2;
-    
+
         if (rect->x & 1) {
             YUVA_IN(y, u, v, a, p, pal);
             lum[0] = ALPHA_BLEND(a, lum[0], y, 0);
@@ -500,7 +500,7 @@ static void blend_subrect(AVPicture *dst, const AVSubtitleRect *rect)
         lum += rect->x;
         cb += skip2;
         cr += skip2;
-    
+
         if (rect->x & 1) {
             YUVA_IN(y, u, v, a, p, pal);
             u1 = u;
@@ -586,7 +586,7 @@ static void blend_subrect(AVPicture *dst, const AVSubtitleRect *rect)
         lum += rect->x;
         cb += skip2;
         cr += skip2;
-    
+
         if (rect->x & 1) {
             YUVA_IN(y, u, v, a, p, pal);
             lum[0] = ALPHA_BLEND(a, lum[0], y, 0);
@@ -628,15 +628,15 @@ static void blend_subrect(AVPicture *dst, const AVSubtitleRect *rect)
 static void free_subpicture(SubPicture *sp)
 {
     int i;
-    
+
     for (i = 0; i < sp->sub.num_rects; i++)
     {
         av_free(sp->sub.rects[i].bitmap);
         av_free(sp->sub.rects[i].rgba_palette);
     }
-    
+
     av_free(sp->sub.rects);
-    
+
     memset(&sp->sub, 0, sizeof(AVSubtitle));
 }
 
@@ -653,13 +653,13 @@ static void video_image_display(VideoState *is)
     vp = &is->pictq[is->pictq_rindex];
     if (vp->bmp) {
         /* XXX: use variable in the frame */
-        if (is->video_st->codec->sample_aspect_ratio.num == 0) 
+        if (is->video_st->codec->sample_aspect_ratio.num == 0)
             aspect_ratio = 0;
         else
-            aspect_ratio = av_q2d(is->video_st->codec->sample_aspect_ratio) 
+            aspect_ratio = av_q2d(is->video_st->codec->sample_aspect_ratio)
                 * is->video_st->codec->width / is->video_st->codec->height;;
         if (aspect_ratio <= 0.0)
-            aspect_ratio = (float)is->video_st->codec->width / 
+            aspect_ratio = (float)is->video_st->codec->width /
                 (float)is->video_st->codec->height;
         /* if an active format is indicated, then it overrides the
            mpeg format */
@@ -745,8 +745,8 @@ static void video_image_display(VideoState *is)
         SDL_DisplayYUVOverlay(vp->bmp, &rect);
     } else {
 #if 0
-        fill_rectangle(screen, 
-                       is->xleft, is->ytop, is->width, is->height, 
+        fill_rectangle(screen,
+                       is->xleft, is->ytop, is->width, is->height,
                        QERGB(0x00, 0x00, 0x00));
 #endif
     }
@@ -755,7 +755,7 @@ static void video_image_display(VideoState *is)
 static inline int compute_mod(int a, int b)
 {
     a = a % b;
-    if (a >= 0) 
+    if (a >= 0)
         return a;
     else
         return a + b;
@@ -766,7 +766,7 @@ static void video_audio_display(VideoState *s)
     int i, i_start, x, y1, y, ys, delay, n, nb_display_channels;
     int ch, channels, h, h2, bgcolor, fgcolor;
     int16_t time_diff;
-    
+
     /* compute display index : center on currently output samples */
     channels = s->audio_st->codec->channels;
     nb_display_channels = channels;
@@ -774,14 +774,14 @@ static void video_audio_display(VideoState *s)
         n = 2 * channels;
         delay = audio_write_get_buf_size(s);
         delay /= n;
-        
+
         /* to be more precise, we take into account the time spent since
            the last buffer computation */
         if (audio_callback_time) {
             time_diff = av_gettime() - audio_callback_time;
             delay += (time_diff * s->audio_st->codec->sample_rate) / 1000000;
         }
-        
+
         delay -= s->width / 2;
         if (delay < s->width)
             delay = s->width;
@@ -792,8 +792,8 @@ static void video_audio_display(VideoState *s)
     }
 
     bgcolor = SDL_MapRGB(screen->format, 0x00, 0x00, 0x00);
-    fill_rectangle(screen, 
-                   s->xleft, s->ytop, s->width, s->height, 
+    fill_rectangle(screen,
+                   s->xleft, s->ytop, s->width, s->height,
                    bgcolor);
 
     fgcolor = SDL_MapRGB(screen->format, 0xff, 0xff, 0xff);
@@ -813,8 +813,8 @@ static void video_audio_display(VideoState *s)
             } else {
                 ys = y1;
             }
-            fill_rectangle(screen, 
-                           s->xleft + x, ys, 1, y, 
+            fill_rectangle(screen,
+                           s->xleft + x, ys, 1, y,
                            fgcolor);
             i += channels;
             if (i >= SAMPLE_ARRAY_SIZE)
@@ -826,8 +826,8 @@ static void video_audio_display(VideoState *s)
 
     for(ch = 1;ch < nb_display_channels; ch++) {
         y = s->ytop + ch * h;
-        fill_rectangle(screen, 
-                       s->xleft, y, s->width, 1, 
+        fill_rectangle(screen,
+                       s->xleft, y, s->width, 1,
                        fgcolor);
     }
     SDL_UpdateRect(screen, s->xleft, s->ytop, s->width, s->height);
@@ -836,7 +836,7 @@ static void video_audio_display(VideoState *s)
 /* display the current picture, if any */
 static void video_display(VideoState *is)
 {
-    if (is->audio_st && is->show_audio) 
+    if (is->audio_st && is->show_audio)
         video_audio_display(is);
     else if (is->video_st)
         video_image_display(is);
@@ -866,7 +866,7 @@ static double get_audio_clock(VideoState *is)
     hw_buf_size = audio_write_get_buf_size(is);
     bytes_per_sec = 0;
     if (is->audio_st) {
-        bytes_per_sec = is->audio_st->codec->sample_rate * 
+        bytes_per_sec = is->audio_st->codec->sample_rate *
             2 * is->audio_st->codec->channels;
     }
     if (bytes_per_sec)
@@ -971,7 +971,7 @@ static void video_refresh_timer(void *opaque)
                    duplicating or deleting a frame */
                 ref_clock = get_master_clock(is);
                 diff = vp->pts - ref_clock;
-                
+
                 /* skip or repeat frame. We take into account the
                    delay to compute the threshold. I still don't know
                    if it is the best guess */
@@ -998,21 +998,21 @@ static void video_refresh_timer(void *opaque)
             schedule_refresh(is, (int)(actual_delay * 1000 + 0.5));
 
 #if defined(DEBUG_SYNC)
-            printf("video: delay=%0.3f actual_delay=%0.3f pts=%0.3f A-V=%f\n", 
+            printf("video: delay=%0.3f actual_delay=%0.3f pts=%0.3f A-V=%f\n",
                    delay, actual_delay, vp->pts, -diff);
 #endif
 
             if(is->subtitle_st) {
                 if (is->subtitle_stream_changed) {
                     SDL_LockMutex(is->subpq_mutex);
-                    
+
                     while (is->subpq_size) {
                         free_subpicture(&is->subpq[is->subpq_rindex]);
-                    
+
                         /* update queue size and signal for next picture */
                         if (++is->subpq_rindex == SUBPICTURE_QUEUE_SIZE)
                             is->subpq_rindex = 0;
-                                
+
                         is->subpq_size--;
                     }
                     is->subtitle_stream_changed = 0;
@@ -1048,11 +1048,11 @@ static void video_refresh_timer(void *opaque)
 
             /* display picture */
             video_display(is);
-            
+
             /* update queue size and signal for next picture */
             if (++is->pictq_rindex == VIDEO_PICTURE_QUEUE_SIZE)
                 is->pictq_rindex = 0;
-            
+
             SDL_LockMutex(is->pictq_mutex);
             is->pictq_size--;
             SDL_CondSignal(is->pictq_cond);
@@ -1065,7 +1065,7 @@ static void video_refresh_timer(void *opaque)
 
         /* if only audio stream, then display the audio bars (better
            than nothing, just to test the implementation */
-        
+
         /* display picture */
         video_display(is);
     } else {
@@ -1076,7 +1076,7 @@ static void video_refresh_timer(void *opaque)
         int64_t cur_time;
         int aqsize, vqsize, sqsize;
         double av_diff;
-        
+
         cur_time = av_gettime();
         if (!last_time || (cur_time - last_time) >= 500 * 1000) {
             aqsize = 0;
@@ -1091,7 +1091,7 @@ static void video_refresh_timer(void *opaque)
             av_diff = 0;
             if (is->audio_st && is->video_st)
                 av_diff = get_audio_clock(is) - get_video_clock(is);
-            printf("%7.2f A-V:%7.3f aq=%5dKB vq=%5dKB sq=%5dB    \r", 
+            printf("%7.2f A-V:%7.3f aq=%5dKB vq=%5dKB sq=%5dB    \r",
                    get_master_clock(is), av_diff, aqsize / 1024, vqsize / 1024, sqsize);
             fflush(stdout);
             last_time = cur_time;
@@ -1130,7 +1130,7 @@ static void alloc_picture(void *opaque)
 #endif
     vp->bmp = SDL_CreateYUVOverlay(is->video_st->codec->width,
                                    is->video_st->codec->height,
-                                   SDL_YV12_OVERLAY, 
+                                   SDL_YV12_OVERLAY,
                                    screen);
     vp->width = is->video_st->codec->width;
     vp->height = is->video_st->codec->height;
@@ -1150,7 +1150,7 @@ static int queue_picture(VideoState *is, AVFrame *src_frame, double pts)
     VideoPicture *vp;
     int dst_pix_fmt;
     AVPicture pict;
-    
+
     /* wait until we have space to put a new picture */
     SDL_LockMutex(is->pictq_mutex);
     while (is->pictq_size >= VIDEO_PICTURE_QUEUE_SIZE &&
@@ -1158,14 +1158,14 @@ static int queue_picture(VideoState *is, AVFrame *src_frame, double pts)
         SDL_CondWait(is->pictq_cond, is->pictq_mutex);
     }
     SDL_UnlockMutex(is->pictq_mutex);
-    
+
     if (is->videoq.abort_request)
         return -1;
 
     vp = &is->pictq[is->pictq_windex];
 
     /* alloc or resize hardware picture buffer */
-    if (!vp->bmp || 
+    if (!vp->bmp ||
         vp->width != is->video_st->codec->width ||
         vp->height != is->video_st->codec->height) {
         SDL_Event event;
@@ -1177,7 +1177,7 @@ static int queue_picture(VideoState *is, AVFrame *src_frame, double pts)
         event.type = FF_ALLOC_EVENT;
         event.user.data1 = is;
         SDL_PushEvent(&event);
-        
+
         /* wait until the picture is allocated */
         SDL_LockMutex(is->pictq_mutex);
         while (!vp->allocated && !is->videoq.abort_request) {
@@ -1202,8 +1202,8 @@ static int queue_picture(VideoState *is, AVFrame *src_frame, double pts)
         pict.linesize[0] = vp->bmp->pitches[0];
         pict.linesize[1] = vp->bmp->pitches[2];
         pict.linesize[2] = vp->bmp->pitches[1];
-        img_convert(&pict, dst_pix_fmt, 
-                    (AVPicture *)src_frame, is->video_st->codec->pix_fmt, 
+        img_convert(&pict, dst_pix_fmt,
+                    (AVPicture *)src_frame, is->video_st->codec->pix_fmt,
                     is->video_st->codec->width, is->video_st->codec->height);
         /* update the bitmap content */
         SDL_UnlockYUVOverlay(vp->bmp);
@@ -1220,14 +1220,14 @@ static int queue_picture(VideoState *is, AVFrame *src_frame, double pts)
     return 0;
 }
 
-/** 
- * compute the exact PTS for the picture if it is omitted in the stream 
+/**
+ * compute the exact PTS for the picture if it is omitted in the stream
  * @param pts1 the dts of the pkt / pts of the frame
  */
 static int output_picture2(VideoState *is, AVFrame *src_frame, double pts1)
 {
     double frame_delay, pts;
-    
+
     pts = pts1;
 
     if (pts != 0) {
@@ -1252,7 +1252,7 @@ static int output_picture2(VideoState *is, AVFrame *src_frame, double pts1)
             ftype = 'I';
         else
             ftype = 'P';
-        printf("frame_type=%c clock=%0.3f pts=%0.3f\n", 
+        printf("frame_type=%c clock=%0.3f pts=%0.3f\n",
                ftype, pts, pts1);
     }
 #endif
@@ -1280,8 +1280,8 @@ static int video_thread(void *arg)
             pts = av_q2d(is->video_st->time_base)*pkt->dts;
 
             SDL_LockMutex(is->video_decoder_mutex);
-            len1 = avcodec_decode_video(is->video_st->codec, 
-                                        frame, &got_picture, 
+            len1 = avcodec_decode_video(is->video_st->codec,
+                                        frame, &got_picture,
                                         pkt->data, pkt->size);
             SDL_UnlockMutex(is->video_decoder_mutex);
 //            if (len1 < 0)
@@ -1291,7 +1291,7 @@ static int video_thread(void *arg)
                     goto the_end;
             }
         av_free_packet(pkt);
-        if (step) 
+        if (step)
             if (cur_stream)
                 stream_pause(cur_stream);
     }
@@ -1316,17 +1316,17 @@ static int subtitle_thread(void *arg)
         }
         if (packet_queue_get(&is->subtitleq, pkt, 1) < 0)
             break;
-            
+
         SDL_LockMutex(is->subpq_mutex);
         while (is->subpq_size >= SUBPICTURE_QUEUE_SIZE &&
                !is->subtitleq.abort_request) {
             SDL_CondWait(is->subpq_cond, is->subpq_mutex);
         }
         SDL_UnlockMutex(is->subpq_mutex);
-        
+
         if (is->subtitleq.abort_request)
             goto the_end;
-            
+
         sp = &is->subpq[is->subpq_windex];
 
        /* NOTE: ipts is the PTS of the _first_ picture beginning in
@@ -1336,15 +1336,15 @@ static int subtitle_thread(void *arg)
             pts = av_q2d(is->subtitle_st->time_base)*pkt->pts;
 
         SDL_LockMutex(is->subtitle_decoder_mutex);
-        len1 = avcodec_decode_subtitle(is->subtitle_st->codec, 
-                                    &sp->sub, &got_subtitle, 
+        len1 = avcodec_decode_subtitle(is->subtitle_st->codec,
+                                    &sp->sub, &got_subtitle,
                                     pkt->data, pkt->size);
         SDL_UnlockMutex(is->subtitle_decoder_mutex);
 //            if (len1 < 0)
 //                break;
         if (got_subtitle && sp->sub.format == 0) {
             sp->pts = pts;
-            
+
             for (i = 0; i < sp->sub.num_rects; i++)
             {
                 for (j = 0; j < sp->sub.rects[i].nb_colors; j++)
@@ -1365,7 +1365,7 @@ static int subtitle_thread(void *arg)
             SDL_UnlockMutex(is->subpq_mutex);
         }
         av_free_packet(pkt);
-//        if (step) 
+//        if (step)
 //            if (cur_stream)
 //                stream_pause(cur_stream);
     }
@@ -1396,12 +1396,12 @@ static void update_sample_display(VideoState *is, short *samples, int samples_si
 
 /* return the new audio buffer size (samples can be added or deleted
    to get better sync if video or external master clock) */
-static int synchronize_audio(VideoState *is, short *samples, 
+static int synchronize_audio(VideoState *is, short *samples,
                              int samples_size1, double pts)
 {
     int n, samples_size;
     double ref_clock;
-    
+
     n = 2 * is->audio_st->codec->channels;
     samples_size = samples_size1;
 
@@ -1410,10 +1410,10 @@ static int synchronize_audio(VideoState *is, short *samples,
          is->av_sync_type == AV_SYNC_EXTERNAL_CLOCK)) {
         double diff, avg_diff;
         int wanted_size, min_size, max_size, nb_samples;
-            
+
         ref_clock = get_master_clock(is);
         diff = get_audio_clock(is) - ref_clock;
-        
+
         if (diff < AV_NOSYNC_THRESHOLD) {
             is->audio_diff_cum = diff + is->audio_diff_avg_coef * is->audio_diff_cum;
             if (is->audio_diff_avg_count < AUDIO_DIFF_AVG_NB) {
@@ -1426,14 +1426,14 @@ static int synchronize_audio(VideoState *is, short *samples,
                 if (fabs(avg_diff) >= is->audio_diff_threshold) {
                     wanted_size = samples_size + ((int)(diff * is->audio_st->codec->sample_rate) * n);
                     nb_samples = samples_size / n;
-                
+
                     min_size = ((nb_samples * (100 - SAMPLE_CORRECTION_PERCENT_MAX)) / 100) * n;
                     max_size = ((nb_samples * (100 + SAMPLE_CORRECTION_PERCENT_MAX)) / 100) * n;
                     if (wanted_size < min_size)
                         wanted_size = min_size;
                     else if (wanted_size > max_size)
                         wanted_size = max_size;
-                    
+
                     /* add or remove samples to correction the synchro */
                     if (wanted_size < samples_size) {
                         /* remove samples */
@@ -1441,7 +1441,7 @@ static int synchronize_audio(VideoState *is, short *samples,
                     } else if (wanted_size > samples_size) {
                         uint8_t *samples_end, *q;
                         int nb;
-                        
+
                         /* add samples */
                         nb = (samples_size - wanted_size);
                         samples_end = (uint8_t *)samples + samples_size - n;
@@ -1455,8 +1455,8 @@ static int synchronize_audio(VideoState *is, short *samples,
                     }
                 }
 #if 0
-                printf("diff=%f adiff=%f sample_diff=%d apts=%0.3f vpts=%0.3f %f\n", 
-                       diff, avg_diff, samples_size - samples_size1, 
+                printf("diff=%f adiff=%f sample_diff=%d apts=%0.3f vpts=%0.3f %f\n",
+                       diff, avg_diff, samples_size - samples_size1,
                        is->audio_clock, is->video_clock, is->audio_diff_threshold);
 #endif
             }
@@ -1482,8 +1482,8 @@ static int audio_decode_frame(VideoState *is, uint8_t *audio_buf, double *pts_pt
         /* NOTE: the audio packet can contain several frames */
         while (is->audio_pkt_size > 0) {
             SDL_LockMutex(is->audio_decoder_mutex);
-            len1 = avcodec_decode_audio(is->audio_st->codec, 
-                                        (int16_t *)audio_buf, &data_size, 
+            len1 = avcodec_decode_audio(is->audio_st->codec,
+                                        (int16_t *)audio_buf, &data_size,
                                         is->audio_pkt_data, is->audio_pkt_size);
             SDL_UnlockMutex(is->audio_decoder_mutex);
             if (len1 < 0) {
@@ -1491,7 +1491,7 @@ static int audio_decode_frame(VideoState *is, uint8_t *audio_buf, double *pts_pt
                 is->audio_pkt_size = 0;
                 break;
             }
-            
+
             is->audio_pkt_data += len1;
             is->audio_pkt_size -= len1;
             if (data_size <= 0)
@@ -1500,7 +1500,7 @@ static int audio_decode_frame(VideoState *is, uint8_t *audio_buf, double *pts_pt
             pts = is->audio_clock;
             *pts_ptr = pts;
             n = 2 * is->audio_st->codec->channels;
-            is->audio_clock += (double)data_size / 
+            is->audio_clock += (double)data_size /
                 (double)(n * is->audio_st->codec->sample_rate);
 #if defined(DEBUG_SYNC)
             {
@@ -1517,17 +1517,17 @@ static int audio_decode_frame(VideoState *is, uint8_t *audio_buf, double *pts_pt
         /* free the current packet */
         if (pkt->data)
             av_free_packet(pkt);
-        
+
         if (is->paused || is->audioq.abort_request) {
             return -1;
         }
-        
+
         /* read next packet */
         if (packet_queue_get(&is->audioq, pkt, 1) < 0)
             return -1;
         is->audio_pkt_data = pkt->data;
         is->audio_pkt_size = pkt->size;
-        
+
         /* if update the audio clock with the pts */
         if (pkt->pts != AV_NOPTS_VALUE) {
             is->audio_clock = av_q2d(is->audio_st->time_base)*pkt->pts;
@@ -1551,7 +1551,7 @@ void sdl_audio_callback(void *opaque, Uint8 *stream, int len)
     double pts;
 
     audio_callback_time = av_gettime();
-    
+
     while (len > 0) {
         if (is->audio_buf_index >= is->audio_buf_size) {
            audio_size = audio_decode_frame(is, is->audio_buf, &pts);
@@ -1562,7 +1562,7 @@ void sdl_audio_callback(void *opaque, Uint8 *stream, int len)
            } else {
                if (is->show_audio)
                    update_sample_display(is, (int16_t *)is->audio_buf, audio_size);
-               audio_size = synchronize_audio(is, (int16_t *)is->audio_buf, audio_size, 
+               audio_size = synchronize_audio(is, (int16_t *)is->audio_buf, audio_size,
                                               pts);
                is->audio_buf_size = audio_size;
            }
@@ -1590,7 +1590,7 @@ static int stream_component_open(VideoState *is, int stream_index)
     if (stream_index < 0 || stream_index >= ic->nb_streams)
         return -1;
     enc = ic->streams[stream_index]->codec;
-    
+
     /* prepare audio output */
     if (enc->codec_type == CODEC_TYPE_AUDIO) {
         wanted_spec.freq = enc->sample_rate;
@@ -1666,7 +1666,7 @@ static int stream_component_open(VideoState *is, int stream_index)
         is->subtitle_stream = stream_index;
         is->subtitle_st = ic->streams[stream_index];
         packet_queue_init(&is->subtitleq);
-        
+
         is->subtitle_tid = SDL_CreateThread(subtitle_thread, is);
         break;
     default:
@@ -1679,7 +1679,7 @@ static void stream_component_close(VideoState *is, int stream_index)
 {
     AVFormatContext *ic = is->ic;
     AVCodecContext *enc;
-    
+
     if (stream_index < 0 || stream_index >= ic->nb_streams)
         return;
     enc = ic->streams[stream_index]->codec;
@@ -1707,12 +1707,12 @@ static void stream_component_close(VideoState *is, int stream_index)
         break;
     case CODEC_TYPE_SUBTITLE:
         packet_queue_abort(&is->subtitleq);
-        
+
         /* note: we also signal this mutex to make sure we deblock the
            video thread in all cases */
         SDL_LockMutex(is->subpq_mutex);
         is->subtitle_stream_changed = 1;
-    
+
         SDL_CondSignal(is->subpq_cond);
         SDL_UnlockMutex(is->subpq_mutex);
 
@@ -1790,7 +1790,7 @@ static int decode_thread(void *arg)
     ap->image_format = image_format;
     ap->initial_pause = 1; /* we force a pause when starting an RTSP
                               stream */
-    
+
     err = av_open_input_file(&ic, is->filename, is->iformat, 0, ap);
     if (err < 0) {
         print_error(is->filename, err);
@@ -1827,7 +1827,7 @@ static int decode_thread(void *arg)
             timestamp += ic->start_time;
         ret = av_seek_frame(ic, -1, timestamp, AVSEEK_FLAG_BACKWARD);
         if (ret < 0) {
-            fprintf(stderr, "%s: could not seek to position %0.3f\n", 
+            fprintf(stderr, "%s: could not seek to position %0.3f\n",
                     is->filename, (double)timestamp / AV_TIME_BASE);
         }
     }
@@ -1928,8 +1928,8 @@ static int decode_thread(void *arg)
 
         /* if the queue are full, no need to read more */
         if (is->audioq.size > MAX_AUDIOQ_SIZE ||
-            is->videoq.size > MAX_VIDEOQ_SIZE || 
-            is->subtitleq.size > MAX_SUBTITLEQ_SIZE || 
+            is->videoq.size > MAX_VIDEOQ_SIZE ||
+            is->subtitleq.size > MAX_SUBTITLEQ_SIZE ||
             url_feof(&ic->pb)) {
             /* wait 10 ms */
             SDL_Delay(10);
@@ -1978,7 +1978,7 @@ static int decode_thread(void *arg)
 
     if (ret != 0) {
         SDL_Event event;
-        
+
         event.type = FF_QUIT_EVENT;
         event.user.data1 = is;
         SDL_PushEvent(&event);
@@ -2005,10 +2005,10 @@ static VideoState *stream_open(const char *filename, AVInputFormat *iformat)
     /* start video display */
     is->pictq_mutex = SDL_CreateMutex();
     is->pictq_cond = SDL_CreateCond();
-    
+
     is->subpq_mutex = SDL_CreateMutex();
     is->subpq_cond = SDL_CreateCond();
-    
+
     is->subtitle_decoder_mutex = SDL_CreateMutex();
     is->audio_decoder_mutex = SDL_CreateMutex();
     is->video_decoder_mutex = SDL_CreateMutex();
@@ -2187,15 +2187,15 @@ void event_loop(void)
                 step_to_next_frame();
                 break;
             case SDLK_a:
-                if (cur_stream) 
+                if (cur_stream)
                     stream_cycle_channel(cur_stream, CODEC_TYPE_AUDIO);
                 break;
             case SDLK_v:
-                if (cur_stream) 
+                if (cur_stream)
                     stream_cycle_channel(cur_stream, CODEC_TYPE_VIDEO);
                 break;
             case SDLK_t:
-                if (cur_stream) 
+                if (cur_stream)
                     stream_cycle_channel(cur_stream, CODEC_TYPE_SUBTITLE);
                 break;
             case SDLK_w:
@@ -2243,7 +2243,7 @@ void event_loop(void)
            break;
         case SDL_VIDEORESIZE:
             if (cur_stream) {
-                screen = SDL_SetVideoMode(event.resize.w, event.resize.h, 0, 
+                screen = SDL_SetVideoMode(event.resize.w, event.resize.h, 0,
                                           SDL_HWSURFACE|SDL_RESIZABLE|SDL_ASYNCBLIT|SDL_HWACCEL);
                 cur_stream->width = event.resize.w;
                 cur_stream->height = event.resize.h;
@@ -2287,7 +2287,7 @@ static void opt_format(const char *arg)
 static void opt_image_format(const char *arg)
 {
     AVImageFormat *f;
-    
+
     for(f = first_image_format; f != NULL; f = f->next) {
         if (!strcmp(arg, f->name))
             break;
@@ -2328,7 +2328,7 @@ static void opt_debug(const char *arg)
 {
     debug = atoi(arg);
 }
-    
+
 static void opt_vismv(const char *arg)
 {
     debug_mv = atoi(arg);
@@ -2341,9 +2341,9 @@ static void opt_thread_count(const char *arg)
     fprintf(stderr, "Warning: not compiled with thread support, using thread emulation\n");
 #endif
 }
-    
+
 const OptionDef options[] = {
-    { "h", 0, {(void*)show_help}, "show help" },    
+    { "h", 0, {(void*)show_help}, "show help" },
     { "x", HAS_ARG, {(void*)opt_width}, "force displayed width", "width" },
     { "y", HAS_ARG, {(void*)opt_height}, "force displayed height", "height" },
 #if 0
@@ -2413,13 +2413,13 @@ void parse_arg_file(const char *filename)
 int main(int argc, char **argv)
 {
     int flags, w, h;
-    
+
     /* register all codecs, demux and protocols */
     av_register_all();
 
     #ifdef CONFIG_OS2
       MorphToPM(); // Morph the VIO application to a PM one to be able to use Win* functions
+
       // Make stdout and stderr unbuffered
       setbuf( stdout, NULL );
       setbuf( stderr, NULL );
index de09e5a..f648c18 100644 (file)
@@ -50,7 +50,7 @@ enum HTTPState {
     HTTPSTATE_SEND_DATA_HEADER,
     HTTPSTATE_SEND_DATA,          /* sending TCP or UDP data */
     HTTPSTATE_SEND_DATA_TRAILER,
-    HTTPSTATE_RECEIVE_DATA,       
+    HTTPSTATE_RECEIVE_DATA,
     HTTPSTATE_WAIT_FEED,          /* wait for data from the feed */
     HTTPSTATE_READY,
 
@@ -135,12 +135,12 @@ typedef struct HTTPContext {
     uint8_t *buffer;
     int is_packetized; /* if true, the stream is packetized */
     int packet_stream_index; /* current stream for output in state machine */
-    
+
     /* RTSP state specific */
     uint8_t *pb_buffer; /* XXX: use that in all the code */
     ByteIOContext *pb;
     int seq; /* RTSP sequence number */
-    
+
     /* RTP state specific */
     enum RTSPProtocol rtp_protocol;
     char session_id[32]; /* session id */
@@ -259,14 +259,14 @@ static void rtsp_cmd_pause(HTTPContext *c, const char *url, RTSPHeader *h);
 static void rtsp_cmd_teardown(HTTPContext *c, const char *url, RTSPHeader *h);
 
 /* SDP handling */
-static int prepare_sdp_description(FFStream *stream, uint8_t **pbuffer, 
+static int prepare_sdp_description(FFStream *stream, uint8_t **pbuffer,
                                    struct in_addr my_ip);
 
 /* RTP handling */
-static HTTPContext *rtp_new_connection(struct sockaddr_in *from_addr, 
+static HTTPContext *rtp_new_connection(struct sockaddr_in *from_addr,
                                        FFStream *stream, const char *session_id,
                                        enum RTSPProtocol rtp_protocol);
-static int rtp_new_av_stream(HTTPContext *c, 
+static int rtp_new_av_stream(HTTPContext *c,
                              int stream_index, struct sockaddr_in *dest_addr,
                              HTTPContext *rtsp_c);
 
@@ -296,11 +296,11 @@ static long gettime_ms(void)
 
 static FILE *logfile = NULL;
 
-static void __attribute__ ((format (printf, 1, 2))) http_log(const char *fmt, ...) 
+static void __attribute__ ((format (printf, 1, 2))) http_log(const char *fmt, ...)
 {
     va_list ap;
     va_start(ap, fmt);
-    
+
     if (logfile) {
         vfprintf(logfile, fmt, ap);
         fflush(logfile);
@@ -326,12 +326,12 @@ static void log_connection(HTTPContext *c)
 {
     char buf2[32];
 
-    if (c->suppress_log) 
+    if (c->suppress_log)
         return;
 
-    http_log("%s - - [%s] \"%s %s %s\" %d %"PRId64"\n", 
-             inet_ntoa(c->from_addr.sin_addr), 
-             ctime1(buf2), c->method, c->url, 
+    http_log("%s - - [%s] \"%s %s %s\" %d %"PRId64"\n",
+             inet_ntoa(c->from_addr.sin_addr),
+             ctime1(buf2), c->method, c->url,
              c->protocol, (c->http_error ? c->http_error : 200), c->data_count);
 }
 
@@ -355,7 +355,7 @@ static int compute_datarate(DataRateData *drd, int64_t count)
 {
     if (cur_time == drd->time1)
         return 0;
-    
+
     return ((count - drd->count1) * 1000) / (cur_time - drd->time1);
 }
 
@@ -436,7 +436,7 @@ static int socket_open_listen(struct sockaddr_in *my_addr)
         perror ("socket");
         return -1;
     }
-        
+
     tmp = 1;
     setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &tmp, sizeof(tmp));
 
@@ -447,7 +447,7 @@ static int socket_open_listen(struct sockaddr_in *my_addr)
         close(server_fd);
         return -1;
     }
-  
+
     if (listen (server_fd, 5) < 0) {
         perror ("listen");
         close(server_fd);
@@ -471,7 +471,7 @@ static void start_multicast(void)
     for(stream = first_stream; stream != NULL; stream = stream->next) {
         if (stream->is_multicast) {
             /* open the RTP connection */
-            snprintf(session_id, sizeof(session_id), 
+            snprintf(session_id, sizeof(session_id),
                      "%08x%08x", (int)random(), (int)random());
 
             /* choose a port if none given */
@@ -484,24 +484,24 @@ static void start_multicast(void)
             dest_addr.sin_addr = stream->multicast_ip;
             dest_addr.sin_port = htons(stream->multicast_port);
 
-            rtp_c = rtp_new_connection(&dest_addr, stream, session_id, 
+            rtp_c = rtp_new_connection(&dest_addr, stream, session_id,
                                        RTSP_PROTOCOL_RTP_UDP_MULTICAST);
             if (!rtp_c) {
                 continue;
             }
             if (open_input_stream(rtp_c, "") < 0) {
-                fprintf(stderr, "Could not open input stream for stream '%s'\n", 
+                fprintf(stderr, "Could not open input stream for stream '%s'\n",
                         stream->filename);
                 continue;
             }
 
             /* open each RTP stream */
-            for(stream_index = 0; stream_index < stream->nb_streams; 
+            for(stream_index = 0; stream_index < stream->nb_streams;
                 stream_index++) {
-                dest_addr.sin_port = htons(stream->multicast_port + 
+                dest_addr.sin_port = htons(stream->multicast_port +
                                            2 * stream_index);
                 if (rtp_new_av_stream(rtp_c, stream_index, &dest_addr, NULL) < 0) {
-                    fprintf(stderr, "Could not open output stream '%s/streamid=%d'\n", 
+                    fprintf(stderr, "Could not open output stream '%s/streamid=%d'\n",
                             stream->filename, stream_index);
                     exit(1);
                 }
@@ -527,7 +527,7 @@ static int http_server(void)
     rtsp_server_fd = socket_open_listen(&my_rtsp_addr);
     if (rtsp_server_fd < 0)
         return -1;
-    
+
     http_log("ffserver started.\n");
 
     start_children(first_feed);
@@ -604,7 +604,7 @@ static int http_server(void)
             if (ret < 0 && errno != EAGAIN && errno != EINTR)
                 return -1;
         } while (ret <= 0);
-        
+
         cur_time = gettime_ms();
 
         if (need_to_start_children) {
@@ -657,7 +657,7 @@ static void new_connection(int server_fd, int is_rtsp)
     HTTPContext *c = NULL;
 
     len = sizeof(from_addr);
-    fd = accept(server_fd, (struct sockaddr *)&from_addr, 
+    fd = accept(server_fd, (struct sockaddr *)&from_addr,
                 &len);
     if (fd < 0)
         return;
@@ -667,12 +667,12 @@ static void new_connection(int server_fd, int is_rtsp)
        close to the connection limit */
     if (nb_connections >= nb_max_connections)
         goto fail;
-    
+
     /* add a new connection */
     c = av_mallocz(sizeof(HTTPContext));
     if (!c)
         goto fail;
-    
+
     c->fd = fd;
     c->poll_entry = NULL;
     c->from_addr = from_addr;
@@ -684,7 +684,7 @@ static void new_connection(int server_fd, int is_rtsp)
     c->next = first_http_ctx;
     first_http_ctx = c;
     nb_connections++;
-    
+
     start_wait_request(c, is_rtsp);
 
     return;
@@ -738,9 +738,9 @@ static void close_connection(HTTPContext *c)
 
     /* free RTP output streams if any */
     nb_streams = 0;
-    if (c->stream) 
+    if (c->stream)
         nb_streams = c->stream->nb_streams;
-    
+
     for(i=0;i<nb_streams;i++) {
         ctx = c->rtp_ctx[i];
         if (ctx) {
@@ -752,7 +752,7 @@ static void close_connection(HTTPContext *c)
             url_close(h);
         }
     }
-    
+
     ctx = &c->fmt_ctx;
 
     if (!c->last_packet_sent) {
@@ -765,8 +765,8 @@ static void close_connection(HTTPContext *c)
         }
     }
 
-    for(i=0; i<ctx->nb_streams; i++) 
-        av_free(ctx->streams[i]) ; 
+    for(i=0; i<ctx->nb_streams; i++)
+        av_free(ctx->streams[i]) ;
 
     if (c->stream && !c->post && c->stream->stream_type == STREAM_TYPE_LIVE)
         current_bandwidth -= c->stream->bandwidth;
@@ -780,7 +780,7 @@ static void close_connection(HTTPContext *c)
 static int handle_connection(HTTPContext *c)
 {
     int len, ret;
-    
+
     switch(c->state) {
     case HTTPSTATE_WAIT_REQUEST:
     case RTSPSTATE_WAIT_REQUEST:
@@ -864,7 +864,7 @@ static int handle_connection(HTTPContext *c)
         if (!c->is_packetized) {
             if (c->poll_entry->revents & (POLLERR | POLLHUP))
                 return -1;
-            
+
             /* no need to read if no events */
             if (!(c->poll_entry->revents & POLLOUT))
                 return 0;
@@ -922,7 +922,7 @@ static int handle_connection(HTTPContext *c)
         /* no need to write if no events */
         if (!(c->poll_entry->revents & POLLOUT))
             return 0;
-        len = write(c->fd, c->packet_buffer_ptr, 
+        len = write(c->fd, c->packet_buffer_ptr,
                     c->packet_buffer_end - c->packet_buffer_ptr);
         if (len < 0) {
             if (errno != EAGAIN && errno != EINTR) {
@@ -1014,7 +1014,7 @@ static int find_stream_in_feed(FFStream *feed, AVCodecContext *codec, int bit_ra
 
         /* Potential stream */
 
-        /* We want the fastest stream less than bit_rate, or the slowest 
+        /* We want the fastest stream less than bit_rate, or the slowest
          * faster than bit_rate
          */
 
@@ -1076,7 +1076,7 @@ static int modify_current_stream(HTTPContext *c, char *rates)
 static void do_switch_stream(HTTPContext *c, int i)
 {
     if (c->switch_feed_streams[i] >= 0) {
-#ifdef PHILIP        
+#ifdef PHILIP
         c->feed_streams[i] = c->switch_feed_streams[i];
 #endif
 
@@ -1205,7 +1205,7 @@ static int http_parse_request(HTTPContext *c)
 
     if (ffserver_debug)
        http_log("New connection: %s %s\n", cmd, url);
-    
+
     /* find the filename and the optional info string in the request */
     p = url;
     if (*p == '/')
@@ -1251,7 +1251,7 @@ static int http_parse_request(HTTPContext *c)
         redir_type = REDIR_SDP;
         compute_real_filename(filename, sizeof(url) - 1);
     }
-    
+
     stream = first_stream;
     while (stream != NULL) {
         if (!strcmp(stream->filename, filename) && validate_acl(stream, c))
@@ -1298,7 +1298,7 @@ static int http_parse_request(HTTPContext *c)
     if (c->post == 0 && stream->stream_type == STREAM_TYPE_LIVE) {
         current_bandwidth += stream->bandwidth;
     }
-    
+
     if (c->post == 0 && max_bandwidth < current_bandwidth) {
         c->http_error = 200;
         q = c->buffer;
@@ -1317,10 +1317,10 @@ static int http_parse_request(HTTPContext *c)
         c->state = HTTPSTATE_SEND_HEADER;
         return 0;
     }
-    
+
     if (redir_type != REDIR_NONE) {
         char *hostinfo = 0;
-        
+
         for (p = c->buffer; *p && *p != '\r' && *p != '\n'; ) {
             if (strncasecmp(p, "Host:", 5) == 0) {
                 hostinfo = p + 5;
@@ -1358,7 +1358,7 @@ static int http_parse_request(HTTPContext *c)
                         q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "\r\n");
                         q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "<ASX Version=\"3\">\r\n");
                         //q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "<!-- Autogenerated by ffserver -->\r\n");
-                        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "<ENTRY><REF HREF=\"http://%s/%s%s\"/></ENTRY>\r\n", 
+                        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "<ENTRY><REF HREF=\"http://%s/%s%s\"/></ENTRY>\r\n",
                                 hostbuf, filename, info);
                         q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "</ASX>\r\n");
                         break;
@@ -1367,7 +1367,7 @@ static int http_parse_request(HTTPContext *c)
                         q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "Content-type: audio/x-pn-realaudio\r\n");
                         q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "\r\n");
                         q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "# Autogenerated by ffserver\r\n");
-                        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "http://%s/%s%s\r\n", 
+                        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "http://%s/%s%s\r\n",
                                 hostbuf, filename, info);
                         break;
                     case REDIR_ASF:
@@ -1375,7 +1375,7 @@ static int http_parse_request(HTTPContext *c)
                         q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "Content-type: video/x-ms-asf\r\n");
                         q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "\r\n");
                         q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "[Reference]\r\n");
-                        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "Ref1=http://%s/%s%s\r\n", 
+                        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "Ref1=http://%s/%s%s\r\n",
                                 hostbuf, filename, info);
                         break;
                     case REDIR_RTSP:
@@ -1390,8 +1390,8 @@ static int http_parse_request(HTTPContext *c)
                             /* XXX: incorrect mime type ? */
                             q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "Content-type: application/x-rtsp\r\n");
                             q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "\r\n");
-                            q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "rtsp://%s:%d/%s\r\n", 
-                                         hostname, ntohs(my_rtsp_addr.sin_port), 
+                            q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "rtsp://%s:%d/%s\r\n",
+                                         hostname, ntohs(my_rtsp_addr.sin_port),
                                          filename);
                         }
                         break;
@@ -1407,10 +1407,10 @@ static int http_parse_request(HTTPContext *c)
 
                             len = sizeof(my_addr);
                             getsockname(c->fd, (struct sockaddr *)&my_addr, &len);
-                            
+
                             /* XXX: should use a dynamic buffer */
-                            sdp_data_size = prepare_sdp_description(stream, 
-                                                                    &sdp_data, 
+                            sdp_data_size = prepare_sdp_description(stream,
+                                                                    &sdp_data,
                                                                     my_addr.sin_addr);
                             if (sdp_data_size > 0) {
                                 memcpy(q, sdp_data, sdp_data_size);
@@ -1450,7 +1450,7 @@ static int http_parse_request(HTTPContext *c)
              */
             char *logline = 0;
             int client_id = 0;
-            
+
             for (p = c->buffer; *p && *p != '\r' && *p != '\n'; ) {
                 if (strncasecmp(p, "Pragma: log-line=", 17) == 0) {
                     logline = p;
@@ -1498,7 +1498,7 @@ static int http_parse_request(HTTPContext *c)
                     }
                 }
             }
-            
+
             snprintf(msg, sizeof(msg), "POST command not handled");
             c->stream = 0;
             goto send_error;
@@ -1545,7 +1545,7 @@ static int http_parse_request(HTTPContext *c)
     }
     q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "Content-Type: %s\r\n", mime_type);
     q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "\r\n");
-    
+
     /* prepare output buffer */
     c->http_error = 0;
     c->buffer_ptr = c->buffer;
@@ -1607,7 +1607,7 @@ static void compute_stats(HTTPContext *c)
     url_fprintf(pb, "Content-type: %s\r\n", "text/html");
     url_fprintf(pb, "Pragma: no-cache\r\n");
     url_fprintf(pb, "\r\n");
-    
+
     url_fprintf(pb, "<HEAD><TITLE>FFServer Status</TITLE>\n");
     if (c->stream->feed_filename) {
         url_fprintf(pb, "<link rel=\"shortcut icon\" href=\"%s\">\n", c->stream->feed_filename);
@@ -1644,8 +1644,8 @@ static void compute_stats(HTTPContext *c)
                         strcpy(eosf, ".rtsp");
                 }
             }
-            
-            url_fprintf(pb, "<TR><TD><A HREF=\"/%s\">%s</A> ", 
+
+            url_fprintf(pb, "<TR><TD><A HREF=\"/%s\">%s</A> ",
                          sfilename, stream->filename);
             url_fprintf(pb, "<td align=right> %d <td align=right> ",
                         stream->conns_served);
@@ -1687,7 +1687,7 @@ static void compute_stats(HTTPContext *c)
                             av_abort();
                         }
                     }
-                    url_fprintf(pb, "<TD align=center> %s <TD align=right> %d <TD align=right> %d <TD> %s %s <TD align=right> %d <TD> %s %s", 
+                    url_fprintf(pb, "<TD align=center> %s <TD align=right> %d <TD align=right> %d <TD> %s %s <TD align=right> %d <TD> %s %s",
                                  stream->fmt->name,
                                  stream->bandwidth,
                                  video_bit_rate / 1000, video_codec_name, video_codec_name_extra,
@@ -1722,16 +1722,16 @@ static void compute_stats(HTTPContext *c)
                     char ps_cmd[64];
 
                     /* This is somewhat linux specific I guess */
-                    snprintf(ps_cmd, sizeof(ps_cmd), 
-                             "ps -o \"%%cpu,cputime\" --no-headers %d", 
+                    snprintf(ps_cmd, sizeof(ps_cmd),
+                             "ps -o \"%%cpu,cputime\" --no-headers %d",
                              stream->pid);
-                    
+
                     pid_stat = popen(ps_cmd, "r");
                     if (pid_stat) {
                         char cpuperc[10];
                         char cpuused[64];
-                        
-                        if (fscanf(pid_stat, "%10s %64s", cpuperc, 
+
+                        if (fscanf(pid_stat, "%10s %64s", cpuperc,
                                    cpuused) == 2) {
                             url_fprintf(pb, "Currently using %s%% of the cpu. Total time used %s.\n",
                                          cpuperc, cpuused);
@@ -1770,16 +1770,16 @@ static void compute_stats(HTTPContext *c)
             }
             url_fprintf(pb, "</table>\n");
 
-        }       
+        }
         stream = stream->next;
     }
-    
+
 #if 0
     {
         float avg;
         AVCodecContext *enc;
         char buf[1024];
-        
+
         /* feed status */
         stream = first_feed;
         while (stream != NULL) {
@@ -1790,12 +1790,12 @@ static void compute_stats(HTTPContext *c)
                 AVStream *st = stream->streams[i];
                 FeedData *fdata = st->priv_data;
                 enc = st->codec;
-            
+
                 avcodec_string(buf, sizeof(buf), enc);
                 avg = fdata->avg_frame_size * (float)enc->rate * 8.0;
                 if (enc->codec->type == CODEC_TYPE_AUDIO && enc->frame_size > 0)
                     avg /= enc->frame_size;
-                url_fprintf(pb, "<TR><TD>%s <TD> %d <TD> %Ld <TD> %0.1f\n", 
+                url_fprintf(pb, "<TR><TD>%s <TD> %d <TD> %Ld <TD> %0.1f\n",
                              buf, enc->frame_number, fdata->data_count, avg / 1000.0);
             }
             url_fprintf(pb, "</TABLE>\n");
@@ -1836,11 +1836,11 @@ static void compute_stats(HTTPContext *c)
 
         i++;
         p = inet_ntoa(c1->from_addr.sin_addr);
-        url_fprintf(pb, "<TR><TD><B>%d</B><TD>%s%s<TD>%s<TD>%s<TD>%s<td align=right>", 
-                    i, 
-                    c1->stream ? c1->stream->filename : "", 
+        url_fprintf(pb, "<TR><TD><B>%d</B><TD>%s%s<TD>%s<TD>%s<TD>%s<td align=right>",
+                    i,
+                    c1->stream ? c1->stream->filename : "",
                     c1->state == HTTPSTATE_RECEIVE_DATA ? "(input)" : "",
-                    p, 
+                    p,
                     c1->protocol,
                     http_state[c1->state]);
         fmt_bytecount(pb, bitrate);
@@ -1852,7 +1852,7 @@ static void compute_stats(HTTPContext *c)
         c1 = c1->next;
     }
     url_fprintf(pb, "</TABLE>\n");
-    
+
     /* date */
     ti = time(NULL);
     p = ctime(&ti);
@@ -1922,13 +1922,13 @@ static int open_input_stream(HTTPContext *c, const char *info)
 #endif
 
     /* open stream */
-    if (av_open_input_file(&s, input_filename, c->stream->ifmt, 
+    if (av_open_input_file(&s, input_filename, c->stream->ifmt,
                            buf_size, c->stream->ap_in) < 0) {
         http_log("%s not found", input_filename);
         return -1;
     }
     c->fmt_in = s;
-    
+
     /* open each parser */
     for(i=0;i<s->nb_streams;i++)
         open_parser(s, i);
@@ -1937,7 +1937,7 @@ static int open_input_stream(HTTPContext *c, const char *info)
        present) for packet sending */
     c->pts_stream_index = 0;
     for(i=0;i<c->stream->nb_streams;i++) {
-        if (c->pts_stream_index == 0 && 
+        if (c->pts_stream_index == 0 &&
             c->stream->streams[i]->codec->codec_type == CODEC_TYPE_VIDEO) {
             c->pts_stream_index = i;
         }
@@ -1966,7 +1966,7 @@ static int64_t get_server_clock(HTTPContext *c)
 static int64_t get_packet_send_clock(HTTPContext *c)
 {
     int bytes_left, bytes_sent, frame_bytes;
-    
+
     frame_bytes = c->cur_frame_bytes;
     if (frame_bytes <= 0) {
         return c->cur_pts;
@@ -1987,13 +1987,13 @@ static int http_prepare_data(HTTPContext *c)
     switch(c->state) {
     case HTTPSTATE_SEND_DATA_HEADER:
         memset(&c->fmt_ctx, 0, sizeof(c->fmt_ctx));
-        pstrcpy(c->fmt_ctx.author, sizeof(c->fmt_ctx.author), 
+        pstrcpy(c->fmt_ctx.author, sizeof(c->fmt_ctx.author),
                 c->stream->author);
-        pstrcpy(c->fmt_ctx.comment, sizeof(c->fmt_ctx.comment), 
+        pstrcpy(c->fmt_ctx.comment, sizeof(c->fmt_ctx.comment),
                 c->stream->comment);
-        pstrcpy(c->fmt_ctx.copyright, sizeof(c->fmt_ctx.copyright), 
+        pstrcpy(c->fmt_ctx.copyright, sizeof(c->fmt_ctx.copyright),
                 c->stream->copyright);
-        pstrcpy(c->fmt_ctx.title, sizeof(c->fmt_ctx.title), 
+        pstrcpy(c->fmt_ctx.title, sizeof(c->fmt_ctx.title),
                 c->stream->title);
 
         /* open output stream by using specified codecs */
@@ -2006,7 +2006,7 @@ static int http_prepare_data(HTTPContext *c)
             st->codec= avcodec_alloc_context();
             c->fmt_ctx.streams[i] = st;
             /* if file or feed, then just take streams from FFStream struct */
-            if (!c->stream->feed || 
+            if (!c->stream->feed ||
                 c->stream->feed == c->stream)
                 src = c->stream->streams[i];
             else
@@ -2044,15 +2044,15 @@ static int http_prepare_data(HTTPContext *c)
         /* find a new packet */
         {
             AVPacket pkt;
-            
+
             /* read a packet from the input stream */
             if (c->stream->feed) {
-                ffm_set_write_index(c->fmt_in, 
+                ffm_set_write_index(c->fmt_in,
                                     c->stream->feed->feed_write_index,
                                     c->stream->feed->feed_size);
             }
 
-            if (c->stream->max_time && 
+            if (c->stream->max_time &&
                 c->stream->max_time + c->start_time - cur_time < 0) {
                 /* We have timed out */
                 c->state = HTTPSTATE_SEND_DATA_TRAILER;
@@ -2105,14 +2105,14 @@ static int http_prepare_data(HTTPContext *c)
                                 if (pkt.flags & PKT_FLAG_KEY) {
                                     c->got_key_frame |= 1 << i;
                                 }
-                                /* See if we have all the key frames, then 
+                                /* See if we have all the key frames, then
                                  * we start to send. This logic is not quite
-                                 * right, but it works for the case of a 
+                                 * right, but it works for the case of a
                                  * single video stream with one or more
-                                 * audio streams (for which every frame is 
-                                 * typically a key frame). 
+                                 * audio streams (for which every frame is
+                                 * typically a key frame).
                                  */
-                                if (!c->stream->send_on_key || 
+                                if (!c->stream->send_on_key ||
                                     ((c->got_key_frame + 1) >> c->stream->nb_streams)) {
                                     goto send_it;
                                 }
@@ -2120,7 +2120,7 @@ static int http_prepare_data(HTTPContext *c)
                         }
                     } else {
                         AVCodecContext *codec;
-                        
+
                     send_it:
                         /* specific handling for RTP: we use several
                            output stream (one for each RTP
@@ -2136,9 +2136,9 @@ static int http_prepare_data(HTTPContext *c)
 #if 0
                             printf("index=%d pts=%0.3f duration=%0.6f\n",
                                    pkt.stream_index,
-                                   (double)c->cur_pts / 
+                                   (double)c->cur_pts /
                                    AV_TIME_BASE,
-                                   (double)c->cur_frame_duration / 
+                                   (double)c->cur_frame_duration /
                                    AV_TIME_BASE);
 #endif
                             /* find RTP context */
@@ -2156,7 +2156,7 @@ static int http_prepare_data(HTTPContext *c)
                             /* Fudge here */
                             codec = ctx->streams[pkt.stream_index]->codec;
                         }
-                        
+
                         codec->coded_frame->key_frame = ((pkt.flags & PKT_FLAG_KEY) != 0);
                         if (c->is_packetized) {
                             int max_packet_size;
@@ -2175,12 +2175,12 @@ static int http_prepare_data(HTTPContext *c)
                         if (av_write_frame(ctx, &pkt)) {
                             c->state = HTTPSTATE_SEND_DATA_TRAILER;
                         }
-                        
+
                         len = url_close_dyn_buf(&ctx->pb, &c->pb_buffer);
                         c->cur_frame_bytes = len;
                         c->buffer_ptr = c->pb_buffer;
                         c->buffer_end = c->pb_buffer + len;
-                        
+
                         codec->frame_number++;
                         if (len == 0)
                             goto redo;
@@ -2263,7 +2263,7 @@ static int http_send_data(HTTPContext *c)
                     int interleaved_index, size;
                     uint8_t header[4];
                     HTTPContext *rtsp_c;
-                    
+
                     rtsp_c = c->rtsp_c;
                     /* if no RTSP connection left, error */
                     if (!rtsp_c)
@@ -2292,9 +2292,9 @@ static int http_send_data(HTTPContext *c)
                     rtsp_c->packet_buffer_ptr = c->packet_buffer;
                     rtsp_c->packet_buffer_end = c->packet_buffer + size;
                     c->buffer_ptr += len;
-                    
+
                     /* send everything we can NOW */
-                    len = write(rtsp_c->fd, rtsp_c->packet_buffer_ptr, 
+                    len = write(rtsp_c->fd, rtsp_c->packet_buffer_ptr,
                                 rtsp_c->packet_buffer_end - rtsp_c->packet_buffer_ptr);
        &nbs