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

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

?? jdmainct.c

?? 在ecos 下mingui 的移植開發
?? C
?? 第 1 頁 / 共 2 頁
字號:
#define JPEG_INTERNALS#include "jpeglib.h"/* * In the current system design, the main buffer need never be a full-image * buffer; any full-height buffers will be found inside the coefficient or * postprocessing controllers.  Nonetheless, the main controller is not * trivial.  Its responsibility is to provide context rows for upsampling/ * rescaling, and doing this in an efficient fashion is a bit tricky. * * Postprocessor input data is counted in "row groups".  A row group * is defined to be (v_samp_factor * DCT_scaled_size / min_DCT_scaled_size) * sample rows of each component.  (We require DCT_scaled_size values to be * chosen such that these numbers are integers.  In practice DCT_scaled_size * values will likely be powers of two, so we actually have the stronger * condition that DCT_scaled_size / min_DCT_scaled_size is an integer.) * Upsampling will typically produce max_v_samp_factor pixel rows from each * row group (times any additional scale factor that the upsampler is * applying). * * The coefficient controller will deliver data to us one iMCU row at a time; * each iMCU row contains v_samp_factor * DCT_scaled_size sample rows, or * exactly min_DCT_scaled_size row groups.  (This amount of data corresponds * to one row of MCUs when the image is fully interleaved.)  Note that the * number of sample rows varies across components, but the number of row * groups does not.  Some garbage sample rows may be included in the last iMCU * row at the bottom of the image. * * Depending on the vertical scaling algorithm used, the upsampler may need * access to the sample row(s) above and below its current input row group. * The upsampler is required to set need_context_rows TRUE at global selection * time if so.  When need_context_rows is FALSE, this controller can simply * obtain one iMCU row at a time from the coefficient controller and dole it * out as row groups to the postprocessor. * * When need_context_rows is TRUE, this controller guarantees that the buffer * passed to postprocessing contains at least one row group's worth of samples * above and below the row group(s) being processed.  Note that the context * rows "above" the first passed row group appear at negative row offsets in * the passed buffer.  At the top and bottom of the image, the required * context rows are manufactured by duplicating the first or last real sample * row; this avoids having special cases in the upsampling inner loops. * * The amount of context is fixed at one row group just because that's a * convenient number for this controller to work with.  The existing * upsamplers really only need one sample row of context.  An upsampler * supporting arbitrary output rescaling might wish for more than one row * group of context when shrinking the image; tough, we don't handle that. * (This is justified by the assumption that downsizing will be handled mostly * by adjusting the DCT_scaled_size values, so that the actual scale factor at * the upsample step needn't be much less than one.) * * To provide the desired context, we have to retain the last two row groups * of one iMCU row while reading in the next iMCU row.  (The last row group * can't be processed until we have another row group for its below-context, * and so we have to save the next-to-last group too for its above-context.) * We could do this most simply by copying data around in our buffer, but * that'd be very slow.  We can avoid copying any data by creating a rather * strange pointer structure.  Here's how it works.  We allocate a workspace * consisting of M+2 row groups (where M = min_DCT_scaled_size is the number * of row groups per iMCU row).  We create two sets of redundant pointers to * the workspace.  Labeling the physical row groups 0 to M+1, the synthesized * pointer lists look like this: *                   M+1                          M-1 * master pointer --> 0         master pointer --> 0 *                    1                            1 *                   ...                          ... *                   M-3                          M-3 *                   M-2                           M *                   M-1                          M+1 *                    M                           M-2 *                   M+1                          M-1 *                    0                            0 * We read alternate iMCU rows using each master pointer; thus the last two * row groups of the previous iMCU row remain un-overwritten in the workspace. * The pointer lists are set up so that the required context rows appear to * be adjacent to the proper places when we pass the pointer lists to the * upsampler. * * The above pictures describe the normal state of the pointer lists. * At top and bottom of the image, we diddle the pointer lists to duplicate * the first or last sample row as necessary (this is cheaper than copying * sample rows around). * * This scheme breaks down if M < 2, ie, min_DCT_scaled_size is 1.  In that * situation each iMCU row provides only one row group so the buffering logic * must be different (eg, we must read two iMCU rows before we can emit the * first row group).  For now, we simply do not support providing context * rows when min_DCT_scaled_size is 1.  That combination seems unlikely to * be worth providing --- if someone wants a 1/8th-size preview, they probably * want it quick and dirty, so a context-free upsampler is sufficient. *//* Private buffer controller object */typedef struct {  struct jpeg_d_main_controller pub; /* public fields */  /* Pointer to allocated workspace (M or M+2 row groups). */  JSAMPARRAY buffer[MAX_COMPONENTS];  boolean buffer_full;		/* Have we gotten an iMCU row from decoder? */  JDIMENSION rowgroup_ctr;	/* counts row groups output to postprocessor */  /* Remaining fields are only used in the context case. */  /* These are the master pointers to the funny-order pointer lists. */  JSAMPIMAGE xbuffer[2];	/* pointers to weird pointer lists */  int whichptr;			/* indicates which pointer set is now in use */  int context_state;		/* process_data state machine status */  JDIMENSION rowgroups_avail;	/* row groups available to postprocessor */  JDIMENSION iMCU_row_ctr;	/* counts iMCU rows to detect image top/bot */} my_main_controller;typedef my_main_controller * my_main_ptr;/* context_state values: */#define CTX_PREPARE_FOR_IMCU	0	/* need to prepare for MCU row */#define CTX_PROCESS_IMCU	1	/* feeding iMCU to postprocessor */#define CTX_POSTPONED_ROW	2	/* feeding postponed row group *//* Forward declarations */METHODDEF(void) process_data_simple_main	JPP((j_decompress_ptr cinfo, JSAMPARRAY output_buf,	     JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail));METHODDEF(void) process_data_context_main	JPP((j_decompress_ptr cinfo, JSAMPARRAY output_buf,	     JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail));#ifdef QUANT_2PASS_SUPPORTEDMETHODDEF(void) process_data_crank_post	JPP((j_decompress_ptr cinfo, JSAMPARRAY output_buf,	     JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail));#endifLOCAL(void)alloc_funny_pointers (j_decompress_ptr cinfo)/* Allocate space for the funny pointer lists. * This is done only once, not once per pass. */{  my_main_ptr mymain = (my_main_ptr) cinfo->main;  int ci, rgroup;  int M = cinfo->min_DCT_scaled_size;  jpeg_component_info *compptr;  JSAMPARRAY xbuf;  /* Get top-level space for component array pointers.   * We alloc both arrays with one call to save a few cycles.   */  mymain->xbuffer[0] = (JSAMPIMAGE)    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,				cinfo->num_components * 2 * SIZEOF(JSAMPARRAY));  mymain->xbuffer[1] = mymain->xbuffer[0] + cinfo->num_components;  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;       ci++, compptr++) {    rgroup = (compptr->v_samp_factor * compptr->DCT_scaled_size) /      cinfo->min_DCT_scaled_size; /* height of a row group of component */    /* Get space for pointer lists --- M+4 row groups in each list.     * We alloc both pointer lists with one call to save a few cycles.     */    xbuf = (JSAMPARRAY)      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,				  2 * (rgroup * (M + 4)) * SIZEOF(JSAMPROW));    xbuf += rgroup;		/* want one row group at negative offsets */    mymain->xbuffer[0][ci] = xbuf;    xbuf += rgroup * (M + 4);    mymain->xbuffer[1][ci] = xbuf;  }}LOCAL(void)make_funny_pointers (j_decompress_ptr cinfo)/* Create the funny pointer lists discussed in the comments above. * The actual workspace is already allocated (in mymain->buffer), * and the space for the pointer lists is allocated too. * This routine just fills in the curiously ordered lists. * This will be repeated at the beginning of each pass. */{  my_main_ptr mymain = (my_main_ptr) cinfo->main;  int ci, i, rgroup;  int M = cinfo->min_DCT_scaled_size;  jpeg_component_info *compptr;  JSAMPARRAY buf, xbuf0, xbuf1;  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;       ci++, compptr++) {    rgroup = (compptr->v_samp_factor * compptr->DCT_scaled_size) /      cinfo->min_DCT_scaled_size; /* height of a row group of component */    xbuf0 = mymain->xbuffer[0][ci];    xbuf1 = mymain->xbuffer[1][ci];    /* First copy the workspace pointers as-is */    buf = mymain->buffer[ci];    for (i = 0; i < rgroup * (M + 2); i++) {      xbuf0[i] = xbuf1[i] = buf[i];    }    /* In the second list, put the last four row groups in swapped order */    for (i = 0; i < rgroup * 2; i++) {      xbuf1[rgroup*(M-2) + i] = buf[rgroup*M + i];      xbuf1[rgroup*M + i] = buf[rgroup*(M-2) + i];    }    /* The wraparound pointers at top and bottom will be filled later     * (see set_wraparound_pointers, below).  Initially we want the "above"     * pointers to duplicate the first actual data line.  This only needs     * to happen in xbuffer[0].     */    for (i = 0; i < rgroup; i++) {      xbuf0[i - rgroup] = xbuf0[0];    }  }}LOCAL(void)set_wraparound_pointers (j_decompress_ptr cinfo)/* Set up the "wraparound" pointers at top and bottom of the pointer lists. * This changes the pointer list state from top-of-image to the normal state. */{  my_main_ptr mymain = (my_main_ptr) cinfo->main;  int ci, i, rgroup;  int M = cinfo->min_DCT_scaled_size;  jpeg_component_info *compptr;  JSAMPARRAY xbuf0, xbuf1;  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;       ci++, compptr++) {    rgroup = (compptr->v_samp_factor * compptr->DCT_scaled_size) /      cinfo->min_DCT_scaled_size; /* height of a row group of component */    xbuf0 = mymain->xbuffer[0][ci];    xbuf1 = mymain->xbuffer[1][ci];    for (i = 0; i < rgroup; i++) {      xbuf0[i - rgroup] = xbuf0[rgroup*(M+1) + i];      xbuf1[i - rgroup] = xbuf1[rgroup*(M+1) + i];      xbuf0[rgroup*(M+2) + i] = xbuf0[i];      xbuf1[rgroup*(M+2) + i] = xbuf1[i];    }  }}LOCAL(void)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品伦一区| 91麻豆精品国产91久久久 | 99在线精品视频| 国产欧美日本一区视频| 国产一区二区在线视频| 久久精品一区二区三区不卡| 成人免费看黄yyy456| 亚洲精品免费播放| 欧美日韩电影在线| 国产综合色精品一区二区三区| 久久亚区不卡日本| 91论坛在线播放| 亚洲成av人片一区二区| 精品女同一区二区| 成人精品高清在线| 亚洲国产你懂的| 日韩女优av电影| 成人国产电影网| 午夜影院久久久| 欧美精品一区二区三区一线天视频 | 亚洲大片免费看| 精品日本一线二线三线不卡| 春色校园综合激情亚洲| 一区二区理论电影在线观看| 日韩丝袜情趣美女图片| 成人美女视频在线观看18| 亚洲一区视频在线观看视频| 欧美mv日韩mv| 91久久久免费一区二区| 国产一区中文字幕| 亚洲综合一区二区精品导航| 精品福利二区三区| 色94色欧美sute亚洲线路一久| 久久丁香综合五月国产三级网站| 国产精品久久久久久久久图文区| 欧美日韩高清影院| hitomi一区二区三区精品| 青娱乐精品在线视频| 国产精品久久久久天堂| 欧美成人vr18sexvr| 日本韩国精品在线| 国产成人亚洲精品青草天美| 青青草原综合久久大伊人精品| 亚洲欧美一区二区在线观看| 欧美白人最猛性xxxxx69交| 在线一区二区三区| 波多野结衣一区二区三区| 午夜精品一区二区三区免费视频| 国产精品成人免费| 久久精品亚洲精品国产欧美| 欧美一区二区私人影院日本| 91福利小视频| 成人av在线播放网站| 久久国产精品免费| 青青草伊人久久| 亚洲一区二区精品久久av| 一色屋精品亚洲香蕉网站| 久久综合久久综合九色| 日韩美女一区二区三区四区| 欧美性高清videossexo| 91小视频在线观看| 成人av在线一区二区三区| 国产福利不卡视频| 久久se这里有精品| 日韩av一区二区在线影视| 亚洲国产精品一区二区久久| 一区二区欧美在线观看| 亚洲人成小说网站色在线 | 日本不卡一二三| 视频一区视频二区中文字幕| 五月天丁香久久| 亚洲国产日韩一区二区| 亚洲国产精品久久久久婷婷884| 中文字幕一区二区三区四区 | 欧美一区二区不卡视频| 欧美日韩成人激情| 欧美老人xxxx18| 91精品国产综合久久久久| 91精品啪在线观看国产60岁| 欧美日韩国产首页| 欧美精品三级在线观看| 欧美精品乱码久久久久久| 欧美疯狂性受xxxxx喷水图片| 欧美丰满高潮xxxx喷水动漫| 5858s免费视频成人| 日韩视频一区二区三区在线播放 | 久久女同精品一区二区| 久久久精品黄色| 中国av一区二区三区| 中文字幕乱码亚洲精品一区| 亚洲视频香蕉人妖| 亚洲成人黄色影院| 日韩av一二三| 久久精品久久综合| 大陆成人av片| 欧美午夜宅男影院| 日韩免费一区二区| 国产欧美一区二区三区网站| 亚洲日本电影在线| 日日夜夜精品视频免费| 久草热8精品视频在线观看| 成人午夜视频在线观看| 在线观看av不卡| 欧美白人最猛性xxxxx69交| 中国色在线观看另类| 亚洲已满18点击进入久久| 色妹子一区二区| 欧美男男青年gay1069videost | 久久久av毛片精品| 国产精品久久毛片| 亚洲18影院在线观看| 韩国一区二区三区| 色老综合老女人久久久| 欧美成人性战久久| 日韩毛片精品高清免费| 日韩不卡在线观看日韩不卡视频| 国产大陆亚洲精品国产| 欧美亚洲综合一区| 国产日本欧美一区二区| 亚洲综合一区二区三区| 国产精品99久久久久久久vr | 亚洲欧美日韩久久| 美国三级日本三级久久99 | 欧美日韩中文字幕一区二区| 久久久美女毛片| 亚洲第一av色| av影院午夜一区| 欧美成人video| 伊人色综合久久天天| 极品少妇一区二区| 欧美日韩一区二区三区免费看| 久久蜜桃av一区精品变态类天堂| 亚洲另类在线制服丝袜| 国产**成人网毛片九色| 91精品欧美福利在线观看| 亚洲精品成人少妇| 大白屁股一区二区视频| 亚洲精品一区二区三区香蕉| 亚洲成人动漫在线免费观看| 99久久精品免费观看| 久久噜噜亚洲综合| 日韩av中文在线观看| 欧美色图免费看| 中文字幕一区二区视频| 国产一区二区三区免费在线观看 | 色婷婷久久一区二区三区麻豆| 亚洲精品一线二线三线| 天天影视网天天综合色在线播放| 成人性生交大片免费看在线播放 | 国产亚洲欧美一级| 美女视频黄久久| 欧美精品在线观看播放| 一区二区三区国产豹纹内裤在线| 国产精品一二三四五| 欧美大片在线观看一区二区| 婷婷成人综合网| 欧美日韩精品免费| 午夜精品久久久久久久| 欧美性感一区二区三区| 一区二区高清在线| 91国产视频在线观看| 亚洲欧洲中文日韩久久av乱码| 懂色av一区二区在线播放| 亚洲国产成人自拍| 成人国产一区二区三区精品| 日本一区二区三区高清不卡| 国产精品综合一区二区三区| 久久新电视剧免费观看| 国产精品一区二区在线看| 久久久精品天堂| 精品噜噜噜噜久久久久久久久试看| 三级久久三级久久| 欧美一级高清大全免费观看| 秋霞影院一区二区| 日韩欧美激情一区| 久久99九九99精品| 国产午夜亚洲精品羞羞网站| 国产91丝袜在线观看| 中文字幕字幕中文在线中不卡视频| 99re热视频这里只精品| 亚洲影视资源网| 欧美不卡一区二区| 国产精品一色哟哟哟| 国产精品亲子伦对白| 色婷婷综合久久久久中文| 亚洲成av人片在www色猫咪| 日韩你懂的在线观看| 成人午夜在线免费| 亚洲综合激情另类小说区| 7777精品伊人久久久大香线蕉| 日本成人在线不卡视频| 久久色中文字幕| 99精品桃花视频在线观看| 亚洲综合激情小说| 精品欧美一区二区久久| 成人中文字幕合集| 亚洲成a人片综合在线| 2021久久国产精品不只是精品| 99热这里都是精品| 麻豆91在线播放|