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

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

?? structure.doc

?? JPEG source code converts the image into compressed format
?? DOC
?? 第 1 頁 / 共 4 頁
字號:
* Colorspace conversion: convert from JPEG color space to output color space,
  and change data layout from separate component planes to pixel-interleaved.
  Works on one pixel row at a time.

* Color quantization: reduce the data to colormapped form, using either an
  externally specified colormap or an internally generated one.  This module
  is not used for full-color output.  Works on one pixel row at a time; may
  require two passes to generate a color map.  Note that the output will
  always be a single component representing colormap indexes.  In the current
  design, the output values are JSAMPLEs, so an 8-bit compilation cannot
  quantize to more than 256 colors.  This is unlikely to be a problem in
  practice.

* Color reduction: this module handles color precision reduction, e.g.,
  generating 15-bit color (5 bits/primary) from JPEG's 24-bit output.
  Not quite clear yet how this should be handled... should we merge it with
  colorspace conversion???

Note that some high-speed operating modes might condense the entire
postprocessing sequence to a single module (upsample, color convert, and
quantize in one step).

In addition to the above objects, the decompression library includes these
objects:

* Master control: determines the number of passes required, controls overall
  and per-pass initialization of the other modules.  This is subdivided into
  input and output control: jdinput.c controls only input-side processing,
  while jdmaster.c handles overall initialization and output-side control.

* Marker reading: decodes JPEG markers (except for RSTn).

* Data source manager: supplies the input JPEG datastream.  The source
  manager supplied with the library knows how to read from a stdio stream;
  for other behaviors, the surrounding application may provide its own source
  manager.

* Memory manager: same as for compression library.

* Error handler: same as for compression library.

* Progress monitor: same as for compression library.

As with compression, the data source manager, error handler, and progress
monitor are candidates for replacement by a surrounding application.


*** Decompression input and output separation ***

To support efficient incremental display of progressive JPEG files, the
decompressor is divided into two sections that can run independently:

1. Data input includes marker parsing, entropy decoding, and input into the
   coefficient controller's DCT coefficient buffer.  Note that this
   processing is relatively cheap and fast.

2. Data output reads from the DCT coefficient buffer and performs the IDCT
   and all postprocessing steps.

For a progressive JPEG file, the data input processing is allowed to get
arbitrarily far ahead of the data output processing.  (This occurs only
if the application calls jpeg_consume_input(); otherwise input and output
run in lockstep, since the input section is called only when the output
section needs more data.)  In this way the application can avoid making
extra display passes when data is arriving faster than the display pass
can run.  Furthermore, it is possible to abort an output pass without
losing anything, since the coefficient buffer is read-only as far as the
output section is concerned.  See libjpeg.doc for more detail.

A full-image coefficient array is only created if the JPEG file has multiple
scans (or if the application specifies buffered-image mode anyway).  When
reading a single-scan file, the coefficient controller normally creates only
a one-MCU buffer, so input and output processing must run in lockstep in this
case.  jpeg_consume_input() is effectively a no-op in this situation.

The main impact of dividing the decompressor in this fashion is that we must
be very careful with shared variables in the cinfo data structure.  Each
variable that can change during the course of decompression must be
classified as belonging to data input or data output, and each section must
look only at its own variables.  For example, the data output section may not
depend on any of the variables that describe the current scan in the JPEG
file, because these may change as the data input section advances into a new
scan.

The progress monitor is (somewhat arbitrarily) defined to treat input of the
file as one pass when buffered-image mode is not used, and to ignore data
input work completely when buffered-image mode is used.  Note that the
library has no reliable way to predict the number of passes when dealing
with a progressive JPEG file, nor can it predict the number of output passes
in buffered-image mode.  So the work estimate is inherently bogus anyway.

No comparable division is currently made in the compression library, because
there isn't any real need for it.


*** Data formats ***

Arrays of pixel sample values use the following data structure:

    typedef something JSAMPLE;		a pixel component value, 0..MAXJSAMPLE
    typedef JSAMPLE *JSAMPROW;		ptr to a row of samples
    typedef JSAMPROW *JSAMPARRAY;	ptr to a list of rows
    typedef JSAMPARRAY *JSAMPIMAGE;	ptr to a list of color-component arrays

