亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? block_encoder.cpp

?? 這是我剛剛完成的關于JPEG2000的C語言實現的部分程序。小波變換是采用97變換
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
/******************************************************************************Description:   Implements the embedded block coding algorithm, including distortionestimation and R-D covex hull analysis, in addition to the codingpasses themselves.  The low level services offered by the MQ arithmetic coderappear in "mq_encoder.cpp" and "mq_encoder.h".******************************************************************************/#include <math.h>#include <string.h>#include "kdu_messaging.h"#include "kdu_block_coding.h"#include "block_coding_common.h"#include "mq_encoder.h"static kdu_byte *significance_luts[4] =  {lh_sig_lut, hl_sig_lut, lh_sig_lut, hh_sig_lut};#define DISTORTION_LSBS 5#define SIGNIFICANCE_DISTORTIONS (1<<DISTORTION_LSBS)#define REFINEMENT_DISTORTIONS (1<<(DISTORTION_LSBS+1))static kdu_int32 significance_distortion_lut[SIGNIFICANCE_DISTORTIONS];static kdu_int32 significance_distortion_lut_lossless[SIGNIFICANCE_DISTORTIONS];static kdu_int32 refinement_distortion_lut[REFINEMENT_DISTORTIONS];static kdu_int32 refinement_distortion_lut_lossless[REFINEMENT_DISTORTIONS];#define EXTRA_ENCODE_CWORDS 3 // Number of extra context-words between stripes.#define MAX_POSSIBLE_PASSES (31*3-2)/* ========================================================================= *//*                   Local Class and Structure Definitions                   *//* ========================================================================= *//*****************************************************************************//*                             kd_block_encoder                              *//*****************************************************************************/class kd_block_encoder : public kdu_block_encoder_base {  /* Although we can supply a constructor and a virtual destructor in the     future, we have no need for these for the moment. */  protected:    void encode(kdu_block *block, bool reversible, double msb_wmse,                kdu_uint16 estimated_slope_threshold);  private: // Internal implementation    void reset_states()      { // See Table 12.1 in the book by Taubman and Marcellin        for (int n=0; n < 18; n++)          states[n].init(0,0);        states[KAPPA_SIG_BASE].init(4,0);        states[KAPPA_RUN_BASE].init(3,0);      }  private: // Data    mqe_state states[18];  };/* ========================================================================= *//*            Initialization of Distortion Estimation Tables                 *//* ========================================================================= */static void initialize_significance_distortion_luts();static void initialize_refinement_distortion_luts();static class encoder_local_init {    public: encoder_local_init()              { initialize_significance_distortion_luts();                initialize_refinement_distortion_luts(); }  } _do_it;/*****************************************************************************//* STATIC          initialize_significance_distortion_luts                   *//*****************************************************************************/static void  initialize_significance_distortion_luts(){  double fp_scale = (double)(1<<16);  for (kdu_int32 n=0; n < SIGNIFICANCE_DISTORTIONS; n++)    {      kdu_int32 idx = n | (1<<DISTORTION_LSBS);      double v_tilde = ((double) idx) / ((double)(1<<DISTORTION_LSBS));      assert((v_tilde >= 1.0) && (v_tilde < 2.0));      double sqe_before = v_tilde*v_tilde;      double sqe_after = (v_tilde-1.5)*(v_tilde-1.5);      significance_distortion_lut[n] = (int)        floor(0.5 + fp_scale*(sqe_before-sqe_after));      significance_distortion_lut_lossless[n] = (int)        floor(0.5 + fp_scale*sqe_before);    }}/*****************************************************************************//* STATIC            initialize_refinement_distortion_luts                   *//*****************************************************************************/static void  initialize_refinement_distortion_luts(){  double fp_scale = (double)(1<<16);  for (kdu_int32 n=0; n < REFINEMENT_DISTORTIONS; n++)    {      double v_tilde = ((double) n) / ((double)(1<<DISTORTION_LSBS));      assert(v_tilde < 2.0);      double sqe_before = (v_tilde-1.0)*(v_tilde-1.0);      v_tilde = (n >> DISTORTION_LSBS)?(v_tilde-1.0):v_tilde;      assert((v_tilde >= 0.0) && (v_tilde < 1.0));      double sqe_after = (v_tilde-0.5)*(v_tilde-0.5);      refinement_distortion_lut[n] = (int)        floor(0.5 + fp_scale*(sqe_before-sqe_after));      refinement_distortion_lut_lossless[n] = (int)        floor(0.5 + fp_scale*sqe_before);    }}/* ========================================================================= *//*             Binding of MQ and Raw Symbol Coding Services                  *//* ========================================================================= */#define USE_FAST_MACROS // Comment this out if you want functions instead.#ifdef USE_FAST_MACROS#  define _mq_check_out_(coder)                                     \     register kdu_int32 A; register kdu_int32 C; register kdu_int32 t; \     kdu_int32 temp; kdu_byte *store;                                 \     coder.check_out(A,C,t,temp,store)#  define _mq_check_in_(coder)                                      \     coder.check_in(A,C,t,temp,store)#  define _mq_enc_(coder,symbol,state)                              \     _mq_encode_(symbol,state,A,C,t,temp,store)#  define _mq_enc_run_(coder,run)                                   \     _mq_encode_run_(run,A,C,t,temp,store)#  define _raw_check_out_(coder)                                    \     register kdu_int32 t; register kdu_int32 temp; kdu_byte *store;   \     coder.check_out(t,temp,store)#  define _raw_check_in_(coder)                                     \     coder.check_in(t,temp,store)#  define _raw_enc_(coder,symbol)                                   \     _raw_encode_(symbol,t,temp,store)#else // Do not use fast macros#  define _mq_check_out_(coder)#  define _mq_check_in_(coder)#  define _mq_enc_(coder,symbol,state) coder.mq_encode(symbol,state)#  define _mq_enc_run_(coder,run) coder.mq_encode_run(run)#  define _raw_check_out_(coder)#  define _raw_check_in_(coder)#  define _raw_enc_(coder,symbol) coder.raw_encode(symbol)#endif // USE_FAST_MACROS /* The coding pass functions defined below all return a 32-bit integer,    which represents the normalized reduction in MSE associated with the    coded symbols.  Specifically, the MSE whose reduction is returned is    equal to 2^16 * sum_i (x_i/2^p - x_i_hat/2^p)^2 where x_i denotes the    integer sample values in the `samples' array and x_i_hat denotes the    quantized representation available from the current coding pass and all    previous coding passes, assuming a mid-point reconstruction rule.       The mid-point reconstruction rule satisfies x_i_hat = (q_i+1/2)*Delta    where q_i denotes the quantization indices and Delta is the quantization    step size.  This rule is modified only if the `lossless_pass' argument is    true, which is permitted only when symbols coded in the coding pass    result in a lossless representation of the corresponding subband samples.    Of course, this can only happen in the last bit-plane when the reversible    compression path is being used.  In this case, the function uses the fact    that all coded symbols have 0 distortion.       It should be noted that the MSE reduction can be negative, meaning    that the coding of symbols actually increases distortion. *//* ========================================================================= *//*                           Coding pass functions                           *//* ========================================================================= *//*****************************************************************************//* STATIC                    encode_sig_prop_pass                            *//*****************************************************************************/static kdu_int32  encode_sig_prop_pass(mq_encoder &coder, mqe_state states[],                       int p, bool causal, int orientation,                       kdu_int32 *samples, kdu_int32 *contexts,                       int width, int num_stripes, int context_row_gap,                       bool lossless_pass){  /* Ideally, register storage is available for 12 32-bit integers. Three     are declared inside the "_mq_check_out_" macro.  The order of priority     for these registers corresponds roughly to the order in which their     declarations appear below.  Unfortunately, none of these register     requests are likely to be honored by the register-starved X86 family     of processors, but the register declarations may prove useful to     compilers for other architectures or for hand optimizations of     assembly code. */  register kdu_int32 *cp = contexts;  register int c;  register kdu_int32 cword;  _mq_check_out_(coder); // Declares A, C, and t as registers.  register kdu_int32 sym;  register kdu_int32 val;  register kdu_int32 *sp = samples;  register kdu_int32 shift = 31-p; assert(shift > 0);  register  kdu_byte *sig_lut = significance_luts[orientation];  register mqe_state *state_ref;  int r, width_by2=width+width, width_by3=width_by2+width;  kdu_int32 distortion_change = 0;  kdu_int32 *distortion_lut = significance_distortion_lut;  if (lossless_pass)    distortion_lut = significance_distortion_lut_lossless;  assert((context_row_gap - width) == EXTRA_ENCODE_CWORDS);  for (r=num_stripes; r > 0; r--, cp += EXTRA_ENCODE_CWORDS, sp += width_by3)    for (c=width; c > 0; c--, sp++, cp++)      {        if (*cp == 0)          { // Invoke speedup trick to skip over runs of all-0 neighbourhoods            for (cp+=3; *cp == 0; cp+=3, c-=3, sp+=3);            cp-=3;            continue;          }        cword = *cp;        if ((cword & (NBRHD_MASK<<0)) && !(cword & (SIG_PROP_MEMBER_MASK<<0)))          { // Process first row of stripe column (row 0)            state_ref = states+KAPPA_SIG_BASE+sig_lut[cword & NBRHD_MASK];            val = sp[0]<<shift; // Move bit p to sign bit.            sym = val & KDU_INT32_MIN;            _mq_enc_(coder,sym,*state_ref);            if (val >= 0) // New magnitude bit was 0, so still insignificant              { cword |= (PI_BIT<<0); goto row_1; }            // Compute distortion change            val =  (val>>(31-DISTORTION_LSBS)) & (SIGNIFICANCE_DISTORTIONS-1);            distortion_change += distortion_lut[val];            // Encode sign bit            sym = cword & ((CHI_BIT>>3) | (SIGMA_CC_BIT>>3) |                           (CHI_BIT<<3) | (SIGMA_CC_BIT<<3));            sym >>= 1; // Shift down so that top sigma bit has address 0            sym |= (cp[-1] & ((CHI_BIT<<0) | (SIGMA_CC_BIT<<0))) >> (1+1);            sym |= (cp[ 1] & ((CHI_BIT<<0) | (SIGMA_CC_BIT<<0))) >> (1-1);            sym |= (sym >> (CHI_POS-1-SIGMA_CC_POS)); // Interleave chi & sigma            val = sign_lut[sym & 0x000000FF];            state_ref = states + KAPPA_SIGN_BASE + (val>>1);            sym = val << 31; // Get sign flipping to `sym'            val = sp[0] & KDU_INT32_MIN; // Get the sign bit            sym ^= val; // Moves flipped sign bit into `sym'            _mq_enc_(coder,sym,*state_ref);            // Broadcast neighbourhood context changes; sign bit is in `val'            cp[-1] |= (SIGMA_CR_BIT<<0);            cp[1]  |= (SIGMA_CL_BIT<<0);            if (val < 0)              {                cword |= (SIGMA_CC_BIT<<0) | (PI_BIT<<0) | (CHI_BIT<<0);                if (!causal)                  {                    cp[-context_row_gap-1] |= (SIGMA_BR_BIT<<9);                    cp[-context_row_gap  ] |= (SIGMA_BC_BIT<<9) | NEXT_CHI_BIT;                    cp[-context_row_gap+1] |= (SIGMA_BL_BIT<<9);                  }              }            else              {                cword |= (SIGMA_CC_BIT<<0) | (PI_BIT<<0);                if (!causal)                  {                    cp[-context_row_gap-1] |= (SIGMA_BR_BIT<<9);                    cp[-context_row_gap  ] |= (SIGMA_BC_BIT<<9);                    cp[-context_row_gap+1] |= (SIGMA_BL_BIT<<9);                  }              }          }row_1:        if ((cword & (NBRHD_MASK<<3)) && !(cword & (SIG_PROP_MEMBER_MASK<<3)))          { // Process second row of stripe column (row 1)            state_ref = states+KAPPA_SIG_BASE+sig_lut[(cword>>3) & NBRHD_MASK];            val = sp[width]<<shift; // Move bit p to sign bit.            sym = val & KDU_INT32_MIN;            _mq_enc_(coder,sym,*state_ref);            if (val >= 0) // New magnitude bit was 0, so still insignificant              { cword |= (PI_BIT<<3); goto row_2; }            // Compute distortion change            val =  (val>>(31-DISTORTION_LSBS)) & (SIGNIFICANCE_DISTORTIONS-1);            distortion_change += distortion_lut[val];            // Encode sign bit            sym = cword & ((CHI_BIT<<0) | (SIGMA_CC_BIT<<0) |

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
wwwwxxxxx欧美| 亚洲色图一区二区| 久久夜色精品一区| 中文字幕第一区二区| 成人欧美一区二区三区小说| 亚洲最快最全在线视频| 老司机精品视频导航| 成人av在线观| 欧美日韩不卡一区二区| 国产日韩高清在线| 日韩高清在线观看| 丁香婷婷综合网| 欧美日韩精品久久久| 国产午夜亚洲精品不卡| 午夜欧美在线一二页| 成人涩涩免费视频| 日韩女同互慰一区二区| 一区二区三区四区精品在线视频| 日本亚洲三级在线| 99久久精品国产毛片| 日韩精品一区二区三区中文精品| 久久久噜噜噜久噜久久综合| 亚洲不卡一区二区三区| 成人国产一区二区三区精品| 日韩精品中文字幕在线不卡尤物| 日韩成人免费看| 成人免费毛片aaaaa**| 欧美mv和日韩mv国产网站| 一区二区三区**美女毛片| 丁香亚洲综合激情啪啪综合| 欧美电影免费观看高清完整版在| 亚洲国产成人av网| 91福利在线播放| 亚洲色图制服丝袜| 国产剧情一区在线| 欧美日韩精品是欧美日韩精品| 国产精品久线观看视频| 国产精品一区二区你懂的| 欧美一区二区三区免费观看视频| 亚洲国产一区二区视频| 色先锋aa成人| 亚洲日本青草视频在线怡红院| 国产精品亚洲专一区二区三区| 7777精品久久久大香线蕉| 亚洲午夜久久久| 欧美亚洲国产怡红院影院| 亚洲你懂的在线视频| 91亚洲精华国产精华精华液| 国产日韩欧美精品电影三级在线| 狠狠色狠狠色合久久伊人| 日韩欧美在线观看一区二区三区| 日韩中文字幕av电影| 7777女厕盗摄久久久| 日本美女一区二区三区视频| 欧美丰满少妇xxxxx高潮对白 | 欧美亚洲日本一区| 亚洲黄网站在线观看| 色哟哟精品一区| 亚洲一区av在线| 91蜜桃网址入口| 一级做a爱片久久| 欧美日韩一区久久| 亚洲自拍偷拍图区| 在线精品观看国产| 天堂va蜜桃一区二区三区| 在线不卡免费欧美| 日本少妇一区二区| 日韩免费观看高清完整版在线观看| 美女视频网站黄色亚洲| 欧美mv日韩mv| 国产成都精品91一区二区三| 国产女主播一区| 91捆绑美女网站| 亚洲福中文字幕伊人影院| 欧美精品高清视频| 久久精工是国产品牌吗| 久久精品亚洲国产奇米99| 成人福利在线看| 亚洲国产综合人成综合网站| 日韩欧美国产系列| 国产91精品久久久久久久网曝门| 久久久av毛片精品| www.激情成人| 日韩av高清在线观看| 国产亚洲一二三区| 欧日韩精品视频| 美女免费视频一区| 国产精品三级久久久久三级| 色琪琪一区二区三区亚洲区| 秋霞电影一区二区| 国产日韩欧美精品在线| 欧美中文字幕不卡| 狠狠色丁香久久婷婷综| 亚洲视频免费在线| 欧美理论在线播放| 成人97人人超碰人人99| 美女视频一区二区三区| 亚洲国产精品久久一线不卡| **欧美大码日韩| 国产精品天干天干在观线| 精品国产一区二区三区av性色| 欧美理论片在线| 欧美日韩日日骚| 日本韩国欧美一区| 色偷偷一区二区三区| 99精品国产视频| 成人小视频免费观看| 国产乱淫av一区二区三区| 另类专区欧美蜜桃臀第一页| 免费在线视频一区| 日韩国产精品91| 日本不卡123| 免费在线观看不卡| 秋霞国产午夜精品免费视频| 青青青爽久久午夜综合久久午夜| 日韩av电影免费观看高清完整版 | 91在线国产福利| 国产成人在线电影| 国产盗摄精品一区二区三区在线| 国产在线国偷精品产拍免费yy| 韩国成人精品a∨在线观看| 久草精品在线观看| 国产精品一区久久久久| 国产成人综合亚洲网站| 国产成人丝袜美腿| av综合在线播放| 日本韩国一区二区三区视频| 欧美在线|欧美| 欧美丰满少妇xxxxx高潮对白| 4438x成人网最大色成网站| 欧美mv和日韩mv国产网站| 国产网站一区二区| 中文字幕在线一区二区三区| 亚洲综合色丁香婷婷六月图片| 亚洲国产综合在线| 蜜臀av一级做a爰片久久| 国产精品538一区二区在线| av亚洲精华国产精华| 精品1区2区3区| 日韩精品一区二区三区在线| 国产亚洲精品aa| 亚洲精品日日夜夜| 免费成人美女在线观看| 成人开心网精品视频| 在线中文字幕一区二区| 日韩欧美国产三级| 成人免费在线视频观看| 日韩在线a电影| 成人激情动漫在线观看| 欧美日韩亚洲综合在线| 国产夜色精品一区二区av| 一区二区三区四区中文字幕| 激情伊人五月天久久综合| 99久久精品99国产精品| 欧美一区二区福利在线| 亚洲视频一二三区| 九九视频精品免费| 在线观看欧美黄色| 国产婷婷精品av在线| 天涯成人国产亚洲精品一区av| 国产成人在线视频网站| 欧美日韩精品一区二区| 国产日韩欧美在线一区| 日本sm残虐另类| 色先锋资源久久综合| 久久久久久久久久久99999| 亚洲国产日韩精品| 成人精品一区二区三区中文字幕| 欧美一区二区私人影院日本| 亚洲人成网站精品片在线观看| 久久精品国产澳门| 欧美在线短视频| 亚洲私人黄色宅男| 国产一区二区三区免费播放| 在线综合+亚洲+欧美中文字幕| 亚洲欧美日本在线| 丁香六月综合激情| 亚洲精品一线二线三线无人区| 午夜av电影一区| 91理论电影在线观看| 中文字幕成人av| 国产一区二区在线观看视频| 91精品国产一区二区三区| 亚洲一区二区高清| 91啪在线观看| 国产精品久久毛片a| 国v精品久久久网| 国产三级精品视频| 国产一区二区三区黄视频| 日韩一级大片在线| 香蕉久久一区二区不卡无毒影院| 日本高清不卡视频| 亚洲日本电影在线| 国产精品99久久久久久有的能看 | 亚洲国产电影在线观看| 国模少妇一区二区三区| 精品久久久久久综合日本欧美| 毛片一区二区三区| 精品久久国产老人久久综合| 国产一区二区在线观看免费|