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

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /* $Id: idwt.cpp,v 1.2 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. /* Inverse DWT for MPEG-4 Still Texture Coding 
  55. Original Coded by Shipeng Li, Sarnoff Corporation, Jan. 1998*/
  56. #include <stdio.h>
  57. #include <stdlib.h>
  58. #include <math.h>
  59. #include "basic.hpp"
  60. #include "dwt.h"
  61. /* Function:    iDWT()
  62.    Description: Inverse DWT for MPEG-4 Still Texture Coding 
  63.    Input:
  64.    InCoeff -- Input Wavelet Coefficients at CurLevel decomposition
  65.    InMask -- Input  Mask for InCoeff, if ==1, data inside object, 
  66.               otherwise outside.
  67.    Width  -- Width of Original Image (must be multiples of 2^nLevels);
  68.    Height -- Height of Original Image (must be multiples of 2^nLevels);
  69.    CurLevel -- Currect Decomposition Level of the input wavelet coefficients;
  70.    DstLevel -- Destined decomposition level that the wavelet coefficient is 
  71.                synthesized to. DstLevel always less than or equal to CurLevel;
  72.    OutDataType -- OutData Type: 0 - BYTE; 1 -- SHORT
  73.    Filter     -- Filter Used.
  74.    UpdateInput -- Update the level of decomposition to DstLevel  
  75.                   for InCoeff and/or InMask or Not.
  76.                   0 = No  Update; 1 = Update InCoeff; 2: Update InCoeff and InMask;
  77.    FullSizeOut -- 0 = Output image size equals to Width/2^DstLevel x Height/2^DstLevel;
  78.                   1 = Output Image size equals to Width x Height; 
  79.   ( Highpass band filled with zero after DstLevel)
  80.    Output:
  81.  
  82.    OutData -- Output Image data of Width x Height or Width/2^DstLevel x Height/2^DstLevel
  83.               size depending on FullSizeOut, data type decided by OutDataType;
  84.    OutMask    -- Output mask corresponding to OutData
  85.    Return: DWT_OK if successful.  
  86. */
  87. Int VTCIDWT:: do_iDWT(DATA *InCoeff, UChar *InMask, Int Width, Int Height, Int CurLevel,
  88.  Int DstLevel, Int OutDataType, FILTER **Filter,  Void *OutData, 
  89.  UChar *OutMask, Int UpdateInput, Int FullSizeOut)
  90. {
  91.   switch(Filter[0]->DWT_Type) {
  92.   case DWT_INT_TYPE:
  93.     return(iDWTInt(InCoeff, InMask, Width, Height, CurLevel, DstLevel,
  94.    OutDataType, Filter, OutData, OutMask, UpdateInput, FullSizeOut));
  95.   case DWT_DBL_TYPE:
  96.     return(iDWTDbl(InCoeff, InMask, Width, Height, CurLevel, DstLevel,
  97.    OutDataType, Filter, OutData, OutMask, UpdateInput, FullSizeOut));
  98.   default:
  99.     return(DWT_FILTER_UNSUPPORTED);
  100.   }
  101. }
  102. /* Function: AddDCMean 
  103.    Description: Add the Mean of DC coefficients
  104.    Input:
  105.    
  106.    Mask -- Mask for the transformed coeffs
  107.    Width -- Width of the original image
  108.    Height -- Height of the original image
  109.    nLevels -- levels of DWT decomposition performed
  110.    DCMean -- Mean of the DC components
  111.    Input/Output:
  112.    Coeff -- DWT coefficients after nLevels of decomposition
  113.    
  114.    Return: None */
  115. Void VTCIDWT:: AddDCMean(Int *Coeff, UChar *Mask, Int Width, 
  116.        Int Height, Int nLevels, Int DCMean)
  117. {
  118.   Int width = (Width >> nLevels), height = (Height >> nLevels);
  119.   Int k;
  120.   Int *a;
  121.   UChar *c;
  122.   DCMean = (DCMean<<nLevels);
  123.   for(k=0; k<Width*height; k+=Width) {
  124.     for(a=Coeff+k,c=Mask+k; a < Coeff+k+width; a++,c++)  {
  125.       if(*c == DWT_IN) *a+=DCMean;
  126.     }
  127.   }
  128. }