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

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /****************************************************************************/
  2. /*   MPEG4 Visual Texture Coding (VTC) Mode Software                        */
  3. /*                                                                          */
  4. /*   This software was jointly developed by the following participants:     */
  5. /*                                                                          */
  6. /*   Single-quant,  multi-quant and flow control                            */
  7. /*   are provided by  Sarnoff Corporation                                   */
  8. /*     Iraj Sodagar   (iraj@sarnoff.com)                                    */
  9. /*     Hung-Ju Lee    (hjlee@sarnoff.com)                                   */
  10. /*     Paul Hatrack   (hatrack@sarnoff.com)                                 */
  11. /*     Shipeng Li     (shipeng@sarnoff.com)                                 */
  12. /*     Bing-Bing Chai (bchai@sarnoff.com)                                   */
  13. /*     B.S. Srinivas  (bsrinivas@sarnoff.com)                               */
  14. /*                                                                          */
  15. /*   Bi-level is provided by Texas Instruments                              */
  16. /*     Jie Liang      (liang@ti.com)                                        */
  17. /*                                                                          */
  18. /*   Shape Coding is provided by  OKI Electric Industry Co., Ltd.           */
  19. /*     Zhixiong Wu    (sgo@hlabs.oki.co.jp)                                 */
  20. /*     Yoshihiro Ueda (yueda@hlabs.oki.co.jp)                               */
  21. /*     Toshifumi Kanamaru (kanamaru@hlabs.oki.co.jp)                        */
  22. /*                                                                          */
  23. /*   OKI, Sharp, Sarnoff, TI and Microsoft contributed to bitstream         */
  24. /*   exchange and bug fixing.                                               */
  25. /*                                                                          */
  26. /*                                                                          */
  27. /* In the course of development of the MPEG-4 standard, this software       */
  28. /* module is an implementation of a part of one or more MPEG-4 tools as     */
  29. /* specified by the MPEG-4 standard.                                        */
  30. /*                                                                          */
  31. /* The copyright of this software belongs to ISO/IEC. ISO/IEC gives use     */
  32. /* of the MPEG-4 standard free license to use this  software module or      */
  33. /* modifications thereof for hardware or software products claiming         */
  34. /* conformance to the MPEG-4 standard.                                      */
  35. /*                                                                          */
  36. /* Those intending to use this software module in hardware or software      */
  37. /* products are advised that use may infringe existing  patents. The        */
  38. /* original developers of this software module and their companies, the     */
  39. /* subsequent editors and their companies, and ISO/IEC have no liability    */
  40. /* and ISO/IEC have no liability for use of this software module or         */
  41. /* modification thereof in an implementation.                               */
  42. /*                                                                          */
  43. /* Permission is granted to MPEG members to use, copy, modify,              */
  44. /* and distribute the software modules ( or portions thereof )              */
  45. /* for standardization activity within ISO/IEC JTC1/SC29/WG11.              */
  46. /*                                                                          */
  47. /* Copyright 1995, 1996, 1997, 1998 ISO/IEC                                 */
  48. /****************************************************************************/
  49. /************************************************************/
  50. /*     Sarnoff Very Low Bit Rate Still Image Coder          */
  51. /*     Copyright 1995, 1996, 1997, 1998 Sarnoff Corporation */
  52. /************************************************************/
  53. #include <stdio.h>
  54. #include <math.h>
  55. #include "dataStruct.hpp"
  56. // #include "errorHandler.h"
  57. //#include "globals.h"
  58. //#include "dwt.h"
  59. //#include "ShapeCodec.h"
  60. Int STO_const_alpha;
  61. UChar STO_const_alpha_value;
  62. /*--------------------------------------------------------------------
  63.   read_segimage()
  64.   
  65.   Return Values
  66.   -------------
  67.   0: full-frame  1: shape-adaptive
  68.   
  69.   Comments
  70.   --------
  71.   Exits program if error occurs.
  72.   --------------------------------------------------------------------*/
  73. Int CVTCEncoder::read_segimage(Char *seg_path, Int seg_width, Int seg_height, 
  74.   Int img_colors,
  75.   PICTURE *MyImage)
  76. {
  77.   FILE *infptr = NULL;
  78.   Int  seg_size;
  79.   Int  status,col;
  80.   UChar *inmask;
  81.   if ((infptr = fopen(seg_path,"rb")) == NULL) { /* full-frame */
  82.     MyImage[0].mask = MyImage[1].mask = MyImage[2].mask = NULL;
  83.     return (0);
  84.   }
  85.   
  86.   seg_size = seg_width*seg_height; 
  87.   inmask = (UChar *)malloc(sizeof(UChar)*seg_size);
  88.   if(inmask==NULL)
  89.     errorHandler("Couldn't allocate memory to image maskn");
  90.   
  91.   /* Read image */
  92.   if ((status=fread(inmask, sizeof(UChar), seg_size,
  93.     infptr))
  94.       != seg_size)
  95.     errorHandler("Error in reading image file: %sn",seg_path);
  96.   fclose(infptr);
  97.   
  98.   MyImage[0].mask = inmask;
  99.   for (col=1; col<img_colors; col++) 
  100.     MyImage[col].mask = NULL;
  101.   return 1;
  102. }
  103. Void CVTCEncoder::get_virtual_image(PICTURE *MyImage, Int wvtDecompLev, 
  104.        Int usemask, Int colors, Int alphaTH, 
  105.        Int change_CR_disable, FILTER *Filter) 
  106. {
  107.   Int Nx[3], Ny[3];
  108.   Int Width[3], Height[3];
  109.   Int nLevels[3];
  110.   Int col,i;
  111.   /* for 4:2:0 YUV image only */
  112.   Nx[0] = Ny[0]=2;
  113.   for(col=1; col<colors; col++) Nx[col]=Ny[col]=1;
  114.   Width[0] = MyImage[0].width;
  115.   Width[1] = Width[2] = (Width[0]+1)>>1;
  116.   Height[0] = MyImage[0].height;
  117.   Height[1] = Height[2] = (Height[0]+1)>>1;
  118.   nLevels[0] = wvtDecompLev ;
  119.   nLevels[1] = nLevels[2] = nLevels[0]-1;
  120.   
  121.   for (col=0; col<colors; col++) {
  122.   MyImage[col].mask = (UChar *)malloc(sizeof(UChar)*Width[col]*Height[col]);
  123.   for(i=0;i<Width[col]*Height[col];i++) {
  124.  MyImage[col].mask[i] = DWT_IN;
  125.   }
  126.   }
  127.   mzte_codec.m_iWidth = Width[0];
  128.   mzte_codec.m_iHeight = Height[0];
  129.   mzte_codec.m_iOriginX = Width[0];
  130.   mzte_codec.m_iOriginY = Height[0];
  131.   mzte_codec.m_iRealWidth = Width[0];
  132.   mzte_codec.m_iRealHeight = Height[0];
  133. }
  134. Void CVTCDecoder::get_virtual_mask(PICTURE *MyImage,  Int wvtDecompLev,
  135.       Int w, Int h, Int usemask, Int colors, FILTER **filters) 
  136. {
  137. //  Int width[3], height[3];
  138.   Int Width[3], Height[3];
  139.   Int nLevels[3];
  140.   Int col,i;
  141.   Int Nx[3], Ny[3];
  142.   /* for 4:2:0 YUV image only */
  143.   Nx[0] = Ny[0]=2;
  144.   for(col=1; col<3; col++) Nx[col]=Ny[col]=1;
  145.   nLevels[0] = wvtDecompLev;
  146.   nLevels[1] = nLevels[2] = nLevels[0]-1;
  147.   Width[0]= w;
  148.   Width[1]=Width[2]= (w+1)>>1;
  149.   
  150.   Height[0]= h;
  151.   Height[1]=Height[2] = (h+1)>>1;
  152. if (!usemask) {
  153. for (col=0; col<mzte_codec.m_iColors; col++) {
  154. MyImage[col].mask 
  155. =(UChar *)malloc(sizeof(UChar)*Width[col]*Height[col]);
  156. if (MyImage[col].mask==NULL)
  157. errorHandler("Couldn't allocate memory to imagen");
  158. for (i=0; i<Width[col]*Height[col]; i++)
  159. MyImage[col].mask[i] = DWT_IN;
  160. }
  161. mzte_codec.m_iWidth = Width[0];
  162. mzte_codec.m_iHeight = Height[0];
  163. mzte_codec.m_iOriginX = 0;
  164. mzte_codec.m_iOriginY = 0;
  165. mzte_codec.m_iRealWidth = Width[0];
  166. mzte_codec.m_iRealHeight = Height[0]; 
  167.   }
  168. //  else {
  169. //    mzte_codec.m_iWidth = width[0];
  170.  //   mzte_codec.m_iHeight = height[0];
  171. //  }
  172. }