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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? block_encoder.cpp

?? 這是我剛剛完成的關(guān)于JPEG2000的C語言實(shí)現(xiàn)的部分程序。小波變換是采用97變換
?? CPP
?? 第 1 頁 / 共 4 頁
字號(hào):
/* ========================================================================= *//*****************************************************************************//*                         kd_block_encoder::encode                          *//*****************************************************************************/void  kd_block_encoder::encode(kdu_block *block, bool reversible, double msb_wmse,                           kdu_uint16 estimated_threshold){  double estimated_slope_threshold = -1.0;  if ((estimated_threshold > 1) && (msb_wmse > 0.0) &&      (block->orientation != LL_BAND))    estimated_slope_threshold = slope_from_log(estimated_threshold);     /* Note: the exclusion of the LL band above is important, since LL        subband blocks do not generally have zero mean samples (far from        it) so that an approximately uniform block can yield distortion        which varies in an unpredictable manner with the number of coded        bit-planes.  These unpredictable variations can lead to a large        number of consecutive coding passes not lying on the convex hull        of the R-D curve -- a condition which would cause the coder        to quit prematurely if an estimated slope threshold were given. */  /* Allocate space on the stack for a number of largish quantities.  These     could be placed elsewhere. */  double pass_wmse_changes[MAX_POSSIBLE_PASSES];  mq_encoder pass_encoders[MAX_POSSIBLE_PASSES];  // Get dimensions.  int num_cols = block->size.x;  int num_rows = block->size.y;  int num_stripes = (num_rows+3)>>2;  int num_samples = (num_stripes<<2)*num_cols;  int context_row_gap = num_cols + EXTRA_ENCODE_CWORDS;  int num_context_words = (num_stripes+2)*context_row_gap+1;    // Prepare enough storage.  assert(block->max_samples >= num_samples);  if (block->max_contexts < num_context_words)    block->set_max_contexts((num_context_words > 1600)?num_context_words:1600);  kdu_int32 *samples = block->sample_buffer;  kdu_int32 *context_words = block->context_buffer + context_row_gap + 1;  // Determine the actual number of passes which we can accomodate.  if (block->num_passes > ((31-block->missing_msbs)*3-2))    block->num_passes = (31-block->missing_msbs)*3-2;  // Make sure we have sufficient resources to process this number of passes  if (block->max_passes < block->num_passes)    block->set_max_passes(block->num_passes+10,false); // Allocate a few extra  // Timing loop starts here.  int cpu_counter = block->start_timing();  do {      // Initialize contexts, marking OOB (Out Of Bounds) locations      memset(context_words-1,0,(size_t)((num_stripes*context_row_gap+1)<<2));      if (num_rows & 3)        {          kdu_int32 oob_marker;          if ((num_rows & 3) == 1) // Last 3 rows of last stripe unoccupied            oob_marker = (OOB_MARKER<<3) | (OOB_MARKER<<6) | (OOB_MARKER<<9);          else if ((num_rows & 3) == 2) // Last 2 rows of last stripe unused            oob_marker = (OOB_MARKER << 6) | (OOB_MARKER << 9);          else            oob_marker = (OOB_MARKER << 9);          kdu_int32 *cp = context_words + (num_stripes-1)*context_row_gap;          for (int k=num_cols; k > 0; k--)            *(cp++) = oob_marker;        }      if (context_row_gap > num_cols)        { // Initialize the extra context words between lines to OOB          kdu_int32 oob_marker =            OOB_MARKER | (OOB_MARKER<<3) | (OOB_MARKER<<6) | (OOB_MARKER<<9);          assert(context_row_gap >= (num_cols+3));          kdu_int32 *cp = context_words + num_cols;          for (int k=num_stripes; k > 0; k--, cp+=context_row_gap)            cp[0] = cp[1] = cp[2] = oob_marker; // Need 3 OOB words after line        }      double pass_wmse_scale = msb_wmse / ((double)(1<<16)) / ((double)(1<<16));      for (int i=block->missing_msbs; i > 0; i--)        pass_wmse_scale *= 0.25;      int p_max = 30 - block->missing_msbs; // Index of most significant plane      int p = p_max; // Bit-plane counter      int z = 0; // Coding pass index      int k=2; // Coding pass category; start with cleanup pass      int segment_passes = 0; // Num coding passes in current codeword segment.      kdu_byte *seg_buf = block->byte_buffer; // Start of current segment      int segment_bytes = 0; // Bytes consumed so far by this codeword segment      int first_unsized_z = 0; // First pass whose length is not yet known      int available_bytes = block->max_bytes; // For current & future segments      bool bypass = false;      bool causal = (block->modes & Cmodes_CAUSAL) != 0;      bool optimize = !(block->modes & Cmodes_ERTERM);      for (; z < block->num_passes; z++, k++)        {          if (k == 3)            { // Move on to next bit-plane.              k=0; p--;              pass_wmse_scale *= 0.25;            }          // See if we need to augment byte buffer resources to safely continue          if ((available_bytes-segment_bytes) < 4096)            { // We could build a much more thorough test for sufficiency.              assert(available_bytes >= segment_bytes); // else already overrun              kdu_byte *old_handle = block->byte_buffer;              block->set_max_bytes(block->max_bytes+8192,true);              available_bytes += 8192;              kdu_byte *new_handle = block->byte_buffer;              for (int i=0; i < z; i++)                pass_encoders[i].augment_buffer(old_handle,new_handle);              seg_buf = new_handle + (seg_buf-old_handle);            }          // Either start a new codeword segment, or continue an earlier one.          if (segment_passes == 0)            { // Need to start a new codeword segment.              segment_passes = block->num_passes;              if (block->modes & Cmodes_BYPASS)                {                  if (z < 10)                    segment_passes = 10-z;                  else if (k == 2) // Cleanup pass.                    { segment_passes = 1; bypass = false; }                  else                    {                      segment_passes = 2;                      bypass = true;                    }                }              if (block->modes & Cmodes_RESTART)                segment_passes = 1;              if ((z+segment_passes) > block->num_passes)                segment_passes = block->num_passes - z;              pass_encoders[z].start(seg_buf,!bypass);            }          else            pass_encoders[z].continues(pass_encoders+z-1);          // Encoding steps for the pass          kdu_int32 distortion_change;          bool lossless_pass = reversible && ((31-p) == block->K_max_prime);          if ((z == 0) || (block->modes & Cmodes_RESET))            reset_states();          if ((k == 0) && !bypass)            distortion_change =              encode_sig_prop_pass(pass_encoders[z],                                   states,p,causal,block->orientation,                                   samples,context_words,                                   num_cols,num_stripes,context_row_gap,                                   lossless_pass);          else if (k == 0)            distortion_change =              encode_sig_prop_pass_raw(pass_encoders[z],                                       p,causal,samples,context_words,                                       num_cols,num_stripes,context_row_gap,                                       lossless_pass);          else if ((k == 1) && !bypass)            distortion_change =              encode_mag_ref_pass(pass_encoders[z],                                  states,p,causal,samples,context_words,                                  num_cols,num_stripes,context_row_gap,                                  lossless_pass);          else if (k == 1)            distortion_change =              encode_mag_ref_pass_raw(pass_encoders[z],                                      p,causal,samples,context_words,                                      num_cols,num_stripes,context_row_gap,                                      lossless_pass);          else            distortion_change =              encode_cleanup_pass(pass_encoders[z],                                  states,p,causal,block->orientation,                                  samples,context_words,                                  num_cols,num_stripes,context_row_gap,                                  lossless_pass);          pass_wmse_changes[z] = pass_wmse_scale * distortion_change;          if ((block->modes & Cmodes_SEGMARK) && (k==2))            {              kdu_int32 segmark = 0x0A;              pass_encoders[z].mq_encode_run(segmark>>2);              pass_encoders[z].mq_encode_run(segmark & 3);            }          // Update codeword segment status.          segment_passes--;          segment_bytes = pass_encoders[z].get_bytes_used();          if (segment_passes == 0)            {              kdu_byte *new_buf = pass_encoders[z].terminate(optimize);              available_bytes -= (new_buf - seg_buf);              seg_buf = new_buf;              segment_bytes = 0;            }          { // Incrementally determine and process truncation lengths            int t;            bool final;            for  (t=first_unsized_z; t <= z; t++)              {                block->pass_lengths[t] =                  pass_encoders[t].get_incremental_length(final);                if (final)                  { assert(first_unsized_z == t); first_unsized_z++; }              }          }          if (estimated_slope_threshold > 0.0)            { // See if we can finish up early to save time and memory.              int t;              for (t=z; (t >= 0) && (t > (z-3)); t--)                {                  int delta_L = 0;                  double delta_D = 0.0;                  int u = 0;                  for (u=t; u >= 0; u--)                    {                      delta_L += block->pass_lengths[u];                      delta_D += pass_wmse_changes[u];                      if ((estimated_slope_threshold * delta_L) > delta_D)                        break;                    }                  if (u < 0)                    break;                }              if (t <= (z-3))                {                  block->num_passes = z+1; // No point in coding more passes.                  if (segment_passes > 0)                    { // Need to terminate the segment                      pass_encoders[z].terminate(optimize);                      for (t=first_unsized_z; t <= z; t++)                        {                          bool final;                          block->pass_lengths[t] =                          pass_encoders[t].get_incremental_length(final);                          assert(final);                        }                      first_unsized_z = t;                      segment_passes = 0;                    }                }            }          if (segment_passes == 0)            { // Finish cleaning up the completed codeword segment.              assert(first_unsized_z == (z+1));              pass_encoders[z].finish();            }        }      assert(segment_passes == 0);      assert(first_unsized_z == block->num_passes);      if (msb_wmse > 0.0)        { /* Form the convex hull set.  We could have done most of the work             incrementally as the lengths became available -- see above.             However, there is little value to this in the present             implementation.  A hardware implementation may prefer the             incremental calculation approach for all quantities, so that             slopes and lengths can be dispatched in a covnenient interleaved             fashion to memory as they become available. */          find_convex_hull(block->pass_lengths,pass_wmse_changes,                           block->pass_slopes,block->num_passes);          if (reversible && ((31-p) == block->K_max_prime))            { /* Must force last coding pass onto convex hull.  Otherwise, a                 decompressor using something other than the mid-point rounding                 rule can fail to achieve lossless decompression. */              z = block->num_passes-1;              if (block->pass_slopes[z] == 0)                block->pass_slopes[z] = 1; /* Works because                      `find_convex_hull_slopes' never generates slopes of 1. */            }        }    } while ((--cpu_counter) > 0);  block->finish_timing();}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产999精品久久久久久绿帽| 久久狠狠亚洲综合| 一本久久a久久精品亚洲| 国产精品免费久久久久| 91亚洲国产成人精品一区二区三 | 亚洲欧美一区二区三区国产精品 | 国产精品久久久久久久久动漫| 成人午夜又粗又硬又大| 亚洲欧美激情插| 欧美日韩极品在线观看一区| 日本在线观看不卡视频| 精品国产免费一区二区三区香蕉| 国产精品一区2区| 亚洲欧美日韩久久精品| 欧美日韩亚洲综合一区| 美女视频一区二区三区| 国产精品视频观看| 日本精品一区二区三区高清 | 婷婷开心久久网| 精品福利视频一区二区三区| 欧美一区二区三区免费大片| 欧美日韩亚洲国产综合| 喷水一区二区三区| 久久久91精品国产一区二区精品| 97精品久久久久中文字幕 | 国产黄色成人av| 亚洲欧美日韩国产中文在线| 777午夜精品免费视频| 粉嫩13p一区二区三区| 亚洲乱码国产乱码精品精小说 | 五月综合激情网| 国产日韩欧美亚洲| 欧美日韩成人综合| 国产高清亚洲一区| 天天免费综合色| 国产精品不卡在线观看| 日韩一级大片在线观看| 欧美一区二区网站| 精品视频在线免费观看| 国产精品白丝av| 一区二区高清视频在线观看| 欧美成人官网二区| 色8久久精品久久久久久蜜| 国内成人自拍视频| 亚洲444eee在线观看| 国产精品麻豆99久久久久久| 日韩精品专区在线影院重磅| 欧美亚洲综合色| 成人av午夜电影| 九九九精品视频| 亚洲午夜av在线| 1区2区3区国产精品| 久久色中文字幕| 欧美一卡二卡三卡四卡| 欧美午夜理伦三级在线观看| av网站免费线看精品| 经典三级视频一区| 日本在线不卡视频一二三区| 亚洲大型综合色站| 日韩欧美精品在线视频| 极品销魂美女一区二区三区| 亚洲乱码国产乱码精品精的特点 | 欧美精品久久久久久久久老牛影院| 成人美女视频在线观看| 久久超碰97中文字幕| 日韩av午夜在线观看| 午夜欧美在线一二页| 亚洲综合色在线| 一区二区三区四区中文字幕| 国产视频一区不卡| 久久久噜噜噜久久中文字幕色伊伊 | 一区二区三区欧美日| 亚洲视频一二三| 亚洲美女偷拍久久| 一区二区三区四区不卡在线| 亚洲品质自拍视频网站| 色婷婷综合久久| 国产一区二区不卡在线| 蜜芽一区二区三区| 亚洲第四色夜色| 日韩在线一区二区三区| 日韩精彩视频在线观看| 日韩电影在线免费看| 日产欧产美韩系列久久99| 日本特黄久久久高潮| 奇米综合一区二区三区精品视频| 免费成人在线观看| 国内成人精品2018免费看| 国产精品一区二区三区网站| 福利视频网站一区二区三区| 99久久精品免费看| 欧洲av一区二区嗯嗯嗯啊| 欧美肥胖老妇做爰| 日韩免费高清av| 亚洲国产精品成人综合色在线婷婷| 国产午夜精品一区二区三区四区| 中国av一区二区三区| 亚洲色图欧洲色图| 日日噜噜夜夜狠狠视频欧美人| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产综合色精品一区二区三区| 国产v日产∨综合v精品视频| 91在线精品一区二区| 在线观看日产精品| 91精品国产综合久久精品app| 欧美videos中文字幕| 国产精品私人影院| 亚洲成人免费电影| 国产精品77777竹菊影视小说| 91在线视频观看| 制服.丝袜.亚洲.另类.中文| 精品少妇一区二区| 国产精品每日更新在线播放网址| 亚洲午夜影视影院在线观看| 久久av老司机精品网站导航| 成人av电影在线| 这里是久久伊人| 亚洲欧美在线另类| 日韩二区三区四区| 91污在线观看| 欧美大片免费久久精品三p | xf在线a精品一区二区视频网站| 国产精品进线69影院| 蜜桃久久精品一区二区| 91麻豆免费看| 久久只精品国产| 亚洲va欧美va人人爽| 成人av动漫网站| 欧美变态口味重另类| 亚洲综合在线第一页| 成人中文字幕电影| 欧美一级欧美三级| 一区二区三区精品| 国产91丝袜在线播放0| 欧美一区二区二区| 一区二区久久久久久| 成人激情校园春色| 精品日韩一区二区三区| 亚洲va国产天堂va久久en| 99re这里只有精品视频首页| 欧美videossexotv100| 天堂影院一区二区| 色久综合一二码| 国产精品久久午夜| 高清av一区二区| 久久色在线视频| 精品一区二区在线视频| 欧美另类videos死尸| 亚洲大片在线观看| 日本精品视频一区二区| 综合激情成人伊人| 成人动漫中文字幕| 国产丝袜美腿一区二区三区| 黄网站免费久久| 欧美xxxx在线观看| 美国欧美日韩国产在线播放 | 日韩精品一区二区三区swag| 婷婷中文字幕综合| 欧美卡1卡2卡| 日韩国产高清影视| 欧美精品免费视频| 亚洲成人中文在线| 欧美色区777第一页| 亚洲自拍与偷拍| 欧美日韩一区二区不卡| 亚洲电影一级黄| 91精品中文字幕一区二区三区| 五月婷婷另类国产| 欧美一级久久久久久久大片| 蓝色福利精品导航| 精品日韩一区二区| 国产福利电影一区二区三区| 中文字幕免费不卡在线| 成人h版在线观看| 中文字幕日本不卡| 日本精品一级二级| 五月激情综合婷婷| 久久亚洲一区二区三区明星换脸| 国产欧美一区二区精品性色| 国产最新精品精品你懂的| www亚洲一区| 成人性生交大合| 国产精品网友自拍| 色综合视频在线观看| 一二三区精品视频| 欧美日韩精品欧美日韩精品| 视频一区二区三区在线| 欧美一卡二卡三卡| 国产一区二区三区国产| 亚洲欧洲成人自拍| 欧美日韩国产天堂| 日本欧美久久久久免费播放网| 欧美www视频| av不卡在线观看| 亚洲成人免费视| 久久久精品tv| 91福利社在线观看| 极品美女销魂一区二区三区| 久久久综合九色合综国产精品| 91免费观看视频在线|