elements.h
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:5k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*
  2. ***********************************************************************
  3. * COPYRIGHT AND WARRANTY INFORMATION
  4. *
  5. * Copyright 2001, International Telecommunications Union, Geneva
  6. *
  7. * DISCLAIMER OF WARRANTY
  8. *
  9. * These software programs are available to the user without any
  10. * license fee or royalty on an "as is" basis. The ITU disclaims
  11. * any and all warranties, whether express, implied, or
  12. * statutory, including any implied warranties of merchantability
  13. * or of fitness for a particular purpose.  In no event shall the
  14. * contributor or the ITU be liable for any incidental, punitive, or
  15. * consequential damages of any kind whatsoever arising from the
  16. * use of these programs.
  17. *
  18. * This disclaimer of warranty extends to the user of these programs
  19. * and user's customers, employees, agents, transferees, successors,
  20. * and assigns.
  21. *
  22. * The ITU does not represent or warrant that the programs furnished
  23. * hereunder are free of infringement of any third-party patents.
  24. * Commercial implementations of ITU-T Recommendations, including
  25. * shareware, may be subject to royalty fees to patent holders.
  26. * Information regarding the ITU-T patent policy is available from
  27. * the ITU Web site at http://www.itu.int.
  28. *
  29. * THIS IS NOT A GRANT OF PATENT RIGHTS - SEE THE ITU-T PATENT POLICY.
  30. ************************************************************************
  31. */
  32. /*!
  33.  **************************************************************************
  34.  *  file elements.h
  35.  *  brief  Header file for elements in H.26L streams
  36.  *  date 6.10.2000, 
  37.  *  version
  38.  *      1.1
  39.  *
  40.  * note
  41.  *    Version 1.0 included three partition modes, no DP, 2 partitionsper slice
  42.  *      and 4 partitions per slice.  As per document VCEG-N72 this is changed
  43.  *      in version 1.1 to only two patrition modes, one without DP and one with 
  44.  *      3 partition per slice
  45.  *.
  46.  *  author Sebastian Purreiter     <sebastian.purreiter@mch.siemens.de>
  47.  *  author Stephan Wenger          <stewe@cs.tu-berlin.de>
  48.  *
  49.  **************************************************************************
  50.  */
  51. #ifndef _ELEMENTS_H_
  52. #define _ELEMENTS_H_
  53. #include "global.h"
  54. /*!
  55.  *  definition of H.26L syntax elements
  56.  *  order of elements follow dependencies for picture reconstruction
  57.  */
  58. /*!
  59.  * brief   Assignment of old TYPE or partition elements to new
  60.  *          elements
  61.  *
  62.  *  old element     | new elements
  63.  *  ----------------+-------------------------------------------------------------------
  64.  *  TYPE_HEADER     | SE_HEADER, SE_PTYPE
  65.  *  TYPE_MBHEADER   | SE_MBTYPE, SE_REFFRAME, SE_INTRAPREDMODE
  66.  *  TYPE_MVD        | SE_MVD
  67.  *  TYPE_CBP        | SE_CBP_INTRA, SE_CBP_INTER
  68.  *  TYPE_COEFF_Y    | SE_LUM_DC_INTRA, SE_LUM_AC_INTRA, SE_LUM_DC_INTER, SE_LUM_AC_INTER
  69.  *  TYPE_2x2DC      | SE_CHR_DC_INTRA, SE_CHR_DC_INTER
  70.  *  TYPE_COEFF_C    | SE_CHR_AC_INTRA, SE_CHR_AC_INTER
  71.  *  TYPE_EOS        | SE_EOS
  72. */
  73. #define MAXPARTITIONMODES 2 //!< maximum possible partition modes as defined in assignSE2partition[][]
  74. /*!
  75.  *  brief  lookup-table to assign different elements to partition
  76.  *
  77.  *  note here we defined up to 6 different partitions similar to
  78.  *      document Q15-k-18 described in the PROGFRAMEMODE.
  79.  *      The Sliceheader contains the PSYNC information. par
  80.  *
  81.  *      Elements inside a partition are not ordered. They are
  82.  *      ordered by occurence in the stream.
  83.  *      Assumption: Only partitionlosses are considered. par
  84.  *
  85.  *      The texture elements luminance and chrominance are
  86.  *      not ordered in the progressive form
  87.  *      This may be changed in image.c par
  88.  *
  89.  *  -IMPORTANT:
  90.  *      Picture- or Sliceheaders must be assigned to partition 0. par
  91.  *      Furthermore partitions must follow syntax dependencies as
  92.  *      outlined in document Q15-J-23.
  93.  */
  94. // A note on this table:
  95. //
  96. // While the assignment of values in enum data types is specified in C, it is not
  97. // very ood style to have an "elementnumber", not even as a comment.
  98. //
  99. // Hence a copy of the relevant structure from global.h here
  100. /*
  101. typedef enum {
  102.  0  SE_HEADER,
  103.  1  SE_PTYPE,
  104.  2  SE_MBTYPE,
  105.  3  SE_REFFRAME,
  106.  4  SE_INTRAPREDMODE,
  107.  5  SE_MVD,
  108.  6  SE_CBP_INTRA,
  109.  7  SE_LUM_DC_INTRA,
  110.  8  SE_CHR_DC_INTRA,
  111.  9  SE_LUM_AC_INTRA,
  112. 10  SE_CHR_AC_INTRA,
  113. 11  SE_CBP_INTER,
  114. 12  SE_LUM_DC_INTER,
  115. 13  SE_CHR_DC_INTER,
  116. 14  SE_LUM_AC_INTER,
  117. 15  SE_CHR_AC_INTER,
  118. 16  SE_DELTA_QUANT,
  119. 17  SE_BFRAME,
  120. 18  SE_EOS,
  121. 19  SE_MAX_ELEMENTS */ // number of maximum syntax elements
  122. //} SE_type;
  123. static int assignSE2partition[][SE_MAX_ELEMENTS] =
  124. {
  125.   // 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18  // elementnumber (no not uncomment)
  126.   {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },   //!< all elements in one partition no data partitioning
  127.   {  0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 0, 0, 0 }    //!< three partitions per slice
  128. };
  129. #endif