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

流媒体/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 block.h
  35.  *
  36.  * author
  37.  *  Inge Lille-Lang鴜               <inge.lille-langoy@telenor.com>    n
  38.  *  Telenor Satellite Services                                         n
  39.  *  P.O.Box 6914 St.Olavs plass                                        n
  40.  *  N-0130 Oslo, Norway
  41.  *
  42.  ************************************************************************
  43.  */
  44. #ifndef _BLOCK_H_
  45. #define _BLOCK_H_
  46. #include "global.h"
  47. /*!  max number of double quant coefficients used for RD constrained quantization.
  48.      Set to 3 in the TML test model  */
  49. #define MAX_TWO_LEVEL_COEFF 3
  50. //! pow(2,MAX_TWO_LEVEL_COEFF), must be updated together with MAX_TWO_LEVEL_COEFF
  51. #define MTLC_POW            8
  52. #define QUANT_LUMA_SNG      0
  53. #define QUANT_LUMA_AC       1
  54. #define QUANT_LUMA_DBL      2
  55. #define QUANT_CHROMA_DC     3
  56. #define QUANT_CHROMA_AC     4
  57. int snr_arr[16][MTLC_POW];
  58. int level_arr[16][MTLC_POW+1];
  59. const int JQQ1=1048576; // = J20
  60. const int JQQ2= 524288;
  61. const int JQQ3= 349525;
  62. const int JQQ4= 174762;
  63. const int JQ4 = 471859;
  64. const int J13 = 8192;
  65. const int J19 = 524288;
  66. const int J20 = 1048576;
  67. extern const byte FILTER_STR[32][4];
  68. //! numbers used for quantization/dequantization.
  69. const int JQ[32][2] =
  70. {
  71.   {620,  3881  },
  72.   {553,  4351  },
  73.   {492,  4890  },
  74.   {439,  5481  },
  75.   {391,  6154  },
  76.   {348,  6914  },
  77.   {310,  7761  },
  78.   {276,  8718  },
  79.   {246,  9781  },
  80.   {219,  10987 },
  81.   {195,  12339 },
  82.   {174,  13828 },
  83.   {155,  15523 },
  84.   {138,  17435 },
  85.   {123,  19561 },
  86.   {110,  21873 },
  87.   { 98,  24552 },
  88.   { 87,  27656 },
  89.   { 78,  30847 },
  90.   { 69,  34870 },
  91.   { 62,  38807 },
  92.   { 55,  43747 },
  93.   { 49,  49103 },
  94.   { 44,  54683 },
  95.   { 39,  61694 },
  96.   { 35,  68745 },
  97.   { 31,  77615 },
  98.   { 27,  89113 },
  99.   { 24,  100253},
  100.   { 22,  109366},
  101.   { 19,  126635},
  102.   { 17,  141533},
  103. };
  104. //! make chroma QP from quant
  105. const int QP_SCALE_CR[32]=
  106. {
  107.    0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,
  108.   16,17,17,18,19,20,20,21,22,22,23,23,24,24,25,25
  109. };
  110. //! single scan pattern
  111. const byte SNGL_SCAN[16][2] =
  112. {
  113.   {0,0},{1,0},{0,1},{0,2},
  114.   {1,1},{2,0},{3,0},{2,1},
  115.   {1,2},{0,3},{1,3},{2,2},
  116.   {3,1},{3,2},{2,3},{3,3}
  117. };
  118. //! double scan pattern
  119. const byte DBL_SCAN[8][2][2] =
  120. {
  121.   {{0,0},{0,1}},
  122.   {{1,0},{0,2}},
  123.   {{2,1},{0,1}},
  124.   {{2,1},{1,2}},
  125.   {{2,0},{2,3}},
  126.   {{3,1},{0,3}},
  127.   {{3,2},{1,3}},
  128.   {{3,3},{2,3}},
  129. };
  130. //! array used to find expencive coefficients
  131. const byte COEFF_COST[16] =
  132. {
  133.   3,2,2,1,1,1,0,0,0,0,0,0,0,0,0,0
  134. };
  135. //! bit cost for coefficients
  136. const byte COEFF_BIT_COST[3][16][16]=
  137. {
  138.   { // 2x2 scan (corrested per Gisle's Email 11/23/2000 by StW
  139.     { 3, 5, 7, 9, 9,11,11,11,11,13,13,13,13,13,13,13},
  140.     { 5, 7, 9, 9,11,11,11,11,13,13,13,13,13,13,13,13},
  141.     { 7, 9, 9,11,11,11,11,13,13,13,13,13,13,13,13,15},
  142.     { 7, 9, 9,11,11,11,11,13,13,13,13,13,13,13,13,15},
  143.     { 7, 7, 9, 9, 9, 9,11,11,11,11,11,11,11,11,13,13},
  144.     { 7, 7, 9, 9, 9, 9,11,11,11,11,11,11,11,11,13,13},
  145.     { 7, 7, 9, 9, 9, 9,11,11,11,11,11,11,11,11,13,13},
  146.     { 7, 7, 9, 9, 9, 9,11,11,11,11,11,11,11,11,13,13},
  147.     { 7, 7, 9, 9, 9, 9,11,11,11,11,11,11,11,11,13,13},
  148.     { 7, 7, 9, 9, 9, 9,11,11,11,11,11,11,11,11,13,13},
  149.     { 7, 7, 9, 9, 9, 9,11,11,11,11,11,11,11,11,13,13},
  150.     { 7, 7, 9, 9, 9, 9,11,11,11,11,11,11,11,11,13,13},
  151.     { 7, 7, 9, 9, 9, 9,11,11,11,11,11,11,11,11,13,13},
  152.     { 7, 7, 9, 9, 9, 9,11,11,11,11,11,11,11,11,13,13},
  153.     { 7, 7, 9, 9, 9, 9,11,11,11,11,11,11,11,11,13,13},
  154.     { 7, 7, 9, 9, 9, 9,11,11,11,11,11,11,11,11,13,13},
  155.   },
  156.   {  // double scan
  157.     { 3, 5, 7, 7, 7, 9, 9, 9, 9,11,11,13,13,13,13,15},
  158.     { 5, 9, 9,11,11,13,13,13,13,15,15,15,15,15,15,15},
  159.     { 7,11,11,13,13,13,13,15,15,15,15,15,15,15,15,17},
  160.     { 9,11,11,13,13,13,13,15,15,15,15,15,15,15,15,17},
  161.     { 9,11,11,13,13,13,13,15,15,15,15,15,15,15,15,17},
  162.     {11,11,13,13,13,13,15,15,15,15,15,15,15,15,17,17},
  163.     {11,11,13,13,13,13,15,15,15,15,15,15,15,15,17,17},
  164.     {11,11,13,13,13,13,15,15,15,15,15,15,15,15,17,17},
  165.     {11,11,13,13,13,13,15,15,15,15,15,15,15,15,17,17},
  166.     {11,11,13,13,13,13,15,15,15,15,15,15,15,15,17,17},
  167.     {11,11,13,13,13,13,15,15,15,15,15,15,15,15,17,17},
  168.     {11,11,13,13,13,13,15,15,15,15,15,15,15,15,17,17},
  169.     {11,11,13,13,13,13,15,15,15,15,15,15,15,15,17,17},
  170.     {11,11,13,13,13,13,15,15,15,15,15,15,15,15,17,17},
  171.   },
  172.   {    // single scan
  173.     { 3, 7, 9, 9,11,13,13,15,15,15,15,17,17,17,17,17},
  174.     { 5, 9,11,13,13,15,15,15,15,17,17,17,17,17,17,17},
  175.     { 5, 9,11,13,13,15,15,15,15,17,17,17,17,17,17,17},
  176.     { 7,11,13,13,15,15,15,15,17,17,17,17,17,17,17,17},
  177.     { 7,11,13,13,15,15,15,15,17,17,17,17,17,17,17,17},
  178.     { 7,11,13,13,15,15,15,15,17,17,17,17,17,17,17,17},
  179.     { 9,11,13,13,15,15,15,15,17,17,17,17,17,17,17,17},
  180.     { 9,11,13,13,15,15,15,15,17,17,17,17,17,17,17,17},
  181.     { 9,11,13,13,15,15,15,15,17,17,17,17,17,17,17,17},
  182.     { 9,11,13,13,15,15,15,15,17,17,17,17,17,17,17,17},
  183.     {11,13,13,15,15,15,15,17,17,17,17,17,17,17,17,19},
  184.     {11,13,13,15,15,15,15,17,17,17,17,17,17,17,17,19},
  185.     {11,13,13,15,15,15,15,17,17,17,17,17,17,17,17,19},
  186.     {11,13,13,15,15,15,15,17,17,17,17,17,17,17,17,19},
  187.     {11,13,13,15,15,15,15,17,17,17,17,17,17,17,17,19},
  188.     {11,13,13,15,15,15,15,17,17,17,17,17,17,17,17,19},
  189.   },
  190. };
  191. #endif