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

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

?? jcprepct.c

?? 一款最完整的工業組態軟源代碼
?? C
字號:
/*
 * jcprepct.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 compression preprocessing controller.
 * This controller manages the color conversion, downsampling,
 * and edge expansion steps.
 *
 * Most of the complexity here is associated with buffering input rows
 * as required by the downsampler.  See the comments at the head of
 * jcsample.c for the downsampler's needs.
 */

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


/* At present, jcsample.c can request context rows only for smoothing.
 * In the future, we might also need context rows for CCIR601 sampling
 * or other more-complex downsampling procedures.  The code to support
 * context rows should be compiled only if needed.
 */
#ifdef INPUT_SMOOTHING_SUPPORTED
#define CONTEXT_ROWS_SUPPORTED
#endif


/*
 * For the simple (no-context-row) case, we just need to buffer one
 * row group's worth of pixels for the downsampling step.  At the bottom of
 * the image, we pad to a full row group by replicating the last pixel row.
 * The downsampler's last output row is then replicated if needed to pad
 * out to a full iMCU row.
 *
 * When providing context rows, we must buffer three row groups' worth of
 * pixels.  Three row groups are physically allocated, but the row pointer
 * arrays are made five row groups high, with the extra pointers above and
 * below "wrapping around" to point to the last and first real row groups.
 * This allows the downsampler to access the proper context rows.
 * At the top and bottom of the image, we create dummy context rows by
 * copying the first or last real pixel row.  This copying could be avoided
 * by pointer hacking as is done in jdmainct.c, but it doesn't seem worth the
 * trouble on the compression side.
 */


/* Private buffer controller object */

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

  /* Downsampling input buffer.  This buffer holds color-converted data
   * until we have enough to do a downsample step.
   */
  JSAMPARRAY color_buf[MAX_COMPONENTS];

  JDIMENSION rows_to_go;	/* counts rows remaining in source image */
  int next_buf_row;		/* index of next row to store in color_buf */

#ifdef CONTEXT_ROWS_SUPPORTED	/* only needed for context case */
  int this_row_group;		/* starting row index of group to process */
  int next_buf_stop;		/* downsample when we reach this index */
#endif
} my_prep_controller;

typedef my_prep_controller * my_prep_ptr;


/*
 * Initialize for a processing pass.
 */

METHODDEF(void)
start_pass_prep (j_compress_ptr cinfo, J_BUF_MODE pass_mode)
{
  my_prep_ptr prep = (my_prep_ptr) cinfo->prep;

  if (pass_mode != JBUF_PASS_THRU)
    ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);

  /* Initialize total-height counter for detecting bottom of image */
  prep->rows_to_go = cinfo->image_height;
  /* Mark the conversion buffer empty */
  prep->next_buf_row = 0;
#ifdef CONTEXT_ROWS_SUPPORTED
  /* Preset additional state variables for context mode.
   * These aren't used in non-context mode, so we needn't test which mode.
   */
  prep->this_row_group = 0;
  /* Set next_buf_stop to stop after two row groups have been read in. */
  prep->next_buf_stop = 2 * cinfo->max_v_samp_factor;
#endif
}


/*
 * Expand an image vertically from height input_rows to height output_rows,
 * by duplicating the bottom row.
 */

LOCAL(void)
expand_bottom_edge (JSAMPARRAY image_data, JDIMENSION num_cols,
		    int input_rows, int output_rows)
{
  register int row;

  for (row = input_rows; row < output_rows; row++) {
    jcopy_sample_rows(image_data, input_rows-1, image_data, row,
		      1, num_cols);
  }
}


/*
 * Process some data in the simple no-context case.
 *
 * Preprocessor output data is counted in "row groups".  A row group
 * is defined to be v_samp_factor sample rows of each component.
 * Downsampling will produce this much data from each max_v_samp_factor
 * input rows.
 */

