README
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:13k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. README for the Dirac video codec
  2. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3. by Thomas Davies, BBC R&D (dirac@rd.bbc.co.uk)
  4. 1. Executive Summary
  5. ~~~~~~~~~~~~~~~~~~~~
  6. Dirac is an open source video codec. It uses a traditional hybrid video codec
  7. architecture, but with the wavelet transform instead of the usual block
  8. transforms.  Motion compensation uses overlapped blocks to reduce block
  9. artefacts that would upset the transform coding stage.
  10. Dirac can code just about any size of video, from streaming up to HD and
  11. beyond, although certain presets are defined for different applications and
  12. standards.  These cover the parameters that need to be set for the encoder to
  13. work, such as block sizes and temporal prediction structures, which must
  14. otherwise be set by hand.
  15. Dirac is intended to develop into real coding and decoding software, capable
  16. of plugging into video processing applications and media players that need
  17. compression. It is intended to develop into a simple set of reliable but
  18. effective coding tools that work over a wide variety of content and formats,
  19. using well-understood compression techniques, in a clear and accessible
  20. software structure. It is not intended as a demonstration or reference coder.
  21. 2. Documentation
  22. ~~~~~~~~~~~~~~~~
  23. A user guide and a guide to the software is in progress. More details on
  24. running the codec can be found at http://dirac.sourceforge.net/
  25. 3. Building and installing
  26. ~~~~~~~~~~~~~~~~~~~~~~~~~~
  27.   GNU/Linux, Unix, MacOS X, Cygwin, Mingw
  28.   ---------------------------------------
  29.     ./configure --enable-debug
  30.         (to enable extra debug compile options)
  31.      OR
  32.     ./configure --enable-profile
  33.         (to enable the g++ profiling flag -pg)
  34.      OR
  35.     ./configure --enable-debug --enable-profile
  36.         (to enable extra debug compile options and profiling options)
  37.      OR
  38.      ./configure
  39.      By default, both shared and static libraries are built. To build all-static
  40.      libraries use
  41.      ./configure --disable-shared
  42.  To build shared libraries only use
  43.      ./configure --disable-static
  44.      make
  45.      make install
  46.   The INSTALL file documents arguments to ./configure such as
  47.   --prefix=/usr/local (specify the installation location prefix).
  48.   
  49.   MSYS and Microsoft Visual C++
  50.   -----------------------------
  51.      Download and install the no-cost Microsoft C++ compiler from
  52.      http://msdn.microsoft.com/visualc/vctoolkit2003/
  53.      Download and install MSYS (the MinGW Minimal SYStem), MSYS-1.0.10.exe, 
  54.      from http://www.mingw.org/download.shtml. An MSYS icon will be available
  55.      on the desktop.
  56.      Click on the MSYS icon on the desktop to open a MSYS shell window.
  57.      Create a .profile file to set up the environment variables required. 
  58.      vi .profile
  59.      Include the following three lines in the .profile file.
  60.          export PATH=/c/Program Files/Microsoft Visual C++ Toolkit 2003/bin:$PATH
  61.          export INCLUDE=/c/Program Files/Microsoft Visual C++ Toolkit 2003/include
  62.          export LIB=/c/Program Files/Microsoft Visual C++ Toolkit 2003/lib
  63.          (Replace /c/Program Files/Microsoft Visual C++ Toolkit 2003/ with
  64.          the location where VC++ 2003 is installed if necessary)
  65.      Exit from the MSYS shell and click on the MSYS icon on the desktop to open 
  66.      a new MSYS shell window for the .profile to take effect.
  67.      Change directory to the directory where Dirac was unpacked. By default 
  68.  only the dynamic libraries are built.
  69.      ./configure CXX=cl --enable-debug
  70.          (to enable extra debug compile options)
  71.      OR
  72.      ./configure CXX=cl --disable-shared
  73.      (to build static libraries)
  74.      OR
  75.      ./configure CXX=cl
  76.      make
  77.      make install
  78.      The INSTALL file documents arguments to ./configure such as
  79.      --prefix=/usr/local (specify the installation location prefix).
  80.   Microsoft Visual C++ .NET 2003
  81.   ------------------------------
  82.   The MS VC++ .NET 2003 solution and project files are in win32/VS2003 
  83.   directory.  Double-click on the solution file, dirac.sln, in the 
  84.   win32/VS2003 directory.  The target 'Everything' builds the codec 
  85.   libraries and utilities. Four build-types are supported
  86.   Debug - builds unoptimised encoder and decoder dlls with debug symbols
  87.   Release - builds optimised encoder and decoder dlls
  88.   Static-Debug - builds unoptimised encoder and decoder static libraries
  89.                  with debug symbols
  90.   Static-Release - builds optimised encoder and decoder static libraries
  91.  
  92.   Static libraries are created in the win32/VS2003/lib/<build-type> directory.
  93.   Encoder and Decoder dlls and import libraries, encoder and decoder apps are 
  94.   created in the win32/VS2003/bin/<build-type> directory. The "C" public API
  95.   is exported using the _declspec(dllexport) mechanism.
  96.   Conversion utilites are created in the 
  97.   win32/VS2003/utils/conversion/<build-type> directory. Only static versions
  98.   are built.
  99.   Instrumentation utility is created in the 
  100.   win32/VS2003/utils/instrumentation/<build-type> directory. Only static
  101.   versions are built.
  102. 4. Running the example programs
  103. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  104. 4.1 Command-line parameters
  105. At the moment there is a simple command-line parser class which is 
  106. used in all the executables. The general procedure for running a program
  107. is to type:
  108.   prog_name -<flag_name> flag_val ... param1 param2 ...
  109. In other words, options are prefixed by a dash; some options take values, 
  110. while others are boolean options that enable specific features. For example:
  111. When running the encoder, the -qf options requires a numeric argument
  112. specifying the "quality factor" for encoding. The -verbose option enables
  113. detailed output and does not require an argument.
  114. Running any program without arguments will display a list of parameters and
  115. options.
  116. 4.2 File formats
  117. The example coder and decoder use a temporary file format which consists of
  118. raw 8-bit planar YUV data together with a header file. This means that data
  119. is stored bytewise, with a frame of Y followed by a frame of U followed by
  120. a frame of V, all scanned in the usual raster order. 
  121. Other file formats are supported by means of conversion utilities that
  122. may be found in the subdirectory util/conversion. These will convert to
  123. and from raw RGB format, and support all the standard raw YUV formats as
  124. well as bitmaps. Raw RGB can be obtained as an output from standard conversion
  125. utilities such as ImageMagick.
  126. Once a raw YUV file has been made, in order to run the codec, a header must be
  127. constructed. The header records such picture information as: the picture
  128. dimensions, which are taken to be those of the luminance or Y component, and
  129. other metadata. The other metadata consists of the chroma format, the frame
  130. rate in Hertz, a flag indicating interlace and, if interlace, a flag
  131. indicating whether the interlace is top-field first. The chroma format setting
  132. records whether the video is sampled 4:4:4, 4:2:2, 4:1:1 or 4:2:0, and is
  133. essential. The frame rate setting is used to calculate bit-rate for the
  134. encoder, and display rate for the decoder, and if omitted a rate of 12Hz is
  135. assumed.
  136. The header file is made using the make_header tool in subdirectory 
  137. picheader/make_header. It's in text format so can also be edited manually.
  138. Example.
  139.   Compress an image sequence of 100 frames of 352x288 video in tiff format.
  140.   Step 1.
  141.   Use your favourite conversion routine to produce a single raw RGB file of 
  142.   all the data. If your routine converts frame-by-frame then you will
  143.   need to concatenate the output.
  144.   Step 2.
  145.   Convert from RGB to the YUV format of your choice. For example, to do
  146.   420, type
  147.   RGBtoYUV420 <file.rgb >file.yuv 352 288 100
  148.   Note that this uses stdin and stdout to read and write the data.
  149.   Step 3.
  150.   Make the appropriate header to accompany the raw data file:
  151.   make_header -xl 720 -yl 576 -cformat format420 -framerate 25 -interlace file
  152.   This writes file.hdr with the corresponding parameters.
  153.   Step 4.
  154.   Run the encoder. This will produce a locally decoded output in the
  155.   same format.
  156.   Step 5.
  157.   Convert back to RGB.
  158.   YUV420toRGB <file.yuv >file.rgb 352 288 100
  159.   Step 6.
  160.   Use your favourite conversion utility to convert to the format of your
  161.   choice.
  162. You can also use the transcode utility to convert data to and from Dirac's
  163. native formats (see http://zebra.fh-weingarten.de/~transcode/):
  164.   This example uses a 720x576x50 DV source, and transcodes to 720x576 YUV in
  165.   4:2:0 chroma format.  Cascading codecs (DV + Dirac) is generally a bad idea
  166.   - use this only if you don't have any other source of uncompressed video.
  167.     transcode -i source.dv -x auto,null --dv_yuy2_mode -k -V -y raw,null -o file.avi
  168.     tcextract -i test.avi -x rgb > file.yuv
  169.     make_header -xl 720 -yl 576 -cformat format420 -framerate 25 -interlace file
  170. Viewing and playback utilities for uncompressed video include MPlayer and
  171. ImageMagick's display command.
  172.   Continuing the 352x288 4:2:0 example above, to display a single frame
  173.   of raw YUV with ImageMagick use the following (use <spacebar> to see
  174.   subsequent frames):
  175.     display -size 352x288 test.yuv
  176.   Raw YUV 420 data can also be played back in MPlayer - use the following 
  177.   MPlayer command:
  178.     mplayer -fps 15 -rawvideo on:size=152064:w=352:h=288 test.yuv
  179.   (at the time of writing MPlayer could not playback 4:2:2 or 4:4:4 YUV data)
  180. 4.3 Encoding
  181. There are a large number of parameters that can be used to run the encoder,
  182. all of which are listed below, and which are set using the same conventions as
  183. for make_header. However, things are simplified by using presets for different
  184. applications. These set such things as block sizes and overlaps for motion
  185. estimation and compensation (the codec used overlapped blocks), and
  186. psychovisual weighting. They also define the context in which other parameters
  187. like quality factors, operate. The presets are:
  188. CIF      : for CIF video
  189. SD576    : for standard definition video
  190. HD720    : for 1280x720 High Definition progressive video
  191. HD1080   : for 1920/1440x1080 High Definition progressive video [not yet supported]
  192. The other useful parameter is the quality factor qf. This is a number from 0
  193. to 10.  The higher the number, the better the quality. The encoder attempts to
  194. adapt the encoding process to produce constant quality across the sequence.
  195. (Due to variations in the content, it may not exactly achieve this.)
  196. Simple coding example. Code an SD sequence to high quality.
  197. Solution.
  198.   dirac_encoder -SD576 -qf 9 test test_out
  199. will read test.yuv and test.hdr as input, and output a compressed bitstream
  200. test_out.drc as well as locally-decoded files test_out.yuv and test_out.hdr.
  201. Other parameters.
  202. verbose   : turn on verbosity (if you don't, you won't see the final bitrate!)
  203. start     : code from this frame number
  204. stop      : code up until this frame number
  205. L1_sep    : the separation between L1 frames (frames that are predicted but 
  206.             also used as reference frames, like P frames in MPEG-2)
  207. num_L1    : the number of L1 frames before the next intra frame
  208. xblen     : the width of blocks used for motion compensation
  209. yblen     : the height of blocks used for motion compensation
  210. xbsep     : the horizontal separation between blocks. Always <xblen
  211. ybsep     : the vertical separation between blocks. Always <yblen
  212. cpd       : normalised viewing distance parameter, in cycles per degree.
  213. nolocal   : Do no generate diagnostics and locally decoded output
  214. Using -start and -stop allows a small section to be coded, rather than the
  215. whole thing.
  216. Modifying L1_sep and num_L1 allows for new GOP structures to be used, and
  217. should be entirely safe. There are two non-GOP modes that can also be used for
  218. encoding: setting num_L1=0 gives I-frame only coding, and setting num_L1<0
  219. will produce a sequence with infinitely many L1 frames i.e. with a single I
  220. frame at the beginning of the sequence. 
  221. Modifying the block parameters is strongly deprecated: it's likely to break
  222. the encoder as there are many constraints. Modifying cpd will not break
  223. anything, but will change the way noise is distributed which may be more (or
  224. less) suitable for your application. Setting cpd equal zero turns off
  225. perceptual weighting altogether.
  226. Block separations must currently be set so that an integral number of
  227. macroblocks fits into the frame horizontally and vertically. A macroblock is a
  228. 4x4 set of blocks, so 4xblen must divide the frame width and 4yblen the frame
  229. height. 
  230. 4.4 Decoding
  231. Decoding is much simpler. Just point the decoder input at the bitstream and the
  232. output to a file:
  233.   dirac_decoder -verbose test_enc test_dec
  234. will decode into test_dec.{yuv,hdr} with running commentary.