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

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /* $Id: ztscanUtil.cpp,v 1.3 2001/04/19 18:32:09 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. #ifndef WIN32
  57. #include <unistd.h>
  58. #endif
  59. #include "dataStruct.hpp"
  60. #include "globals.hpp"
  61. //#define ZTSCAN_UTIL // hjlee 0901
  62. #include "ztscan_common.hpp"  // hjlee 0901
  63. ac_model acmVZ[NCOLOR], *acm_vz; /* here only for DC */
  64. ac_model acmType[NCOLOR][MAXDECOMPLEV][MAX_NUM_TYPE_CONTEXTS], 
  65.          *acm_type[MAXDECOMPLEV][MAX_NUM_TYPE_CONTEXTS];
  66. ac_model acmSign[NCOLOR][MAXDECOMPLEV], *acm_sign[MAXDECOMPLEV];
  67. ac_model *acmBPMag[NCOLOR][MAXDECOMPLEV], **acm_bpmag;
  68. ac_model *acmBPRes[NCOLOR][MAXDECOMPLEV], **acm_bpres;
  69. ac_model *acm_bpdc; // 1127
  70. Void CVTCCommon::probModelInitSQ(Int col)
  71. {
  72.   SNR_IMAGE *snr_image;
  73.   Int i,l;
  74.   
  75.   snr_image=&(mzte_codec.m_SPlayer[col].SNRlayer.snr_image);
  76.   for (l=0; l<mzte_codec.m_iWvtDecmpLev;++l)
  77.   {
  78.     mzte_ac_model_init(&acmType[col][l][CONTEXT_INIT],NUMCHAR_TYPE,NULL,
  79.        ADAPT,1);
  80.     mzte_ac_model_init(&acmType[col][l][CONTEXT_LINIT],2,NULL,ADAPT,1);
  81.     mzte_ac_model_init(&acmSign[col][l],2,NULL,ADAPT,1);
  82.   }
  83.   for (l=0; l<mzte_codec.m_iWvtDecmpLev;++l)
  84.   {
  85.     if ((acmBPMag[col][l]
  86.  =(ac_model *)calloc(WVTDECOMP_NUMBITPLANES(col,l),sizeof(ac_model)))==NULL)
  87.       errorHandler("Can't alloc acmBPMag in probModelInitSQ.");
  88.     for(i=0;i<WVTDECOMP_NUMBITPLANES(col,l);i++)
  89.     {
  90.       mzte_ac_model_init(&acmBPMag[col][l][i],2,NULL,ADAPT,1);
  91.       acmBPMag[col][l][i].Max_frequency=Bitplane_Max_frequency;
  92.     }
  93.   }
  94. }
  95. Void CVTCCommon::probModelFreeSQ(Int col)
  96. {
  97.   SNR_IMAGE *snr_image;
  98.   Int i,l;
  99.   
  100.   snr_image=&(mzte_codec.m_SPlayer[col].SNRlayer.snr_image);
  101.   for (l=0; l<mzte_codec.m_iWvtDecmpLev;++l)
  102.   {  
  103.     mzte_ac_model_done(&acmType[col][l][CONTEXT_INIT]);
  104.     mzte_ac_model_done(&acmType[col][l][CONTEXT_LINIT]);
  105.     mzte_ac_model_done(&acmSign[col][l]);
  106.   }
  107.   for (l=0; l<mzte_codec.m_iWvtDecmpLev;++l)
  108.   {
  109.     for(i=0;i<WVTDECOMP_NUMBITPLANES(col,l);i++)
  110.       mzte_ac_model_done(&acmBPMag[col][l][i]);
  111.     free(acmBPMag[col][l]);
  112.   }
  113. }
  114. Void CVTCCommon::setProbModelsSQ(Int col)
  115. {
  116.   Int l;
  117.   /* Set prob model type pointers */
  118.   for (l=0; l<mzte_codec.m_iWvtDecmpLev;++l)
  119.   {  
  120.     acm_type[l][CONTEXT_INIT]=&acmType[col][l][CONTEXT_INIT];
  121.     acm_type[l][CONTEXT_LINIT]=&acmType[col][l][CONTEXT_LINIT];
  122.     acm_sign[l]=&acmSign[col][l];
  123.   }
  124.   acm_bpmag=acmBPMag[col];
  125. }
  126. Void CVTCCommon::probModelInitMQ(Int col)
  127. {
  128.   SNR_IMAGE *snr_image;
  129.   Int i,l;
  130.   
  131.   snr_image=&(mzte_codec.m_SPlayer[col].SNRlayer.snr_image);
  132.   
  133.   for (l=0; l<mzte_codec.m_iWvtDecmpLev;++l)
  134.   {
  135.     mzte_ac_model_init(&acmType[col][l][CONTEXT_INIT],NUMCHAR_TYPE,NULL,
  136.        ADAPT,1);
  137.     mzte_ac_model_init(&acmType[col][l][CONTEXT_LINIT],2,NULL,ADAPT,1);
  138.     mzte_ac_model_init(&acmType[col][l][CONTEXT_ZTR],NUMCHAR_TYPE,NULL,
  139.        ADAPT,1);
  140.     mzte_ac_model_init(&acmType[col][l][CONTEXT_ZTR_D],NUMCHAR_TYPE,NULL,
  141.        ADAPT,1);
  142.     mzte_ac_model_init(&acmType[col][l][CONTEXT_IZ],2,NULL,ADAPT,1);
  143.     mzte_ac_model_init(&acmType[col][l][CONTEXT_LZTR],2,NULL,ADAPT,1);
  144.     mzte_ac_model_init(&acmType[col][l][CONTEXT_LZTR_D],2,NULL,ADAPT,1);
  145.     mzte_ac_model_init(&acmSign[col][l],2,NULL,ADAPT,1);
  146.   }
  147.   for (l=0; l<mzte_codec.m_iWvtDecmpLev;++l)
  148.   {
  149.     // int j = mzte_codec.m_SPlayer[col].SNRlayer.snr_image.wvtDecompNumBitPlanes[l];
  150.     // int jj = mzte_codec.m_SPlayer[col].SNRlayer.snr_image.wvtDecompResNumBitPlanes ; 
  151. if ((acmBPMag[col][l]
  152.  =(ac_model *)calloc(WVTDECOMP_NUMBITPLANES(col,l),sizeof(ac_model)))==NULL)
  153.       errorHandler("Can't alloc acmBPMag in probModelInitSQ.");
  154.     for(i=0;i<WVTDECOMP_NUMBITPLANES(col,l);i++)
  155.     {
  156.       mzte_ac_model_init(&acmBPMag[col][l][i],2,NULL,ADAPT,1);
  157.       acmBPMag[col][l][i].Max_frequency=Bitplane_Max_frequency;
  158.     }
  159.     if ((acmBPRes[col][l]
  160.  =(ac_model *)calloc(WVTDECOMP_RES_NUMBITPLANES(col),sizeof(ac_model)))==NULL)
  161.       errorHandler("Can't alloc acmBPRes in probModelInitMQ.");
  162.     for(i=0;i<WVTDECOMP_RES_NUMBITPLANES(col);i++)
  163.     {
  164.       mzte_ac_model_init(&acmBPRes[col][l][i],2,NULL,ADAPT,1);
  165.       acmBPRes[col][l][i].Max_frequency=Bitplane_Max_frequency;
  166.     }
  167.   }
  168. }
  169. Void CVTCCommon::probModelFreeMQ(Int col)
  170. {
  171.   SNR_IMAGE *snr_image;
  172.   Int i,l;
  173.   
  174.   snr_image=&(mzte_codec.m_SPlayer[col].SNRlayer.snr_image);
  175.   for (l=0; l<mzte_codec.m_iWvtDecmpLev;++l)
  176.   {  
  177.     for (i=0; i<MAX_NUM_TYPE_CONTEXTS; ++i)
  178.       mzte_ac_model_done(&acmType[col][l][i]);
  179.     mzte_ac_model_done(&acmSign[col][l]);
  180.   }
  181.   for (l=0; l<mzte_codec.m_iWvtDecmpLev;++l)
  182.   {
  183.     for(i=0;i<WVTDECOMP_NUMBITPLANES(col,l);i++)
  184.       mzte_ac_model_done(&acmBPMag[col][l][i]);
  185.     free(acmBPMag[col][l]);
  186.     for(i=0;i<WVTDECOMP_RES_NUMBITPLANES(col);i++)
  187.       mzte_ac_model_done(&acmBPRes[col][l][i]);    
  188.     free(acmBPRes[col][l]);
  189.   }
  190. }
  191. Void CVTCCommon::setProbModelsMQ(Int col)
  192. {
  193.   Int l, i;
  194.   /* Set prob model type pointers */
  195.     
  196.   for (l=0; l<mzte_codec.m_iWvtDecmpLev;++l)
  197.   {  
  198.     for (i=0; i<MAX_NUM_TYPE_CONTEXTS; ++i)
  199.       acm_type[l][i]=&acmType[col][l][i];
  200.   
  201.     acm_sign[l]=&acmSign[col][l];
  202.   }
  203.   acm_bpmag=acmBPMag[col];
  204.   acm_bpres=acmBPRes[col];
  205. }
  206. /*********************************************
  207.   Initialize max frequency for each ac model
  208. *********************************************/
  209. Void CVTCCommon::init_acm_maxf_enc()
  210. {
  211.   Int c, l, i;
  212.   
  213.   if(mzte_codec.m_iAcmMaxFreqChg == 0)
  214.   {
  215.     for (c=0; c<mzte_codec.m_iColors; c++) 
  216.     {  
  217.       for (l=0; l<mzte_codec.m_iWvtDecmpLev;++l)
  218.       {
  219. for (i=0; i<MAX_NUM_TYPE_CONTEXTS; ++i)
  220. //   acmType[c][l][i].Max_frequency=DEFAULT_MAX_FREQ;  // 1127
  221.   acmType[c][l][i].Max_frequency=Bitplane_Max_frequency;
  222. acmSign[c][l].Max_frequency=DEFAULT_MAX_FREQ;
  223.      }
  224.       
  225.       acmVZ[c].Max_frequency=DEFAULT_MAX_FREQ;
  226.       
  227.     }
  228.   }
  229.   else
  230.   {
  231.     for (c=0; c<mzte_codec.m_iColors; c++) 
  232.     {  
  233.       for (l=0; l<mzte_codec.m_iWvtDecmpLev;++l)
  234.       {
  235. for (i=0; i<MAX_NUM_TYPE_CONTEXTS; ++i)
  236.   acmType[c][l][i].Max_frequency=mzte_codec.m_iAcmMaxFreq[0];
  237.         
  238.       acmSign[c][l].Max_frequency=mzte_codec.m_iAcmMaxFreq[5];
  239.       }
  240.       acmVZ[c].Max_frequency=mzte_codec.m_iAcmMaxFreq[1];
  241.     }
  242.   }
  243. }
  244. Void CVTCCommon::init_acm_maxf_dec()
  245. {
  246.   init_acm_maxf_enc();
  247. }
  248. /********************************************************
  249.   Function Name
  250.   -------------
  251.   Void clear_ZTR_D()
  252.   Arguments
  253.   ---------
  254.   None.
  255.   
  256.   Description
  257.   -----------
  258.   Clear the zerotree descendent marks in the entire image.
  259.   Functions Called
  260.   ----------------
  261.   None.
  262.   Return Value
  263.   ------------
  264.   None.
  265. ********************************************************/ 
  266. Void CVTCCommon::clear_ZTR_D(COEFFINFO **coeffinfo, Int width, Int height)
  267. {
  268.   register COEFFINFO **coeff;
  269.   register int i,j,dc_h2,dc_w2;
  270.   coeff=coeffinfo;
  271.   dc_h2=mzte_codec.m_iDCHeight<<1;
  272.   dc_w2=mzte_codec.m_iDCWidth<<1;
  273.   for(i=0;i<dc_h2;i++)
  274.     for(j=dc_w2;j<width;j++)
  275.       if(coeff[i][j].type == ZTR_D)
  276.          coeff[i][j].type = UNTYPED;
  277.   for(i=dc_h2;i<height;i++)
  278.     for(j=0;j<width;j++)
  279.       if(coeff[i][j].type == ZTR_D)
  280.          coeff[i][j].type = UNTYPED;
  281. }