The basic element type JSAMPLE will typically be one of unsigned char,
(signed) char, or short.  Short will be used if samples wider than 8 bits are
to be supported (this is a compile-time option).  Otherwise, unsigned char is
used if possible.  If the compiler only supports signed chars, then it is
necessary to mask off the value when reading.  Thus, all reads of JSAMPLE
values must be coded as "GETJSAMPLE(value)", where the macro will be defined
as "((value) & 0xFF)" on signed-char machines and "((int) (value))" elsewhere.

With these conventions, JSAMPLE values can be assumed to be >= 0.  This helps
simplify correct rounding during downsampling, etc.  The JPEG standard's
specification that sample values run from -128..127 is accommodated by
subtracting 128 just as the sample value is copied into the source array for
the DCT step (this will be an array of signed ints).  Similarly, during
decompression the output of the IDCT step will be immediately shifted back to
0..255.  (NB: different values are required when 12-bit samples are in use.
The code is written in terms of MAXJSAMPLE and CENTERJSAMPLE, which will be
defined as 255 and 128 respectively in an 8-bit implementation, and as 4095
and 2048 in a 12-bit implementation.)

We use a pointer per row, rather than a two-dimensional JSAMPLE array.  This
choice costs only a small amount of memory and has several benefits:
* Code using the data structure doesn't need to know the allocated width of
  the rows.  This simplifies edge expansion/compression, since we can work
  in an array that's wider than the logical picture width.
* Indexing doesn't require multiplication; this is a performance win on many
  machines.
* Arrays with more than 64K total elements can be supported even on machines
  where malloc() cannot allocate chunks larger than 64K.
* The rows forming a component array may be allocated at different times
  without extra copying.  This trick allows some speedups in smoothing steps
  that need access to the previous and next rows.

Note that each color component is stored in a separate array; we don't use the
traditional layout in which the components of a pixel are stored together.
This simplifies coding of modules that work on each component independently,
because they don't need to know how many components there are.  Furthermore,
we can read or write each component to a temporary file independently, which
is helpful when dealing with noninterleaved JPEG files.

In general, a specific sample value is accessed by code such as
	GETJSAMPLE(image[colorcomponent][row][col])
where col is measured from the image left edge, but row is measured from the
first sample row currently in memory.  Either of the first two indexings can
be precomputed by copying the relevant pointer.


