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

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

?? jccoefct.c

?? DigitalImageProcessing_base_on_Matlab 基于Matlab的數字圖像處理
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 * jccoefct.c
 *
 * Copyright (C) 1994-1996, Thomas G. Lane.
 * This file is part of the Independent JPEG Group's software.
 * For conditions of distribution and use, see the accompanying README file.
 *
 * This file contains the coefficient buffer controller for compression.
 * This controller is the top level of the JPEG compressor proper.
 * The coefficient buffer lies between forward-DCT and entropy encoding steps.
 */

#define JPEG_INTERNALS
#include "jinclude.h"
#include "jpeglib.h"


/* We use a full-image coefficient buffer when doing Huffman optimization,
 * and also for writing multiple-scan JPEG files.  In all cases, the DCT
 * step is run during the first pass, and subsequent passes need only read
 * the buffered coefficients.
 */
#ifdef ENTROPY_OPT_SUPPORTED
#define FULL_COEF_BUFFER_SUPPORTED
#else
#ifdef C_MULTISCAN_FILES_SUPPORTED
#define FULL_COEF_BUFFER_SUPPORTED
#endif
#endif


/* Private buffer controller object */

typedef struct {
  struct jpeg_c_coef_controller pub; /* public fields */

  JDIMENSION iMCU_row_num;	/* iMCU row # within image */
  JDIMENSION mcu_ctr;		/* counts MCUs processed in current row */
  int MCU_vert_offset;		/* counts MCU rows within iMCU row */
  int MCU_rows_per_iMCU_row;	/* number of such rows needed */

  /* For single-pass compression, it's sufficient to buffer just one MCU
   * (although this may prove a bit slow in practice).  We allocate a
   * workspace of C_MAX_BLOCKS_IN_MCU coefficient blocks, and reuse it for each
   * MCU constructed and sent.  (On 80x86, the workspace is FAR even though
   * it's not really very big; this is to keep the module interfaces unchanged
   * when a large coefficient buffer is necessary.)
   * In multi-pass modes, this array points to the current MCU's blocks
   * within the virtual arrays.
   */
  JBLOCKROW MCU_buffer[C_MAX_BLOCKS_IN_MCU];

  /* In multi-pass modes, we need a virtual block array for each component. */
  jvirt_barray_ptr whole_image[MAX_COMPONENTS];
} my_coef_controller;

typedef my_coef_controller * my_coef_ptr;


/* Forward declarations */
METHODDEF(boolean) compress_data
    JPP((j_compress_ptr cinfo, JSAMPIMAGE input_buf));
#ifdef FULL_COEF_BUFFER_SUPPORTED
METHODDEF(boolean) compress_first_pass
    JPP((j_compress_ptr cinfo, JSAMPIMAGE input_buf));
METHODDEF(boolean) compress_output
    JPP((j_compress_ptr cinfo, JSAMPIMAGE input_buf));
#endif


LOCAL(void)
start_iMCU_row (j_compress_ptr cinfo)
/* Reset within-iMCU-row counters for a new row */
{
  my_coef_ptr coef = (my_coef_ptr) cinfo->coef;

  /* In an interleaved scan, an MCU row is the same as an iMCU row.
   * In a noninterleaved scan, an iMCU row has v_samp_factor MCU rows.
   * But at the bottom of the image, process only what's left.
   */
  if (cinfo->comps_in_scan > 1) {
    coef->MCU_rows_per_iMCU_row = 1;
  } else {
    if (coef->iMCU_row_num < (cinfo->total_iMCU_rows-1))
      coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->v_samp_factor;
    else
      coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->last_row_height;
  }

  coef->mcu_ctr = 0;
  coef->MCU_vert_offset = 0;
}


/*
 * Initialize for a processing pass.
 */

METHODDEF(void)
start_pass_coef (j_compress_ptr cinfo, J_BUF_MODE pass_mode)
{
  my_coef_ptr coef = (my_coef_ptr) cinfo->coef;

  coef->iMCU_row_num = 0;
  start_iMCU_row(cinfo);

  switch (pass_mode) {
  case JBUF_PASS_THRU:
    if (coef->whole_image[0] != NULL)
      ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
    coef->pub.compress_data = compress_data;
    break;
#ifdef FULL_COEF_BUFFER_SUPPORTED
  case JBUF_SAVE_AND_PASS:
    if (coef->whole_image[0] == NULL)
      ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
    coef->pub.compress_data = compress_first_pass;
    break;
  case JBUF_CRANK_DEST:
    if (coef->whole_image[0] == NULL)
      ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
    coef->pub.compress_data = compress_output;
    break;
#endif
  default:
    ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
    break;
  }
}


/*
 * Process some data in the single-pass case.
 * We process the equivalent of one fully interleaved MCU row ("iMCU" row)
 * per call, ie, v_samp_factor block rows for each component in the image.
 * Returns TRUE if the iMCU row is completed, FALSE if suspended.
 *
 * NB: input_buf contains a plane for each component in image.
 * For single pass, this is the same as the components in the scan.
 */

METHODDEF(boolean)
compress_data (j_compress_ptr cinfo, JSAMPIMAGE input_buf)
{
  my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
  JDIMENSION MCU_col_num;	/* index of current MCU within row */
  JDIMENSION last_MCU_col = cinfo->MCUs_per_row - 1;
  JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1;
  int blkn, bi, ci, yindex, yoffset, blockcnt;
  JDIMENSION ypos, xpos;
  jpeg_component_info *compptr;

  /* Loop to write as much as one whole iMCU row */
  for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row;
       yoffset++) {
    for (MCU_col_num = coef->mcu_ctr; MCU_col_num <= last_MCU_col;
	 MCU_col_num++) {
      /* Determine where data comes from in input_buf and do the DCT thing.
       * Each call on forward_DCT processes a horizontal row of DCT blocks
       * as wide as an MCU; we rely on having allocated the MCU_buffer[] blocks
       * sequentially.  Dummy blocks at the right or bottom edge are filled in
       * specially.  The data in them does not matter for image reconstruction,
       * so we fill them with values that will encode to the smallest amount of
       * data, viz: all zeroes in the AC entries, DC entries equal to previous
       * block's DC value.  (Thanks to Thomas Kinsman for this idea.)
       */
      blkn = 0;
      for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
	compptr = cinfo->cur_comp_info[ci];
	blockcnt = (MCU_col_num < last_MCU_col) ? compptr->MCU_width
						: compptr->last_col_width;
	xpos = MCU_col_num * compptr->MCU_sample_width;
	ypos = yoffset * DCTSIZE; /* ypos == (yoffset+yindex) * DCTSIZE */
	for (yindex = 0; yindex < compptr->MCU_height; yindex++) {
	  if (coef->iMCU_row_num < last_iMCU_row ||
	      yoffset+yindex < compptr->last_row_height) {
	    (*cinfo->fdct->forward_DCT) (cinfo, compptr,
					 input_buf[ci], coef->MCU_buffer[blkn],
					 ypos, xpos, (JDIMENSION) blockcnt);
	    if (blockcnt < compptr->MCU_width) {
	      /* Create some dummy blocks at the right edge of the image. */
	      jzero_far((void FAR *) coef->MCU_buffer[blkn + blockcnt],
			(compptr->MCU_width - blockcnt) * SIZEOF(JBLOCK));
	      for (bi = blockcnt; bi < compptr->MCU_width; bi++) {
		coef->MCU_buffer[blkn+bi][0][0] = coef->MCU_buffer[blkn+bi-1][0][0];
	      }
	    }
	  } else {
	    /* Create a row of dummy blocks at the bottom of the image. */
	    jzero_far((void FAR *) coef->MCU_buffer[blkn],
		      compptr->MCU_width * SIZEOF(JBLOCK));
	    for (bi = 0; bi < compptr->MCU_width; bi++) {
	      coef->MCU_buffer[blkn+bi][0][0] = coef->MCU_buffer[blkn-1][0][0];
	    }
	  }
	  blkn += compptr->MCU_width;
	  ypos += DCTSIZE;
	}
      }
      /* Try to write the MCU.  In event of a suspension failure, we will
       * re-DCT the MCU on restart (a bit inefficient, could be fixed...)
       */
      if (! (*cinfo->entropy->encode_mcu) (cinfo, coef->MCU_buffer)) {
	/* Suspension forced; update state counters and exit */
	coef->MCU_vert_offset = yoffset;
	coef->mcu_ctr = MCU_col_num;
	return FALSE;
      }
    }
    /* Completed an MCU row, but perhaps not an iMCU row */
    coef->mcu_ctr = 0;
  }
  /* Completed the iMCU row, advance counters for next one */
  coef->iMCU_row_num++;
  start_iMCU_row(cinfo);
  return TRUE;
}


#ifdef FULL_COEF_BUFFER_SUPPORTED

/*
 * Process some data in the first pass of a multi-pass case.
 * We process the equivalent of one fully interleaved MCU row ("iMCU" row)
 * per call, ie, v_samp_factor block rows for each component in the image.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
开心九九激情九九欧美日韩精美视频电影 | 欧美日本一区二区在线观看| 婷婷丁香激情综合| 中文字幕一区在线| 欧美精品 日韩| 日本视频一区二区| 久久久久88色偷偷免费| 久久精品夜色噜噜亚洲a∨| 欧美日韩精品二区第二页| 欧美成人国产一区二区| 国产亚洲精品中文字幕| 亚洲欧洲另类国产综合| 午夜欧美电影在线观看| 国产成人精品午夜视频免费| 色欧美片视频在线观看| 精品嫩草影院久久| 玉足女爽爽91| 91日韩精品一区| 久久久影视传媒| 欧美日韩一区二区三区视频| 日韩女优av电影| 亚洲欧美日韩国产手机在线 | 欧美日韩一区三区| 亚洲蜜臀av乱码久久精品| 美脚の诱脚舐め脚责91| 91精品国产品国语在线不卡| 亚洲欧美韩国综合色| 日韩国产高清影视| 色爱区综合激月婷婷| 综合色中文字幕| 欧美色窝79yyyycom| 一区二区在线免费观看| 一本久久综合亚洲鲁鲁五月天 | 亚洲色图欧美在线| 精品一区二区三区免费播放 | 中文字幕日本不卡| youjizz久久| 国产精品伦一区二区三级视频| 成人影视亚洲图片在线| 亚洲欧美国产三级| 色婷婷综合久久久中文一区二区| 高清在线成人网| 欧美一级久久久| 美女视频黄久久| 久久久久久毛片| 国产二区国产一区在线观看| 日本麻豆一区二区三区视频| 一区二区三区欧美日韩| 国产精品欧美极品| 51午夜精品国产| 91美女片黄在线| 91黄色免费看| 欧美午夜一区二区三区免费大片| 97久久精品人人做人人爽50路| 精品一区二区三区视频在线观看 | 欧美日韩国产首页| av动漫一区二区| 日韩成人午夜电影| 亚洲国产日产av| 亚洲高清视频的网址| 亚洲精品五月天| 一区二区在线免费观看| 国产精品久久久久久亚洲伦 | 欧美日韩极品在线观看一区| 六月丁香综合在线视频| 久久午夜电影网| 精品剧情在线观看| 成人综合激情网| 欧美a级理论片| 亚洲久本草在线中文字幕| 国产欧美一区二区三区沐欲| 久久丝袜美腿综合| 国产香蕉久久精品综合网| 国产偷国产偷精品高清尤物| 欧美日韩精品高清| 91精品国产综合久久久久久| 欧美性色综合网| 日韩精品一区二区三区在线播放 | 国产在线一区观看| 色综合久久久久综合体| 欧美一区二区三区思思人| 亚洲欧洲中文日韩久久av乱码| 韩国毛片一区二区三区| 93久久精品日日躁夜夜躁欧美| 国产麻豆91精品| 欧美日韩国产电影| 成人欧美一区二区三区小说| 日韩av中文在线观看| 99久久精品免费| 久久综合九色综合欧美就去吻| 亚洲女厕所小便bbb| 久久精品噜噜噜成人av农村| 色中色一区二区| 国产精品美女一区二区三区 | 欧洲av在线精品| 国产精品一区三区| 日韩一区二区三区免费看| 国产激情一区二区三区四区| 国产精品久久久久久亚洲伦| 欧美日韩美少妇| 99久久99久久精品免费观看| 免费在线观看不卡| 国产亚洲福利社区一区| 欧美日本一道本| 成年人网站91| 美女视频一区在线观看| 亚洲视频每日更新| 精品国产1区二区| caoporm超碰国产精品| 久久综合五月天婷婷伊人| 懂色中文一区二区在线播放| 国产精品视频一二三| 欧美日韩午夜影院| 天天色天天爱天天射综合| 日韩欧美亚洲另类制服综合在线| 美女在线视频一区| 久久―日本道色综合久久| 日韩国产欧美一区二区三区| 精品国产欧美一区二区| 91一区二区在线| 亚洲综合激情网| 制服丝袜av成人在线看| 91福利精品视频| 色综合久久中文综合久久97 | 国产91精品一区二区麻豆网站| 91精品久久久久久蜜臀| 国产成人av一区二区三区在线| 欧美极品少妇xxxxⅹ高跟鞋 | 日本二三区不卡| 美女mm1313爽爽久久久蜜臀| 国产精品久久久久久久久图文区 | 欧美精品v日韩精品v韩国精品v| 午夜天堂影视香蕉久久| 国产精品美女久久久久久久久| 8x8x8国产精品| 在线亚洲+欧美+日本专区| 国产成人精品一区二| 日韩国产成人精品| 午夜久久久影院| 一区二区三区中文字幕精品精品| 精品国产一区二区亚洲人成毛片 | 99久久精品久久久久久清纯| 免费观看91视频大全| 亚洲国产精品一区二区久久 | 99re这里只有精品视频首页| 国产资源精品在线观看| 日韩**一区毛片| 亚洲成av人片在www色猫咪| 综合激情成人伊人| 欧美国产一区二区在线观看| 亚洲精品在线观看网站| 欧美日韩精品一区二区在线播放| 欧美三级乱人伦电影| 99久久婷婷国产综合精品电影| 成人动漫视频在线| 91在线观看免费视频| 56国语精品自产拍在线观看| 91精品国产品国语在线不卡| 精品日韩一区二区三区免费视频| 日韩精品一区二区三区在线观看| 久久香蕉国产线看观看99| 中文字幕一区二区三区不卡在线| 国产精品嫩草影院com| 午夜一区二区三区视频| 激情综合网天天干| 色婷婷狠狠综合| 91精品啪在线观看国产60岁| 欧美精品一区视频| 亚洲最大的成人av| 国产一区二区在线观看视频| 色香蕉成人二区免费| 26uuu亚洲综合色欧美| 一区二区三区在线视频播放| 国产中文字幕精品| 欧美剧情片在线观看| 有坂深雪av一区二区精品| 国产主播一区二区三区| 91麻豆精品国产91久久久使用方法 | 久久女同性恋中文字幕| 日本午夜精品一区二区三区电影| 风间由美性色一区二区三区| 久久久综合视频| 亚洲一区二区欧美| 精品亚洲成a人| 欧美福利视频导航| 亚洲18女电影在线观看| 一本久久a久久精品亚洲| 日韩一级片网站| 亚洲综合久久av| 国产麻豆午夜三级精品| 久久精品国产成人一区二区三区| 狠狠色狠狠色综合系列| 亚洲成av人**亚洲成av**| 午夜影院久久久| 国产精品一区二区久激情瑜伽| 国产河南妇女毛片精品久久久| 日韩免费视频一区二区| 欧美三级欧美一级| 国产成人免费视| 色悠悠亚洲一区二区|