METHODDEF(void)
pre_process_data (j_compress_ptr cinfo,
		  JSAMPARRAY input_buf, JDIMENSION *in_row_ctr,
		  JDIMENSION in_rows_avail,
		  JSAMPIMAGE output_buf, JDIMENSION *out_row_group_ctr,
		  JDIMENSION out_row_groups_avail)
{
  my_prep_ptr prep = (my_prep_ptr) cinfo->prep;
  int numrows, ci;
  JDIMENSION inrows;
  jpeg_component_info * compptr;

  while (*in_row_ctr < in_rows_avail &&
	 *out_row_group_ctr < out_row_groups_avail) {
    /* Do color conversion to fill the conversion buffer. */
    inrows = in_rows_avail - *in_row_ctr;
    numrows = cinfo->max_v_samp_factor - prep->next_buf_row;
    numrows = (int) MIN((JDIMENSION) numrows, inrows);
    (*cinfo->cconvert->color_convert) (cinfo, input_buf + *in_row_ctr,
				       prep->color_buf,
				       (JDIMENSION) prep->next_buf_row,
				       numrows);
    *in_row_ctr += numrows;
    prep->next_buf_row += numrows;
    prep->rows_to_go -= numrows;
    /* If at bottom of image, pad to fill the conversion buffer. */
    if (prep->rows_to_go == 0 &&
	prep->next_buf_row < cinfo->max_v_samp_factor) {
      for (ci = 0; ci < cinfo->num_components; ci++) {
	expand_bottom_edge(prep->color_buf[ci], cinfo->image_width,
			   prep->next_buf_row, cinfo->max_v_samp_factor);
      }
      prep->next_buf_row = cinfo->max_v_samp_factor;
    }
    /* If we've filled the conversion buffer, empty it. */
    if (prep->next_buf_row == cinfo->max_v_samp_factor) {
      (*cinfo->downsample->downsample) (cinfo,
					prep->color_buf, (JDIMENSION) 0,
					output_buf, *out_row_group_ctr);
      prep->next_buf_row = 0;
      (*out_row_group_ctr)++;
    }
    /* If at bottom of image, pad the output to a full iMCU height.
     * Note we assume the caller is providing a one-iMCU-height output buffer!
     */
    if (prep->rows_to_go == 0 &&
	*out_row_group_ctr < out_row_groups_avail) {
      for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
	   ci++, compptr++) {
	expand_bottom_edge(output_buf[ci],
			   compptr->width_in_blocks * DCTSIZE,
			   (int) (*out_row_group_ctr * compptr->v_samp_factor),
			   (int) (out_row_groups_avail * compptr->v_samp_factor));
      }
      *out_row_group_ctr = out_row_groups_avail;
      break;			/* can exit outer loop without test */
    }
  }
}


#ifdef CONTEXT_ROWS_SUPPORTED

/*
 * Process some data in the context case.
 */