Since most image-processing applications prefer to work on images in which
the components of a pixel are stored together, the data passed to or from the
surrounding application uses the traditional convention: a single pixel is
represented by N consecutive JSAMPLE values, and an image row is an array of
(# of color components)*(image width) JSAMPLEs.  One or more rows of data can
be represented by a pointer of type JSAMPARRAY in this scheme.  This scheme is
converted to component-wise storage inside the JPEG library.  (Applications
that want to skip JPEG preprocessing or postprocessing will have to contend
with component-wise storage.)


Arrays of DCT-coefficient values use the following data structure:

    typedef short JCOEF;		a 16-bit signed integer
    typedef JCOEF JBLOCK[DCTSIZE2];	an 8x8 block of coefficients
    typedef JBLOCK *JBLOCKROW;		ptr to one horizontal row of 8x8 blocks
    typedef JBLOCKROW *JBLOCKARRAY;	ptr to a list of such rows
    typedef JBLOCKARRAY *JBLOCKIMAGE;	ptr to a list of color component arrays

The underlying type is at least a 16-bit signed integer; while "short" is big
enough on all machines of interest, on some machines it is preferable to use
"int" for speed reasons, despite the storage cost.  Coefficients are grouped
into 8x8 blocks (but we always use #defines DCTSIZE and DCTSIZE2 rather than
"8" and "64").

The contents of a coefficient block may be in either "natural" or zigzagged
order, and may be true values or divided by the quantization coefficients,
depending on where the block is in the processing pipeline.  In the current
library, coefficient blocks are kept in natural order everywhere; the entropy
codecs zigzag or dezigzag the data as it is written or read.  The blocks
contain quantized coefficients everywhere outside the DCT/IDCT subsystems.
(This latter decision may need to be revisited to support variable
quantization a la JPEG Part 3.)

Notice that the allocation unit is now a row of 8x8 blocks, corresponding to
eight rows of samples.  Otherwise the structure is much the same as for
samples, and for the same reasons.

On machines where malloc() can't handle a request bigger than 64Kb, this data
structure limits us to rows of less than 512 JBLOCKs, or a picture width of
4000+ pixels.  This seems an acceptable restriction.


On 80x86 machines, the bottom-level pointer types (JSAMPROW and JBLOCKROW)
must be declared as "far" pointers, but the upper levels can be "near"
(implying that the pointer lists are allocated in the DS segment).
We use a #define symbol FAR, which expands to the "far" keyword when
compiling on 80x86 machines and to nothing elsewhere.


*** Suspendable processing ***

In some applications it is desirable to use the JPEG library as an
incremental, memory-to-memory filter.  In this situation the data source or
destination may be a limited-size buffer, and we can't rely on being able to
empty or refill the buffer at arbitrary times.  Instead the application would
like to have control return from the library at buffer overflow/underrun, and
then resume compression or decompression at a later time.

This scenario is supported for simple cases.  (For anything more complex, we
recommend that the application "bite the bullet" and develop real multitasking
capability.)  The libjpeg.doc file goes into more detail about the usage and
limitations of this capability; here we address the implications for library
structure.

The essence of the problem is that the entropy codec (coder or decoder) must
be prepared to stop at arbitrary times.  In turn, the controllers that call
the entropy codec must be able to stop before having produced or consumed all
the data that they normally would handle in one call.  That part is reasonably
straightforward: we make the controller call interfaces include "progress
counters" which indicate the number of data chunks successfully processed, and
we require callers to test the counter rather than just assume all of the data
was processed.

Rather than trying to restart at an arbitrary point, the current Huffman
codecs are designed to restart at the beginning of the current MCU after a
suspension due to buffer overflow/underrun.  At the start of each call, the
codec's internal state is loaded from permanent storage (in the JPEG object
structures) into local variables.  On successful completion of the MCU, the
permanent state is updated.  (This copying is not very expensive, and may even
lead to *improved* performance if the local variables can be registerized.)
If a suspension occurs, the codec simply returns without updating the state,
thus effectively reverting to the start of the MCU.  Note that this implies
leaving some data unprocessed in the source/destination buffer (ie, the
compressed partial MCU).  The data source/destination module interfaces are
specified so as to make this possible.  This also implies that the data buffer
must be large enough to hold a worst-case compressed MCU; a couple thousand
bytes should be enough.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91在线观看视频| 亚洲国产色一区| 国产成人福利片| 国产日韩欧美麻豆| 豆国产96在线|亚洲| 国产精品区一区二区三区| gogo大胆日本视频一区| 一区二区三区四区精品在线视频| 91视视频在线观看入口直接观看www | 在线看国产日韩| 亚洲精品视频一区二区| 欧美人伦禁忌dvd放荡欲情| 热久久免费视频| 国产校园另类小说区| av午夜一区麻豆| 亚洲国产精品自拍| 欧美成人video| 成人激情动漫在线观看| 亚洲精品国产一区二区三区四区在线| 欧美色图天堂网| 日本黄色一区二区| 午夜精品一区在线观看| 欧美大片在线观看| av不卡免费电影| 日本视频免费一区| 国产精品久久久99| 欧美年轻男男videosbes| 国产久卡久卡久卡久卡视频精品| 自拍av一区二区三区| 5月丁香婷婷综合| 国产69精品久久久久毛片| 香蕉av福利精品导航| 欧美国产丝袜视频| 欧美伊人久久大香线蕉综合69| 狠狠色综合色综合网络| 亚洲免费视频中文字幕| 亚洲精品一区二区精华| 欧美性一二三区| 国产福利视频一区二区三区| 亚洲va韩国va欧美va精品 | 国产精品夜夜爽| 亚洲一区二区三区四区在线观看| 久久免费国产精品| 亚洲欧美综合在线精品| 51精品秘密在线观看| 91美女精品福利| 国产aⅴ综合色| 久久精品99国产精品日本| 一区二区三区精品久久久| 久久久久久9999| 欧美一区二区三区白人 | 在线精品视频免费播放| 国产成人午夜电影网| 美国十次了思思久久精品导航| 尤物视频一区二区| 国产精品久久久爽爽爽麻豆色哟哟 | 青青草伊人久久| 亚洲欧美一区二区在线观看| 精品国产一区二区在线观看| 欧美日韩黄色影视| 色狠狠桃花综合| 成人av在线电影| 国产精品夜夜嗨| 激情欧美日韩一区二区| 午夜伊人狠狠久久| 亚洲一区二区视频| 亚洲蜜臀av乱码久久精品| 国产精品免费av| 国产欧美一区二区精品忘忧草| 欧美va日韩va| 日韩精品在线网站| 日韩欧美激情在线| 日韩你懂的在线播放| 日韩欧美在线影院| 日韩一区二区精品在线观看| 欧美日韩综合一区| 欧美美女直播网站| 欧美精品aⅴ在线视频| 欧美日韩国产首页| 欧美日本一区二区三区四区| 欧美亚洲一区二区在线观看| 欧美日本乱大交xxxxx| 欧美三级电影在线观看| 欧美巨大另类极品videosbest| 欧美男男青年gay1069videost| 三级欧美在线一区| 国产精品一区二区x88av| 在线这里只有精品| 91黄色免费版| 欧美日韩一区精品| 9191国产精品| 日韩欧美视频一区| 91精品国产色综合久久不卡蜜臀| 欧美日韩精品一区二区三区四区| 91精选在线观看| 精品国产一区二区三区av性色| 精品剧情v国产在线观看在线| 欧美精品一区二区三区很污很色的| 欧美变态tickling挠脚心| 精品国产区一区| 中文av一区二区| 亚洲欧美日本在线| 午夜久久久影院| 久久精品国产精品青草| 国产成人精品影视| 色一情一伦一子一伦一区| 欧美日韩久久久一区| 精品国产网站在线观看| 成人欧美一区二区三区| 爽好久久久欧美精品| 国内外成人在线| 91视视频在线观看入口直接观看www | 99久久99久久精品国产片果冻 | 国产成人精品综合在线观看| 在线观看网站黄不卡| 欧美日韩三级视频| 久久蜜桃一区二区| 一区二区三区视频在线观看| 日韩av高清在线观看| 不卡大黄网站免费看| 宅男噜噜噜66一区二区66| 久久精品亚洲精品国产欧美 | 亚洲欧美日本在线| 看电视剧不卡顿的网站| av亚洲精华国产精华精华| 欧美一区二区三区四区久久| 国产精品美女一区二区| 蜜臀久久久99精品久久久久久| 成人夜色视频网站在线观看| 亚洲精品视频在线观看网站| 久久国产精品99久久人人澡| 色婷婷综合激情| 国产无人区一区二区三区| 亚洲丶国产丶欧美一区二区三区| 国产成人在线视频网址| 日韩一区二区中文字幕| 亚洲人xxxx| 国产成人亚洲综合色影视| 欧美精品乱码久久久久久| 中文字幕在线播放不卡一区| 国产综合久久久久久久久久久久| 欧美系列在线观看| 国产精品国产自产拍在线| 韩国成人精品a∨在线观看| 884aa四虎影成人精品一区| 18成人在线视频| 国产成人综合在线| wwwwxxxxx欧美| 日本 国产 欧美色综合| 欧美日韩精品欧美日韩精品| 亚洲男人天堂av| 成人国产一区二区三区精品| 久久婷婷色综合| 麻豆一区二区99久久久久| 欧美精选一区二区| 亚洲第一搞黄网站| 91成人免费在线| 综合亚洲深深色噜噜狠狠网站| 国产精品亚洲专一区二区三区| 欧美成人伊人久久综合网| 日韩国产精品久久| 欧美疯狂做受xxxx富婆| 天天色天天操综合| 在线电影院国产精品| 午夜精品久久久久久久久| 欧美午夜片在线观看| 伊人一区二区三区| 色一情一伦一子一伦一区| 国产iv一区二区三区| 国产亚洲精久久久久久| 黄色成人免费在线| 国产亚洲一区二区三区在线观看| 久久99久久99| 久久精品这里都是精品| 国产成人亚洲综合a∨婷婷| 国产清纯在线一区二区www| 国产成人aaaa| 国产精品女主播av| 91在线观看免费视频| 亚洲色图一区二区三区| 91久久精品网| 偷窥少妇高潮呻吟av久久免费| 欧美乱妇15p| 久久精品国内一区二区三区| 久久精品水蜜桃av综合天堂| 成人免费毛片嘿嘿连载视频| 国产精品不卡在线| 欧美在线你懂得| 美国精品在线观看| 国产欧美日韩另类一区| 成人国产精品免费网站| 亚洲人成小说网站色在线| 欧美片在线播放| 国产一区二区在线看| 中文字幕一区二区三区色视频 | 五月婷婷色综合| 日韩欧美在线网站| 国产91色综合久久免费分享| 亚洲欧美日韩国产综合| 欧美一级二级在线观看|