QMInit.cpp
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:9k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /* $Id: QMInit.cpp,v 1.2 2001/04/19 18:32:10 wmay Exp $ */
  2. /****************************************************************************/
  3. /*   MPEG4 Visual Texture Coding (VTC) Mode Software                        */
  4. /*                                                                          */
  5. /*   This software was jointly developed by the following participants:     */
  6. /*                                                                          */
  7. /*   Single-quant,  multi-quant and flow control                            */
  8. /*   are provided by  Sarnoff Corporation                                   */
  9. /*     Iraj Sodagar   (iraj@sarnoff.com)                                    */
  10. /*     Hung-Ju Lee    (hjlee@sarnoff.com)                                   */
  11. /*     Paul Hatrack   (hatrack@sarnoff.com)                                 */
  12. /*     Shipeng Li     (shipeng@sarnoff.com)                                 */
  13. /*     Bing-Bing Chai (bchai@sarnoff.com)                                   */
  14. /*     B.S. Srinivas  (bsrinivas@sarnoff.com)                               */
  15. /*                                                                          */
  16. /*   Bi-level is provided by Texas Instruments                              */
  17. /*     Jie Liang      (liang@ti.com)                                        */
  18. /*                                                                          */
  19. /*   Shape Coding is provided by  OKI Electric Industry Co., Ltd.           */
  20. /*     Zhixiong Wu    (sgo@hlabs.oki.co.jp)                                 */
  21. /*     Yoshihiro Ueda (yueda@hlabs.oki.co.jp)                               */
  22. /*     Toshifumi Kanamaru (kanamaru@hlabs.oki.co.jp)                        */
  23. /*                                                                          */
  24. /*   OKI, Sharp, Sarnoff, TI and Microsoft contributed to bitstream         */
  25. /*   exchange and bug fixing.                                               */
  26. /*                                                                          */
  27. /*                                                                          */
  28. /* In the course of development of the MPEG-4 standard, this software       */
  29. /* module is an implementation of a part of one or more MPEG-4 tools as     */
  30. /* specified by the MPEG-4 standard.                                        */
  31. /*                                                                          */
  32. /* The copyright of this software belongs to ISO/IEC. ISO/IEC gives use     */
  33. /* of the MPEG-4 standard free license to use this  software module or      */
  34. /* modifications thereof for hardware or software products claiming         */
  35. /* conformance to the MPEG-4 standard.                                      */
  36. /*                                                                          */
  37. /* Those intending to use this software module in hardware or software      */
  38. /* products are advised that use may infringe existing  patents. The        */
  39. /* original developers of this software module and their companies, the     */
  40. /* subsequent editors and their companies, and ISO/IEC have no liability    */
  41. /* and ISO/IEC have no liability for use of this software module or         */
  42. /* modification thereof in an implementation.                               */
  43. /*                                                                          */
  44. /* Permission is granted to MPEG members to use, copy, modify,              */
  45. /* and distribute the software modules ( or portions thereof )              */
  46. /* for standardization activity within ISO/IEC JTC1/SC29/WG11.              */
  47. /*                                                                          */
  48. /* Copyright 1995, 1996, 1997, 1998 ISO/IEC                                 */
  49. /****************************************************************************/
  50. /************************************************************/
  51. /*     Sarnoff Very Low Bit Rate Still Image Coder          */
  52. /*     Copyright 1995, 1996, 1997, 1998 Sarnoff Corporation */
  53. /************************************************************/
  54. #include <stdio.h>
  55. #include <stdlib.h>
  56. #include "basic.hpp"
  57. #include "dataStruct.hpp"
  58. #include "globals.hpp"
  59. #include "states.hpp"
  60. #include "quant.hpp"
  61. #include "QMUtils.hpp"
  62. #include "QM.hpp"
  63. Int CVTCCommon::ztqQListInit()
  64. {
  65.   Int err, i;
  66.   err=0;
  67.   /* allocatate memory for prevQList */
  68.   for (i = 0; i < mzte_codec.m_iColors; ++i)
  69.     if ((prevQList[i] = (Int *)calloc(mzte_codec.m_iSpatialLev,
  70.       sizeof(Int)))==NULL)
  71.     {
  72.       noteError("Can't allocate memory for prevQList.");
  73.       err = -1;
  74.       goto ERR;
  75.     }
  76.   /* allocatate memory for prevQList2 */
  77.   for (i = 0; i < mzte_codec.m_iColors; ++i)
  78.     if ((prevQList2[i] = (Int *)calloc(mzte_codec.m_iSpatialLev,
  79.       sizeof(Int)))==NULL)
  80.     {
  81.       noteError("Can't allocate memory for prevQList.");
  82.       err = -1;
  83.       goto ERR;
  84.     }
  85.   /* allocatate memory for prevQList */
  86.   for (i = 0; i < mzte_codec.m_iColors; ++i)
  87.     if ((scaleLev[i] = (Int *)calloc(mzte_codec.m_iSpatialLev, 
  88.      sizeof(Int)))==NULL)
  89.     {
  90.       noteError("Can't allocate memory for scaleLev.");
  91.       err = -1;
  92.       goto ERR;
  93.     }
  94. ERR:
  95.   return err;
  96. }
  97. Void CVTCCommon::ztqQListExit()
  98. {
  99.   Int i;
  100.   for (i = 0; i < mzte_codec.m_iColors; ++i)
  101.   {
  102.     if (prevQList[i] != NULL)
  103.     {
  104.       free(prevQList[i]);
  105.       prevQList[i] = NULL;
  106.     }
  107.     if (prevQList2[i] != NULL)
  108.     {
  109.       free(prevQList2[i]);
  110.       prevQList2[i] = NULL;
  111.     }
  112.     if (scaleLev[i] != NULL)
  113.     {
  114.       free(scaleLev[i]);
  115.       scaleLev[i] = NULL;
  116.     }
  117.   }
  118. }
  119. /* 
  120.    Function Name
  121.    -------------
  122.    Int ztqInitDC()
  123.    Arguments 
  124.    ---------
  125.    Int decode - 0, if called for encoding. !0, if called for decoding.
  126.    Description
  127.    -----------
  128.    Initialize all information for all DC wavelet coefficients. This must be
  129.    called once before calling the encQuantizeDC function and once before
  130.    calling the decIQuantizeDC function.
  131.    Functions Called
  132.    ----------------
  133.    initQuantSingleStage
  134.    initInvQuantSingleStage
  135.    Return Value
  136.    ------------
  137.    0, if ok. !0, if error.
  138.    Source File
  139.    -----------
  140.    QMInit.c
  141. */
  142. Int CVTCCommon::ztqInitDC(Int decode, Int c)
  143. {
  144.   Int err;
  145.   Int x, y;
  146.   Int dummyPrevQ;
  147.   err = 0;
  148.   noteDetail("Initializing DC coefficient information....");
  149.   noteDebug("DC Dimensions: Width=%d, Height=%d", 
  150.     mzte_codec.m_iDCWidth, mzte_codec.m_iDCHeight);
  151.   for (y = 0; y < mzte_codec.m_iDCHeight; ++y)
  152.     for (x = 0; x < mzte_codec.m_iDCWidth; ++x)
  153.     {
  154.       if (decode)
  155. initInvQuantSingleStage(&COEFF_QSTATE(x, y, c), &dummyPrevQ);
  156.       else
  157. initQuantSingleStage(&COEFF_QSTATE(x, y, c), &dummyPrevQ,
  158.      COEFF_ORGVAL(x,y,c));
  159.       COEFF_TYPE(x, y, c)  = UNTYPED;
  160.       COEFF_STATE(x, y, c) = S_DC;
  161.     }
  162.   noteDetail("Completed initializing of DC coefficient information.");
  163.   return err;
  164. }
  165. /* 
  166.    Function Name
  167.    -------------
  168.    Int ztqInitAC()
  169.    Arguments 
  170.    ---------
  171.    Int decode - 0, if called for encoding. !0, if called for decoding.
  172.    Description
  173.    -----------
  174.    Initialize all information for all AC wavelet coefficients. This must be
  175.    called once before calling any ztq enc/AC functions and once before calling
  176.    any ztq dec/AC functions.
  177.    Functions Called
  178.    ----------------
  179.    initQuantSingleStage
  180.    initInvQuantSingleStage
  181.    findChild
  182.    isIndexInRootBands
  183.    Return Value
  184.    ------------
  185.    0, if ok. !0, if error.
  186.    Source File
  187.    -----------
  188.    QMInit.c
  189. */
  190. // hjlee 0901
  191. Int CVTCCommon::ztqInitAC(Int decode, Int c)
  192. {
  193.   Int err;
  194.   Int x, y, xc[4], yc[4];
  195.   Int height, width;
  196.   Int dummyPrevQ;
  197.   err = 0;
  198.   noteDetail("Initializing AC coefficient information for col %d....",c);
  199.   height = mzte_codec.m_iHeight >> (int)(c!=0);
  200.   width = mzte_codec.m_iWidth >> (int)(c!=0);
  201.   noteDebug("Image: Width=%d, Height=%d", width, height);
  202.   for (y = 0; y < height; ++y)
  203.     for (x = 0; x < width; ++x)
  204.     {
  205.       if (x >= mzte_codec.m_iDCWidth || y >= mzte_codec.m_iDCHeight)
  206.       {
  207. if (decode)
  208.   initInvQuantSingleStage(&COEFF_QSTATE(x, y, c), &dummyPrevQ);
  209. else
  210. {
  211.   initQuantSingleStage(&COEFF_QSTATE(x, y, c), &dummyPrevQ,
  212.        COEFF_ORGVAL(x,y,c));
  213. }
  214. COEFF_TYPE(x, y, c) = UNTYPED;
  215. /* AC Bands */
  216. if (findChild(x, y, xc, yc, c)==0 || 
  217.     x >= mzte_codec.m_SPlayer[c].width ||
  218.     y >= mzte_codec.m_SPlayer[c].height) /* leaf */
  219.   COEFF_STATE(x, y, c) = S_LINIT;
  220. else
  221.   COEFF_STATE(x, y,c) = S_INIT;
  222.       }
  223.     }
  224.   noteDetail("Completed Initializing of AC coefficient information.");
  225.   return err;
  226. }