⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pezw_texturelayerbq.cpp

📁 网络MPEG4IP流媒体开发源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
          }            /* get the bitstreams for each color */     /* for YUV420, the U,V color component has one less level */     if(col==1)         splev_start=1;     else         splev_start=0;     for (splev=0;splev<levels-spatial_leveloff;splev++)   /* from coarse scale to fine scale */          {          for(snrlev=SPlayer[0][splev].SNR_scalability_levels-1;snrlev>=Min_Bitplane;snrlev--) /* from msb to lsb */              {                /* for SPlayer, snrlayer 0 means msb bits, need to invert order */                bplane = SPlayer[col][splev].SNR_scalability_levels-snrlev-1;                if(col==0)                    {                        Init_Bufsize[splev][snrlev] = SPlayer[0][splev].SNRlayer[bplane].snr_bitstream.length;                          PEZW_bitstream[splev][snrlev] = (unsigned char *) SPlayer[0][splev].SNRlayer[bplane].snr_bitstream.data;                        if(splev==0){                            splev0_bitstream[snrlev] = PEZW_bitstream[0][snrlev];                            splev0_bitstream_len[snrlev] = Init_Bufsize[0][snrlev];                        }                    }                else{                        Init_Bufsize[splev][snrlev] = Init_Bufsize[splev+splev_start][snrlev];                        PEZW_bitstream[splev][snrlev] = PEZW_bitstream[splev+splev_start][snrlev];                        reach_budget[splev][snrlev] = reach_budget[splev+splev_start][snrlev];                    }                                  /* get all zero and subband skipping info. */                if(splev==0){                    all_non_zero[col] = lshift_by_NBit (splev0_bitstream[snrlev], splev0_bitstream_len[snrlev], 1);                    if(!all_non_zero[col]){                        all_zero[col] = lshift_by_NBit (splev0_bitstream[snrlev], splev0_bitstream_len[snrlev], 1);                        if(!all_zero[col]){                            LH_zero[col] = lshift_by_NBit (splev0_bitstream[snrlev], splev0_bitstream_len[snrlev], 1);                            HL_zero[col] = lshift_by_NBit (splev0_bitstream[snrlev], splev0_bitstream_len[snrlev], 1);                            HH_zero[col] = lshift_by_NBit (splev0_bitstream[snrlev], splev0_bitstream_len[snrlev], 1);                        }                     }                    else                        all_zero[col]=0;                 }                if(all_zero[col] && (splev==0))                    Max_Bitplane--;                if(all_zero[col]){                    decoded_bytes[splev][snrlev] = 0;                    continue;                    }                else    /* skip the leading '1' */                    lshift_by_NBit (PEZW_bitstream[splev][snrlev], Init_Bufsize[splev][snrlev], 1);                                                   }  /* end of snrlev */         }  /* end of splev */      /* allocate wvt_coeffs */      wvt_coeffs = (WINT **)calloc(h,sizeof(WINT *));      wvt_coeffs[0] = (WINT *)(SPlayer[col][0].SNRlayer[0].snr_image.data);      for(i=1;i<h;i++)        wvt_coeffs[i] = wvt_coeffs[0]+i*w;      if(Max_Bitplane>0){         /* this step must follow the previous step */         setbuffer_PEZW_decode ();        /* decode the bitstream for this color component */        PEZW_decode_block (wvt_coeffs,w,h);        /* finish PEZW coding for this color component            retrun the number of bytes decoded in Init_Bufsize */        PEZW_decode_done ( );        for(splev=0;splev<levels-spatial_leveloff;splev++)            for(snrlev=Min_Bitplane;snrlev<Max_Bitplane;snrlev++)                {                total_decoded_bytes += decoded_bytes[splev][snrlev];                if(col<2){        		            /* adjust for residue bits in last byte */                        unsigned char Bit;                        //unsigned char *data;                        PEZW_bitstream[splev][snrlev] += decoded_bytes[splev][snrlev];                        Init_Bufsize[splev][snrlev] -= decoded_bytes[splev][snrlev];                                                Bit = (*(PEZW_bitstream[splev][snrlev]-1)>>bits_to_go_inBuffer[splev][snrlev])&0x01;		                if(bits_to_go_inBuffer[splev][snrlev]>0){		                    PEZW_bitstream[splev][snrlev]--;		                    Init_Bufsize[splev][snrlev]++;		                    lshift_by_NBit(PEZW_bitstream[splev][snrlev],Init_Bufsize[splev][snrlev],                                8-bits_to_go_inBuffer[splev][snrlev]);		                }		                /* check last bit */		                if(!Bit)		                    lshift_by_NBit(PEZW_bitstream[splev][snrlev],Init_Bufsize[splev][snrlev],1);                        if((splev==0)&&(col==0)){                            splev0_bitstream[snrlev] = PEZW_bitstream[0][snrlev];                            splev0_bitstream_len[snrlev] = Init_Bufsize[0][snrlev];                        }                }              }      }     /* dequantize */     Quant[col] = SPlayer[col][0].SNRlayer[0].Quant;     dc_w = w>>levels;     dc_h = h>>levels;     for(i=0;i<h;i++)          for(j=0;j<w;j++)              {                if((i<dc_h) && (j<dc_w))                    continue;                if(wvt_coeffs[i][j]==0)                    temp = 0;                else                    temp = (int)((abs(wvt_coeffs[i][j])+0.5)*Quant[col]);                wvt_coeffs[i][j] =  (wvt_coeffs[i][j]>0)?temp:-temp;             }    /* copy data to structure */    (SPlayer[col][0].SNRlayer[0].snr_image.data) = (WINT *) wvt_coeffs[0];     /* free memory */     free(wvt_coeffs);    }       printf("total actually decoded bits:          %ld\n", (total_decoded_bytes+bytes_decoded)*8);    printf("total actually decoded AC band bits:  %ld", total_decoded_bytes*8);    /* put the decoded wavelet coefficients back into the data structure */    restore_PEZWdata (SPlayer);       /* free memory */    PEZW_freeDec (SPlayer);    free(SPlayer);    for(i=0;i<levels;i++)         free(PEZW_bitstream[i]);    free(PEZW_bitstream);    for (i=0;i<levels;i++)         free(Init_Bufsize[i]);    free(Init_Bufsize);    for (i=0;i<levels;i++)       free(reach_budget[i]);    free(reach_budget);    for (i=0;i<levels+1;i++)       free(bits_to_go_inBuffer[i]);    free(bits_to_go_inBuffer);    for (i=0;i<levels+1;i++)       free(decoded_bytes[i]);    free(decoded_bytes);    free(splev0_bitstream);    free(splev0_bitstream_len); }/* rate control at decoding */void CVTCDecoder::PEZW_decode_ratecontrol (PEZW_SPATIAL_LAYER **SPlayer, int bytes_decoded){    int i, levels;    long decoded_bits=bytes_decoded;    int splayer, snrlev, bplane;    int MaxBitplanes;    int last_bplane = 0, last_splayer = 0, adjusted_rate=0;    int diffrate;    int min_snrlev;    levels = mzte_codec.m_iWvtDecmpLev;    /* allocate rate control structure */    reach_budget = (unsigned char **) calloc(levels,sizeof(char *));    for(i=0;i<levels;i++)        reach_budget[i]= (unsigned char *)calloc(Max_Bitplane,sizeof(char));	/* target bitplane */	Min_Bitplane  = SPlayer[0][0].SNR_scalability_levels-PEZW_target_snr_levels;	if ( Min_Bitplane < 0)	    Min_Bitplane  = 0;	/* target spatial level */	spatial_leveloff = mzte_codec.m_iWvtDecmpLev-PEZW_target_spatial_levels;	if (spatial_leveloff <0)        spatial_leveloff=0;    /* figure out the target snr and spatial layer       and the length for the last layer for target_bitrate options */    MaxBitplanes = SPlayer[0][0].SNR_scalability_levels;    if ((decoded_bits < PEZW_target_bitrate/8) && (PEZW_target_bitrate >0)){        if(mzte_codec.m_iScanOrder==1)            {                for (splayer=0;splayer<mzte_codec.m_iWvtDecmpLev-spatial_leveloff ;splayer++)                    for (snrlev=MaxBitplanes-1;snrlev>=Min_Bitplane;snrlev--)                                          {                                /* for SPlayer, snrlayer 0 means msb bits, need to invert order */                                bplane = SPlayer[0][splayer].SNR_scalability_levels                                            -snrlev-1;                                decoded_bits += SPlayer[0][splayer].SNRlayer[bplane].snr_bitstream.length;                                if ( decoded_bits >= mzte_codec.m_iTargetBitrate/8){                                       adjusted_rate = 1;                                       last_bplane = bplane;                                       last_splayer = splayer;                                       goto outside;                                     }                            }            }        else if (mzte_codec.m_iScanOrder==0)            {               for (snrlev=MaxBitplanes-1;snrlev>=Min_Bitplane;snrlev--)                               for (splayer=0;splayer<mzte_codec.m_iWvtDecmpLev-spatial_leveloff ;splayer++)                     {                       /* for SPlayer, snrlayer 0 means msb bits, need to invert order */                       bplane = SPlayer[0][splayer].SNR_scalability_levels                                  -snrlev-1;                       decoded_bits += SPlayer[0][splayer].SNRlayer[bplane].snr_bitstream.length;                       if ( decoded_bits >= PEZW_target_bitrate/8){                            adjusted_rate = 1;                            last_bplane = bplane;                            last_splayer = splayer;                            goto outside;                           }                     }            }     }outside:     if(adjusted_rate){        diffrate = decoded_bits - PEZW_target_bitrate/8;        SPlayer[0][last_splayer].SNRlayer[last_bplane].snr_bitstream.length            -= diffrate;        /* set up target snr and spatial levels, as well as           the rate control matrix */        if (mzte_codec.m_iScanOrder==0){            min_snrlev = MaxBitplanes-1-last_bplane;            for (splayer=last_splayer;splayer<mzte_codec.m_iWvtDecmpLev-spatial_leveloff;splayer++)                                        reach_budget[splayer][min_snrlev] = 1;            reach_budget[last_splayer][min_snrlev]=0;            Min_Bitplane = min_snrlev;        }        else if (mzte_codec.m_iScanOrder==1){            min_snrlev = MaxBitplanes-1-last_bplane;            for (bplane=min_snrlev;bplane>=Min_Bitplane;bplane--)                                    reach_budget[last_splayer][bplane] = 1;            reach_budget[last_splayer][min_snrlev]=0;            spatial_leveloff = mzte_codec.m_iWvtDecmpLev-1-last_splayer;        }        decoded_bits = PEZW_target_bitrate;     }    return;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -