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

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

?? jccoefct.c

?? About JPEG, executable on Visual C++
?? C
?? 第 1 頁 / 共 2 頁
字號:
////////////////////////////////////////////////////////////////////////
//
//	Note : this file is included as part of the Smaller Animals Software
//	JpegFile package. Though this file has not been modified from it's 
//	original IJG 6a form, it is not the responsibility on the Independent
//	JPEG Group to answer questions regarding this code.
//	
//	Any questions you have about this code should be addressed to :
//
//	CHRISDL@PAGESZ.NET	- the distributor of this package.
//
//	Remember, by including this code in the JpegFile package, Smaller 
//	Animals Software assumes all responsibilities for answering questions
//	about it. If we (SA Software) can't answer your questions ourselves, we 
//	will direct you to people who can.
//
//	Thanks, CDL.
//
////////////////////////////////////////////////////////////////////////
/*
 * 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);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩精品福利| 日本中文字幕一区| 午夜欧美在线一二页| 日韩黄色免费电影| 丁香亚洲综合激情啪啪综合| 91免费版在线| 日韩欧美一区电影| 国产精品久久久久久久久果冻传媒| 一区二区三区四区在线| 蜜臀精品一区二区三区在线观看| 国产aⅴ精品一区二区三区色成熟| 99视频在线观看一区三区| 欧美日韩高清在线播放| 久久尤物电影视频在线观看| 亚洲人成伊人成综合网小说| 三级影片在线观看欧美日韩一区二区 | 日本午夜一本久久久综合| 国产高清一区日本| 在线观看欧美黄色| 久久免费午夜影院| 91视频在线观看免费| 欧美一区二区大片| 亚洲免费看黄网站| 国产精品一区二区91| 欧美视频一区二区三区四区| 国产亚洲1区2区3区| 午夜视频一区在线观看| 成人午夜精品在线| 欧美一区二区三区色| 亚洲视频在线一区观看| 极品少妇xxxx精品少妇| 在线免费观看成人短视频| 久久精品一区二区三区四区| 天堂在线一区二区| 91啦中文在线观看| 久久精品视频在线免费观看| 日韩精品久久久久久| 91网站黄www| 久久九九久久九九| 日韩av一区二区三区| 欧美又粗又大又爽| 国产精品美女久久福利网站| 久久精品国产久精国产爱| 欧美视频一区在线观看| 综合激情网...| 丁香婷婷综合色啪| 欧美一区二区三区四区在线观看 | 成人黄色片在线观看| 精品国产免费久久 | 精品捆绑美女sm三区| 亚洲gay无套男同| 色视频成人在线观看免| 国产精品乱码人人做人人爱 | 日韩精品影音先锋| 亚洲国产精品综合小说图片区| 成人动漫一区二区三区| 久久久久久久久久美女| 精品一二三四在线| 日韩欧美在线观看一区二区三区| 亚洲丶国产丶欧美一区二区三区| av亚洲产国偷v产偷v自拍| 中文字幕第一区| 福利一区二区在线| 国产欧美日韩在线观看| 国产成人自拍在线| 久久久另类综合| 亚洲高清中文字幕| 夜夜爽夜夜爽精品视频| 成人精品gif动图一区| 国产精品久久久久久久久图文区| 9色porny自拍视频一区二区| 免费成人av在线播放| 欧美一区二区大片| 不卡大黄网站免费看| 夜夜操天天操亚洲| 精品国产免费一区二区三区四区 | 91亚洲精品乱码久久久久久蜜桃| 亚洲视频电影在线| 欧美刺激午夜性久久久久久久| 久久国产成人午夜av影院| 国产精品免费视频观看| 欧美日韩高清不卡| 91行情网站电视在线观看高清版| 中文字幕av在线一区二区三区| 久久五月婷婷丁香社区| 在线观看日韩一区| 日韩和欧美一区二区三区| 欧美精品一区二区三| 美国毛片一区二区| 亚洲精品乱码久久久久久久久| 欧美群妇大交群中文字幕| 国产成人在线电影| 成人久久久精品乱码一区二区三区| 91一区在线观看| 日本韩国一区二区三区视频| 成人午夜免费视频| 国产精品久久久久久久久免费丝袜 | 尤物av一区二区| 欧美色综合网站| 免费看黄色91| 欧美激情综合五月色丁香| 91色视频在线| 日本中文字幕一区| 国产午夜精品久久久久久免费视| 成人高清在线视频| 亚洲影院免费观看| 日韩免费成人网| 懂色av一区二区三区免费观看 | 欧美视频在线一区| 七七婷婷婷婷精品国产| 国产欧美精品一区二区三区四区| 91麻豆高清视频| 美女尤物国产一区| 国产精品美日韩| 欧美日本在线一区| 国产乱国产乱300精品| 亚洲精品国产高清久久伦理二区| 欧美一区二区三区视频| 国产成人av电影在线播放| 亚洲综合一二区| 久久久久久电影| 精品视频一区三区九区| 国产尤物一区二区| 亚洲一区二区美女| 国产午夜亚洲精品理论片色戒| 欧美亚洲国产一区二区三区| 国产在线精品一区二区三区不卡 | 99国产精品久久久| 免费人成精品欧美精品| 中文字幕在线不卡视频| 欧美一区二区大片| 91免费看片在线观看| 久久国内精品视频| 亚洲亚洲精品在线观看| 久久久99久久| 欧美高清hd18日本| 不卡视频一二三| 免费成人在线观看视频| 亚洲精品五月天| 亚洲国产精品av| 日韩精品专区在线| 欧美日韩亚州综合| 99久久99久久综合| 国产又粗又猛又爽又黄91精品| 亚洲在线成人精品| 国产精品久久久久影视| 日韩精品一区二区三区三区免费| 欧洲一区二区三区在线| 成人午夜视频在线| 久久精品国产亚洲aⅴ| 亚洲国产中文字幕在线视频综合| 国产女同互慰高潮91漫画| 日韩欧美色电影| 欧美日韩成人在线一区| 色综合天天综合色综合av| 国产精品影音先锋| 精品久久久久久最新网址| 国产乱码一区二区三区| 91精品福利在线| 国产精品成人免费精品自在线观看| 一区二区三区成人在线视频| 国产成人在线影院| 日韩欧美激情在线| 天天色天天爱天天射综合| 成人一区在线看| 精品99一区二区三区| 亚洲成人av一区二区| 91在线国内视频| 中文文精品字幕一区二区| 久久狠狠亚洲综合| 欧美一卡2卡3卡4卡| 日本女优在线视频一区二区| 欧美少妇bbb| 亚洲第一主播视频| 欧美午夜影院一区| 午夜欧美电影在线观看| 欧美精品一区二区三| 久草精品在线观看| ●精品国产综合乱码久久久久| 色999日韩国产欧美一区二区| 亚洲一区二区偷拍精品| 91国产丝袜在线播放| 日韩欧美一区电影| 免费在线观看一区| 日韩一区二区三区在线观看| 老司机精品视频线观看86| 日韩免费看网站| 欧美精品一区二区久久久| 国产欧美一区二区三区鸳鸯浴| 日本欧美韩国一区三区| 最新久久zyz资源站| 1000精品久久久久久久久| 成人av在线资源网站| 成人午夜视频免费看| www.欧美色图| 色av一区二区| 欧美高清激情brazzers| 日韩精品在线网站| 国产欧美日韩视频在线观看| 中文字幕一区二区三区在线不卡 |