METHODDEF(void)
pre_process_context (j_compress_ptr cinfo,
		     JSAMPARRAY input_buf, JDIMENSION *in_row_ctr,
		     JDIMENSION in_rows_avail,
		     JSAMPIMAGE output_buf, JDIMENSION *out_row_group_ctr,
		     JDIMENSION out_row_groups_avail)
{
  my_prep_ptr prep = (my_prep_ptr) cinfo->prep;
  int numrows, ci;
  int buf_height = cinfo->max_v_samp_factor * 3;
  JDIMENSION inrows;

  while (*out_row_group_ctr < out_row_groups_avail) {
    if (*in_row_ctr < in_rows_avail) {
      /* Do color conversion to fill the conversion buffer. */
      inrows = in_rows_avail - *in_row_ctr;
      numrows = prep->next_buf_stop - prep->next_buf_row;
      numrows = (int) MIN((JDIMENSION) numrows, inrows);
      (*cinfo->cconvert->color_convert) (cinfo, input_buf + *in_row_ctr,
					 prep->color_buf,
					 (JDIMENSION) prep->next_buf_row,
					 numrows);
      /* Pad at top of image, if first time through */
      if (prep->rows_to_go == cinfo->image_height) {
	for (ci = 0; ci < cinfo->num_components; ci++) {
	  int row;
	  for (row = 1; row <= cinfo->max_v_samp_factor; row++) {
	    jcopy_sample_rows(prep->color_buf[ci], 0,
			      prep->color_buf[ci], -row,
			      1, cinfo->image_width);
	  }
	}
      }
      *in_row_ctr += numrows;
      prep->next_buf_row += numrows;
      prep->rows_to_go -= numrows;
    } else {
      /* Return for more data, unless we are at the bottom of the image. */
      if (prep->rows_to_go != 0)
	break;
      /* When at bottom of image, pad to fill the conversion buffer. */
      if (prep->next_buf_row < prep->next_buf_stop) {
	for (ci = 0; ci < cinfo->num_components; ci++) {
	  expand_bottom_edge(prep->color_buf[ci], cinfo->image_width,
			     prep->next_buf_row, prep->next_buf_stop);
	}
	prep->next_buf_row = prep->next_buf_stop;
      }
    }
    /* If we've gotten enough data, downsample a row group. */
    if (prep->next_buf_row == prep->next_buf_stop) {
      (*cinfo->downsample->downsample) (cinfo,
					prep->color_buf,
					(JDIMENSION) prep->this_row_group,
					output_buf, *out_row_group_ctr);
      (*out_row_group_ctr)++;
      /* Advance pointers with wraparound as necessary. */
      prep->this_row_group += cinfo->max_v_samp_factor;
      if (prep->this_row_group >= buf_height)
	prep->this_row_group = 0;
      if (prep->next_buf_row >= buf_height)
	prep->next_buf_row = 0;
      prep->next_buf_stop = prep->next_buf_row + cinfo->max_v_samp_factor;
    }
  }
}


/*
 * Create the wrapped-around downsampling input buffer needed for context mode.
 */

LOCAL(void)
create_context_buffer (j_compress_ptr cinfo)
{
  my_prep_ptr prep = (my_prep_ptr) cinfo->prep;
  int rgroup_height = cinfo->max_v_samp_factor;
  int ci, i;
  jpeg_component_info * compptr;
  JSAMPARRAY true_buffer, fake_buffer;

  /* Grab enough space for fake row pointers for all the components;
   * we need five row groups' worth of pointers for each component.
   */
  fake_buffer = (JSAMPARRAY)
    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
				(cinfo->num_components * 5 * rgroup_height) *
				SIZEOF(JSAMPROW));

  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
       ci++, compptr++) {
    /* Allocate the actual buffer space (3 row groups) for this component.
     * We make the buffer wide enough to allow the downsampler to edge-expand
     * horizontally within the buffer, if it so chooses.
     */
    true_buffer = (*cinfo->mem->alloc_sarray)
      ((j_common_ptr) cinfo, JPOOL_IMAGE,
       (JDIMENSION) (((long) compptr->width_in_blocks * DCTSIZE *
		      cinfo->max_h_samp_factor) / compptr->h_samp_factor),
       (JDIMENSION) (3 * rgroup_height));
    /* Copy true buffer row pointers into the middle of the fake row array */
    MEMCOPY(fake_buffer + rgroup_height, true_buffer,
	    3 * rgroup_height * SIZEOF(JSAMPROW));
    /* Fill in the above and below wraparound pointers */
    for (i = 0; i < rgroup_height; i++) {
      fake_buffer[i] = true_buffer[2 * rgroup_height + i];
      fake_buffer[4 * rgroup_height + i] = true_buffer[i];
    }
    prep->color_buf[ci] = fake_buffer + rgroup_height;
    fake_buffer += 5 * rgroup_height; /* point to space for next component */
  }
}

#endif /* CONTEXT_ROWS_SUPPORTED */


/*
 * Initialize preprocessing controller.
 */

GLOBAL(void)
jinit_c_prep_controller (j_compress_ptr cinfo, boolean need_full_buffer)
{
  my_prep_ptr prep;
  int ci;
  jpeg_component_info * compptr;

  if (need_full_buffer)		/* safety check */
    ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);

  prep = (my_prep_ptr)
    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
				SIZEOF(my_prep_controller));
  cinfo->prep = (struct jpeg_c_prep_controller *) prep;
  prep->pub.start_pass = start_pass_prep;

  /* Allocate the color conversion buffer.
   * We make the buffer wide enough to allow the downsampler to edge-expand
   * horizontally within the buffer, if it so chooses.
   */
  if (cinfo->downsample->need_context_rows) {
    /* Set up to provide context rows */
#ifdef CONTEXT_ROWS_SUPPORTED
    prep->pub.pre_process_data = pre_process_context;
    create_context_buffer(cinfo);
#else
    ERREXIT(cinfo, JERR_NOT_COMPILED);
#endif
  } else {
    /* No context, just make it tall enough for one row group */
    prep->pub.pre_process_data = pre_process_data;
    for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
	 ci++, compptr++) {
      prep->color_buf[ci] = (*cinfo->mem->alloc_sarray)
	((j_common_ptr) cinfo, JPOOL_IMAGE,
	 (JDIMENSION) (((long) compptr->width_in_blocks * DCTSIZE *
			cinfo->max_h_samp_factor) / compptr->h_samp_factor),
	 (JDIMENSION) cinfo->max_v_samp_factor);
    }
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品1区2区3区| 色婷婷综合久久久中文一区二区 | 亚洲午夜三级在线| 一本一道综合狠狠老| 亚洲精品日产精品乱码不卡| 91亚洲精品一区二区乱码| 亚洲人成在线观看一区二区| 在线观看免费视频综合| 婷婷综合久久一区二区三区| 欧美一级淫片007| 国产精品综合在线视频| 亚洲欧美综合网| 欧美日本视频在线| 免费成人在线播放| 久久久久久久综合色一本| 99久久精品情趣| 午夜伦欧美伦电影理论片| 精品久久人人做人人爰| 国产精品一二三区在线| 亚洲色图另类专区| 3atv一区二区三区| 国产成人免费9x9x人网站视频| 中文字幕一区二区三区乱码在线| 欧美专区在线观看一区| 裸体一区二区三区| 国产精品动漫网站| 欧美一区二区在线免费播放| 成人午夜视频福利| 激情综合五月婷婷| 自拍av一区二区三区| 51精品视频一区二区三区| 国产高清精品在线| 亚洲专区一二三| 精品国产91九色蝌蚪| 色94色欧美sute亚洲线路一ni| 老司机免费视频一区二区三区| 国产精品视频你懂的| 欧美一级日韩免费不卡| 一本久久a久久免费精品不卡| 奇米一区二区三区av| 亚洲欧美另类综合偷拍| 久久综合视频网| 欧美日韩精品一区二区三区| 国产白丝网站精品污在线入口| 偷拍亚洲欧洲综合| 亚洲日穴在线视频| 欧美极品aⅴ影院| 欧美不卡视频一区| 欧美色大人视频| 91免费精品国自产拍在线不卡| 精品一区二区影视| 亚洲va在线va天堂| 亚洲啪啪综合av一区二区三区| 精品久久人人做人人爰| 欧美一级夜夜爽| 欧美日韩精品一区二区天天拍小说| 成人av在线资源| 国产一区二区三区四| 日韩va亚洲va欧美va久久| 亚洲夂夂婷婷色拍ww47 | 日韩一区二区在线观看视频| 色婷婷综合激情| 91原创在线视频| 欧美久久久久久久久| 99国产精品视频免费观看| 国产毛片一区二区| 激情六月婷婷综合| 日本成人超碰在线观看| 日韩精品欧美精品| 天天色天天爱天天射综合| 亚洲激情欧美激情| 一区二区三区在线不卡| 亚洲欧洲制服丝袜| 日韩久久一区二区| 日韩理论片中文av| 亚洲精品午夜久久久| 综合久久一区二区三区| 国产精品国产三级国产三级人妇| 久久久久一区二区三区四区| 国产亚洲成av人在线观看导航| 欧美成人性战久久| www精品美女久久久tv| 精品福利二区三区| 久久男人中文字幕资源站| 欧美精品一区二区三区蜜桃视频 | 亚洲综合精品自拍| 亚洲综合在线五月| 亚洲a一区二区| 日欧美一区二区| 蜜臀91精品一区二区三区| 裸体健美xxxx欧美裸体表演| 国产麻豆视频精品| 国产91高潮流白浆在线麻豆| www.亚洲人| 欧美吞精做爰啪啪高潮| 91精品国产一区二区三区蜜臀| 欧美一级在线视频| 国产午夜精品一区二区三区视频| 中文av一区二区| 艳妇臀荡乳欲伦亚洲一区| 亚洲国产精品综合小说图片区| 天天影视色香欲综合网老头| 免费人成网站在线观看欧美高清| 国产乱理伦片在线观看夜一区| 成人免费毛片片v| 欧美在线免费观看视频| 欧美一区二区三区在线观看| 精品国产乱码91久久久久久网站| 国产女人aaa级久久久级| 一区二区三区中文字幕在线观看| 日韩1区2区3区| 成人一区二区三区视频| 欧美日韩精品一区二区在线播放| 精品久久久久99| 精品系列免费在线观看| 成人午夜视频福利| 欧美精品在线视频| 国产性色一区二区| 午夜精品一区二区三区三上悠亚 | 天堂av在线一区| 国产一区亚洲一区| 欧美午夜精品理论片a级按摩| 日韩精品一区二区三区三区免费 | 777奇米成人网| 欧美激情中文字幕| 青青草一区二区三区| 成人av资源在线| 日韩精品在线网站| 亚洲视频图片小说| 国产中文字幕精品| 欧美日韩国产区一| 中文幕一区二区三区久久蜜桃| 日产国产高清一区二区三区| 91在线你懂得| 久久免费看少妇高潮| 亚洲国产成人91porn| 成人av在线一区二区三区| 日韩一区二区在线播放| 一区二区三区不卡视频在线观看| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 精品久久久久99| 夜夜嗨av一区二区三区网页| 国产大陆a不卡| 日韩三级高清在线| 一区二区三区美女视频| 岛国精品在线观看| 精品蜜桃在线看| 日本三级韩国三级欧美三级| 色综合天天狠狠| 国产精品久久夜| 国产激情一区二区三区| 日韩亚洲欧美综合| 五月天网站亚洲| 色94色欧美sute亚洲线路一ni | 国产在线播放一区| 欧美一级专区免费大片| 日韩av网站在线观看| 欧美日韩dvd在线观看| 综合在线观看色| 成人黄色软件下载| 国产精品久久久久婷婷| 国产91在线观看| 国产日韩视频一区二区三区| 国产一区二区三区| 久久久美女毛片| 国产精品综合在线视频| 久久精品综合网| 国产伦精一区二区三区| 久久久久久亚洲综合| 国产精华液一区二区三区| 久久久久99精品国产片| 成人一区在线看| 国产精品精品国产色婷婷| 成人福利视频在线看| 国产精品伦理在线| 日本高清免费不卡视频| 亚洲一区二区成人在线观看| 在线视频欧美精品| 天天综合天天做天天综合| 日韩一区二区在线观看| 韩国av一区二区三区在线观看| 国产精品国产三级国产普通话99| 99精品久久只有精品| 亚洲自拍偷拍图区| 欧美一级免费观看| 国产一区二区三区在线看麻豆| 国产欧美日韩麻豆91| 色诱视频网站一区| 午夜影院久久久| 精品欧美一区二区在线观看| 国产91丝袜在线观看| 一区二区三区精密机械公司| 91精品国产综合久久婷婷香蕉 | 日韩欧美三级在线| 狠狠狠色丁香婷婷综合激情| 国产精品白丝在线| 欧美精品第一页| 国产乱一区二区| 亚洲午夜电影网| 26uuu国产在线精品一区二区|