xref: /aosp_15_r20/external/libjpeg-turbo/libjpeg.txt (revision dfc6aa5c1cfd4bc4e2018dc74aa96e29ee49c6da)
1*dfc6aa5cSAndroid Build Coastguard WorkerUSING THE IJG JPEG LIBRARY
2*dfc6aa5cSAndroid Build Coastguard Worker
3*dfc6aa5cSAndroid Build Coastguard WorkerThis file was part of the Independent JPEG Group's software:
4*dfc6aa5cSAndroid Build Coastguard WorkerCopyright (C) 1994-2013, Thomas G. Lane, Guido Vollbeding.
5*dfc6aa5cSAndroid Build Coastguard Workerlibjpeg-turbo Modifications:
6*dfc6aa5cSAndroid Build Coastguard WorkerCopyright (C) 2010, 2014-2018, 2020, 2022, D. R. Commander.
7*dfc6aa5cSAndroid Build Coastguard WorkerCopyright (C) 2015, Google, Inc.
8*dfc6aa5cSAndroid Build Coastguard WorkerFor conditions of distribution and use, see the accompanying README.ijg file.
9*dfc6aa5cSAndroid Build Coastguard Worker
10*dfc6aa5cSAndroid Build Coastguard Worker
11*dfc6aa5cSAndroid Build Coastguard WorkerThis file describes how to use the IJG JPEG library within an application
12*dfc6aa5cSAndroid Build Coastguard Workerprogram.  Read it if you want to write a program that uses the library.
13*dfc6aa5cSAndroid Build Coastguard Worker
14*dfc6aa5cSAndroid Build Coastguard WorkerThe file example.txt provides heavily commented skeleton code for calling the
15*dfc6aa5cSAndroid Build Coastguard WorkerJPEG library.  Also see jpeglib.h (the include file to be used by application
16*dfc6aa5cSAndroid Build Coastguard Workerprograms) for full details about data structures and function parameter lists.
17*dfc6aa5cSAndroid Build Coastguard WorkerThe library source code, of course, is the ultimate reference.
18*dfc6aa5cSAndroid Build Coastguard Worker
19*dfc6aa5cSAndroid Build Coastguard WorkerNote that there have been *major* changes from the application interface
20*dfc6aa5cSAndroid Build Coastguard Workerpresented by IJG version 4 and earlier versions.  The old design had several
21*dfc6aa5cSAndroid Build Coastguard Workerinherent limitations, and it had accumulated a lot of cruft as we added
22*dfc6aa5cSAndroid Build Coastguard Workerfeatures while trying to minimize application-interface changes.  We have
23*dfc6aa5cSAndroid Build Coastguard Workersacrificed backward compatibility in the version 5 rewrite, but we think the
24*dfc6aa5cSAndroid Build Coastguard Workerimprovements justify this.
25*dfc6aa5cSAndroid Build Coastguard Worker
26*dfc6aa5cSAndroid Build Coastguard Worker
27*dfc6aa5cSAndroid Build Coastguard WorkerTABLE OF CONTENTS
28*dfc6aa5cSAndroid Build Coastguard Worker-----------------
29*dfc6aa5cSAndroid Build Coastguard Worker
30*dfc6aa5cSAndroid Build Coastguard WorkerOverview:
31*dfc6aa5cSAndroid Build Coastguard Worker        Functions provided by the library
32*dfc6aa5cSAndroid Build Coastguard Worker        Outline of typical usage
33*dfc6aa5cSAndroid Build Coastguard WorkerBasic library usage:
34*dfc6aa5cSAndroid Build Coastguard Worker        Data formats
35*dfc6aa5cSAndroid Build Coastguard Worker        Compression details
36*dfc6aa5cSAndroid Build Coastguard Worker        Decompression details
37*dfc6aa5cSAndroid Build Coastguard Worker        Partial image decompression
38*dfc6aa5cSAndroid Build Coastguard Worker        Mechanics of usage: include files, linking, etc
39*dfc6aa5cSAndroid Build Coastguard WorkerAdvanced features:
40*dfc6aa5cSAndroid Build Coastguard Worker        Compression parameter selection
41*dfc6aa5cSAndroid Build Coastguard Worker        Decompression parameter selection
42*dfc6aa5cSAndroid Build Coastguard Worker        Special color spaces
43*dfc6aa5cSAndroid Build Coastguard Worker        Error handling
44*dfc6aa5cSAndroid Build Coastguard Worker        Compressed data handling (source and destination managers)
45*dfc6aa5cSAndroid Build Coastguard Worker        I/O suspension
46*dfc6aa5cSAndroid Build Coastguard Worker        Progressive JPEG support
47*dfc6aa5cSAndroid Build Coastguard Worker        Buffered-image mode
48*dfc6aa5cSAndroid Build Coastguard Worker        Abbreviated datastreams and multiple images
49*dfc6aa5cSAndroid Build Coastguard Worker        Special markers
50*dfc6aa5cSAndroid Build Coastguard Worker        ICC profiles
51*dfc6aa5cSAndroid Build Coastguard Worker        Raw (downsampled) image data
52*dfc6aa5cSAndroid Build Coastguard Worker        Really raw data: DCT coefficients
53*dfc6aa5cSAndroid Build Coastguard Worker        Progress monitoring
54*dfc6aa5cSAndroid Build Coastguard Worker        Memory management
55*dfc6aa5cSAndroid Build Coastguard Worker        Memory usage
56*dfc6aa5cSAndroid Build Coastguard Worker        Library compile-time options
57*dfc6aa5cSAndroid Build Coastguard Worker        Portability considerations
58*dfc6aa5cSAndroid Build Coastguard Worker
59*dfc6aa5cSAndroid Build Coastguard WorkerYou should read at least the overview and basic usage sections before trying
60*dfc6aa5cSAndroid Build Coastguard Workerto program with the library.  The sections on advanced features can be read
61*dfc6aa5cSAndroid Build Coastguard Workerif and when you need them.
62*dfc6aa5cSAndroid Build Coastguard Worker
63*dfc6aa5cSAndroid Build Coastguard Worker
64*dfc6aa5cSAndroid Build Coastguard WorkerOVERVIEW
65*dfc6aa5cSAndroid Build Coastguard Worker========
66*dfc6aa5cSAndroid Build Coastguard Worker
67*dfc6aa5cSAndroid Build Coastguard WorkerFunctions provided by the library
68*dfc6aa5cSAndroid Build Coastguard Worker---------------------------------
69*dfc6aa5cSAndroid Build Coastguard Worker
70*dfc6aa5cSAndroid Build Coastguard WorkerThe IJG JPEG library provides C code to read and write JPEG-compressed image
71*dfc6aa5cSAndroid Build Coastguard Workerfiles.  The surrounding application program receives or supplies image data a
72*dfc6aa5cSAndroid Build Coastguard Workerscanline at a time, using a straightforward uncompressed image format.  All
73*dfc6aa5cSAndroid Build Coastguard Workerdetails of color conversion and other preprocessing/postprocessing can be
74*dfc6aa5cSAndroid Build Coastguard Workerhandled by the library.
75*dfc6aa5cSAndroid Build Coastguard Worker
76*dfc6aa5cSAndroid Build Coastguard WorkerThe library includes a substantial amount of code that is not covered by the
77*dfc6aa5cSAndroid Build Coastguard WorkerJPEG standard but is necessary for typical applications of JPEG.  These
78*dfc6aa5cSAndroid Build Coastguard Workerfunctions preprocess the image before JPEG compression or postprocess it after
79*dfc6aa5cSAndroid Build Coastguard Workerdecompression.  They include colorspace conversion, downsampling/upsampling,
80*dfc6aa5cSAndroid Build Coastguard Workerand color quantization.  The application indirectly selects use of this code
81*dfc6aa5cSAndroid Build Coastguard Workerby specifying the format in which it wishes to supply or receive image data.
82*dfc6aa5cSAndroid Build Coastguard WorkerFor example, if colormapped output is requested, then the decompression
83*dfc6aa5cSAndroid Build Coastguard Workerlibrary automatically invokes color quantization.
84*dfc6aa5cSAndroid Build Coastguard Worker
85*dfc6aa5cSAndroid Build Coastguard WorkerA wide range of quality vs. speed tradeoffs are possible in JPEG processing,
86*dfc6aa5cSAndroid Build Coastguard Workerand even more so in decompression postprocessing.  The decompression library
87*dfc6aa5cSAndroid Build Coastguard Workerprovides multiple implementations that cover most of the useful tradeoffs,
88*dfc6aa5cSAndroid Build Coastguard Workerranging from very-high-quality down to fast-preview operation.  On the
89*dfc6aa5cSAndroid Build Coastguard Workercompression side we have generally not provided low-quality choices, since
90*dfc6aa5cSAndroid Build Coastguard Workercompression is normally less time-critical.  It should be understood that the
91*dfc6aa5cSAndroid Build Coastguard Workerlow-quality modes may not meet the JPEG standard's accuracy requirements;
92*dfc6aa5cSAndroid Build Coastguard Workernonetheless, they are useful for viewers.
93*dfc6aa5cSAndroid Build Coastguard Worker
94*dfc6aa5cSAndroid Build Coastguard WorkerA word about functions *not* provided by the library.  We handle a subset of
95*dfc6aa5cSAndroid Build Coastguard Workerthe ISO JPEG standard; most baseline, extended-sequential, and progressive
96*dfc6aa5cSAndroid Build Coastguard WorkerJPEG processes are supported.  (Our subset includes all features now in common
97*dfc6aa5cSAndroid Build Coastguard Workeruse.)  Unsupported ISO options include:
98*dfc6aa5cSAndroid Build Coastguard Worker        * Hierarchical storage
99*dfc6aa5cSAndroid Build Coastguard Worker        * Lossless JPEG
100*dfc6aa5cSAndroid Build Coastguard Worker        * DNL marker
101*dfc6aa5cSAndroid Build Coastguard Worker        * Nonintegral subsampling ratios
102*dfc6aa5cSAndroid Build Coastguard WorkerWe support both 8- and 12-bit data precision, but this is a compile-time
103*dfc6aa5cSAndroid Build Coastguard Workerchoice rather than a run-time choice; hence it is difficult to use both
104*dfc6aa5cSAndroid Build Coastguard Workerprecisions in a single application.
105*dfc6aa5cSAndroid Build Coastguard Worker
106*dfc6aa5cSAndroid Build Coastguard WorkerBy itself, the library handles only interchange JPEG datastreams --- in
107*dfc6aa5cSAndroid Build Coastguard Workerparticular the widely used JFIF file format.  The library can be used by
108*dfc6aa5cSAndroid Build Coastguard Workersurrounding code to process interchange or abbreviated JPEG datastreams that
109*dfc6aa5cSAndroid Build Coastguard Workerare embedded in more complex file formats.  (For example, this library is
110*dfc6aa5cSAndroid Build Coastguard Workerused by the free LIBTIFF library to support JPEG compression in TIFF.)
111*dfc6aa5cSAndroid Build Coastguard Worker
112*dfc6aa5cSAndroid Build Coastguard Worker
113*dfc6aa5cSAndroid Build Coastguard WorkerOutline of typical usage
114*dfc6aa5cSAndroid Build Coastguard Worker------------------------
115*dfc6aa5cSAndroid Build Coastguard Worker
116*dfc6aa5cSAndroid Build Coastguard WorkerThe rough outline of a JPEG compression operation is:
117*dfc6aa5cSAndroid Build Coastguard Worker
118*dfc6aa5cSAndroid Build Coastguard Worker        Allocate and initialize a JPEG compression object
119*dfc6aa5cSAndroid Build Coastguard Worker        Specify the destination for the compressed data (eg, a file)
120*dfc6aa5cSAndroid Build Coastguard Worker        Set parameters for compression, including image size & colorspace
121*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_start_compress(...);
122*dfc6aa5cSAndroid Build Coastguard Worker        while (scan lines remain to be written)
123*dfc6aa5cSAndroid Build Coastguard Worker                jpeg_write_scanlines(...);
124*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_finish_compress(...);
125*dfc6aa5cSAndroid Build Coastguard Worker        Release the JPEG compression object
126*dfc6aa5cSAndroid Build Coastguard Worker
127*dfc6aa5cSAndroid Build Coastguard WorkerA JPEG compression object holds parameters and working state for the JPEG
128*dfc6aa5cSAndroid Build Coastguard Workerlibrary.  We make creation/destruction of the object separate from starting
129*dfc6aa5cSAndroid Build Coastguard Workeror finishing compression of an image; the same object can be re-used for a
130*dfc6aa5cSAndroid Build Coastguard Workerseries of image compression operations.  This makes it easy to re-use the
131*dfc6aa5cSAndroid Build Coastguard Workersame parameter settings for a sequence of images.  Re-use of a JPEG object
132*dfc6aa5cSAndroid Build Coastguard Workeralso has important implications for processing abbreviated JPEG datastreams,
133*dfc6aa5cSAndroid Build Coastguard Workeras discussed later.
134*dfc6aa5cSAndroid Build Coastguard Worker
135*dfc6aa5cSAndroid Build Coastguard WorkerThe image data to be compressed is supplied to jpeg_write_scanlines() from
136*dfc6aa5cSAndroid Build Coastguard Workerin-memory buffers.  If the application is doing file-to-file compression,
137*dfc6aa5cSAndroid Build Coastguard Workerreading image data from the source file is the application's responsibility.
138*dfc6aa5cSAndroid Build Coastguard WorkerThe library emits compressed data by calling a "data destination manager",
139*dfc6aa5cSAndroid Build Coastguard Workerwhich typically will write the data into a file; but the application can
140*dfc6aa5cSAndroid Build Coastguard Workerprovide its own destination manager to do something else.
141*dfc6aa5cSAndroid Build Coastguard Worker
142*dfc6aa5cSAndroid Build Coastguard WorkerSimilarly, the rough outline of a JPEG decompression operation is:
143*dfc6aa5cSAndroid Build Coastguard Worker
144*dfc6aa5cSAndroid Build Coastguard Worker        Allocate and initialize a JPEG decompression object
145*dfc6aa5cSAndroid Build Coastguard Worker        Specify the source of the compressed data (eg, a file)
146*dfc6aa5cSAndroid Build Coastguard Worker        Call jpeg_read_header() to obtain image info
147*dfc6aa5cSAndroid Build Coastguard Worker        Set parameters for decompression
148*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_start_decompress(...);
149*dfc6aa5cSAndroid Build Coastguard Worker        while (scan lines remain to be read)
150*dfc6aa5cSAndroid Build Coastguard Worker                jpeg_read_scanlines(...);
151*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_finish_decompress(...);
152*dfc6aa5cSAndroid Build Coastguard Worker        Release the JPEG decompression object
153*dfc6aa5cSAndroid Build Coastguard Worker
154*dfc6aa5cSAndroid Build Coastguard WorkerThis is comparable to the compression outline except that reading the
155*dfc6aa5cSAndroid Build Coastguard Workerdatastream header is a separate step.  This is helpful because information
156*dfc6aa5cSAndroid Build Coastguard Workerabout the image's size, colorspace, etc is available when the application
157*dfc6aa5cSAndroid Build Coastguard Workerselects decompression parameters.  For example, the application can choose an
158*dfc6aa5cSAndroid Build Coastguard Workeroutput scaling ratio that will fit the image into the available screen size.
159*dfc6aa5cSAndroid Build Coastguard Worker
160*dfc6aa5cSAndroid Build Coastguard WorkerThe decompression library obtains compressed data by calling a data source
161*dfc6aa5cSAndroid Build Coastguard Workermanager, which typically will read the data from a file; but other behaviors
162*dfc6aa5cSAndroid Build Coastguard Workercan be obtained with a custom source manager.  Decompressed data is delivered
163*dfc6aa5cSAndroid Build Coastguard Workerinto in-memory buffers passed to jpeg_read_scanlines().
164*dfc6aa5cSAndroid Build Coastguard Worker
165*dfc6aa5cSAndroid Build Coastguard WorkerIt is possible to abort an incomplete compression or decompression operation
166*dfc6aa5cSAndroid Build Coastguard Workerby calling jpeg_abort(); or, if you do not need to retain the JPEG object,
167*dfc6aa5cSAndroid Build Coastguard Workersimply release it by calling jpeg_destroy().
168*dfc6aa5cSAndroid Build Coastguard Worker
169*dfc6aa5cSAndroid Build Coastguard WorkerJPEG compression and decompression objects are two separate struct types.
170*dfc6aa5cSAndroid Build Coastguard WorkerHowever, they share some common fields, and certain routines such as
171*dfc6aa5cSAndroid Build Coastguard Workerjpeg_destroy() can work on either type of object.
172*dfc6aa5cSAndroid Build Coastguard Worker
173*dfc6aa5cSAndroid Build Coastguard WorkerThe JPEG library has no static variables: all state is in the compression
174*dfc6aa5cSAndroid Build Coastguard Workeror decompression object.  Therefore it is possible to process multiple
175*dfc6aa5cSAndroid Build Coastguard Workercompression and decompression operations concurrently, using multiple JPEG
176*dfc6aa5cSAndroid Build Coastguard Workerobjects.
177*dfc6aa5cSAndroid Build Coastguard Worker
178*dfc6aa5cSAndroid Build Coastguard WorkerBoth compression and decompression can be done in an incremental memory-to-
179*dfc6aa5cSAndroid Build Coastguard Workermemory fashion, if suitable source/destination managers are used.  See the
180*dfc6aa5cSAndroid Build Coastguard Workersection on "I/O suspension" for more details.
181*dfc6aa5cSAndroid Build Coastguard Worker
182*dfc6aa5cSAndroid Build Coastguard Worker
183*dfc6aa5cSAndroid Build Coastguard WorkerBASIC LIBRARY USAGE
184*dfc6aa5cSAndroid Build Coastguard Worker===================
185*dfc6aa5cSAndroid Build Coastguard Worker
186*dfc6aa5cSAndroid Build Coastguard WorkerData formats
187*dfc6aa5cSAndroid Build Coastguard Worker------------
188*dfc6aa5cSAndroid Build Coastguard Worker
189*dfc6aa5cSAndroid Build Coastguard WorkerBefore diving into procedural details, it is helpful to understand the
190*dfc6aa5cSAndroid Build Coastguard Workerimage data format that the JPEG library expects or returns.
191*dfc6aa5cSAndroid Build Coastguard Worker
192*dfc6aa5cSAndroid Build Coastguard WorkerThe standard input image format is a rectangular array of pixels, with each
193*dfc6aa5cSAndroid Build Coastguard Workerpixel having the same number of "component" or "sample" values (color
194*dfc6aa5cSAndroid Build Coastguard Workerchannels).  You must specify how many components there are and the colorspace
195*dfc6aa5cSAndroid Build Coastguard Workerinterpretation of the components.  Most applications will use RGB data
196*dfc6aa5cSAndroid Build Coastguard Worker(three components per pixel) or grayscale data (one component per pixel).
197*dfc6aa5cSAndroid Build Coastguard WorkerPLEASE NOTE THAT RGB DATA IS THREE SAMPLES PER PIXEL, GRAYSCALE ONLY ONE.
198*dfc6aa5cSAndroid Build Coastguard WorkerA remarkable number of people manage to miss this, only to find that their
199*dfc6aa5cSAndroid Build Coastguard Workerprograms don't work with grayscale JPEG files.
200*dfc6aa5cSAndroid Build Coastguard Worker
201*dfc6aa5cSAndroid Build Coastguard WorkerThere is no provision for colormapped input.  JPEG files are always full-color
202*dfc6aa5cSAndroid Build Coastguard Workeror full grayscale (or sometimes another colorspace such as CMYK).  You can
203*dfc6aa5cSAndroid Build Coastguard Workerfeed in a colormapped image by expanding it to full-color format.  However
204*dfc6aa5cSAndroid Build Coastguard WorkerJPEG often doesn't work very well with source data that has been colormapped,
205*dfc6aa5cSAndroid Build Coastguard Workerbecause of dithering noise.  This is discussed in more detail in the JPEG FAQ
206*dfc6aa5cSAndroid Build Coastguard Workerand the other references mentioned in the README.ijg file.
207*dfc6aa5cSAndroid Build Coastguard Worker
208*dfc6aa5cSAndroid Build Coastguard WorkerPixels are stored by scanlines, with each scanline running from left to
209*dfc6aa5cSAndroid Build Coastguard Workerright.  The component values for each pixel are adjacent in the row; for
210*dfc6aa5cSAndroid Build Coastguard Workerexample, R,G,B,R,G,B,R,G,B,... for 24-bit RGB color.  Each scanline is an
211*dfc6aa5cSAndroid Build Coastguard Workerarray of data type JSAMPLE --- which is typically "unsigned char", unless
212*dfc6aa5cSAndroid Build Coastguard Workeryou've changed jmorecfg.h.  (You can also change the RGB pixel layout, say
213*dfc6aa5cSAndroid Build Coastguard Workerto B,G,R order, by modifying jmorecfg.h.  But see the restrictions listed in
214*dfc6aa5cSAndroid Build Coastguard Workerthat file before doing so.)
215*dfc6aa5cSAndroid Build Coastguard Worker
216*dfc6aa5cSAndroid Build Coastguard WorkerA 2-D array of pixels is formed by making a list of pointers to the starts of
217*dfc6aa5cSAndroid Build Coastguard Workerscanlines; so the scanlines need not be physically adjacent in memory.  Even
218*dfc6aa5cSAndroid Build Coastguard Workerif you process just one scanline at a time, you must make a one-element
219*dfc6aa5cSAndroid Build Coastguard Workerpointer array to conform to this structure.  Pointers to JSAMPLE rows are of
220*dfc6aa5cSAndroid Build Coastguard Workertype JSAMPROW, and the pointer to the pointer array is of type JSAMPARRAY.
221*dfc6aa5cSAndroid Build Coastguard Worker
222*dfc6aa5cSAndroid Build Coastguard WorkerThe library accepts or supplies one or more complete scanlines per call.
223*dfc6aa5cSAndroid Build Coastguard WorkerIt is not possible to process part of a row at a time.  Scanlines are always
224*dfc6aa5cSAndroid Build Coastguard Workerprocessed top-to-bottom.  You can process an entire image in one call if you
225*dfc6aa5cSAndroid Build Coastguard Workerhave it all in memory, but usually it's simplest to process one scanline at
226*dfc6aa5cSAndroid Build Coastguard Workera time.
227*dfc6aa5cSAndroid Build Coastguard Worker
228*dfc6aa5cSAndroid Build Coastguard WorkerFor best results, source data values should have the precision specified by
229*dfc6aa5cSAndroid Build Coastguard WorkerBITS_IN_JSAMPLE (normally 8 bits).  For instance, if you choose to compress
230*dfc6aa5cSAndroid Build Coastguard Workerdata that's only 6 bits/channel, you should left-justify each value in a
231*dfc6aa5cSAndroid Build Coastguard Workerbyte before passing it to the compressor.  If you need to compress data
232*dfc6aa5cSAndroid Build Coastguard Workerthat has more than 8 bits/channel, compile with BITS_IN_JSAMPLE = 12.
233*dfc6aa5cSAndroid Build Coastguard Worker(See "Library compile-time options", later.)
234*dfc6aa5cSAndroid Build Coastguard Worker
235*dfc6aa5cSAndroid Build Coastguard Worker
236*dfc6aa5cSAndroid Build Coastguard WorkerThe data format returned by the decompressor is the same in all details,
237*dfc6aa5cSAndroid Build Coastguard Workerexcept that colormapped output is supported.  (Again, a JPEG file is never
238*dfc6aa5cSAndroid Build Coastguard Workercolormapped.  But you can ask the decompressor to perform on-the-fly color
239*dfc6aa5cSAndroid Build Coastguard Workerquantization to deliver colormapped output.)  If you request colormapped
240*dfc6aa5cSAndroid Build Coastguard Workeroutput then the returned data array contains a single JSAMPLE per pixel;
241*dfc6aa5cSAndroid Build Coastguard Workerits value is an index into a color map.  The color map is represented as
242*dfc6aa5cSAndroid Build Coastguard Workera 2-D JSAMPARRAY in which each row holds the values of one color component,
243*dfc6aa5cSAndroid Build Coastguard Workerthat is, colormap[i][j] is the value of the i'th color component for pixel
244*dfc6aa5cSAndroid Build Coastguard Workervalue (map index) j.  Note that since the colormap indexes are stored in
245*dfc6aa5cSAndroid Build Coastguard WorkerJSAMPLEs, the maximum number of colors is limited by the size of JSAMPLE
246*dfc6aa5cSAndroid Build Coastguard Worker(ie, at most 256 colors for an 8-bit JPEG library).
247*dfc6aa5cSAndroid Build Coastguard Worker
248*dfc6aa5cSAndroid Build Coastguard Worker
249*dfc6aa5cSAndroid Build Coastguard WorkerCompression details
250*dfc6aa5cSAndroid Build Coastguard Worker-------------------
251*dfc6aa5cSAndroid Build Coastguard Worker
252*dfc6aa5cSAndroid Build Coastguard WorkerHere we revisit the JPEG compression outline given in the overview.
253*dfc6aa5cSAndroid Build Coastguard Worker
254*dfc6aa5cSAndroid Build Coastguard Worker1. Allocate and initialize a JPEG compression object.
255*dfc6aa5cSAndroid Build Coastguard Worker
256*dfc6aa5cSAndroid Build Coastguard WorkerA JPEG compression object is a "struct jpeg_compress_struct".  (It also has
257*dfc6aa5cSAndroid Build Coastguard Workera bunch of subsidiary structures which are allocated via malloc(), but the
258*dfc6aa5cSAndroid Build Coastguard Workerapplication doesn't control those directly.)  This struct can be just a local
259*dfc6aa5cSAndroid Build Coastguard Workervariable in the calling routine, if a single routine is going to execute the
260*dfc6aa5cSAndroid Build Coastguard Workerwhole JPEG compression sequence.  Otherwise it can be static or allocated
261*dfc6aa5cSAndroid Build Coastguard Workerfrom malloc().
262*dfc6aa5cSAndroid Build Coastguard Worker
263*dfc6aa5cSAndroid Build Coastguard WorkerYou will also need a structure representing a JPEG error handler.  The part
264*dfc6aa5cSAndroid Build Coastguard Workerof this that the library cares about is a "struct jpeg_error_mgr".  If you
265*dfc6aa5cSAndroid Build Coastguard Workerare providing your own error handler, you'll typically want to embed the
266*dfc6aa5cSAndroid Build Coastguard Workerjpeg_error_mgr struct in a larger structure; this is discussed later under
267*dfc6aa5cSAndroid Build Coastguard Worker"Error handling".  For now we'll assume you are just using the default error
268*dfc6aa5cSAndroid Build Coastguard Workerhandler.  The default error handler will print JPEG error/warning messages
269*dfc6aa5cSAndroid Build Coastguard Workeron stderr, and it will call exit() if a fatal error occurs.
270*dfc6aa5cSAndroid Build Coastguard Worker
271*dfc6aa5cSAndroid Build Coastguard WorkerYou must initialize the error handler structure, store a pointer to it into
272*dfc6aa5cSAndroid Build Coastguard Workerthe JPEG object's "err" field, and then call jpeg_create_compress() to
273*dfc6aa5cSAndroid Build Coastguard Workerinitialize the rest of the JPEG object.
274*dfc6aa5cSAndroid Build Coastguard Worker
275*dfc6aa5cSAndroid Build Coastguard WorkerTypical code for this step, if you are using the default error handler, is
276*dfc6aa5cSAndroid Build Coastguard Worker
277*dfc6aa5cSAndroid Build Coastguard Worker        struct jpeg_compress_struct cinfo;
278*dfc6aa5cSAndroid Build Coastguard Worker        struct jpeg_error_mgr jerr;
279*dfc6aa5cSAndroid Build Coastguard Worker        ...
280*dfc6aa5cSAndroid Build Coastguard Worker        cinfo.err = jpeg_std_error(&jerr);
281*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_create_compress(&cinfo);
282*dfc6aa5cSAndroid Build Coastguard Worker
283*dfc6aa5cSAndroid Build Coastguard Workerjpeg_create_compress allocates a small amount of memory, so it could fail
284*dfc6aa5cSAndroid Build Coastguard Workerif you are out of memory.  In that case it will exit via the error handler;
285*dfc6aa5cSAndroid Build Coastguard Workerthat's why the error handler must be initialized first.
286*dfc6aa5cSAndroid Build Coastguard Worker
287*dfc6aa5cSAndroid Build Coastguard Worker
288*dfc6aa5cSAndroid Build Coastguard Worker2. Specify the destination for the compressed data (eg, a file).
289*dfc6aa5cSAndroid Build Coastguard Worker
290*dfc6aa5cSAndroid Build Coastguard WorkerAs previously mentioned, the JPEG library delivers compressed data to a
291*dfc6aa5cSAndroid Build Coastguard Worker"data destination" module.  The library includes one data destination
292*dfc6aa5cSAndroid Build Coastguard Workermodule which knows how to write to a stdio stream.  You can use your own
293*dfc6aa5cSAndroid Build Coastguard Workerdestination module if you want to do something else, as discussed later.
294*dfc6aa5cSAndroid Build Coastguard Worker
295*dfc6aa5cSAndroid Build Coastguard WorkerIf you use the standard destination module, you must open the target stdio
296*dfc6aa5cSAndroid Build Coastguard Workerstream beforehand.  Typical code for this step looks like:
297*dfc6aa5cSAndroid Build Coastguard Worker
298*dfc6aa5cSAndroid Build Coastguard Worker        FILE *outfile;
299*dfc6aa5cSAndroid Build Coastguard Worker        ...
300*dfc6aa5cSAndroid Build Coastguard Worker        if ((outfile = fopen(filename, "wb")) == NULL) {
301*dfc6aa5cSAndroid Build Coastguard Worker            fprintf(stderr, "can't open %s\n", filename);
302*dfc6aa5cSAndroid Build Coastguard Worker            exit(1);
303*dfc6aa5cSAndroid Build Coastguard Worker        }
304*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_stdio_dest(&cinfo, outfile);
305*dfc6aa5cSAndroid Build Coastguard Worker
306*dfc6aa5cSAndroid Build Coastguard Workerwhere the last line invokes the standard destination module.
307*dfc6aa5cSAndroid Build Coastguard Worker
308*dfc6aa5cSAndroid Build Coastguard WorkerWARNING: it is critical that the binary compressed data be delivered to the
309*dfc6aa5cSAndroid Build Coastguard Workeroutput file unchanged.  On non-Unix systems the stdio library may perform
310*dfc6aa5cSAndroid Build Coastguard Workernewline translation or otherwise corrupt binary data.  To suppress this
311*dfc6aa5cSAndroid Build Coastguard Workerbehavior, you may need to use a "b" option to fopen (as shown above), or use
312*dfc6aa5cSAndroid Build Coastguard Workersetmode() or another routine to put the stdio stream in binary mode.  See
313*dfc6aa5cSAndroid Build Coastguard Workercjpeg.c and djpeg.c for code that has been found to work on many systems.
314*dfc6aa5cSAndroid Build Coastguard Worker
315*dfc6aa5cSAndroid Build Coastguard WorkerYou can select the data destination after setting other parameters (step 3),
316*dfc6aa5cSAndroid Build Coastguard Workerif that's more convenient.  You may not change the destination between
317*dfc6aa5cSAndroid Build Coastguard Workercalling jpeg_start_compress() and jpeg_finish_compress().
318*dfc6aa5cSAndroid Build Coastguard Worker
319*dfc6aa5cSAndroid Build Coastguard Worker
320*dfc6aa5cSAndroid Build Coastguard Worker3. Set parameters for compression, including image size & colorspace.
321*dfc6aa5cSAndroid Build Coastguard Worker
322*dfc6aa5cSAndroid Build Coastguard WorkerYou must supply information about the source image by setting the following
323*dfc6aa5cSAndroid Build Coastguard Workerfields in the JPEG object (cinfo structure):
324*dfc6aa5cSAndroid Build Coastguard Worker
325*dfc6aa5cSAndroid Build Coastguard Worker        image_width             Width of image, in pixels
326*dfc6aa5cSAndroid Build Coastguard Worker        image_height            Height of image, in pixels
327*dfc6aa5cSAndroid Build Coastguard Worker        input_components        Number of color channels (samples per pixel)
328*dfc6aa5cSAndroid Build Coastguard Worker        in_color_space          Color space of source image
329*dfc6aa5cSAndroid Build Coastguard Worker
330*dfc6aa5cSAndroid Build Coastguard WorkerThe image dimensions are, hopefully, obvious.  JPEG supports image dimensions
331*dfc6aa5cSAndroid Build Coastguard Workerof 1 to 64K pixels in either direction.  The input color space is typically
332*dfc6aa5cSAndroid Build Coastguard WorkerRGB or grayscale, and input_components is 3 or 1 accordingly.  (See "Special
333*dfc6aa5cSAndroid Build Coastguard Workercolor spaces", later, for more info.)  The in_color_space field must be
334*dfc6aa5cSAndroid Build Coastguard Workerassigned one of the J_COLOR_SPACE enum constants, typically JCS_RGB or
335*dfc6aa5cSAndroid Build Coastguard WorkerJCS_GRAYSCALE.
336*dfc6aa5cSAndroid Build Coastguard Worker
337*dfc6aa5cSAndroid Build Coastguard WorkerJPEG has a large number of compression parameters that determine how the
338*dfc6aa5cSAndroid Build Coastguard Workerimage is encoded.  Most applications don't need or want to know about all
339*dfc6aa5cSAndroid Build Coastguard Workerthese parameters.  You can set all the parameters to reasonable defaults by
340*dfc6aa5cSAndroid Build Coastguard Workercalling jpeg_set_defaults(); then, if there are particular values you want
341*dfc6aa5cSAndroid Build Coastguard Workerto change, you can do so after that.  The "Compression parameter selection"
342*dfc6aa5cSAndroid Build Coastguard Workersection tells about all the parameters.
343*dfc6aa5cSAndroid Build Coastguard Worker
344*dfc6aa5cSAndroid Build Coastguard WorkerYou must set in_color_space correctly before calling jpeg_set_defaults(),
345*dfc6aa5cSAndroid Build Coastguard Workerbecause the defaults depend on the source image colorspace.  However the
346*dfc6aa5cSAndroid Build Coastguard Workerother three source image parameters need not be valid until you call
347*dfc6aa5cSAndroid Build Coastguard Workerjpeg_start_compress().  There's no harm in calling jpeg_set_defaults() more
348*dfc6aa5cSAndroid Build Coastguard Workerthan once, if that happens to be convenient.
349*dfc6aa5cSAndroid Build Coastguard Worker
350*dfc6aa5cSAndroid Build Coastguard WorkerTypical code for a 24-bit RGB source image is
351*dfc6aa5cSAndroid Build Coastguard Worker
352*dfc6aa5cSAndroid Build Coastguard Worker        cinfo.image_width = Width;      /* image width and height, in pixels */
353*dfc6aa5cSAndroid Build Coastguard Worker        cinfo.image_height = Height;
354*dfc6aa5cSAndroid Build Coastguard Worker        cinfo.input_components = 3;     /* # of color components per pixel */
355*dfc6aa5cSAndroid Build Coastguard Worker        cinfo.in_color_space = JCS_RGB; /* colorspace of input image */
356*dfc6aa5cSAndroid Build Coastguard Worker
357*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_set_defaults(&cinfo);
358*dfc6aa5cSAndroid Build Coastguard Worker        /* Make optional parameter settings here */
359*dfc6aa5cSAndroid Build Coastguard Worker
360*dfc6aa5cSAndroid Build Coastguard Worker
361*dfc6aa5cSAndroid Build Coastguard Worker4. jpeg_start_compress(...);
362*dfc6aa5cSAndroid Build Coastguard Worker
363*dfc6aa5cSAndroid Build Coastguard WorkerAfter you have established the data destination and set all the necessary
364*dfc6aa5cSAndroid Build Coastguard Workersource image info and other parameters, call jpeg_start_compress() to begin
365*dfc6aa5cSAndroid Build Coastguard Workera compression cycle.  This will initialize internal state, allocate working
366*dfc6aa5cSAndroid Build Coastguard Workerstorage, and emit the first few bytes of the JPEG datastream header.
367*dfc6aa5cSAndroid Build Coastguard Worker
368*dfc6aa5cSAndroid Build Coastguard WorkerTypical code:
369*dfc6aa5cSAndroid Build Coastguard Worker
370*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_start_compress(&cinfo, TRUE);
371*dfc6aa5cSAndroid Build Coastguard Worker
372*dfc6aa5cSAndroid Build Coastguard WorkerThe "TRUE" parameter ensures that a complete JPEG interchange datastream
373*dfc6aa5cSAndroid Build Coastguard Workerwill be written.  This is appropriate in most cases.  If you think you might
374*dfc6aa5cSAndroid Build Coastguard Workerwant to use an abbreviated datastream, read the section on abbreviated
375*dfc6aa5cSAndroid Build Coastguard Workerdatastreams, below.
376*dfc6aa5cSAndroid Build Coastguard Worker
377*dfc6aa5cSAndroid Build Coastguard WorkerOnce you have called jpeg_start_compress(), you may not alter any JPEG
378*dfc6aa5cSAndroid Build Coastguard Workerparameters or other fields of the JPEG object until you have completed
379*dfc6aa5cSAndroid Build Coastguard Workerthe compression cycle.
380*dfc6aa5cSAndroid Build Coastguard Worker
381*dfc6aa5cSAndroid Build Coastguard Worker
382*dfc6aa5cSAndroid Build Coastguard Worker5. while (scan lines remain to be written)
383*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_write_scanlines(...);
384*dfc6aa5cSAndroid Build Coastguard Worker
385*dfc6aa5cSAndroid Build Coastguard WorkerNow write all the required image data by calling jpeg_write_scanlines()
386*dfc6aa5cSAndroid Build Coastguard Workerone or more times.  You can pass one or more scanlines in each call, up
387*dfc6aa5cSAndroid Build Coastguard Workerto the total image height.  In most applications it is convenient to pass
388*dfc6aa5cSAndroid Build Coastguard Workerjust one or a few scanlines at a time.  The expected format for the passed
389*dfc6aa5cSAndroid Build Coastguard Workerdata is discussed under "Data formats", above.
390*dfc6aa5cSAndroid Build Coastguard Worker
391*dfc6aa5cSAndroid Build Coastguard WorkerImage data should be written in top-to-bottom scanline order.
392*dfc6aa5cSAndroid Build Coastguard WorkerRec. ITU-T T.81 | ISO/IEC 10918-1 says, "Applications determine which edges of
393*dfc6aa5cSAndroid Build Coastguard Workera source image are defined as top, bottom, left, and right."  However, if you
394*dfc6aa5cSAndroid Build Coastguard Workerwant your files to be compatible with everyone else's, then top-to-bottom order
395*dfc6aa5cSAndroid Build Coastguard Workermust be used.  If the source data must be read in bottom-to-top order, then you
396*dfc6aa5cSAndroid Build Coastguard Workercan use the JPEG library's virtual array mechanism to invert the data
397*dfc6aa5cSAndroid Build Coastguard Workerefficiently.  Examples of this can be found in the sample application cjpeg.
398*dfc6aa5cSAndroid Build Coastguard Worker
399*dfc6aa5cSAndroid Build Coastguard WorkerThe library maintains a count of the number of scanlines written so far
400*dfc6aa5cSAndroid Build Coastguard Workerin the next_scanline field of the JPEG object.  Usually you can just use
401*dfc6aa5cSAndroid Build Coastguard Workerthis variable as the loop counter, so that the loop test looks like
402*dfc6aa5cSAndroid Build Coastguard Worker"while (cinfo.next_scanline < cinfo.image_height)".
403*dfc6aa5cSAndroid Build Coastguard Worker
404*dfc6aa5cSAndroid Build Coastguard WorkerCode for this step depends heavily on the way that you store the source data.
405*dfc6aa5cSAndroid Build Coastguard Workerexample.txt shows the following code for the case of a full-size 2-D source
406*dfc6aa5cSAndroid Build Coastguard Workerarray containing 3-byte RGB pixels:
407*dfc6aa5cSAndroid Build Coastguard Worker
408*dfc6aa5cSAndroid Build Coastguard Worker        JSAMPROW row_pointer[1];        /* pointer to a single row */
409*dfc6aa5cSAndroid Build Coastguard Worker        int row_stride;                 /* physical row width in buffer */
410*dfc6aa5cSAndroid Build Coastguard Worker
411*dfc6aa5cSAndroid Build Coastguard Worker        row_stride = image_width * 3;   /* JSAMPLEs per row in image_buffer */
412*dfc6aa5cSAndroid Build Coastguard Worker
413*dfc6aa5cSAndroid Build Coastguard Worker        while (cinfo.next_scanline < cinfo.image_height) {
414*dfc6aa5cSAndroid Build Coastguard Worker            row_pointer[0] = &image_buffer[cinfo.next_scanline * row_stride];
415*dfc6aa5cSAndroid Build Coastguard Worker            jpeg_write_scanlines(&cinfo, row_pointer, 1);
416*dfc6aa5cSAndroid Build Coastguard Worker        }
417*dfc6aa5cSAndroid Build Coastguard Worker
418*dfc6aa5cSAndroid Build Coastguard Workerjpeg_write_scanlines() returns the number of scanlines actually written.
419*dfc6aa5cSAndroid Build Coastguard WorkerThis will normally be equal to the number passed in, so you can usually
420*dfc6aa5cSAndroid Build Coastguard Workerignore the return value.  It is different in just two cases:
421*dfc6aa5cSAndroid Build Coastguard Worker  * If you try to write more scanlines than the declared image height,
422*dfc6aa5cSAndroid Build Coastguard Worker    the additional scanlines are ignored.
423*dfc6aa5cSAndroid Build Coastguard Worker  * If you use a suspending data destination manager, output buffer overrun
424*dfc6aa5cSAndroid Build Coastguard Worker    will cause the compressor to return before accepting all the passed lines.
425*dfc6aa5cSAndroid Build Coastguard Worker    This feature is discussed under "I/O suspension", below.  The normal
426*dfc6aa5cSAndroid Build Coastguard Worker    stdio destination manager will NOT cause this to happen.
427*dfc6aa5cSAndroid Build Coastguard WorkerIn any case, the return value is the same as the change in the value of
428*dfc6aa5cSAndroid Build Coastguard Workernext_scanline.
429*dfc6aa5cSAndroid Build Coastguard Worker
430*dfc6aa5cSAndroid Build Coastguard Worker
431*dfc6aa5cSAndroid Build Coastguard Worker6. jpeg_finish_compress(...);
432*dfc6aa5cSAndroid Build Coastguard Worker
433*dfc6aa5cSAndroid Build Coastguard WorkerAfter all the image data has been written, call jpeg_finish_compress() to
434*dfc6aa5cSAndroid Build Coastguard Workercomplete the compression cycle.  This step is ESSENTIAL to ensure that the
435*dfc6aa5cSAndroid Build Coastguard Workerlast bufferload of data is written to the data destination.
436*dfc6aa5cSAndroid Build Coastguard Workerjpeg_finish_compress() also releases working memory associated with the JPEG
437*dfc6aa5cSAndroid Build Coastguard Workerobject.
438*dfc6aa5cSAndroid Build Coastguard Worker
439*dfc6aa5cSAndroid Build Coastguard WorkerTypical code:
440*dfc6aa5cSAndroid Build Coastguard Worker
441*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_finish_compress(&cinfo);
442*dfc6aa5cSAndroid Build Coastguard Worker
443*dfc6aa5cSAndroid Build Coastguard WorkerIf using the stdio destination manager, don't forget to close the output
444*dfc6aa5cSAndroid Build Coastguard Workerstdio stream (if necessary) afterwards.
445*dfc6aa5cSAndroid Build Coastguard Worker
446*dfc6aa5cSAndroid Build Coastguard WorkerIf you have requested a multi-pass operating mode, such as Huffman code
447*dfc6aa5cSAndroid Build Coastguard Workeroptimization, jpeg_finish_compress() will perform the additional passes using
448*dfc6aa5cSAndroid Build Coastguard Workerdata buffered by the first pass.  In this case jpeg_finish_compress() may take
449*dfc6aa5cSAndroid Build Coastguard Workerquite a while to complete.  With the default compression parameters, this will
450*dfc6aa5cSAndroid Build Coastguard Workernot happen.
451*dfc6aa5cSAndroid Build Coastguard Worker
452*dfc6aa5cSAndroid Build Coastguard WorkerIt is an error to call jpeg_finish_compress() before writing the necessary
453*dfc6aa5cSAndroid Build Coastguard Workertotal number of scanlines.  If you wish to abort compression, call
454*dfc6aa5cSAndroid Build Coastguard Workerjpeg_abort() as discussed below.
455*dfc6aa5cSAndroid Build Coastguard Worker
456*dfc6aa5cSAndroid Build Coastguard WorkerAfter completing a compression cycle, you may dispose of the JPEG object
457*dfc6aa5cSAndroid Build Coastguard Workeras discussed next, or you may use it to compress another image.  In that case
458*dfc6aa5cSAndroid Build Coastguard Workerreturn to step 2, 3, or 4 as appropriate.  If you do not change the
459*dfc6aa5cSAndroid Build Coastguard Workerdestination manager, the new datastream will be written to the same target.
460*dfc6aa5cSAndroid Build Coastguard WorkerIf you do not change any JPEG parameters, the new datastream will be written
461*dfc6aa5cSAndroid Build Coastguard Workerwith the same parameters as before.  Note that you can change the input image
462*dfc6aa5cSAndroid Build Coastguard Workerdimensions freely between cycles, but if you change the input colorspace, you
463*dfc6aa5cSAndroid Build Coastguard Workershould call jpeg_set_defaults() to adjust for the new colorspace; and then
464*dfc6aa5cSAndroid Build Coastguard Workeryou'll need to repeat all of step 3.
465*dfc6aa5cSAndroid Build Coastguard Worker
466*dfc6aa5cSAndroid Build Coastguard Worker
467*dfc6aa5cSAndroid Build Coastguard Worker7. Release the JPEG compression object.
468*dfc6aa5cSAndroid Build Coastguard Worker
469*dfc6aa5cSAndroid Build Coastguard WorkerWhen you are done with a JPEG compression object, destroy it by calling
470*dfc6aa5cSAndroid Build Coastguard Workerjpeg_destroy_compress().  This will free all subsidiary memory (regardless of
471*dfc6aa5cSAndroid Build Coastguard Workerthe previous state of the object).  Or you can call jpeg_destroy(), which
472*dfc6aa5cSAndroid Build Coastguard Workerworks for either compression or decompression objects --- this may be more
473*dfc6aa5cSAndroid Build Coastguard Workerconvenient if you are sharing code between compression and decompression
474*dfc6aa5cSAndroid Build Coastguard Workercases.  (Actually, these routines are equivalent except for the declared type
475*dfc6aa5cSAndroid Build Coastguard Workerof the passed pointer.  To avoid gripes from ANSI C compilers, jpeg_destroy()
476*dfc6aa5cSAndroid Build Coastguard Workershould be passed a j_common_ptr.)
477*dfc6aa5cSAndroid Build Coastguard Worker
478*dfc6aa5cSAndroid Build Coastguard WorkerIf you allocated the jpeg_compress_struct structure from malloc(), freeing
479*dfc6aa5cSAndroid Build Coastguard Workerit is your responsibility --- jpeg_destroy() won't.  Ditto for the error
480*dfc6aa5cSAndroid Build Coastguard Workerhandler structure.
481*dfc6aa5cSAndroid Build Coastguard Worker
482*dfc6aa5cSAndroid Build Coastguard WorkerTypical code:
483*dfc6aa5cSAndroid Build Coastguard Worker
484*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_destroy_compress(&cinfo);
485*dfc6aa5cSAndroid Build Coastguard Worker
486*dfc6aa5cSAndroid Build Coastguard Worker
487*dfc6aa5cSAndroid Build Coastguard Worker8. Aborting.
488*dfc6aa5cSAndroid Build Coastguard Worker
489*dfc6aa5cSAndroid Build Coastguard WorkerIf you decide to abort a compression cycle before finishing, you can clean up
490*dfc6aa5cSAndroid Build Coastguard Workerin either of two ways:
491*dfc6aa5cSAndroid Build Coastguard Worker
492*dfc6aa5cSAndroid Build Coastguard Worker* If you don't need the JPEG object any more, just call
493*dfc6aa5cSAndroid Build Coastguard Worker  jpeg_destroy_compress() or jpeg_destroy() to release memory.  This is
494*dfc6aa5cSAndroid Build Coastguard Worker  legitimate at any point after calling jpeg_create_compress() --- in fact,
495*dfc6aa5cSAndroid Build Coastguard Worker  it's safe even if jpeg_create_compress() fails.
496*dfc6aa5cSAndroid Build Coastguard Worker
497*dfc6aa5cSAndroid Build Coastguard Worker* If you want to re-use the JPEG object, call jpeg_abort_compress(), or call
498*dfc6aa5cSAndroid Build Coastguard Worker  jpeg_abort() which works on both compression and decompression objects.
499*dfc6aa5cSAndroid Build Coastguard Worker  This will return the object to an idle state, releasing any working memory.
500*dfc6aa5cSAndroid Build Coastguard Worker  jpeg_abort() is allowed at any time after successful object creation.
501*dfc6aa5cSAndroid Build Coastguard Worker
502*dfc6aa5cSAndroid Build Coastguard WorkerNote that cleaning up the data destination, if required, is your
503*dfc6aa5cSAndroid Build Coastguard Workerresponsibility; neither of these routines will call term_destination().
504*dfc6aa5cSAndroid Build Coastguard Worker(See "Compressed data handling", below, for more about that.)
505*dfc6aa5cSAndroid Build Coastguard Worker
506*dfc6aa5cSAndroid Build Coastguard Workerjpeg_destroy() and jpeg_abort() are the only safe calls to make on a JPEG
507*dfc6aa5cSAndroid Build Coastguard Workerobject that has reported an error by calling error_exit (see "Error handling"
508*dfc6aa5cSAndroid Build Coastguard Workerfor more info).  The internal state of such an object is likely to be out of
509*dfc6aa5cSAndroid Build Coastguard Workerwhack.  Either of these two routines will return the object to a known state.
510*dfc6aa5cSAndroid Build Coastguard Worker
511*dfc6aa5cSAndroid Build Coastguard Worker
512*dfc6aa5cSAndroid Build Coastguard WorkerDecompression details
513*dfc6aa5cSAndroid Build Coastguard Worker---------------------
514*dfc6aa5cSAndroid Build Coastguard Worker
515*dfc6aa5cSAndroid Build Coastguard WorkerHere we revisit the JPEG decompression outline given in the overview.
516*dfc6aa5cSAndroid Build Coastguard Worker
517*dfc6aa5cSAndroid Build Coastguard Worker1. Allocate and initialize a JPEG decompression object.
518*dfc6aa5cSAndroid Build Coastguard Worker
519*dfc6aa5cSAndroid Build Coastguard WorkerThis is just like initialization for compression, as discussed above,
520*dfc6aa5cSAndroid Build Coastguard Workerexcept that the object is a "struct jpeg_decompress_struct" and you
521*dfc6aa5cSAndroid Build Coastguard Workercall jpeg_create_decompress().  Error handling is exactly the same.
522*dfc6aa5cSAndroid Build Coastguard Worker
523*dfc6aa5cSAndroid Build Coastguard WorkerTypical code:
524*dfc6aa5cSAndroid Build Coastguard Worker
525*dfc6aa5cSAndroid Build Coastguard Worker        struct jpeg_decompress_struct cinfo;
526*dfc6aa5cSAndroid Build Coastguard Worker        struct jpeg_error_mgr jerr;
527*dfc6aa5cSAndroid Build Coastguard Worker        ...
528*dfc6aa5cSAndroid Build Coastguard Worker        cinfo.err = jpeg_std_error(&jerr);
529*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_create_decompress(&cinfo);
530*dfc6aa5cSAndroid Build Coastguard Worker
531*dfc6aa5cSAndroid Build Coastguard Worker(Both here and in the IJG code, we usually use variable name "cinfo" for
532*dfc6aa5cSAndroid Build Coastguard Workerboth compression and decompression objects.)
533*dfc6aa5cSAndroid Build Coastguard Worker
534*dfc6aa5cSAndroid Build Coastguard Worker
535*dfc6aa5cSAndroid Build Coastguard Worker2. Specify the source of the compressed data (eg, a file).
536*dfc6aa5cSAndroid Build Coastguard Worker
537*dfc6aa5cSAndroid Build Coastguard WorkerAs previously mentioned, the JPEG library reads compressed data from a "data
538*dfc6aa5cSAndroid Build Coastguard Workersource" module.  The library includes one data source module which knows how
539*dfc6aa5cSAndroid Build Coastguard Workerto read from a stdio stream.  You can use your own source module if you want
540*dfc6aa5cSAndroid Build Coastguard Workerto do something else, as discussed later.
541*dfc6aa5cSAndroid Build Coastguard Worker
542*dfc6aa5cSAndroid Build Coastguard WorkerIf you use the standard source module, you must open the source stdio stream
543*dfc6aa5cSAndroid Build Coastguard Workerbeforehand.  Typical code for this step looks like:
544*dfc6aa5cSAndroid Build Coastguard Worker
545*dfc6aa5cSAndroid Build Coastguard Worker        FILE *infile;
546*dfc6aa5cSAndroid Build Coastguard Worker        ...
547*dfc6aa5cSAndroid Build Coastguard Worker        if ((infile = fopen(filename, "rb")) == NULL) {
548*dfc6aa5cSAndroid Build Coastguard Worker            fprintf(stderr, "can't open %s\n", filename);
549*dfc6aa5cSAndroid Build Coastguard Worker            exit(1);
550*dfc6aa5cSAndroid Build Coastguard Worker        }
551*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_stdio_src(&cinfo, infile);
552*dfc6aa5cSAndroid Build Coastguard Worker
553*dfc6aa5cSAndroid Build Coastguard Workerwhere the last line invokes the standard source module.
554*dfc6aa5cSAndroid Build Coastguard Worker
555*dfc6aa5cSAndroid Build Coastguard WorkerWARNING: it is critical that the binary compressed data be read unchanged.
556*dfc6aa5cSAndroid Build Coastguard WorkerOn non-Unix systems the stdio library may perform newline translation or
557*dfc6aa5cSAndroid Build Coastguard Workerotherwise corrupt binary data.  To suppress this behavior, you may need to use
558*dfc6aa5cSAndroid Build Coastguard Workera "b" option to fopen (as shown above), or use setmode() or another routine to
559*dfc6aa5cSAndroid Build Coastguard Workerput the stdio stream in binary mode.  See cjpeg.c and djpeg.c for code that
560*dfc6aa5cSAndroid Build Coastguard Workerhas been found to work on many systems.
561*dfc6aa5cSAndroid Build Coastguard Worker
562*dfc6aa5cSAndroid Build Coastguard WorkerYou may not change the data source between calling jpeg_read_header() and
563*dfc6aa5cSAndroid Build Coastguard Workerjpeg_finish_decompress().  If you wish to read a series of JPEG images from
564*dfc6aa5cSAndroid Build Coastguard Workera single source file, you should repeat the jpeg_read_header() to
565*dfc6aa5cSAndroid Build Coastguard Workerjpeg_finish_decompress() sequence without reinitializing either the JPEG
566*dfc6aa5cSAndroid Build Coastguard Workerobject or the data source module; this prevents buffered input data from
567*dfc6aa5cSAndroid Build Coastguard Workerbeing discarded.
568*dfc6aa5cSAndroid Build Coastguard Worker
569*dfc6aa5cSAndroid Build Coastguard Worker
570*dfc6aa5cSAndroid Build Coastguard Worker3. Call jpeg_read_header() to obtain image info.
571*dfc6aa5cSAndroid Build Coastguard Worker
572*dfc6aa5cSAndroid Build Coastguard WorkerTypical code for this step is just
573*dfc6aa5cSAndroid Build Coastguard Worker
574*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_read_header(&cinfo, TRUE);
575*dfc6aa5cSAndroid Build Coastguard Worker
576*dfc6aa5cSAndroid Build Coastguard WorkerThis will read the source datastream header markers, up to the beginning
577*dfc6aa5cSAndroid Build Coastguard Workerof the compressed data proper.  On return, the image dimensions and other
578*dfc6aa5cSAndroid Build Coastguard Workerinfo have been stored in the JPEG object.  The application may wish to
579*dfc6aa5cSAndroid Build Coastguard Workerconsult this information before selecting decompression parameters.
580*dfc6aa5cSAndroid Build Coastguard Worker
581*dfc6aa5cSAndroid Build Coastguard WorkerMore complex code is necessary if
582*dfc6aa5cSAndroid Build Coastguard Worker  * A suspending data source is used --- in that case jpeg_read_header()
583*dfc6aa5cSAndroid Build Coastguard Worker    may return before it has read all the header data.  See "I/O suspension",
584*dfc6aa5cSAndroid Build Coastguard Worker    below.  The normal stdio source manager will NOT cause this to happen.
585*dfc6aa5cSAndroid Build Coastguard Worker  * Abbreviated JPEG files are to be processed --- see the section on
586*dfc6aa5cSAndroid Build Coastguard Worker    abbreviated datastreams.  Standard applications that deal only in
587*dfc6aa5cSAndroid Build Coastguard Worker    interchange JPEG files need not be concerned with this case either.
588*dfc6aa5cSAndroid Build Coastguard Worker
589*dfc6aa5cSAndroid Build Coastguard WorkerIt is permissible to stop at this point if you just wanted to find out the
590*dfc6aa5cSAndroid Build Coastguard Workerimage dimensions and other header info for a JPEG file.  In that case,
591*dfc6aa5cSAndroid Build Coastguard Workercall jpeg_destroy() when you are done with the JPEG object, or call
592*dfc6aa5cSAndroid Build Coastguard Workerjpeg_abort() to return it to an idle state before selecting a new data
593*dfc6aa5cSAndroid Build Coastguard Workersource and reading another header.
594*dfc6aa5cSAndroid Build Coastguard Worker
595*dfc6aa5cSAndroid Build Coastguard Worker
596*dfc6aa5cSAndroid Build Coastguard Worker4. Set parameters for decompression.
597*dfc6aa5cSAndroid Build Coastguard Worker
598*dfc6aa5cSAndroid Build Coastguard Workerjpeg_read_header() sets appropriate default decompression parameters based on
599*dfc6aa5cSAndroid Build Coastguard Workerthe properties of the image (in particular, its colorspace).  However, you
600*dfc6aa5cSAndroid Build Coastguard Workermay well want to alter these defaults before beginning the decompression.
601*dfc6aa5cSAndroid Build Coastguard WorkerFor example, the default is to produce full color output from a color file.
602*dfc6aa5cSAndroid Build Coastguard WorkerIf you want colormapped output you must ask for it.  Other options allow the
603*dfc6aa5cSAndroid Build Coastguard Workerreturned image to be scaled and allow various speed/quality tradeoffs to be
604*dfc6aa5cSAndroid Build Coastguard Workerselected.  "Decompression parameter selection", below, gives details.
605*dfc6aa5cSAndroid Build Coastguard Worker
606*dfc6aa5cSAndroid Build Coastguard WorkerIf the defaults are appropriate, nothing need be done at this step.
607*dfc6aa5cSAndroid Build Coastguard Worker
608*dfc6aa5cSAndroid Build Coastguard WorkerNote that all default values are set by each call to jpeg_read_header().
609*dfc6aa5cSAndroid Build Coastguard WorkerIf you reuse a decompression object, you cannot expect your parameter
610*dfc6aa5cSAndroid Build Coastguard Workersettings to be preserved across cycles, as you can for compression.
611*dfc6aa5cSAndroid Build Coastguard WorkerYou must set desired parameter values each time.
612*dfc6aa5cSAndroid Build Coastguard Worker
613*dfc6aa5cSAndroid Build Coastguard Worker
614*dfc6aa5cSAndroid Build Coastguard Worker5. jpeg_start_decompress(...);
615*dfc6aa5cSAndroid Build Coastguard Worker
616*dfc6aa5cSAndroid Build Coastguard WorkerOnce the parameter values are satisfactory, call jpeg_start_decompress() to
617*dfc6aa5cSAndroid Build Coastguard Workerbegin decompression.  This will initialize internal state, allocate working
618*dfc6aa5cSAndroid Build Coastguard Workermemory, and prepare for returning data.
619*dfc6aa5cSAndroid Build Coastguard Worker
620*dfc6aa5cSAndroid Build Coastguard WorkerTypical code is just
621*dfc6aa5cSAndroid Build Coastguard Worker
622*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_start_decompress(&cinfo);
623*dfc6aa5cSAndroid Build Coastguard Worker
624*dfc6aa5cSAndroid Build Coastguard WorkerIf you have requested a multi-pass operating mode, such as 2-pass color
625*dfc6aa5cSAndroid Build Coastguard Workerquantization, jpeg_start_decompress() will do everything needed before data
626*dfc6aa5cSAndroid Build Coastguard Workeroutput can begin.  In this case jpeg_start_decompress() may take quite a while
627*dfc6aa5cSAndroid Build Coastguard Workerto complete.  With a single-scan (non progressive) JPEG file and default
628*dfc6aa5cSAndroid Build Coastguard Workerdecompression parameters, this will not happen; jpeg_start_decompress() will
629*dfc6aa5cSAndroid Build Coastguard Workerreturn quickly.
630*dfc6aa5cSAndroid Build Coastguard Worker
631*dfc6aa5cSAndroid Build Coastguard WorkerAfter this call, the final output image dimensions, including any requested
632*dfc6aa5cSAndroid Build Coastguard Workerscaling, are available in the JPEG object; so is the selected colormap, if
633*dfc6aa5cSAndroid Build Coastguard Workercolormapped output has been requested.  Useful fields include
634*dfc6aa5cSAndroid Build Coastguard Worker
635*dfc6aa5cSAndroid Build Coastguard Worker        output_width            image width and height, as scaled
636*dfc6aa5cSAndroid Build Coastguard Worker        output_height
637*dfc6aa5cSAndroid Build Coastguard Worker        out_color_components    # of color components in out_color_space
638*dfc6aa5cSAndroid Build Coastguard Worker        output_components       # of color components returned per pixel
639*dfc6aa5cSAndroid Build Coastguard Worker        colormap                the selected colormap, if any
640*dfc6aa5cSAndroid Build Coastguard Worker        actual_number_of_colors         number of entries in colormap
641*dfc6aa5cSAndroid Build Coastguard Worker
642*dfc6aa5cSAndroid Build Coastguard Workeroutput_components is 1 (a colormap index) when quantizing colors; otherwise it
643*dfc6aa5cSAndroid Build Coastguard Workerequals out_color_components.  It is the number of JSAMPLE values that will be
644*dfc6aa5cSAndroid Build Coastguard Workeremitted per pixel in the output arrays.
645*dfc6aa5cSAndroid Build Coastguard Worker
646*dfc6aa5cSAndroid Build Coastguard WorkerTypically you will need to allocate data buffers to hold the incoming image.
647*dfc6aa5cSAndroid Build Coastguard WorkerYou will need output_width * output_components JSAMPLEs per scanline in your
648*dfc6aa5cSAndroid Build Coastguard Workeroutput buffer, and a total of output_height scanlines will be returned.
649*dfc6aa5cSAndroid Build Coastguard Worker
650*dfc6aa5cSAndroid Build Coastguard WorkerNote: if you are using the JPEG library's internal memory manager to allocate
651*dfc6aa5cSAndroid Build Coastguard Workerdata buffers (as djpeg does), then the manager's protocol requires that you
652*dfc6aa5cSAndroid Build Coastguard Workerrequest large buffers *before* calling jpeg_start_decompress().  This is a
653*dfc6aa5cSAndroid Build Coastguard Workerlittle tricky since the output_XXX fields are not normally valid then.  You
654*dfc6aa5cSAndroid Build Coastguard Workercan make them valid by calling jpeg_calc_output_dimensions() after setting the
655*dfc6aa5cSAndroid Build Coastguard Workerrelevant parameters (scaling, output color space, and quantization flag).
656*dfc6aa5cSAndroid Build Coastguard Worker
657*dfc6aa5cSAndroid Build Coastguard Worker
658*dfc6aa5cSAndroid Build Coastguard Worker6. while (scan lines remain to be read)
659*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_read_scanlines(...);
660*dfc6aa5cSAndroid Build Coastguard Worker
661*dfc6aa5cSAndroid Build Coastguard WorkerNow you can read the decompressed image data by calling jpeg_read_scanlines()
662*dfc6aa5cSAndroid Build Coastguard Workerone or more times.  At each call, you pass in the maximum number of scanlines
663*dfc6aa5cSAndroid Build Coastguard Workerto be read (ie, the height of your working buffer); jpeg_read_scanlines()
664*dfc6aa5cSAndroid Build Coastguard Workerwill return up to that many lines.  The return value is the number of lines
665*dfc6aa5cSAndroid Build Coastguard Workeractually read.  The format of the returned data is discussed under "Data
666*dfc6aa5cSAndroid Build Coastguard Workerformats", above.  Don't forget that grayscale and color JPEGs will return
667*dfc6aa5cSAndroid Build Coastguard Workerdifferent data formats!
668*dfc6aa5cSAndroid Build Coastguard Worker
669*dfc6aa5cSAndroid Build Coastguard WorkerImage data is returned in top-to-bottom scanline order.  If you must write
670*dfc6aa5cSAndroid Build Coastguard Workerout the image in bottom-to-top order, you can use the JPEG library's virtual
671*dfc6aa5cSAndroid Build Coastguard Workerarray mechanism to invert the data efficiently.  Examples of this can be
672*dfc6aa5cSAndroid Build Coastguard Workerfound in the sample application djpeg.
673*dfc6aa5cSAndroid Build Coastguard Worker
674*dfc6aa5cSAndroid Build Coastguard WorkerThe library maintains a count of the number of scanlines returned so far
675*dfc6aa5cSAndroid Build Coastguard Workerin the output_scanline field of the JPEG object.  Usually you can just use
676*dfc6aa5cSAndroid Build Coastguard Workerthis variable as the loop counter, so that the loop test looks like
677*dfc6aa5cSAndroid Build Coastguard Worker"while (cinfo.output_scanline < cinfo.output_height)".  (Note that the test
678*dfc6aa5cSAndroid Build Coastguard Workershould NOT be against image_height, unless you never use scaling.  The
679*dfc6aa5cSAndroid Build Coastguard Workerimage_height field is the height of the original unscaled image.)
680*dfc6aa5cSAndroid Build Coastguard WorkerThe return value always equals the change in the value of output_scanline.
681*dfc6aa5cSAndroid Build Coastguard Worker
682*dfc6aa5cSAndroid Build Coastguard WorkerIf you don't use a suspending data source, it is safe to assume that
683*dfc6aa5cSAndroid Build Coastguard Workerjpeg_read_scanlines() reads at least one scanline per call, until the
684*dfc6aa5cSAndroid Build Coastguard Workerbottom of the image has been reached.
685*dfc6aa5cSAndroid Build Coastguard Worker
686*dfc6aa5cSAndroid Build Coastguard WorkerIf you use a buffer larger than one scanline, it is NOT safe to assume that
687*dfc6aa5cSAndroid Build Coastguard Workerjpeg_read_scanlines() fills it.  (The current implementation returns only a
688*dfc6aa5cSAndroid Build Coastguard Workerfew scanlines per call, no matter how large a buffer you pass.)  So you must
689*dfc6aa5cSAndroid Build Coastguard Workeralways provide a loop that calls jpeg_read_scanlines() repeatedly until the
690*dfc6aa5cSAndroid Build Coastguard Workerwhole image has been read.
691*dfc6aa5cSAndroid Build Coastguard Worker
692*dfc6aa5cSAndroid Build Coastguard Worker
693*dfc6aa5cSAndroid Build Coastguard Worker7. jpeg_finish_decompress(...);
694*dfc6aa5cSAndroid Build Coastguard Worker
695*dfc6aa5cSAndroid Build Coastguard WorkerAfter all the image data has been read, call jpeg_finish_decompress() to
696*dfc6aa5cSAndroid Build Coastguard Workercomplete the decompression cycle.  This causes working memory associated
697*dfc6aa5cSAndroid Build Coastguard Workerwith the JPEG object to be released.
698*dfc6aa5cSAndroid Build Coastguard Worker
699*dfc6aa5cSAndroid Build Coastguard WorkerTypical code:
700*dfc6aa5cSAndroid Build Coastguard Worker
701*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_finish_decompress(&cinfo);
702*dfc6aa5cSAndroid Build Coastguard Worker
703*dfc6aa5cSAndroid Build Coastguard WorkerIf using the stdio source manager, don't forget to close the source stdio
704*dfc6aa5cSAndroid Build Coastguard Workerstream if necessary.
705*dfc6aa5cSAndroid Build Coastguard Worker
706*dfc6aa5cSAndroid Build Coastguard WorkerIt is an error to call jpeg_finish_decompress() before reading the correct
707*dfc6aa5cSAndroid Build Coastguard Workertotal number of scanlines.  If you wish to abort decompression, call
708*dfc6aa5cSAndroid Build Coastguard Workerjpeg_abort() as discussed below.
709*dfc6aa5cSAndroid Build Coastguard Worker
710*dfc6aa5cSAndroid Build Coastguard WorkerAfter completing a decompression cycle, you may dispose of the JPEG object as
711*dfc6aa5cSAndroid Build Coastguard Workerdiscussed next, or you may use it to decompress another image.  In that case
712*dfc6aa5cSAndroid Build Coastguard Workerreturn to step 2 or 3 as appropriate.  If you do not change the source
713*dfc6aa5cSAndroid Build Coastguard Workermanager, the next image will be read from the same source.
714*dfc6aa5cSAndroid Build Coastguard Worker
715*dfc6aa5cSAndroid Build Coastguard Worker
716*dfc6aa5cSAndroid Build Coastguard Worker8. Release the JPEG decompression object.
717*dfc6aa5cSAndroid Build Coastguard Worker
718*dfc6aa5cSAndroid Build Coastguard WorkerWhen you are done with a JPEG decompression object, destroy it by calling
719*dfc6aa5cSAndroid Build Coastguard Workerjpeg_destroy_decompress() or jpeg_destroy().  The previous discussion of
720*dfc6aa5cSAndroid Build Coastguard Workerdestroying compression objects applies here too.
721*dfc6aa5cSAndroid Build Coastguard Worker
722*dfc6aa5cSAndroid Build Coastguard WorkerTypical code:
723*dfc6aa5cSAndroid Build Coastguard Worker
724*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_destroy_decompress(&cinfo);
725*dfc6aa5cSAndroid Build Coastguard Worker
726*dfc6aa5cSAndroid Build Coastguard Worker
727*dfc6aa5cSAndroid Build Coastguard Worker9. Aborting.
728*dfc6aa5cSAndroid Build Coastguard Worker
729*dfc6aa5cSAndroid Build Coastguard WorkerYou can abort a decompression cycle by calling jpeg_destroy_decompress() or
730*dfc6aa5cSAndroid Build Coastguard Workerjpeg_destroy() if you don't need the JPEG object any more, or
731*dfc6aa5cSAndroid Build Coastguard Workerjpeg_abort_decompress() or jpeg_abort() if you want to reuse the object.
732*dfc6aa5cSAndroid Build Coastguard WorkerThe previous discussion of aborting compression cycles applies here too.
733*dfc6aa5cSAndroid Build Coastguard Worker
734*dfc6aa5cSAndroid Build Coastguard Worker
735*dfc6aa5cSAndroid Build Coastguard WorkerPartial image decompression
736*dfc6aa5cSAndroid Build Coastguard Worker---------------------------
737*dfc6aa5cSAndroid Build Coastguard Worker
738*dfc6aa5cSAndroid Build Coastguard WorkerPartial image decompression is convenient for performance-critical applications
739*dfc6aa5cSAndroid Build Coastguard Workerthat wish to view only a portion of a large JPEG image without decompressing
740*dfc6aa5cSAndroid Build Coastguard Workerthe whole thing.  It it also useful in memory-constrained environments (such as
741*dfc6aa5cSAndroid Build Coastguard Workeron mobile devices.)  This library provides the following functions to support
742*dfc6aa5cSAndroid Build Coastguard Workerpartial image decompression:
743*dfc6aa5cSAndroid Build Coastguard Worker
744*dfc6aa5cSAndroid Build Coastguard Worker1. Skipping rows when decompressing
745*dfc6aa5cSAndroid Build Coastguard Worker
746*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_skip_scanlines(j_decompress_ptr cinfo, JDIMENSION num_lines);
747*dfc6aa5cSAndroid Build Coastguard Worker
748*dfc6aa5cSAndroid Build Coastguard WorkerThis function provides application programmers with the ability to skip over
749*dfc6aa5cSAndroid Build Coastguard Workermultiple rows in the JPEG image.
750*dfc6aa5cSAndroid Build Coastguard Worker
751*dfc6aa5cSAndroid Build Coastguard WorkerSuspending data sources are not supported by this function.  Calling
752*dfc6aa5cSAndroid Build Coastguard Workerjpeg_skip_scanlines() with a suspending data source will result in undefined
753*dfc6aa5cSAndroid Build Coastguard Workerbehavior.  Two-pass color quantization is also not supported by this function.
754*dfc6aa5cSAndroid Build Coastguard WorkerCalling jpeg_skip_scanlines() with two-pass color quantization enabled will
755*dfc6aa5cSAndroid Build Coastguard Workerresult in an error.
756*dfc6aa5cSAndroid Build Coastguard Worker
757*dfc6aa5cSAndroid Build Coastguard Workerjpeg_skip_scanlines() will not allow skipping past the bottom of the image.  If
758*dfc6aa5cSAndroid Build Coastguard Workerthe value of num_lines is large enough to skip past the bottom of the image,
759*dfc6aa5cSAndroid Build Coastguard Workerthen the function will skip to the end of the image instead.
760*dfc6aa5cSAndroid Build Coastguard Worker
761*dfc6aa5cSAndroid Build Coastguard WorkerIf the value of num_lines is valid, then jpeg_skip_scanlines() will always
762*dfc6aa5cSAndroid Build Coastguard Workerskip all of the input rows requested.  There is no need to inspect the return
763*dfc6aa5cSAndroid Build Coastguard Workervalue of the function in that case.
764*dfc6aa5cSAndroid Build Coastguard Worker
765*dfc6aa5cSAndroid Build Coastguard WorkerBest results will be achieved by calling jpeg_skip_scanlines() for large chunks
766*dfc6aa5cSAndroid Build Coastguard Workerof rows.  The function should be viewed as a way to quickly jump to a
767*dfc6aa5cSAndroid Build Coastguard Workerparticular vertical offset in the JPEG image in order to decode a subset of the
768*dfc6aa5cSAndroid Build Coastguard Workerimage.  Used in this manner, it will provide significant performance
769*dfc6aa5cSAndroid Build Coastguard Workerimprovements.
770*dfc6aa5cSAndroid Build Coastguard Worker
771*dfc6aa5cSAndroid Build Coastguard WorkerCalling jpeg_skip_scanlines() for small values of num_lines has several
772*dfc6aa5cSAndroid Build Coastguard Workerpotential drawbacks:
773*dfc6aa5cSAndroid Build Coastguard Worker    1) JPEG decompression occurs in blocks, so if jpeg_skip_scanlines() is
774*dfc6aa5cSAndroid Build Coastguard Worker       called from the middle of a decompression block, then it is likely that
775*dfc6aa5cSAndroid Build Coastguard Worker       much of the decompression work has already been done for the first
776*dfc6aa5cSAndroid Build Coastguard Worker       couple of rows that need to be skipped.
777*dfc6aa5cSAndroid Build Coastguard Worker    2) When this function returns, it must leave the decompressor in a state
778*dfc6aa5cSAndroid Build Coastguard Worker       such that it is ready to read the next line.  This may involve
779*dfc6aa5cSAndroid Build Coastguard Worker       decompressing a block that must be partially skipped.
780*dfc6aa5cSAndroid Build Coastguard WorkerThese issues are especially tricky for cases in which upsampling requires
781*dfc6aa5cSAndroid Build Coastguard Workercontext rows.  In the worst case, jpeg_skip_scanlines() will perform similarly
782*dfc6aa5cSAndroid Build Coastguard Workerto jpeg_read_scanlines() (since it will actually call jpeg_read_scanlines().)
783*dfc6aa5cSAndroid Build Coastguard Worker
784*dfc6aa5cSAndroid Build Coastguard Worker2. Decompressing partial scanlines
785*dfc6aa5cSAndroid Build Coastguard Worker
786*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_crop_scanline (j_decompress_ptr cinfo, JDIMENSION *xoffset,
787*dfc6aa5cSAndroid Build Coastguard Worker                            JDIMENSION *width)
788*dfc6aa5cSAndroid Build Coastguard Worker
789*dfc6aa5cSAndroid Build Coastguard WorkerThis function provides application programmers with the ability to decompress
790*dfc6aa5cSAndroid Build Coastguard Workeronly a portion of each row in the JPEG image.  It must be called after
791*dfc6aa5cSAndroid Build Coastguard Workerjpeg_start_decompress() and before any calls to jpeg_read_scanlines() or
792*dfc6aa5cSAndroid Build Coastguard Workerjpeg_skip_scanlines().
793*dfc6aa5cSAndroid Build Coastguard Worker
794*dfc6aa5cSAndroid Build Coastguard WorkerIf xoffset and width do not form a valid subset of the image row, then this
795*dfc6aa5cSAndroid Build Coastguard Workerfunction will generate an error.  Note that if the output image is scaled, then
796*dfc6aa5cSAndroid Build Coastguard Workerxoffset and width are relative to the scaled image dimensions.
797*dfc6aa5cSAndroid Build Coastguard Worker
798*dfc6aa5cSAndroid Build Coastguard Workerxoffset and width are passed by reference because xoffset must fall on an iMCU
799*dfc6aa5cSAndroid Build Coastguard Workerboundary.  If it doesn't, then it will be moved left to the nearest iMCU
800*dfc6aa5cSAndroid Build Coastguard Workerboundary, and width will be increased accordingly.  If the calling program does
801*dfc6aa5cSAndroid Build Coastguard Workernot like the adjusted values of xoffset and width, then it can call
802*dfc6aa5cSAndroid Build Coastguard Workerjpeg_crop_scanline() again with new values (for instance, if it wants to move
803*dfc6aa5cSAndroid Build Coastguard Workerxoffset to the nearest iMCU boundary to the right instead of to the left.)
804*dfc6aa5cSAndroid Build Coastguard Worker
805*dfc6aa5cSAndroid Build Coastguard WorkerAfter calling this function, cinfo->output_width will be set to the adjusted
806*dfc6aa5cSAndroid Build Coastguard Workerwidth.  This value should be used when allocating an output buffer to pass to
807*dfc6aa5cSAndroid Build Coastguard Workerjpeg_read_scanlines().
808*dfc6aa5cSAndroid Build Coastguard Worker
809*dfc6aa5cSAndroid Build Coastguard WorkerThe output image from a partial-width decompression will be identical to the
810*dfc6aa5cSAndroid Build Coastguard Workercorresponding image region from a full decode, with one exception:  The "fancy"
811*dfc6aa5cSAndroid Build Coastguard Worker(smooth) h2v2 (4:2:0) and h2v1 (4:2:2) upsampling algorithms fill in the
812*dfc6aa5cSAndroid Build Coastguard Workermissing chroma components by averaging the chroma components from neighboring
813*dfc6aa5cSAndroid Build Coastguard Workerpixels, except on the right and left edges of the image (where there are no
814*dfc6aa5cSAndroid Build Coastguard Workerneighboring pixels.)  When performing a partial-width decompression, these
815*dfc6aa5cSAndroid Build Coastguard Worker"fancy" upsampling algorithms may treat the left and right edges of the partial
816*dfc6aa5cSAndroid Build Coastguard Workerimage region as if they are the left and right edges of the image, meaning that
817*dfc6aa5cSAndroid Build Coastguard Workerthe upsampling algorithm may be simplified.  The result is that the pixels on
818*dfc6aa5cSAndroid Build Coastguard Workerthe left or right edge of the partial image may not be exactly identical to the
819*dfc6aa5cSAndroid Build Coastguard Workercorresponding pixels in the original image.
820*dfc6aa5cSAndroid Build Coastguard Worker
821*dfc6aa5cSAndroid Build Coastguard Worker
822*dfc6aa5cSAndroid Build Coastguard WorkerMechanics of usage: include files, linking, etc
823*dfc6aa5cSAndroid Build Coastguard Worker-----------------------------------------------
824*dfc6aa5cSAndroid Build Coastguard Worker
825*dfc6aa5cSAndroid Build Coastguard WorkerApplications using the JPEG library should include the header file jpeglib.h
826*dfc6aa5cSAndroid Build Coastguard Workerto obtain declarations of data types and routines.  Before including
827*dfc6aa5cSAndroid Build Coastguard Workerjpeglib.h, include system headers that define at least the typedefs FILE and
828*dfc6aa5cSAndroid Build Coastguard Workersize_t.  On ANSI-conforming systems, including <stdio.h> is sufficient; on
829*dfc6aa5cSAndroid Build Coastguard Workerolder Unix systems, you may need <sys/types.h> to define size_t.
830*dfc6aa5cSAndroid Build Coastguard Worker
831*dfc6aa5cSAndroid Build Coastguard WorkerIf the application needs to refer to individual JPEG library error codes, also
832*dfc6aa5cSAndroid Build Coastguard Workerinclude jerror.h to define those symbols.
833*dfc6aa5cSAndroid Build Coastguard Worker
834*dfc6aa5cSAndroid Build Coastguard Workerjpeglib.h indirectly includes the files jconfig.h and jmorecfg.h.  If you are
835*dfc6aa5cSAndroid Build Coastguard Workerinstalling the JPEG header files in a system directory, you will want to
836*dfc6aa5cSAndroid Build Coastguard Workerinstall all four files: jpeglib.h, jerror.h, jconfig.h, jmorecfg.h.
837*dfc6aa5cSAndroid Build Coastguard Worker
838*dfc6aa5cSAndroid Build Coastguard WorkerThe most convenient way to include the JPEG code into your executable program
839*dfc6aa5cSAndroid Build Coastguard Workeris to prepare a library file ("libjpeg.a", or a corresponding name on non-Unix
840*dfc6aa5cSAndroid Build Coastguard Workermachines) and reference it at your link step.  If you use only half of the
841*dfc6aa5cSAndroid Build Coastguard Workerlibrary (only compression or only decompression), only that much code will be
842*dfc6aa5cSAndroid Build Coastguard Workerincluded from the library, unless your linker is hopelessly brain-damaged.
843*dfc6aa5cSAndroid Build Coastguard WorkerThe supplied build system builds libjpeg.a automatically.
844*dfc6aa5cSAndroid Build Coastguard Worker
845*dfc6aa5cSAndroid Build Coastguard WorkerIt may be worth pointing out that the core JPEG library does not actually
846*dfc6aa5cSAndroid Build Coastguard Workerrequire the stdio library: only the default source/destination managers and
847*dfc6aa5cSAndroid Build Coastguard Workererror handler need it.  You can use the library in a stdio-less environment
848*dfc6aa5cSAndroid Build Coastguard Workerif you replace those modules and use jmemnobs.c (or another memory manager of
849*dfc6aa5cSAndroid Build Coastguard Workeryour own devising).  More info about the minimum system library requirements
850*dfc6aa5cSAndroid Build Coastguard Workermay be found in jinclude.h.
851*dfc6aa5cSAndroid Build Coastguard Worker
852*dfc6aa5cSAndroid Build Coastguard Worker
853*dfc6aa5cSAndroid Build Coastguard WorkerADVANCED FEATURES
854*dfc6aa5cSAndroid Build Coastguard Worker=================
855*dfc6aa5cSAndroid Build Coastguard Worker
856*dfc6aa5cSAndroid Build Coastguard WorkerCompression parameter selection
857*dfc6aa5cSAndroid Build Coastguard Worker-------------------------------
858*dfc6aa5cSAndroid Build Coastguard Worker
859*dfc6aa5cSAndroid Build Coastguard WorkerThis section describes all the optional parameters you can set for JPEG
860*dfc6aa5cSAndroid Build Coastguard Workercompression, as well as the "helper" routines provided to assist in this
861*dfc6aa5cSAndroid Build Coastguard Workertask.  Proper setting of some parameters requires detailed understanding
862*dfc6aa5cSAndroid Build Coastguard Workerof the JPEG standard; if you don't know what a parameter is for, it's best
863*dfc6aa5cSAndroid Build Coastguard Workernot to mess with it!  See REFERENCES in the README.ijg file for pointers to
864*dfc6aa5cSAndroid Build Coastguard Workermore info about JPEG.
865*dfc6aa5cSAndroid Build Coastguard Worker
866*dfc6aa5cSAndroid Build Coastguard WorkerIt's a good idea to call jpeg_set_defaults() first, even if you plan to set
867*dfc6aa5cSAndroid Build Coastguard Workerall the parameters; that way your code is more likely to work with future JPEG
868*dfc6aa5cSAndroid Build Coastguard Workerlibraries that have additional parameters.  For the same reason, we recommend
869*dfc6aa5cSAndroid Build Coastguard Workeryou use a helper routine where one is provided, in preference to twiddling
870*dfc6aa5cSAndroid Build Coastguard Workercinfo fields directly.
871*dfc6aa5cSAndroid Build Coastguard Worker
872*dfc6aa5cSAndroid Build Coastguard WorkerThe helper routines are:
873*dfc6aa5cSAndroid Build Coastguard Worker
874*dfc6aa5cSAndroid Build Coastguard Workerjpeg_set_defaults (j_compress_ptr cinfo)
875*dfc6aa5cSAndroid Build Coastguard Worker        This routine sets all JPEG parameters to reasonable defaults, using
876*dfc6aa5cSAndroid Build Coastguard Worker        only the input image's color space (field in_color_space, which must
877*dfc6aa5cSAndroid Build Coastguard Worker        already be set in cinfo).  Many applications will only need to use
878*dfc6aa5cSAndroid Build Coastguard Worker        this routine and perhaps jpeg_set_quality().
879*dfc6aa5cSAndroid Build Coastguard Worker
880*dfc6aa5cSAndroid Build Coastguard Workerjpeg_set_colorspace (j_compress_ptr cinfo, J_COLOR_SPACE colorspace)
881*dfc6aa5cSAndroid Build Coastguard Worker        Sets the JPEG file's colorspace (field jpeg_color_space) as specified,
882*dfc6aa5cSAndroid Build Coastguard Worker        and sets other color-space-dependent parameters appropriately.  See
883*dfc6aa5cSAndroid Build Coastguard Worker        "Special color spaces", below, before using this.  A large number of
884*dfc6aa5cSAndroid Build Coastguard Worker        parameters, including all per-component parameters, are set by this
885*dfc6aa5cSAndroid Build Coastguard Worker        routine; if you want to twiddle individual parameters you should call
886*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_set_colorspace() before rather than after.
887*dfc6aa5cSAndroid Build Coastguard Worker
888*dfc6aa5cSAndroid Build Coastguard Workerjpeg_default_colorspace (j_compress_ptr cinfo)
889*dfc6aa5cSAndroid Build Coastguard Worker        Selects an appropriate JPEG colorspace based on cinfo->in_color_space,
890*dfc6aa5cSAndroid Build Coastguard Worker        and calls jpeg_set_colorspace().  This is actually a subroutine of
891*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_set_defaults().  It's broken out in case you want to change
892*dfc6aa5cSAndroid Build Coastguard Worker        just the colorspace-dependent JPEG parameters.
893*dfc6aa5cSAndroid Build Coastguard Worker
894*dfc6aa5cSAndroid Build Coastguard Workerjpeg_set_quality (j_compress_ptr cinfo, int quality, boolean force_baseline)
895*dfc6aa5cSAndroid Build Coastguard Worker        Constructs JPEG quantization tables appropriate for the indicated
896*dfc6aa5cSAndroid Build Coastguard Worker        quality setting.  The quality value is expressed on the 0..100 scale
897*dfc6aa5cSAndroid Build Coastguard Worker        recommended by IJG (cjpeg's "-quality" switch uses this routine).
898*dfc6aa5cSAndroid Build Coastguard Worker        Note that the exact mapping from quality values to tables may change
899*dfc6aa5cSAndroid Build Coastguard Worker        in future IJG releases as more is learned about DCT quantization.
900*dfc6aa5cSAndroid Build Coastguard Worker        If the force_baseline parameter is TRUE, then the quantization table
901*dfc6aa5cSAndroid Build Coastguard Worker        entries are constrained to the range 1..255 for full JPEG baseline
902*dfc6aa5cSAndroid Build Coastguard Worker        compatibility.  In the current implementation, this only makes a
903*dfc6aa5cSAndroid Build Coastguard Worker        difference for quality settings below 25, and it effectively prevents
904*dfc6aa5cSAndroid Build Coastguard Worker        very small/low quality files from being generated.  The IJG decoder
905*dfc6aa5cSAndroid Build Coastguard Worker        is capable of reading the non-baseline files generated at low quality
906*dfc6aa5cSAndroid Build Coastguard Worker        settings when force_baseline is FALSE, but other decoders may not be.
907*dfc6aa5cSAndroid Build Coastguard Worker
908*dfc6aa5cSAndroid Build Coastguard Workerjpeg_set_linear_quality (j_compress_ptr cinfo, int scale_factor,
909*dfc6aa5cSAndroid Build Coastguard Worker                         boolean force_baseline)
910*dfc6aa5cSAndroid Build Coastguard Worker        Same as jpeg_set_quality() except that the generated tables are the
911*dfc6aa5cSAndroid Build Coastguard Worker        sample tables given in Annex K (Clause K.1) of
912*dfc6aa5cSAndroid Build Coastguard Worker        Rec. ITU-T T.81 (1992) | ISO/IEC 10918-1:1994, multiplied by the
913*dfc6aa5cSAndroid Build Coastguard Worker        specified scale factor (which is expressed as a percentage; thus
914*dfc6aa5cSAndroid Build Coastguard Worker        scale_factor = 100 reproduces the spec's tables).  Note that larger
915*dfc6aa5cSAndroid Build Coastguard Worker        scale factors give lower quality.  This entry point is useful for
916*dfc6aa5cSAndroid Build Coastguard Worker        conforming to the Adobe PostScript DCT conventions, but we do not
917*dfc6aa5cSAndroid Build Coastguard Worker        recommend linear scaling as a user-visible quality scale otherwise.
918*dfc6aa5cSAndroid Build Coastguard Worker        force_baseline again constrains the computed table entries to 1..255.
919*dfc6aa5cSAndroid Build Coastguard Worker
920*dfc6aa5cSAndroid Build Coastguard Workerint jpeg_quality_scaling (int quality)
921*dfc6aa5cSAndroid Build Coastguard Worker        Converts a value on the IJG-recommended quality scale to a linear
922*dfc6aa5cSAndroid Build Coastguard Worker        scaling percentage.  Note that this routine may change or go away
923*dfc6aa5cSAndroid Build Coastguard Worker        in future releases --- IJG may choose to adopt a scaling method that
924*dfc6aa5cSAndroid Build Coastguard Worker        can't be expressed as a simple scalar multiplier, in which case the
925*dfc6aa5cSAndroid Build Coastguard Worker        premise of this routine collapses.  Caveat user.
926*dfc6aa5cSAndroid Build Coastguard Worker
927*dfc6aa5cSAndroid Build Coastguard Workerjpeg_default_qtables (j_compress_ptr cinfo, boolean force_baseline)
928*dfc6aa5cSAndroid Build Coastguard Worker        [libjpeg v7+ API/ABI emulation only]
929*dfc6aa5cSAndroid Build Coastguard Worker        Set default quantization tables with linear q_scale_factor[] values
930*dfc6aa5cSAndroid Build Coastguard Worker        (see below).
931*dfc6aa5cSAndroid Build Coastguard Worker
932*dfc6aa5cSAndroid Build Coastguard Workerjpeg_add_quant_table (j_compress_ptr cinfo, int which_tbl,
933*dfc6aa5cSAndroid Build Coastguard Worker                      const unsigned int *basic_table,
934*dfc6aa5cSAndroid Build Coastguard Worker                      int scale_factor, boolean force_baseline)
935*dfc6aa5cSAndroid Build Coastguard Worker        Allows an arbitrary quantization table to be created.  which_tbl
936*dfc6aa5cSAndroid Build Coastguard Worker        indicates which table slot to fill.  basic_table points to an array
937*dfc6aa5cSAndroid Build Coastguard Worker        of 64 unsigned ints given in normal array order.  These values are
938*dfc6aa5cSAndroid Build Coastguard Worker        multiplied by scale_factor/100 and then clamped to the range 1..65535
939*dfc6aa5cSAndroid Build Coastguard Worker        (or to 1..255 if force_baseline is TRUE).
940*dfc6aa5cSAndroid Build Coastguard Worker        CAUTION: prior to library version 6a, jpeg_add_quant_table expected
941*dfc6aa5cSAndroid Build Coastguard Worker        the basic table to be given in JPEG zigzag order.  If you need to
942*dfc6aa5cSAndroid Build Coastguard Worker        write code that works with either older or newer versions of this
943*dfc6aa5cSAndroid Build Coastguard Worker        routine, you must check the library version number.  Something like
944*dfc6aa5cSAndroid Build Coastguard Worker        "#if JPEG_LIB_VERSION >= 61" is the right test.
945*dfc6aa5cSAndroid Build Coastguard Worker
946*dfc6aa5cSAndroid Build Coastguard Workerjpeg_simple_progression (j_compress_ptr cinfo)
947*dfc6aa5cSAndroid Build Coastguard Worker        Generates a default scan script for writing a progressive-JPEG file.
948*dfc6aa5cSAndroid Build Coastguard Worker        This is the recommended method of creating a progressive file,
949*dfc6aa5cSAndroid Build Coastguard Worker        unless you want to make a custom scan sequence.  You must ensure that
950*dfc6aa5cSAndroid Build Coastguard Worker        the JPEG color space is set correctly before calling this routine.
951*dfc6aa5cSAndroid Build Coastguard Worker
952*dfc6aa5cSAndroid Build Coastguard Worker
953*dfc6aa5cSAndroid Build Coastguard WorkerCompression parameters (cinfo fields) include:
954*dfc6aa5cSAndroid Build Coastguard Worker
955*dfc6aa5cSAndroid Build Coastguard Workerboolean arith_code
956*dfc6aa5cSAndroid Build Coastguard Worker        If TRUE, use arithmetic coding.
957*dfc6aa5cSAndroid Build Coastguard Worker        If FALSE, use Huffman coding.
958*dfc6aa5cSAndroid Build Coastguard Worker
959*dfc6aa5cSAndroid Build Coastguard WorkerJ_DCT_METHOD dct_method
960*dfc6aa5cSAndroid Build Coastguard Worker        Selects the algorithm used for the DCT step.  Choices are:
961*dfc6aa5cSAndroid Build Coastguard Worker                JDCT_ISLOW: accurate integer method
962*dfc6aa5cSAndroid Build Coastguard Worker                JDCT_IFAST: less accurate integer method [legacy feature]
963*dfc6aa5cSAndroid Build Coastguard Worker                JDCT_FLOAT: floating-point method [legacy feature]
964*dfc6aa5cSAndroid Build Coastguard Worker                JDCT_DEFAULT: default method (normally JDCT_ISLOW)
965*dfc6aa5cSAndroid Build Coastguard Worker                JDCT_FASTEST: fastest method (normally JDCT_IFAST)
966*dfc6aa5cSAndroid Build Coastguard Worker        When the Independent JPEG Group's software was first released in 1991,
967*dfc6aa5cSAndroid Build Coastguard Worker        the compression time for a 1-megapixel JPEG image on a mainstream PC
968*dfc6aa5cSAndroid Build Coastguard Worker        was measured in minutes.  Thus, JDCT_IFAST provided noticeable
969*dfc6aa5cSAndroid Build Coastguard Worker        performance benefits.  On modern CPUs running libjpeg-turbo, however,
970*dfc6aa5cSAndroid Build Coastguard Worker        the compression time for a 1-megapixel JPEG image is measured in
971*dfc6aa5cSAndroid Build Coastguard Worker        milliseconds, and thus the performance benefits of JDCT_IFAST are much
972*dfc6aa5cSAndroid Build Coastguard Worker        less noticeable.  On modern x86/x86-64 CPUs that support AVX2
973*dfc6aa5cSAndroid Build Coastguard Worker        instructions, JDCT_IFAST and JDCT_ISLOW have similar performance.  On
974*dfc6aa5cSAndroid Build Coastguard Worker        other types of CPUs, JDCT_IFAST is generally about 5-15% faster than
975*dfc6aa5cSAndroid Build Coastguard Worker        JDCT_ISLOW.
976*dfc6aa5cSAndroid Build Coastguard Worker
977*dfc6aa5cSAndroid Build Coastguard Worker        For quality levels of 90 and below, there should be little or no
978*dfc6aa5cSAndroid Build Coastguard Worker        perceptible quality difference between the two algorithms.  For quality
979*dfc6aa5cSAndroid Build Coastguard Worker        levels above 90, however, the difference between JDCT_IFAST and
980*dfc6aa5cSAndroid Build Coastguard Worker        JDCT_ISLOW becomes more pronounced.  With quality=97, for instance,
981*dfc6aa5cSAndroid Build Coastguard Worker        JDCT_IFAST incurs generally about a 1-3 dB loss in PSNR relative to
982*dfc6aa5cSAndroid Build Coastguard Worker        JDCT_ISLOW, but this can be larger for some images.  Do not use
983*dfc6aa5cSAndroid Build Coastguard Worker        JDCT_IFAST with quality levels above 97.  The algorithm often
984*dfc6aa5cSAndroid Build Coastguard Worker        degenerates at quality=98 and above and can actually produce a more
985*dfc6aa5cSAndroid Build Coastguard Worker        lossy image than if lower quality levels had been used.  Also, in
986*dfc6aa5cSAndroid Build Coastguard Worker        libjpeg-turbo, JDCT_IFAST is not fully accelerated for quality levels
987*dfc6aa5cSAndroid Build Coastguard Worker        above 97, so it will be slower than JDCT_ISLOW.
988*dfc6aa5cSAndroid Build Coastguard Worker
989*dfc6aa5cSAndroid Build Coastguard Worker        JDCT_FLOAT does not produce significantly more accurate results than
990*dfc6aa5cSAndroid Build Coastguard Worker        JDCT_ISLOW, and it is much slower.  JDCT_FLOAT may also give different
991*dfc6aa5cSAndroid Build Coastguard Worker        results on different machines due to varying roundoff behavior, whereas
992*dfc6aa5cSAndroid Build Coastguard Worker        the integer methods should give the same results on all machines.
993*dfc6aa5cSAndroid Build Coastguard Worker
994*dfc6aa5cSAndroid Build Coastguard WorkerJ_COLOR_SPACE jpeg_color_space
995*dfc6aa5cSAndroid Build Coastguard Workerint num_components
996*dfc6aa5cSAndroid Build Coastguard Worker        The JPEG color space and corresponding number of components; see
997*dfc6aa5cSAndroid Build Coastguard Worker        "Special color spaces", below, for more info.  We recommend using
998*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_set_color_space() if you want to change these.
999*dfc6aa5cSAndroid Build Coastguard Worker
1000*dfc6aa5cSAndroid Build Coastguard Workerboolean optimize_coding
1001*dfc6aa5cSAndroid Build Coastguard Worker        TRUE causes the compressor to compute optimal Huffman coding tables
1002*dfc6aa5cSAndroid Build Coastguard Worker        for the image.  This requires an extra pass over the data and
1003*dfc6aa5cSAndroid Build Coastguard Worker        therefore costs a good deal of space and time.  The default is
1004*dfc6aa5cSAndroid Build Coastguard Worker        FALSE, which tells the compressor to use the supplied or default
1005*dfc6aa5cSAndroid Build Coastguard Worker        Huffman tables.  In most cases optimal tables save only a few percent
1006*dfc6aa5cSAndroid Build Coastguard Worker        of file size compared to the default tables.  Note that when this is
1007*dfc6aa5cSAndroid Build Coastguard Worker        TRUE, you need not supply Huffman tables at all, and any you do
1008*dfc6aa5cSAndroid Build Coastguard Worker        supply will be overwritten.
1009*dfc6aa5cSAndroid Build Coastguard Worker
1010*dfc6aa5cSAndroid Build Coastguard Workerunsigned int restart_interval
1011*dfc6aa5cSAndroid Build Coastguard Workerint restart_in_rows
1012*dfc6aa5cSAndroid Build Coastguard Worker        To emit restart markers in the JPEG file, set one of these nonzero.
1013*dfc6aa5cSAndroid Build Coastguard Worker        Set restart_interval to specify the exact interval in MCU blocks.
1014*dfc6aa5cSAndroid Build Coastguard Worker        Set restart_in_rows to specify the interval in MCU rows.  (If
1015*dfc6aa5cSAndroid Build Coastguard Worker        restart_in_rows is not 0, then restart_interval is set after the
1016*dfc6aa5cSAndroid Build Coastguard Worker        image width in MCUs is computed.)  Defaults are zero (no restarts).
1017*dfc6aa5cSAndroid Build Coastguard Worker        One restart marker per MCU row is often a good choice.
1018*dfc6aa5cSAndroid Build Coastguard Worker        NOTE: the overhead of restart markers is higher in grayscale JPEG
1019*dfc6aa5cSAndroid Build Coastguard Worker        files than in color files, and MUCH higher in progressive JPEGs.
1020*dfc6aa5cSAndroid Build Coastguard Worker        If you use restarts, you may want to use larger intervals in those
1021*dfc6aa5cSAndroid Build Coastguard Worker        cases.
1022*dfc6aa5cSAndroid Build Coastguard Worker
1023*dfc6aa5cSAndroid Build Coastguard Workerconst jpeg_scan_info *scan_info
1024*dfc6aa5cSAndroid Build Coastguard Workerint num_scans
1025*dfc6aa5cSAndroid Build Coastguard Worker        By default, scan_info is NULL; this causes the compressor to write a
1026*dfc6aa5cSAndroid Build Coastguard Worker        single-scan sequential JPEG file.  If not NULL, scan_info points to
1027*dfc6aa5cSAndroid Build Coastguard Worker        an array of scan definition records of length num_scans.  The
1028*dfc6aa5cSAndroid Build Coastguard Worker        compressor will then write a JPEG file having one scan for each scan
1029*dfc6aa5cSAndroid Build Coastguard Worker        definition record.  This is used to generate noninterleaved or
1030*dfc6aa5cSAndroid Build Coastguard Worker        progressive JPEG files.  The library checks that the scan array
1031*dfc6aa5cSAndroid Build Coastguard Worker        defines a valid JPEG scan sequence.  (jpeg_simple_progression creates
1032*dfc6aa5cSAndroid Build Coastguard Worker        a suitable scan definition array for progressive JPEG.)  This is
1033*dfc6aa5cSAndroid Build Coastguard Worker        discussed further under "Progressive JPEG support".
1034*dfc6aa5cSAndroid Build Coastguard Worker
1035*dfc6aa5cSAndroid Build Coastguard Workerint smoothing_factor
1036*dfc6aa5cSAndroid Build Coastguard Worker        If non-zero, the input image is smoothed; the value should be 1 for
1037*dfc6aa5cSAndroid Build Coastguard Worker        minimal smoothing to 100 for maximum smoothing.  Consult jcsample.c
1038*dfc6aa5cSAndroid Build Coastguard Worker        for details of the smoothing algorithm.  The default is zero.
1039*dfc6aa5cSAndroid Build Coastguard Worker
1040*dfc6aa5cSAndroid Build Coastguard Workerboolean write_JFIF_header
1041*dfc6aa5cSAndroid Build Coastguard Worker        If TRUE, a JFIF APP0 marker is emitted.  jpeg_set_defaults() and
1042*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_set_colorspace() set this TRUE if a JFIF-legal JPEG color space
1043*dfc6aa5cSAndroid Build Coastguard Worker        (ie, YCbCr or grayscale) is selected, otherwise FALSE.
1044*dfc6aa5cSAndroid Build Coastguard Worker
1045*dfc6aa5cSAndroid Build Coastguard WorkerUINT8 JFIF_major_version
1046*dfc6aa5cSAndroid Build Coastguard WorkerUINT8 JFIF_minor_version
1047*dfc6aa5cSAndroid Build Coastguard Worker        The version number to be written into the JFIF marker.
1048*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_set_defaults() initializes the version to 1.01 (major=minor=1).
1049*dfc6aa5cSAndroid Build Coastguard Worker        You should set it to 1.02 (major=1, minor=2) if you plan to write
1050*dfc6aa5cSAndroid Build Coastguard Worker        any JFIF 1.02 extension markers.
1051*dfc6aa5cSAndroid Build Coastguard Worker
1052*dfc6aa5cSAndroid Build Coastguard WorkerUINT8 density_unit
1053*dfc6aa5cSAndroid Build Coastguard WorkerUINT16 X_density
1054*dfc6aa5cSAndroid Build Coastguard WorkerUINT16 Y_density
1055*dfc6aa5cSAndroid Build Coastguard Worker        The resolution information to be written into the JFIF marker;
1056*dfc6aa5cSAndroid Build Coastguard Worker        not used otherwise.  density_unit may be 0 for unknown,
1057*dfc6aa5cSAndroid Build Coastguard Worker        1 for dots/inch, or 2 for dots/cm.  The default values are 0,1,1
1058*dfc6aa5cSAndroid Build Coastguard Worker        indicating square pixels of unknown size.
1059*dfc6aa5cSAndroid Build Coastguard Worker
1060*dfc6aa5cSAndroid Build Coastguard Workerboolean write_Adobe_marker
1061*dfc6aa5cSAndroid Build Coastguard Worker        If TRUE, an Adobe APP14 marker is emitted.  jpeg_set_defaults() and
1062*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_set_colorspace() set this TRUE if JPEG color space RGB, CMYK,
1063*dfc6aa5cSAndroid Build Coastguard Worker        or YCCK is selected, otherwise FALSE.  It is generally a bad idea
1064*dfc6aa5cSAndroid Build Coastguard Worker        to set both write_JFIF_header and write_Adobe_marker.  In fact,
1065*dfc6aa5cSAndroid Build Coastguard Worker        you probably shouldn't change the default settings at all --- the
1066*dfc6aa5cSAndroid Build Coastguard Worker        default behavior ensures that the JPEG file's color space can be
1067*dfc6aa5cSAndroid Build Coastguard Worker        recognized by the decoder.
1068*dfc6aa5cSAndroid Build Coastguard Worker
1069*dfc6aa5cSAndroid Build Coastguard WorkerJQUANT_TBL *quant_tbl_ptrs[NUM_QUANT_TBLS]
1070*dfc6aa5cSAndroid Build Coastguard Worker        Pointers to coefficient quantization tables, one per table slot,
1071*dfc6aa5cSAndroid Build Coastguard Worker        or NULL if no table is defined for a slot.  Usually these should
1072*dfc6aa5cSAndroid Build Coastguard Worker        be set via one of the above helper routines; jpeg_add_quant_table()
1073*dfc6aa5cSAndroid Build Coastguard Worker        is general enough to define any quantization table.  The other
1074*dfc6aa5cSAndroid Build Coastguard Worker        routines will set up table slot 0 for luminance quality and table
1075*dfc6aa5cSAndroid Build Coastguard Worker        slot 1 for chrominance.
1076*dfc6aa5cSAndroid Build Coastguard Worker
1077*dfc6aa5cSAndroid Build Coastguard Workerint q_scale_factor[NUM_QUANT_TBLS]
1078*dfc6aa5cSAndroid Build Coastguard Worker        [libjpeg v7+ API/ABI emulation only]
1079*dfc6aa5cSAndroid Build Coastguard Worker        Linear quantization scaling factors (0-100, default 100)
1080*dfc6aa5cSAndroid Build Coastguard Worker        for use with jpeg_default_qtables().
1081*dfc6aa5cSAndroid Build Coastguard Worker        See rdswitch.c and cjpeg.c for an example of usage.
1082*dfc6aa5cSAndroid Build Coastguard Worker        Note that the q_scale_factor[] values use "linear" scales, so JPEG
1083*dfc6aa5cSAndroid Build Coastguard Worker        quality levels chosen by the user must be converted to these scales
1084*dfc6aa5cSAndroid Build Coastguard Worker        using jpeg_quality_scaling().  Here is an example that corresponds to
1085*dfc6aa5cSAndroid Build Coastguard Worker        cjpeg -quality 90,70:
1086*dfc6aa5cSAndroid Build Coastguard Worker
1087*dfc6aa5cSAndroid Build Coastguard Worker                jpeg_set_defaults(cinfo);
1088*dfc6aa5cSAndroid Build Coastguard Worker
1089*dfc6aa5cSAndroid Build Coastguard Worker                /* Set luminance quality 90. */
1090*dfc6aa5cSAndroid Build Coastguard Worker                cinfo->q_scale_factor[0] = jpeg_quality_scaling(90);
1091*dfc6aa5cSAndroid Build Coastguard Worker                /* Set chrominance quality 70. */
1092*dfc6aa5cSAndroid Build Coastguard Worker                cinfo->q_scale_factor[1] = jpeg_quality_scaling(70);
1093*dfc6aa5cSAndroid Build Coastguard Worker
1094*dfc6aa5cSAndroid Build Coastguard Worker                jpeg_default_qtables(cinfo, force_baseline);
1095*dfc6aa5cSAndroid Build Coastguard Worker
1096*dfc6aa5cSAndroid Build Coastguard Worker        CAUTION: Setting separate quality levels for chrominance and luminance
1097*dfc6aa5cSAndroid Build Coastguard Worker        is mainly only useful if chrominance subsampling is disabled.  2x2
1098*dfc6aa5cSAndroid Build Coastguard Worker        chrominance subsampling (AKA "4:2:0") is the default, but you can
1099*dfc6aa5cSAndroid Build Coastguard Worker        explicitly disable subsampling as follows:
1100*dfc6aa5cSAndroid Build Coastguard Worker
1101*dfc6aa5cSAndroid Build Coastguard Worker                cinfo->comp_info[0].v_samp_factor = 1;
1102*dfc6aa5cSAndroid Build Coastguard Worker                cinfo->comp_info[0].h_samp_factor = 1;
1103*dfc6aa5cSAndroid Build Coastguard Worker
1104*dfc6aa5cSAndroid Build Coastguard WorkerJHUFF_TBL *dc_huff_tbl_ptrs[NUM_HUFF_TBLS]
1105*dfc6aa5cSAndroid Build Coastguard WorkerJHUFF_TBL *ac_huff_tbl_ptrs[NUM_HUFF_TBLS]
1106*dfc6aa5cSAndroid Build Coastguard Worker        Pointers to Huffman coding tables, one per table slot, or NULL if
1107*dfc6aa5cSAndroid Build Coastguard Worker        no table is defined for a slot.  Slots 0 and 1 are filled with the
1108*dfc6aa5cSAndroid Build Coastguard Worker        JPEG sample tables by jpeg_set_defaults().  If you need to allocate
1109*dfc6aa5cSAndroid Build Coastguard Worker        more table structures, jpeg_alloc_huff_table() may be used.
1110*dfc6aa5cSAndroid Build Coastguard Worker        Note that optimal Huffman tables can be computed for an image
1111*dfc6aa5cSAndroid Build Coastguard Worker        by setting optimize_coding, as discussed above; there's seldom
1112*dfc6aa5cSAndroid Build Coastguard Worker        any need to mess with providing your own Huffman tables.
1113*dfc6aa5cSAndroid Build Coastguard Worker
1114*dfc6aa5cSAndroid Build Coastguard Worker
1115*dfc6aa5cSAndroid Build Coastguard Worker[libjpeg v7+ API/ABI emulation only]
1116*dfc6aa5cSAndroid Build Coastguard WorkerThe actual dimensions of the JPEG image that will be written to the file are
1117*dfc6aa5cSAndroid Build Coastguard Workergiven by the following fields.  These are computed from the input image
1118*dfc6aa5cSAndroid Build Coastguard Workerdimensions and the compression parameters by jpeg_start_compress().  You can
1119*dfc6aa5cSAndroid Build Coastguard Workeralso call jpeg_calc_jpeg_dimensions() to obtain the values that will result
1120*dfc6aa5cSAndroid Build Coastguard Workerfrom the current parameter settings.  This can be useful if you are trying
1121*dfc6aa5cSAndroid Build Coastguard Workerto pick a scaling ratio that will get close to a desired target size.
1122*dfc6aa5cSAndroid Build Coastguard Worker
1123*dfc6aa5cSAndroid Build Coastguard WorkerJDIMENSION jpeg_width           Actual dimensions of output image.
1124*dfc6aa5cSAndroid Build Coastguard WorkerJDIMENSION jpeg_height
1125*dfc6aa5cSAndroid Build Coastguard Worker
1126*dfc6aa5cSAndroid Build Coastguard Worker
1127*dfc6aa5cSAndroid Build Coastguard WorkerPer-component parameters are stored in the struct cinfo.comp_info[i] for
1128*dfc6aa5cSAndroid Build Coastguard Workercomponent number i.  Note that components here refer to components of the
1129*dfc6aa5cSAndroid Build Coastguard WorkerJPEG color space, *not* the source image color space.  A suitably large
1130*dfc6aa5cSAndroid Build Coastguard Workercomp_info[] array is allocated by jpeg_set_defaults(); if you choose not
1131*dfc6aa5cSAndroid Build Coastguard Workerto use that routine, it's up to you to allocate the array.
1132*dfc6aa5cSAndroid Build Coastguard Worker
1133*dfc6aa5cSAndroid Build Coastguard Workerint component_id
1134*dfc6aa5cSAndroid Build Coastguard Worker        The one-byte identifier code to be recorded in the JPEG file for
1135*dfc6aa5cSAndroid Build Coastguard Worker        this component.  For the standard color spaces, we recommend you
1136*dfc6aa5cSAndroid Build Coastguard Worker        leave the default values alone.
1137*dfc6aa5cSAndroid Build Coastguard Worker
1138*dfc6aa5cSAndroid Build Coastguard Workerint h_samp_factor
1139*dfc6aa5cSAndroid Build Coastguard Workerint v_samp_factor
1140*dfc6aa5cSAndroid Build Coastguard Worker        Horizontal and vertical sampling factors for the component; must
1141*dfc6aa5cSAndroid Build Coastguard Worker        be 1..4 according to the JPEG standard.  Note that larger sampling
1142*dfc6aa5cSAndroid Build Coastguard Worker        factors indicate a higher-resolution component; many people find
1143*dfc6aa5cSAndroid Build Coastguard Worker        this behavior quite unintuitive.  The default values are 2,2 for
1144*dfc6aa5cSAndroid Build Coastguard Worker        luminance components and 1,1 for chrominance components, except
1145*dfc6aa5cSAndroid Build Coastguard Worker        for grayscale where 1,1 is used.
1146*dfc6aa5cSAndroid Build Coastguard Worker
1147*dfc6aa5cSAndroid Build Coastguard Workerint quant_tbl_no
1148*dfc6aa5cSAndroid Build Coastguard Worker        Quantization table number for component.  The default value is
1149*dfc6aa5cSAndroid Build Coastguard Worker        0 for luminance components and 1 for chrominance components.
1150*dfc6aa5cSAndroid Build Coastguard Worker
1151*dfc6aa5cSAndroid Build Coastguard Workerint dc_tbl_no
1152*dfc6aa5cSAndroid Build Coastguard Workerint ac_tbl_no
1153*dfc6aa5cSAndroid Build Coastguard Worker        DC and AC entropy coding table numbers.  The default values are
1154*dfc6aa5cSAndroid Build Coastguard Worker        0 for luminance components and 1 for chrominance components.
1155*dfc6aa5cSAndroid Build Coastguard Worker
1156*dfc6aa5cSAndroid Build Coastguard Workerint component_index
1157*dfc6aa5cSAndroid Build Coastguard Worker        Must equal the component's index in comp_info[].  (Beginning in
1158*dfc6aa5cSAndroid Build Coastguard Worker        release v6, the compressor library will fill this in automatically;
1159*dfc6aa5cSAndroid Build Coastguard Worker        you don't have to.)
1160*dfc6aa5cSAndroid Build Coastguard Worker
1161*dfc6aa5cSAndroid Build Coastguard Worker
1162*dfc6aa5cSAndroid Build Coastguard WorkerDecompression parameter selection
1163*dfc6aa5cSAndroid Build Coastguard Worker---------------------------------
1164*dfc6aa5cSAndroid Build Coastguard Worker
1165*dfc6aa5cSAndroid Build Coastguard WorkerDecompression parameter selection is somewhat simpler than compression
1166*dfc6aa5cSAndroid Build Coastguard Workerparameter selection, since all of the JPEG internal parameters are
1167*dfc6aa5cSAndroid Build Coastguard Workerrecorded in the source file and need not be supplied by the application.
1168*dfc6aa5cSAndroid Build Coastguard Worker(Unless you are working with abbreviated files, in which case see
1169*dfc6aa5cSAndroid Build Coastguard Worker"Abbreviated datastreams", below.)  Decompression parameters control
1170*dfc6aa5cSAndroid Build Coastguard Workerthe postprocessing done on the image to deliver it in a format suitable
1171*dfc6aa5cSAndroid Build Coastguard Workerfor the application's use.  Many of the parameters control speed/quality
1172*dfc6aa5cSAndroid Build Coastguard Workertradeoffs, in which faster decompression may be obtained at the price of
1173*dfc6aa5cSAndroid Build Coastguard Workera poorer-quality image.  The defaults select the highest quality (slowest)
1174*dfc6aa5cSAndroid Build Coastguard Workerprocessing.
1175*dfc6aa5cSAndroid Build Coastguard Worker
1176*dfc6aa5cSAndroid Build Coastguard WorkerThe following fields in the JPEG object are set by jpeg_read_header() and
1177*dfc6aa5cSAndroid Build Coastguard Workermay be useful to the application in choosing decompression parameters:
1178*dfc6aa5cSAndroid Build Coastguard Worker
1179*dfc6aa5cSAndroid Build Coastguard WorkerJDIMENSION image_width                  Width and height of image
1180*dfc6aa5cSAndroid Build Coastguard WorkerJDIMENSION image_height
1181*dfc6aa5cSAndroid Build Coastguard Workerint num_components                      Number of color components
1182*dfc6aa5cSAndroid Build Coastguard WorkerJ_COLOR_SPACE jpeg_color_space          Colorspace of image
1183*dfc6aa5cSAndroid Build Coastguard Workerboolean saw_JFIF_marker                 TRUE if a JFIF APP0 marker was seen
1184*dfc6aa5cSAndroid Build Coastguard Worker  UINT8 JFIF_major_version              Version information from JFIF marker
1185*dfc6aa5cSAndroid Build Coastguard Worker  UINT8 JFIF_minor_version
1186*dfc6aa5cSAndroid Build Coastguard Worker  UINT8 density_unit                    Resolution data from JFIF marker
1187*dfc6aa5cSAndroid Build Coastguard Worker  UINT16 X_density
1188*dfc6aa5cSAndroid Build Coastguard Worker  UINT16 Y_density
1189*dfc6aa5cSAndroid Build Coastguard Workerboolean saw_Adobe_marker                TRUE if an Adobe APP14 marker was seen
1190*dfc6aa5cSAndroid Build Coastguard Worker  UINT8 Adobe_transform                 Color transform code from Adobe marker
1191*dfc6aa5cSAndroid Build Coastguard Worker
1192*dfc6aa5cSAndroid Build Coastguard WorkerThe JPEG color space, unfortunately, is something of a guess since the JPEG
1193*dfc6aa5cSAndroid Build Coastguard Workerstandard proper does not provide a way to record it.  In practice most files
1194*dfc6aa5cSAndroid Build Coastguard Workeradhere to the JFIF or Adobe conventions, and the decoder will recognize these
1195*dfc6aa5cSAndroid Build Coastguard Workercorrectly.  See "Special color spaces", below, for more info.
1196*dfc6aa5cSAndroid Build Coastguard Worker
1197*dfc6aa5cSAndroid Build Coastguard Worker
1198*dfc6aa5cSAndroid Build Coastguard WorkerThe decompression parameters that determine the basic properties of the
1199*dfc6aa5cSAndroid Build Coastguard Workerreturned image are:
1200*dfc6aa5cSAndroid Build Coastguard Worker
1201*dfc6aa5cSAndroid Build Coastguard WorkerJ_COLOR_SPACE out_color_space
1202*dfc6aa5cSAndroid Build Coastguard Worker        Output color space.  jpeg_read_header() sets an appropriate default
1203*dfc6aa5cSAndroid Build Coastguard Worker        based on jpeg_color_space; typically it will be RGB or grayscale.
1204*dfc6aa5cSAndroid Build Coastguard Worker        The application can change this field to request output in a different
1205*dfc6aa5cSAndroid Build Coastguard Worker        colorspace.  For example, set it to JCS_GRAYSCALE to get grayscale
1206*dfc6aa5cSAndroid Build Coastguard Worker        output from a color file.  (This is useful for previewing: grayscale
1207*dfc6aa5cSAndroid Build Coastguard Worker        output is faster than full color since the color components need not
1208*dfc6aa5cSAndroid Build Coastguard Worker        be processed.)  Note that not all possible color space transforms are
1209*dfc6aa5cSAndroid Build Coastguard Worker        currently implemented; you may need to extend jdcolor.c if you want an
1210*dfc6aa5cSAndroid Build Coastguard Worker        unusual conversion.
1211*dfc6aa5cSAndroid Build Coastguard Worker
1212*dfc6aa5cSAndroid Build Coastguard Workerunsigned int scale_num, scale_denom
1213*dfc6aa5cSAndroid Build Coastguard Worker        Scale the image by the fraction scale_num/scale_denom.  Default is
1214*dfc6aa5cSAndroid Build Coastguard Worker        1/1, or no scaling.  Currently, the only supported scaling ratios
1215*dfc6aa5cSAndroid Build Coastguard Worker        are M/8 with all M from 1 to 16, or any reduced fraction thereof (such
1216*dfc6aa5cSAndroid Build Coastguard Worker        as 1/2, 3/4, etc.)  (The library design allows for arbitrary
1217*dfc6aa5cSAndroid Build Coastguard Worker        scaling ratios but this is not likely to be implemented any time soon.)
1218*dfc6aa5cSAndroid Build Coastguard Worker        Smaller scaling ratios permit significantly faster decoding since
1219*dfc6aa5cSAndroid Build Coastguard Worker        fewer pixels need be processed and a simpler IDCT method can be used.
1220*dfc6aa5cSAndroid Build Coastguard Worker
1221*dfc6aa5cSAndroid Build Coastguard Workerboolean quantize_colors
1222*dfc6aa5cSAndroid Build Coastguard Worker        If set TRUE, colormapped output will be delivered.  Default is FALSE,
1223*dfc6aa5cSAndroid Build Coastguard Worker        meaning that full-color output will be delivered.
1224*dfc6aa5cSAndroid Build Coastguard Worker
1225*dfc6aa5cSAndroid Build Coastguard WorkerThe next three parameters are relevant only if quantize_colors is TRUE.
1226*dfc6aa5cSAndroid Build Coastguard Worker
1227*dfc6aa5cSAndroid Build Coastguard Workerint desired_number_of_colors
1228*dfc6aa5cSAndroid Build Coastguard Worker        Maximum number of colors to use in generating a library-supplied color
1229*dfc6aa5cSAndroid Build Coastguard Worker        map (the actual number of colors is returned in a different field).
1230*dfc6aa5cSAndroid Build Coastguard Worker        Default 256.  Ignored when the application supplies its own color map.
1231*dfc6aa5cSAndroid Build Coastguard Worker
1232*dfc6aa5cSAndroid Build Coastguard Workerboolean two_pass_quantize
1233*dfc6aa5cSAndroid Build Coastguard Worker        If TRUE, an extra pass over the image is made to select a custom color
1234*dfc6aa5cSAndroid Build Coastguard Worker        map for the image.  This usually looks a lot better than the one-size-
1235*dfc6aa5cSAndroid Build Coastguard Worker        fits-all colormap that is used otherwise.  Default is TRUE.  Ignored
1236*dfc6aa5cSAndroid Build Coastguard Worker        when the application supplies its own color map.
1237*dfc6aa5cSAndroid Build Coastguard Worker
1238*dfc6aa5cSAndroid Build Coastguard WorkerJ_DITHER_MODE dither_mode
1239*dfc6aa5cSAndroid Build Coastguard Worker        Selects color dithering method.  Supported values are:
1240*dfc6aa5cSAndroid Build Coastguard Worker                JDITHER_NONE    no dithering: fast, very low quality
1241*dfc6aa5cSAndroid Build Coastguard Worker                JDITHER_ORDERED ordered dither: moderate speed and quality
1242*dfc6aa5cSAndroid Build Coastguard Worker                JDITHER_FS      Floyd-Steinberg dither: slow, high quality
1243*dfc6aa5cSAndroid Build Coastguard Worker        Default is JDITHER_FS.  (At present, ordered dither is implemented
1244*dfc6aa5cSAndroid Build Coastguard Worker        only in the single-pass, standard-colormap case.  If you ask for
1245*dfc6aa5cSAndroid Build Coastguard Worker        ordered dither when two_pass_quantize is TRUE or when you supply
1246*dfc6aa5cSAndroid Build Coastguard Worker        an external color map, you'll get F-S dithering.)
1247*dfc6aa5cSAndroid Build Coastguard Worker
1248*dfc6aa5cSAndroid Build Coastguard WorkerWhen quantize_colors is TRUE, the target color map is described by the next
1249*dfc6aa5cSAndroid Build Coastguard Workertwo fields.  colormap is set to NULL by jpeg_read_header().  The application
1250*dfc6aa5cSAndroid Build Coastguard Workercan supply a color map by setting colormap non-NULL and setting
1251*dfc6aa5cSAndroid Build Coastguard Workeractual_number_of_colors to the map size.  Otherwise, jpeg_start_decompress()
1252*dfc6aa5cSAndroid Build Coastguard Workerselects a suitable color map and sets these two fields itself.
1253*dfc6aa5cSAndroid Build Coastguard Worker[Implementation restriction: at present, an externally supplied colormap is
1254*dfc6aa5cSAndroid Build Coastguard Workeronly accepted for 3-component output color spaces.]
1255*dfc6aa5cSAndroid Build Coastguard Worker
1256*dfc6aa5cSAndroid Build Coastguard WorkerJSAMPARRAY colormap
1257*dfc6aa5cSAndroid Build Coastguard Worker        The color map, represented as a 2-D pixel array of out_color_components
1258*dfc6aa5cSAndroid Build Coastguard Worker        rows and actual_number_of_colors columns.  Ignored if not quantizing.
1259*dfc6aa5cSAndroid Build Coastguard Worker        CAUTION: if the JPEG library creates its own colormap, the storage
1260*dfc6aa5cSAndroid Build Coastguard Worker        pointed to by this field is released by jpeg_finish_decompress().
1261*dfc6aa5cSAndroid Build Coastguard Worker        Copy the colormap somewhere else first, if you want to save it.
1262*dfc6aa5cSAndroid Build Coastguard Worker
1263*dfc6aa5cSAndroid Build Coastguard Workerint actual_number_of_colors
1264*dfc6aa5cSAndroid Build Coastguard Worker        The number of colors in the color map.
1265*dfc6aa5cSAndroid Build Coastguard Worker
1266*dfc6aa5cSAndroid Build Coastguard WorkerAdditional decompression parameters that the application may set include:
1267*dfc6aa5cSAndroid Build Coastguard Worker
1268*dfc6aa5cSAndroid Build Coastguard WorkerJ_DCT_METHOD dct_method
1269*dfc6aa5cSAndroid Build Coastguard Worker        Selects the algorithm used for the DCT step.  Choices are:
1270*dfc6aa5cSAndroid Build Coastguard Worker                JDCT_ISLOW: accurate integer method
1271*dfc6aa5cSAndroid Build Coastguard Worker                JDCT_IFAST: less accurate integer method [legacy feature]
1272*dfc6aa5cSAndroid Build Coastguard Worker                JDCT_FLOAT: floating-point method [legacy feature]
1273*dfc6aa5cSAndroid Build Coastguard Worker                JDCT_DEFAULT: default method (normally JDCT_ISLOW)
1274*dfc6aa5cSAndroid Build Coastguard Worker                JDCT_FASTEST: fastest method (normally JDCT_IFAST)
1275*dfc6aa5cSAndroid Build Coastguard Worker        When the Independent JPEG Group's software was first released in 1991,
1276*dfc6aa5cSAndroid Build Coastguard Worker        the decompression time for a 1-megapixel JPEG image on a mainstream PC
1277*dfc6aa5cSAndroid Build Coastguard Worker        was measured in minutes.  Thus, JDCT_IFAST provided noticeable
1278*dfc6aa5cSAndroid Build Coastguard Worker        performance benefits.  On modern CPUs running libjpeg-turbo, however,
1279*dfc6aa5cSAndroid Build Coastguard Worker        the decompression time for a 1-megapixel JPEG image is measured in
1280*dfc6aa5cSAndroid Build Coastguard Worker        milliseconds, and thus the performance benefits of JDCT_IFAST are much
1281*dfc6aa5cSAndroid Build Coastguard Worker        less noticeable.  On modern x86/x86-64 CPUs that support AVX2
1282*dfc6aa5cSAndroid Build Coastguard Worker        instructions, JDCT_IFAST and JDCT_ISLOW have similar performance.  On
1283*dfc6aa5cSAndroid Build Coastguard Worker        other types of CPUs, JDCT_IFAST is generally about 5-15% faster than
1284*dfc6aa5cSAndroid Build Coastguard Worker        JDCT_ISLOW.
1285*dfc6aa5cSAndroid Build Coastguard Worker
1286*dfc6aa5cSAndroid Build Coastguard Worker        If the JPEG image was compressed using a quality level of 85 or below,
1287*dfc6aa5cSAndroid Build Coastguard Worker        then there should be little or no perceptible quality difference
1288*dfc6aa5cSAndroid Build Coastguard Worker        between the two algorithms.  When decompressing images that were
1289*dfc6aa5cSAndroid Build Coastguard Worker        compressed using quality levels above 85, however, the difference
1290*dfc6aa5cSAndroid Build Coastguard Worker        between JDCT_IFAST and JDCT_ISLOW becomes more pronounced.  With images
1291*dfc6aa5cSAndroid Build Coastguard Worker        compressed using quality=97, for instance, JDCT_IFAST incurs generally
1292*dfc6aa5cSAndroid Build Coastguard Worker        about a 4-6 dB loss in PSNR relative to JDCT_ISLOW, but this can be
1293*dfc6aa5cSAndroid Build Coastguard Worker        larger for some images.  If you can avoid it, do not use JDCT_IFAST
1294*dfc6aa5cSAndroid Build Coastguard Worker        when decompressing images that were compressed using quality levels
1295*dfc6aa5cSAndroid Build Coastguard Worker        above 97.  The algorithm often degenerates for such images and can
1296*dfc6aa5cSAndroid Build Coastguard Worker        actually produce a more lossy output image than if the JPEG image had
1297*dfc6aa5cSAndroid Build Coastguard Worker        been compressed using lower quality levels.
1298*dfc6aa5cSAndroid Build Coastguard Worker
1299*dfc6aa5cSAndroid Build Coastguard Worker        JDCT_FLOAT does not produce significantly more accurate results than
1300*dfc6aa5cSAndroid Build Coastguard Worker        JDCT_ISLOW, and it is much slower.  JDCT_FLOAT may also give different
1301*dfc6aa5cSAndroid Build Coastguard Worker        results on different machines due to varying roundoff behavior, whereas
1302*dfc6aa5cSAndroid Build Coastguard Worker        the integer methods should give the same results on all machines.
1303*dfc6aa5cSAndroid Build Coastguard Worker
1304*dfc6aa5cSAndroid Build Coastguard Workerboolean do_fancy_upsampling
1305*dfc6aa5cSAndroid Build Coastguard Worker        If TRUE, do careful upsampling of chroma components.  If FALSE,
1306*dfc6aa5cSAndroid Build Coastguard Worker        a faster but sloppier method is used.  Default is TRUE.  The visual
1307*dfc6aa5cSAndroid Build Coastguard Worker        impact of the sloppier method is often very small.
1308*dfc6aa5cSAndroid Build Coastguard Worker
1309*dfc6aa5cSAndroid Build Coastguard Workerboolean do_block_smoothing
1310*dfc6aa5cSAndroid Build Coastguard Worker        If TRUE, interblock smoothing is applied in early stages of decoding
1311*dfc6aa5cSAndroid Build Coastguard Worker        progressive JPEG files; if FALSE, not.  Default is TRUE.  Early
1312*dfc6aa5cSAndroid Build Coastguard Worker        progression stages look "fuzzy" with smoothing, "blocky" without.
1313*dfc6aa5cSAndroid Build Coastguard Worker        In any case, block smoothing ceases to be applied after the first few
1314*dfc6aa5cSAndroid Build Coastguard Worker        AC coefficients are known to full accuracy, so it is relevant only
1315*dfc6aa5cSAndroid Build Coastguard Worker        when using buffered-image mode for progressive images.
1316*dfc6aa5cSAndroid Build Coastguard Worker
1317*dfc6aa5cSAndroid Build Coastguard Workerboolean enable_1pass_quant
1318*dfc6aa5cSAndroid Build Coastguard Workerboolean enable_external_quant
1319*dfc6aa5cSAndroid Build Coastguard Workerboolean enable_2pass_quant
1320*dfc6aa5cSAndroid Build Coastguard Worker        These are significant only in buffered-image mode, which is
1321*dfc6aa5cSAndroid Build Coastguard Worker        described in its own section below.
1322*dfc6aa5cSAndroid Build Coastguard Worker
1323*dfc6aa5cSAndroid Build Coastguard Worker
1324*dfc6aa5cSAndroid Build Coastguard WorkerThe output image dimensions are given by the following fields.  These are
1325*dfc6aa5cSAndroid Build Coastguard Workercomputed from the source image dimensions and the decompression parameters
1326*dfc6aa5cSAndroid Build Coastguard Workerby jpeg_start_decompress().  You can also call jpeg_calc_output_dimensions()
1327*dfc6aa5cSAndroid Build Coastguard Workerto obtain the values that will result from the current parameter settings.
1328*dfc6aa5cSAndroid Build Coastguard WorkerThis can be useful if you are trying to pick a scaling ratio that will get
1329*dfc6aa5cSAndroid Build Coastguard Workerclose to a desired target size.  It's also important if you are using the
1330*dfc6aa5cSAndroid Build Coastguard WorkerJPEG library's memory manager to allocate output buffer space, because you
1331*dfc6aa5cSAndroid Build Coastguard Workerare supposed to request such buffers *before* jpeg_start_decompress().
1332*dfc6aa5cSAndroid Build Coastguard Worker
1333*dfc6aa5cSAndroid Build Coastguard WorkerJDIMENSION output_width         Actual dimensions of output image.
1334*dfc6aa5cSAndroid Build Coastguard WorkerJDIMENSION output_height
1335*dfc6aa5cSAndroid Build Coastguard Workerint out_color_components        Number of color components in out_color_space.
1336*dfc6aa5cSAndroid Build Coastguard Workerint output_components           Number of color components returned.
1337*dfc6aa5cSAndroid Build Coastguard Workerint rec_outbuf_height           Recommended height of scanline buffer.
1338*dfc6aa5cSAndroid Build Coastguard Worker
1339*dfc6aa5cSAndroid Build Coastguard WorkerWhen quantizing colors, output_components is 1, indicating a single color map
1340*dfc6aa5cSAndroid Build Coastguard Workerindex per pixel.  Otherwise it equals out_color_components.  The output arrays
1341*dfc6aa5cSAndroid Build Coastguard Workerare required to be output_width * output_components JSAMPLEs wide.
1342*dfc6aa5cSAndroid Build Coastguard Worker
1343*dfc6aa5cSAndroid Build Coastguard Workerrec_outbuf_height is the recommended minimum height (in scanlines) of the
1344*dfc6aa5cSAndroid Build Coastguard Workerbuffer passed to jpeg_read_scanlines().  If the buffer is smaller, the
1345*dfc6aa5cSAndroid Build Coastguard Workerlibrary will still work, but time will be wasted due to unnecessary data
1346*dfc6aa5cSAndroid Build Coastguard Workercopying.  In high-quality modes, rec_outbuf_height is always 1, but some
1347*dfc6aa5cSAndroid Build Coastguard Workerfaster, lower-quality modes set it to larger values (typically 2 to 4).
1348*dfc6aa5cSAndroid Build Coastguard WorkerIf you are going to ask for a high-speed processing mode, you may as well
1349*dfc6aa5cSAndroid Build Coastguard Workergo to the trouble of honoring rec_outbuf_height so as to avoid data copying.
1350*dfc6aa5cSAndroid Build Coastguard Worker(An output buffer larger than rec_outbuf_height lines is OK, but won't
1351*dfc6aa5cSAndroid Build Coastguard Workerprovide any material speed improvement over that height.)
1352*dfc6aa5cSAndroid Build Coastguard Worker
1353*dfc6aa5cSAndroid Build Coastguard Worker
1354*dfc6aa5cSAndroid Build Coastguard WorkerSpecial color spaces
1355*dfc6aa5cSAndroid Build Coastguard Worker--------------------
1356*dfc6aa5cSAndroid Build Coastguard Worker
1357*dfc6aa5cSAndroid Build Coastguard WorkerThe JPEG standard itself is "color blind" and doesn't specify any particular
1358*dfc6aa5cSAndroid Build Coastguard Workercolor space.  It is customary to convert color data to a luminance/chrominance
1359*dfc6aa5cSAndroid Build Coastguard Workercolor space before compressing, since this permits greater compression.  The
1360*dfc6aa5cSAndroid Build Coastguard Workerexisting de-facto JPEG file format standards specify YCbCr or grayscale data
1361*dfc6aa5cSAndroid Build Coastguard Worker(JFIF), or grayscale, RGB, YCbCr, CMYK, or YCCK (Adobe).  For special
1362*dfc6aa5cSAndroid Build Coastguard Workerapplications such as multispectral images, other color spaces can be used,
1363*dfc6aa5cSAndroid Build Coastguard Workerbut it must be understood that such files will be unportable.
1364*dfc6aa5cSAndroid Build Coastguard Worker
1365*dfc6aa5cSAndroid Build Coastguard WorkerThe JPEG library can handle the most common colorspace conversions (namely
1366*dfc6aa5cSAndroid Build Coastguard WorkerRGB <=> YCbCr and CMYK <=> YCCK).  It can also deal with data of an unknown
1367*dfc6aa5cSAndroid Build Coastguard Workercolor space, passing it through without conversion.  If you deal extensively
1368*dfc6aa5cSAndroid Build Coastguard Workerwith an unusual color space, you can easily extend the library to understand
1369*dfc6aa5cSAndroid Build Coastguard Workeradditional color spaces and perform appropriate conversions.
1370*dfc6aa5cSAndroid Build Coastguard Worker
1371*dfc6aa5cSAndroid Build Coastguard WorkerFor compression, the source data's color space is specified by field
1372*dfc6aa5cSAndroid Build Coastguard Workerin_color_space.  This is transformed to the JPEG file's color space given
1373*dfc6aa5cSAndroid Build Coastguard Workerby jpeg_color_space.  jpeg_set_defaults() chooses a reasonable JPEG color
1374*dfc6aa5cSAndroid Build Coastguard Workerspace depending on in_color_space, but you can override this by calling
1375*dfc6aa5cSAndroid Build Coastguard Workerjpeg_set_colorspace().  Of course you must select a supported transformation.
1376*dfc6aa5cSAndroid Build Coastguard Workerjccolor.c currently supports the following transformations:
1377*dfc6aa5cSAndroid Build Coastguard Worker        RGB => YCbCr
1378*dfc6aa5cSAndroid Build Coastguard Worker        RGB => GRAYSCALE
1379*dfc6aa5cSAndroid Build Coastguard Worker        YCbCr => GRAYSCALE
1380*dfc6aa5cSAndroid Build Coastguard Worker        CMYK => YCCK
1381*dfc6aa5cSAndroid Build Coastguard Workerplus the null transforms: GRAYSCALE => GRAYSCALE, RGB => RGB,
1382*dfc6aa5cSAndroid Build Coastguard WorkerYCbCr => YCbCr, CMYK => CMYK, YCCK => YCCK, and UNKNOWN => UNKNOWN.
1383*dfc6aa5cSAndroid Build Coastguard Worker
1384*dfc6aa5cSAndroid Build Coastguard WorkerThe de-facto file format standards (JFIF and Adobe) specify APPn markers that
1385*dfc6aa5cSAndroid Build Coastguard Workerindicate the color space of the JPEG file.  It is important to ensure that
1386*dfc6aa5cSAndroid Build Coastguard Workerthese are written correctly, or omitted if the JPEG file's color space is not
1387*dfc6aa5cSAndroid Build Coastguard Workerone of the ones supported by the de-facto standards.  jpeg_set_colorspace()
1388*dfc6aa5cSAndroid Build Coastguard Workerwill set the compression parameters to include or omit the APPn markers
1389*dfc6aa5cSAndroid Build Coastguard Workerproperly, so long as it is told the truth about the JPEG color space.
1390*dfc6aa5cSAndroid Build Coastguard WorkerFor example, if you are writing some random 3-component color space without
1391*dfc6aa5cSAndroid Build Coastguard Workerconversion, don't try to fake out the library by setting in_color_space and
1392*dfc6aa5cSAndroid Build Coastguard Workerjpeg_color_space to JCS_YCbCr; use JCS_UNKNOWN.  You may want to write an
1393*dfc6aa5cSAndroid Build Coastguard WorkerAPPn marker of your own devising to identify the colorspace --- see "Special
1394*dfc6aa5cSAndroid Build Coastguard Workermarkers", below.
1395*dfc6aa5cSAndroid Build Coastguard Worker
1396*dfc6aa5cSAndroid Build Coastguard WorkerWhen told that the color space is UNKNOWN, the library will default to using
1397*dfc6aa5cSAndroid Build Coastguard Workerluminance-quality compression parameters for all color components.  You may
1398*dfc6aa5cSAndroid Build Coastguard Workerwell want to change these parameters.  See the source code for
1399*dfc6aa5cSAndroid Build Coastguard Workerjpeg_set_colorspace(), in jcparam.c, for details.
1400*dfc6aa5cSAndroid Build Coastguard Worker
1401*dfc6aa5cSAndroid Build Coastguard WorkerFor decompression, the JPEG file's color space is given in jpeg_color_space,
1402*dfc6aa5cSAndroid Build Coastguard Workerand this is transformed to the output color space out_color_space.
1403*dfc6aa5cSAndroid Build Coastguard Workerjpeg_read_header's setting of jpeg_color_space can be relied on if the file
1404*dfc6aa5cSAndroid Build Coastguard Workerconforms to JFIF or Adobe conventions, but otherwise it is no better than a
1405*dfc6aa5cSAndroid Build Coastguard Workerguess.  If you know the JPEG file's color space for certain, you can override
1406*dfc6aa5cSAndroid Build Coastguard Workerjpeg_read_header's guess by setting jpeg_color_space.  jpeg_read_header also
1407*dfc6aa5cSAndroid Build Coastguard Workerselects a default output color space based on (its guess of) jpeg_color_space;
1408*dfc6aa5cSAndroid Build Coastguard Workerset out_color_space to override this.  Again, you must select a supported
1409*dfc6aa5cSAndroid Build Coastguard Workertransformation.  jdcolor.c currently supports
1410*dfc6aa5cSAndroid Build Coastguard Worker        YCbCr => RGB
1411*dfc6aa5cSAndroid Build Coastguard Worker        YCbCr => GRAYSCALE
1412*dfc6aa5cSAndroid Build Coastguard Worker        RGB => GRAYSCALE
1413*dfc6aa5cSAndroid Build Coastguard Worker        GRAYSCALE => RGB
1414*dfc6aa5cSAndroid Build Coastguard Worker        YCCK => CMYK
1415*dfc6aa5cSAndroid Build Coastguard Workeras well as the null transforms.  (Since GRAYSCALE=>RGB is provided, an
1416*dfc6aa5cSAndroid Build Coastguard Workerapplication can force grayscale JPEGs to look like color JPEGs if it only
1417*dfc6aa5cSAndroid Build Coastguard Workerwants to handle one case.)
1418*dfc6aa5cSAndroid Build Coastguard Worker
1419*dfc6aa5cSAndroid Build Coastguard WorkerThe two-pass color quantizer, jquant2.c, is specialized to handle RGB data
1420*dfc6aa5cSAndroid Build Coastguard Worker(it weights distances appropriately for RGB colors).  You'll need to modify
1421*dfc6aa5cSAndroid Build Coastguard Workerthe code if you want to use it for non-RGB output color spaces.  Note that
1422*dfc6aa5cSAndroid Build Coastguard Workerjquant2.c is used to map to an application-supplied colormap as well as for
1423*dfc6aa5cSAndroid Build Coastguard Workerthe normal two-pass colormap selection process.
1424*dfc6aa5cSAndroid Build Coastguard Worker
1425*dfc6aa5cSAndroid Build Coastguard WorkerCAUTION: it appears that Adobe Photoshop writes inverted data in CMYK JPEG
1426*dfc6aa5cSAndroid Build Coastguard Workerfiles: 0 represents 100% ink coverage, rather than 0% ink as you'd expect.
1427*dfc6aa5cSAndroid Build Coastguard WorkerThis is arguably a bug in Photoshop, but if you need to work with Photoshop
1428*dfc6aa5cSAndroid Build Coastguard WorkerCMYK files, you will have to deal with it in your application.  We cannot
1429*dfc6aa5cSAndroid Build Coastguard Worker"fix" this in the library by inverting the data during the CMYK<=>YCCK
1430*dfc6aa5cSAndroid Build Coastguard Workertransform, because that would break other applications, notably Ghostscript.
1431*dfc6aa5cSAndroid Build Coastguard WorkerPhotoshop versions prior to 3.0 write EPS files containing JPEG-encoded CMYK
1432*dfc6aa5cSAndroid Build Coastguard Workerdata in the same inverted-YCCK representation used in bare JPEG files, but
1433*dfc6aa5cSAndroid Build Coastguard Workerthe surrounding PostScript code performs an inversion using the PS image
1434*dfc6aa5cSAndroid Build Coastguard Workeroperator.  I am told that Photoshop 3.0 will write uninverted YCCK in
1435*dfc6aa5cSAndroid Build Coastguard WorkerEPS/JPEG files, and will omit the PS-level inversion.  (But the data
1436*dfc6aa5cSAndroid Build Coastguard Workerpolarity used in bare JPEG files will not change in 3.0.)  In either case,
1437*dfc6aa5cSAndroid Build Coastguard Workerthe JPEG library must not invert the data itself, or else Ghostscript would
1438*dfc6aa5cSAndroid Build Coastguard Workerread these EPS files incorrectly.
1439*dfc6aa5cSAndroid Build Coastguard Worker
1440*dfc6aa5cSAndroid Build Coastguard Worker
1441*dfc6aa5cSAndroid Build Coastguard WorkerError handling
1442*dfc6aa5cSAndroid Build Coastguard Worker--------------
1443*dfc6aa5cSAndroid Build Coastguard Worker
1444*dfc6aa5cSAndroid Build Coastguard WorkerWhen the default error handler is used, any error detected inside the JPEG
1445*dfc6aa5cSAndroid Build Coastguard Workerroutines will cause a message to be printed on stderr, followed by exit().
1446*dfc6aa5cSAndroid Build Coastguard WorkerYou can supply your own error handling routines to override this behavior
1447*dfc6aa5cSAndroid Build Coastguard Workerand to control the treatment of nonfatal warnings and trace/debug messages.
1448*dfc6aa5cSAndroid Build Coastguard WorkerThe file example.txt illustrates the most common case, which is to have the
1449*dfc6aa5cSAndroid Build Coastguard Workerapplication regain control after an error rather than exiting.
1450*dfc6aa5cSAndroid Build Coastguard Worker
1451*dfc6aa5cSAndroid Build Coastguard WorkerThe JPEG library never writes any message directly; it always goes through
1452*dfc6aa5cSAndroid Build Coastguard Workerthe error handling routines.  Three classes of messages are recognized:
1453*dfc6aa5cSAndroid Build Coastguard Worker  * Fatal errors: the library cannot continue.
1454*dfc6aa5cSAndroid Build Coastguard Worker  * Warnings: the library can continue, but the data is corrupt, and a
1455*dfc6aa5cSAndroid Build Coastguard Worker    damaged output image is likely to result.
1456*dfc6aa5cSAndroid Build Coastguard Worker  * Trace/informational messages.  These come with a trace level indicating
1457*dfc6aa5cSAndroid Build Coastguard Worker    the importance of the message; you can control the verbosity of the
1458*dfc6aa5cSAndroid Build Coastguard Worker    program by adjusting the maximum trace level that will be displayed.
1459*dfc6aa5cSAndroid Build Coastguard Worker
1460*dfc6aa5cSAndroid Build Coastguard WorkerYou may, if you wish, simply replace the entire JPEG error handling module
1461*dfc6aa5cSAndroid Build Coastguard Worker(jerror.c) with your own code.  However, you can avoid code duplication by
1462*dfc6aa5cSAndroid Build Coastguard Workeronly replacing some of the routines depending on the behavior you need.
1463*dfc6aa5cSAndroid Build Coastguard WorkerThis is accomplished by calling jpeg_std_error() as usual, but then overriding
1464*dfc6aa5cSAndroid Build Coastguard Workersome of the method pointers in the jpeg_error_mgr struct, as illustrated by
1465*dfc6aa5cSAndroid Build Coastguard Workerexample.txt.
1466*dfc6aa5cSAndroid Build Coastguard Worker
1467*dfc6aa5cSAndroid Build Coastguard WorkerAll of the error handling routines will receive a pointer to the JPEG object
1468*dfc6aa5cSAndroid Build Coastguard Worker(a j_common_ptr which points to either a jpeg_compress_struct or a
1469*dfc6aa5cSAndroid Build Coastguard Workerjpeg_decompress_struct; if you need to tell which, test the is_decompressor
1470*dfc6aa5cSAndroid Build Coastguard Workerfield).  This struct includes a pointer to the error manager struct in its
1471*dfc6aa5cSAndroid Build Coastguard Worker"err" field.  Frequently, custom error handler routines will need to access
1472*dfc6aa5cSAndroid Build Coastguard Workeradditional data which is not known to the JPEG library or the standard error
1473*dfc6aa5cSAndroid Build Coastguard Workerhandler.  The most convenient way to do this is to embed either the JPEG
1474*dfc6aa5cSAndroid Build Coastguard Workerobject or the jpeg_error_mgr struct in a larger structure that contains
1475*dfc6aa5cSAndroid Build Coastguard Workeradditional fields; then casting the passed pointer provides access to the
1476*dfc6aa5cSAndroid Build Coastguard Workeradditional fields.  Again, see example.txt for one way to do it.  (Beginning
1477*dfc6aa5cSAndroid Build Coastguard Workerwith IJG version 6b, there is also a void pointer "client_data" in each
1478*dfc6aa5cSAndroid Build Coastguard WorkerJPEG object, which the application can also use to find related data.
1479*dfc6aa5cSAndroid Build Coastguard WorkerThe library does not touch client_data at all.)
1480*dfc6aa5cSAndroid Build Coastguard Worker
1481*dfc6aa5cSAndroid Build Coastguard WorkerThe individual methods that you might wish to override are:
1482*dfc6aa5cSAndroid Build Coastguard Worker
1483*dfc6aa5cSAndroid Build Coastguard Workererror_exit (j_common_ptr cinfo)
1484*dfc6aa5cSAndroid Build Coastguard Worker        Receives control for a fatal error.  Information sufficient to
1485*dfc6aa5cSAndroid Build Coastguard Worker        generate the error message has been stored in cinfo->err; call
1486*dfc6aa5cSAndroid Build Coastguard Worker        output_message to display it.  Control must NOT return to the caller;
1487*dfc6aa5cSAndroid Build Coastguard Worker        generally this routine will exit() or longjmp() somewhere.
1488*dfc6aa5cSAndroid Build Coastguard Worker        Typically you would override this routine to get rid of the exit()
1489*dfc6aa5cSAndroid Build Coastguard Worker        default behavior.  Note that if you continue processing, you should
1490*dfc6aa5cSAndroid Build Coastguard Worker        clean up the JPEG object with jpeg_abort() or jpeg_destroy().
1491*dfc6aa5cSAndroid Build Coastguard Worker
1492*dfc6aa5cSAndroid Build Coastguard Workeroutput_message (j_common_ptr cinfo)
1493*dfc6aa5cSAndroid Build Coastguard Worker        Actual output of any JPEG message.  Override this to send messages
1494*dfc6aa5cSAndroid Build Coastguard Worker        somewhere other than stderr.  Note that this method does not know
1495*dfc6aa5cSAndroid Build Coastguard Worker        how to generate a message, only where to send it.
1496*dfc6aa5cSAndroid Build Coastguard Worker
1497*dfc6aa5cSAndroid Build Coastguard Workerformat_message (j_common_ptr cinfo, char *buffer)
1498*dfc6aa5cSAndroid Build Coastguard Worker        Constructs a readable error message string based on the error info
1499*dfc6aa5cSAndroid Build Coastguard Worker        stored in cinfo->err.  This method is called by output_message.  Few
1500*dfc6aa5cSAndroid Build Coastguard Worker        applications should need to override this method.  One possible
1501*dfc6aa5cSAndroid Build Coastguard Worker        reason for doing so is to implement dynamic switching of error message
1502*dfc6aa5cSAndroid Build Coastguard Worker        language.
1503*dfc6aa5cSAndroid Build Coastguard Worker
1504*dfc6aa5cSAndroid Build Coastguard Workeremit_message (j_common_ptr cinfo, int msg_level)
1505*dfc6aa5cSAndroid Build Coastguard Worker        Decide whether or not to emit a warning or trace message; if so,
1506*dfc6aa5cSAndroid Build Coastguard Worker        calls output_message.  The main reason for overriding this method
1507*dfc6aa5cSAndroid Build Coastguard Worker        would be to abort on warnings.  msg_level is -1 for warnings,
1508*dfc6aa5cSAndroid Build Coastguard Worker        0 and up for trace messages.
1509*dfc6aa5cSAndroid Build Coastguard Worker
1510*dfc6aa5cSAndroid Build Coastguard WorkerOnly error_exit() and emit_message() are called from the rest of the JPEG
1511*dfc6aa5cSAndroid Build Coastguard Workerlibrary; the other two are internal to the error handler.
1512*dfc6aa5cSAndroid Build Coastguard Worker
1513*dfc6aa5cSAndroid Build Coastguard WorkerThe actual message texts are stored in an array of strings which is pointed to
1514*dfc6aa5cSAndroid Build Coastguard Workerby the field err->jpeg_message_table.  The messages are numbered from 0 to
1515*dfc6aa5cSAndroid Build Coastguard Workererr->last_jpeg_message, and it is these code numbers that are used in the
1516*dfc6aa5cSAndroid Build Coastguard WorkerJPEG library code.  You could replace the message texts (for instance, with
1517*dfc6aa5cSAndroid Build Coastguard Workermessages in French or German) by changing the message table pointer.  See
1518*dfc6aa5cSAndroid Build Coastguard Workerjerror.h for the default texts.  CAUTION: this table will almost certainly
1519*dfc6aa5cSAndroid Build Coastguard Workerchange or grow from one library version to the next.
1520*dfc6aa5cSAndroid Build Coastguard Worker
1521*dfc6aa5cSAndroid Build Coastguard WorkerIt may be useful for an application to add its own message texts that are
1522*dfc6aa5cSAndroid Build Coastguard Workerhandled by the same mechanism.  The error handler supports a second "add-on"
1523*dfc6aa5cSAndroid Build Coastguard Workermessage table for this purpose.  To define an addon table, set the pointer
1524*dfc6aa5cSAndroid Build Coastguard Workererr->addon_message_table and the message numbers err->first_addon_message and
1525*dfc6aa5cSAndroid Build Coastguard Workererr->last_addon_message.  If you number the addon messages beginning at 1000
1526*dfc6aa5cSAndroid Build Coastguard Workeror so, you won't have to worry about conflicts with the library's built-in
1527*dfc6aa5cSAndroid Build Coastguard Workermessages.  See the sample applications cjpeg/djpeg for an example of using
1528*dfc6aa5cSAndroid Build Coastguard Workeraddon messages (the addon messages are defined in cderror.h).
1529*dfc6aa5cSAndroid Build Coastguard Worker
1530*dfc6aa5cSAndroid Build Coastguard WorkerActual invocation of the error handler is done via macros defined in jerror.h:
1531*dfc6aa5cSAndroid Build Coastguard Worker        ERREXITn(...)   for fatal errors
1532*dfc6aa5cSAndroid Build Coastguard Worker        WARNMSn(...)    for corrupt-data warnings
1533*dfc6aa5cSAndroid Build Coastguard Worker        TRACEMSn(...)   for trace and informational messages.
1534*dfc6aa5cSAndroid Build Coastguard WorkerThese macros store the message code and any additional parameters into the
1535*dfc6aa5cSAndroid Build Coastguard Workererror handler struct, then invoke the error_exit() or emit_message() method.
1536*dfc6aa5cSAndroid Build Coastguard WorkerThe variants of each macro are for varying numbers of additional parameters.
1537*dfc6aa5cSAndroid Build Coastguard WorkerThe additional parameters are inserted into the generated message using
1538*dfc6aa5cSAndroid Build Coastguard Workerstandard printf() format codes.
1539*dfc6aa5cSAndroid Build Coastguard Worker
1540*dfc6aa5cSAndroid Build Coastguard WorkerSee jerror.h and jerror.c for further details.
1541*dfc6aa5cSAndroid Build Coastguard Worker
1542*dfc6aa5cSAndroid Build Coastguard Worker
1543*dfc6aa5cSAndroid Build Coastguard WorkerCompressed data handling (source and destination managers)
1544*dfc6aa5cSAndroid Build Coastguard Worker----------------------------------------------------------
1545*dfc6aa5cSAndroid Build Coastguard Worker
1546*dfc6aa5cSAndroid Build Coastguard WorkerThe JPEG compression library sends its compressed data to a "destination
1547*dfc6aa5cSAndroid Build Coastguard Workermanager" module.  The default destination manager just writes the data to a
1548*dfc6aa5cSAndroid Build Coastguard Workermemory buffer or to a stdio stream, but you can provide your own manager to
1549*dfc6aa5cSAndroid Build Coastguard Workerdo something else.  Similarly, the decompression library calls a "source
1550*dfc6aa5cSAndroid Build Coastguard Workermanager" to obtain the compressed data; you can provide your own source
1551*dfc6aa5cSAndroid Build Coastguard Workermanager if you want the data to come from somewhere other than a memory
1552*dfc6aa5cSAndroid Build Coastguard Workerbuffer or a stdio stream.
1553*dfc6aa5cSAndroid Build Coastguard Worker
1554*dfc6aa5cSAndroid Build Coastguard WorkerIn both cases, compressed data is processed a bufferload at a time: the
1555*dfc6aa5cSAndroid Build Coastguard Workerdestination or source manager provides a work buffer, and the library invokes
1556*dfc6aa5cSAndroid Build Coastguard Workerthe manager only when the buffer is filled or emptied.  (You could define a
1557*dfc6aa5cSAndroid Build Coastguard Workerone-character buffer to force the manager to be invoked for each byte, but
1558*dfc6aa5cSAndroid Build Coastguard Workerthat would be rather inefficient.)  The buffer's size and location are
1559*dfc6aa5cSAndroid Build Coastguard Workercontrolled by the manager, not by the library.  For example, the memory
1560*dfc6aa5cSAndroid Build Coastguard Workersource manager just makes the buffer pointer and length point to the original
1561*dfc6aa5cSAndroid Build Coastguard Workerdata in memory.  In this case the buffer-reload procedure will be invoked
1562*dfc6aa5cSAndroid Build Coastguard Workeronly if the decompressor ran off the end of the datastream, which would
1563*dfc6aa5cSAndroid Build Coastguard Workerindicate an erroneous datastream.
1564*dfc6aa5cSAndroid Build Coastguard Worker
1565*dfc6aa5cSAndroid Build Coastguard WorkerThe work buffer is defined as an array of datatype JOCTET, which is generally
1566*dfc6aa5cSAndroid Build Coastguard Worker"char" or "unsigned char".  On a machine where char is not exactly 8 bits
1567*dfc6aa5cSAndroid Build Coastguard Workerwide, you must define JOCTET as a wider data type and then modify the data
1568*dfc6aa5cSAndroid Build Coastguard Workersource and destination modules to transcribe the work arrays into 8-bit units
1569*dfc6aa5cSAndroid Build Coastguard Workeron external storage.
1570*dfc6aa5cSAndroid Build Coastguard Worker
1571*dfc6aa5cSAndroid Build Coastguard WorkerA data destination manager struct contains a pointer and count defining the
1572*dfc6aa5cSAndroid Build Coastguard Workernext byte to write in the work buffer and the remaining free space:
1573*dfc6aa5cSAndroid Build Coastguard Worker
1574*dfc6aa5cSAndroid Build Coastguard Worker        JOCTET *next_output_byte;   /* => next byte to write in buffer */
1575*dfc6aa5cSAndroid Build Coastguard Worker        size_t free_in_buffer;      /* # of byte spaces remaining in buffer */
1576*dfc6aa5cSAndroid Build Coastguard Worker
1577*dfc6aa5cSAndroid Build Coastguard WorkerThe library increments the pointer and decrements the count until the buffer
1578*dfc6aa5cSAndroid Build Coastguard Workeris filled.  The manager's empty_output_buffer method must reset the pointer
1579*dfc6aa5cSAndroid Build Coastguard Workerand count.  The manager is expected to remember the buffer's starting address
1580*dfc6aa5cSAndroid Build Coastguard Workerand total size in private fields not visible to the library.
1581*dfc6aa5cSAndroid Build Coastguard Worker
1582*dfc6aa5cSAndroid Build Coastguard WorkerA data destination manager provides three methods:
1583*dfc6aa5cSAndroid Build Coastguard Worker
1584*dfc6aa5cSAndroid Build Coastguard Workerinit_destination (j_compress_ptr cinfo)
1585*dfc6aa5cSAndroid Build Coastguard Worker        Initialize destination.  This is called by jpeg_start_compress()
1586*dfc6aa5cSAndroid Build Coastguard Worker        before any data is actually written.  It must initialize
1587*dfc6aa5cSAndroid Build Coastguard Worker        next_output_byte and free_in_buffer.  free_in_buffer must be
1588*dfc6aa5cSAndroid Build Coastguard Worker        initialized to a positive value.
1589*dfc6aa5cSAndroid Build Coastguard Worker
1590*dfc6aa5cSAndroid Build Coastguard Workerempty_output_buffer (j_compress_ptr cinfo)
1591*dfc6aa5cSAndroid Build Coastguard Worker        This is called whenever the buffer has filled (free_in_buffer
1592*dfc6aa5cSAndroid Build Coastguard Worker        reaches zero).  In typical applications, it should write out the
1593*dfc6aa5cSAndroid Build Coastguard Worker        *entire* buffer (use the saved start address and buffer length;
1594*dfc6aa5cSAndroid Build Coastguard Worker        ignore the current state of next_output_byte and free_in_buffer).
1595*dfc6aa5cSAndroid Build Coastguard Worker        Then reset the pointer & count to the start of the buffer, and
1596*dfc6aa5cSAndroid Build Coastguard Worker        return TRUE indicating that the buffer has been dumped.
1597*dfc6aa5cSAndroid Build Coastguard Worker        free_in_buffer must be set to a positive value when TRUE is
1598*dfc6aa5cSAndroid Build Coastguard Worker        returned.  A FALSE return should only be used when I/O suspension is
1599*dfc6aa5cSAndroid Build Coastguard Worker        desired (this operating mode is discussed in the next section).
1600*dfc6aa5cSAndroid Build Coastguard Worker
1601*dfc6aa5cSAndroid Build Coastguard Workerterm_destination (j_compress_ptr cinfo)
1602*dfc6aa5cSAndroid Build Coastguard Worker        Terminate destination --- called by jpeg_finish_compress() after all
1603*dfc6aa5cSAndroid Build Coastguard Worker        data has been written.  In most applications, this must flush any
1604*dfc6aa5cSAndroid Build Coastguard Worker        data remaining in the buffer.  Use either next_output_byte or
1605*dfc6aa5cSAndroid Build Coastguard Worker        free_in_buffer to determine how much data is in the buffer.
1606*dfc6aa5cSAndroid Build Coastguard Worker
1607*dfc6aa5cSAndroid Build Coastguard Workerterm_destination() is NOT called by jpeg_abort() or jpeg_destroy().  If you
1608*dfc6aa5cSAndroid Build Coastguard Workerwant the destination manager to be cleaned up during an abort, you must do it
1609*dfc6aa5cSAndroid Build Coastguard Workeryourself.
1610*dfc6aa5cSAndroid Build Coastguard Worker
1611*dfc6aa5cSAndroid Build Coastguard WorkerYou will also need code to create a jpeg_destination_mgr struct, fill in its
1612*dfc6aa5cSAndroid Build Coastguard Workermethod pointers, and insert a pointer to the struct into the "dest" field of
1613*dfc6aa5cSAndroid Build Coastguard Workerthe JPEG compression object.  This can be done in-line in your setup code if
1614*dfc6aa5cSAndroid Build Coastguard Workeryou like, but it's probably cleaner to provide a separate routine similar to
1615*dfc6aa5cSAndroid Build Coastguard Workerthe jpeg_stdio_dest() or jpeg_mem_dest() routines of the supplied destination
1616*dfc6aa5cSAndroid Build Coastguard Workermanagers.
1617*dfc6aa5cSAndroid Build Coastguard Worker
1618*dfc6aa5cSAndroid Build Coastguard WorkerDecompression source managers follow a parallel design, but with some
1619*dfc6aa5cSAndroid Build Coastguard Workeradditional frammishes.  The source manager struct contains a pointer and count
1620*dfc6aa5cSAndroid Build Coastguard Workerdefining the next byte to read from the work buffer and the number of bytes
1621*dfc6aa5cSAndroid Build Coastguard Workerremaining:
1622*dfc6aa5cSAndroid Build Coastguard Worker
1623*dfc6aa5cSAndroid Build Coastguard Worker        const JOCTET *next_input_byte;  /* => next byte to read from buffer */
1624*dfc6aa5cSAndroid Build Coastguard Worker        size_t bytes_in_buffer;         /* # of bytes remaining in buffer */
1625*dfc6aa5cSAndroid Build Coastguard Worker
1626*dfc6aa5cSAndroid Build Coastguard WorkerThe library increments the pointer and decrements the count until the buffer
1627*dfc6aa5cSAndroid Build Coastguard Workeris emptied.  The manager's fill_input_buffer method must reset the pointer and
1628*dfc6aa5cSAndroid Build Coastguard Workercount.  In most applications, the manager must remember the buffer's starting
1629*dfc6aa5cSAndroid Build Coastguard Workeraddress and total size in private fields not visible to the library.
1630*dfc6aa5cSAndroid Build Coastguard Worker
1631*dfc6aa5cSAndroid Build Coastguard WorkerA data source manager provides five methods:
1632*dfc6aa5cSAndroid Build Coastguard Worker
1633*dfc6aa5cSAndroid Build Coastguard Workerinit_source (j_decompress_ptr cinfo)
1634*dfc6aa5cSAndroid Build Coastguard Worker        Initialize source.  This is called by jpeg_read_header() before any
1635*dfc6aa5cSAndroid Build Coastguard Worker        data is actually read.  Unlike init_destination(), it may leave
1636*dfc6aa5cSAndroid Build Coastguard Worker        bytes_in_buffer set to 0 (in which case a fill_input_buffer() call
1637*dfc6aa5cSAndroid Build Coastguard Worker        will occur immediately).
1638*dfc6aa5cSAndroid Build Coastguard Worker
1639*dfc6aa5cSAndroid Build Coastguard Workerfill_input_buffer (j_decompress_ptr cinfo)
1640*dfc6aa5cSAndroid Build Coastguard Worker        This is called whenever bytes_in_buffer has reached zero and more
1641*dfc6aa5cSAndroid Build Coastguard Worker        data is wanted.  In typical applications, it should read fresh data
1642*dfc6aa5cSAndroid Build Coastguard Worker        into the buffer (ignoring the current state of next_input_byte and
1643*dfc6aa5cSAndroid Build Coastguard Worker        bytes_in_buffer), reset the pointer & count to the start of the
1644*dfc6aa5cSAndroid Build Coastguard Worker        buffer, and return TRUE indicating that the buffer has been reloaded.
1645*dfc6aa5cSAndroid Build Coastguard Worker        It is not necessary to fill the buffer entirely, only to obtain at
1646*dfc6aa5cSAndroid Build Coastguard Worker        least one more byte.  bytes_in_buffer MUST be set to a positive value
1647*dfc6aa5cSAndroid Build Coastguard Worker        if TRUE is returned.  A FALSE return should only be used when I/O
1648*dfc6aa5cSAndroid Build Coastguard Worker        suspension is desired (this mode is discussed in the next section).
1649*dfc6aa5cSAndroid Build Coastguard Worker
1650*dfc6aa5cSAndroid Build Coastguard Workerskip_input_data (j_decompress_ptr cinfo, long num_bytes)
1651*dfc6aa5cSAndroid Build Coastguard Worker        Skip num_bytes worth of data.  The buffer pointer and count should
1652*dfc6aa5cSAndroid Build Coastguard Worker        be advanced over num_bytes input bytes, refilling the buffer as
1653*dfc6aa5cSAndroid Build Coastguard Worker        needed.  This is used to skip over a potentially large amount of
1654*dfc6aa5cSAndroid Build Coastguard Worker        uninteresting data (such as an APPn marker).  In some applications
1655*dfc6aa5cSAndroid Build Coastguard Worker        it may be possible to optimize away the reading of the skipped data,
1656*dfc6aa5cSAndroid Build Coastguard Worker        but it's not clear that being smart is worth much trouble; large
1657*dfc6aa5cSAndroid Build Coastguard Worker        skips are uncommon.  bytes_in_buffer may be zero on return.
1658*dfc6aa5cSAndroid Build Coastguard Worker        A zero or negative skip count should be treated as a no-op.
1659*dfc6aa5cSAndroid Build Coastguard Worker
1660*dfc6aa5cSAndroid Build Coastguard Workerresync_to_restart (j_decompress_ptr cinfo, int desired)
1661*dfc6aa5cSAndroid Build Coastguard Worker        This routine is called only when the decompressor has failed to find
1662*dfc6aa5cSAndroid Build Coastguard Worker        a restart (RSTn) marker where one is expected.  Its mission is to
1663*dfc6aa5cSAndroid Build Coastguard Worker        find a suitable point for resuming decompression.  For most
1664*dfc6aa5cSAndroid Build Coastguard Worker        applications, we recommend that you just use the default resync
1665*dfc6aa5cSAndroid Build Coastguard Worker        procedure, jpeg_resync_to_restart().  However, if you are able to back
1666*dfc6aa5cSAndroid Build Coastguard Worker        up in the input data stream, or if you have a-priori knowledge about
1667*dfc6aa5cSAndroid Build Coastguard Worker        the likely location of restart markers, you may be able to do better.
1668*dfc6aa5cSAndroid Build Coastguard Worker        Read the read_restart_marker() and jpeg_resync_to_restart() routines
1669*dfc6aa5cSAndroid Build Coastguard Worker        in jdmarker.c if you think you'd like to implement your own resync
1670*dfc6aa5cSAndroid Build Coastguard Worker        procedure.
1671*dfc6aa5cSAndroid Build Coastguard Worker
1672*dfc6aa5cSAndroid Build Coastguard Workerterm_source (j_decompress_ptr cinfo)
1673*dfc6aa5cSAndroid Build Coastguard Worker        Terminate source --- called by jpeg_finish_decompress() after all
1674*dfc6aa5cSAndroid Build Coastguard Worker        data has been read.  Often a no-op.
1675*dfc6aa5cSAndroid Build Coastguard Worker
1676*dfc6aa5cSAndroid Build Coastguard WorkerFor both fill_input_buffer() and skip_input_data(), there is no such thing
1677*dfc6aa5cSAndroid Build Coastguard Workeras an EOF return.  If the end of the file has been reached, the routine has
1678*dfc6aa5cSAndroid Build Coastguard Workera choice of exiting via ERREXIT() or inserting fake data into the buffer.
1679*dfc6aa5cSAndroid Build Coastguard WorkerIn most cases, generating a warning message and inserting a fake EOI marker
1680*dfc6aa5cSAndroid Build Coastguard Workeris the best course of action --- this will allow the decompressor to output
1681*dfc6aa5cSAndroid Build Coastguard Workerhowever much of the image is there.  In pathological cases, the decompressor
1682*dfc6aa5cSAndroid Build Coastguard Workermay swallow the EOI and again demand data ... just keep feeding it fake EOIs.
1683*dfc6aa5cSAndroid Build Coastguard Workerjdatasrc.c illustrates the recommended error recovery behavior.
1684*dfc6aa5cSAndroid Build Coastguard Worker
1685*dfc6aa5cSAndroid Build Coastguard Workerterm_source() is NOT called by jpeg_abort() or jpeg_destroy().  If you want
1686*dfc6aa5cSAndroid Build Coastguard Workerthe source manager to be cleaned up during an abort, you must do it yourself.
1687*dfc6aa5cSAndroid Build Coastguard Worker
1688*dfc6aa5cSAndroid Build Coastguard WorkerYou will also need code to create a jpeg_source_mgr struct, fill in its method
1689*dfc6aa5cSAndroid Build Coastguard Workerpointers, and insert a pointer to the struct into the "src" field of the JPEG
1690*dfc6aa5cSAndroid Build Coastguard Workerdecompression object.  This can be done in-line in your setup code if you
1691*dfc6aa5cSAndroid Build Coastguard Workerlike, but it's probably cleaner to provide a separate routine similar to the
1692*dfc6aa5cSAndroid Build Coastguard Workerjpeg_stdio_src() or jpeg_mem_src() routines of the supplied source managers.
1693*dfc6aa5cSAndroid Build Coastguard Worker
1694*dfc6aa5cSAndroid Build Coastguard WorkerFor more information, consult the memory and stdio source and destination
1695*dfc6aa5cSAndroid Build Coastguard Workermanagers in jdatasrc.c and jdatadst.c.
1696*dfc6aa5cSAndroid Build Coastguard Worker
1697*dfc6aa5cSAndroid Build Coastguard Worker
1698*dfc6aa5cSAndroid Build Coastguard WorkerI/O suspension
1699*dfc6aa5cSAndroid Build Coastguard Worker--------------
1700*dfc6aa5cSAndroid Build Coastguard Worker
1701*dfc6aa5cSAndroid Build Coastguard WorkerSome applications need to use the JPEG library as an incremental memory-to-
1702*dfc6aa5cSAndroid Build Coastguard Workermemory filter: when the compressed data buffer is filled or emptied, they want
1703*dfc6aa5cSAndroid Build Coastguard Workercontrol to return to the outer loop, rather than expecting that the buffer can
1704*dfc6aa5cSAndroid Build Coastguard Workerbe emptied or reloaded within the data source/destination manager subroutine.
1705*dfc6aa5cSAndroid Build Coastguard WorkerThe library supports this need by providing an "I/O suspension" mode, which we
1706*dfc6aa5cSAndroid Build Coastguard Workerdescribe in this section.
1707*dfc6aa5cSAndroid Build Coastguard Worker
1708*dfc6aa5cSAndroid Build Coastguard WorkerThe I/O suspension mode is not a panacea: nothing is guaranteed about the
1709*dfc6aa5cSAndroid Build Coastguard Workermaximum amount of time spent in any one call to the library, so it will not
1710*dfc6aa5cSAndroid Build Coastguard Workereliminate response-time problems in single-threaded applications.  If you
1711*dfc6aa5cSAndroid Build Coastguard Workerneed guaranteed response time, we suggest you "bite the bullet" and implement
1712*dfc6aa5cSAndroid Build Coastguard Workera real multi-tasking capability.
1713*dfc6aa5cSAndroid Build Coastguard Worker
1714*dfc6aa5cSAndroid Build Coastguard WorkerTo use I/O suspension, cooperation is needed between the calling application
1715*dfc6aa5cSAndroid Build Coastguard Workerand the data source or destination manager; you will always need a custom
1716*dfc6aa5cSAndroid Build Coastguard Workersource/destination manager.  (Please read the previous section if you haven't
1717*dfc6aa5cSAndroid Build Coastguard Workeralready.)  The basic idea is that the empty_output_buffer() or
1718*dfc6aa5cSAndroid Build Coastguard Workerfill_input_buffer() routine is a no-op, merely returning FALSE to indicate
1719*dfc6aa5cSAndroid Build Coastguard Workerthat it has done nothing.  Upon seeing this, the JPEG library suspends
1720*dfc6aa5cSAndroid Build Coastguard Workeroperation and returns to its caller.  The surrounding application is
1721*dfc6aa5cSAndroid Build Coastguard Workerresponsible for emptying or refilling the work buffer before calling the
1722*dfc6aa5cSAndroid Build Coastguard WorkerJPEG library again.
1723*dfc6aa5cSAndroid Build Coastguard Worker
1724*dfc6aa5cSAndroid Build Coastguard WorkerCompression suspension:
1725*dfc6aa5cSAndroid Build Coastguard Worker
1726*dfc6aa5cSAndroid Build Coastguard WorkerFor compression suspension, use an empty_output_buffer() routine that returns
1727*dfc6aa5cSAndroid Build Coastguard WorkerFALSE; typically it will not do anything else.  This will cause the
1728*dfc6aa5cSAndroid Build Coastguard Workercompressor to return to the caller of jpeg_write_scanlines(), with the return
1729*dfc6aa5cSAndroid Build Coastguard Workervalue indicating that not all the supplied scanlines have been accepted.
1730*dfc6aa5cSAndroid Build Coastguard WorkerThe application must make more room in the output buffer, adjust the output
1731*dfc6aa5cSAndroid Build Coastguard Workerbuffer pointer/count appropriately, and then call jpeg_write_scanlines()
1732*dfc6aa5cSAndroid Build Coastguard Workeragain, pointing to the first unconsumed scanline.
1733*dfc6aa5cSAndroid Build Coastguard Worker
1734*dfc6aa5cSAndroid Build Coastguard WorkerWhen forced to suspend, the compressor will backtrack to a convenient stopping
1735*dfc6aa5cSAndroid Build Coastguard Workerpoint (usually the start of the current MCU); it will regenerate some output
1736*dfc6aa5cSAndroid Build Coastguard Workerdata when restarted.  Therefore, although empty_output_buffer() is only
1737*dfc6aa5cSAndroid Build Coastguard Workercalled when the buffer is filled, you should NOT write out the entire buffer
1738*dfc6aa5cSAndroid Build Coastguard Workerafter a suspension.  Write only the data up to the current position of
1739*dfc6aa5cSAndroid Build Coastguard Workernext_output_byte/free_in_buffer.  The data beyond that point will be
1740*dfc6aa5cSAndroid Build Coastguard Workerregenerated after resumption.
1741*dfc6aa5cSAndroid Build Coastguard Worker
1742*dfc6aa5cSAndroid Build Coastguard WorkerBecause of the backtracking behavior, a good-size output buffer is essential
1743*dfc6aa5cSAndroid Build Coastguard Workerfor efficiency; you don't want the compressor to suspend often.  (In fact, an
1744*dfc6aa5cSAndroid Build Coastguard Workeroverly small buffer could lead to infinite looping, if a single MCU required
1745*dfc6aa5cSAndroid Build Coastguard Workermore data than would fit in the buffer.)  We recommend a buffer of at least
1746*dfc6aa5cSAndroid Build Coastguard Workerseveral Kbytes.  You may want to insert explicit code to ensure that you don't
1747*dfc6aa5cSAndroid Build Coastguard Workercall jpeg_write_scanlines() unless there is a reasonable amount of space in
1748*dfc6aa5cSAndroid Build Coastguard Workerthe output buffer; in other words, flush the buffer before trying to compress
1749*dfc6aa5cSAndroid Build Coastguard Workermore data.
1750*dfc6aa5cSAndroid Build Coastguard Worker
1751*dfc6aa5cSAndroid Build Coastguard WorkerThe compressor does not allow suspension while it is trying to write JPEG
1752*dfc6aa5cSAndroid Build Coastguard Workermarkers at the beginning and end of the file.  This means that:
1753*dfc6aa5cSAndroid Build Coastguard Worker  * At the beginning of a compression operation, there must be enough free
1754*dfc6aa5cSAndroid Build Coastguard Worker    space in the output buffer to hold the header markers (typically 600 or
1755*dfc6aa5cSAndroid Build Coastguard Worker    so bytes).  The recommended buffer size is bigger than this anyway, so
1756*dfc6aa5cSAndroid Build Coastguard Worker    this is not a problem as long as you start with an empty buffer.  However,
1757*dfc6aa5cSAndroid Build Coastguard Worker    this restriction might catch you if you insert large special markers, such
1758*dfc6aa5cSAndroid Build Coastguard Worker    as a JFIF thumbnail image, without flushing the buffer afterwards.
1759*dfc6aa5cSAndroid Build Coastguard Worker  * When you call jpeg_finish_compress(), there must be enough space in the
1760*dfc6aa5cSAndroid Build Coastguard Worker    output buffer to emit any buffered data and the final EOI marker.  In the
1761*dfc6aa5cSAndroid Build Coastguard Worker    current implementation, half a dozen bytes should suffice for this, but
1762*dfc6aa5cSAndroid Build Coastguard Worker    for safety's sake we recommend ensuring that at least 100 bytes are free
1763*dfc6aa5cSAndroid Build Coastguard Worker    before calling jpeg_finish_compress().
1764*dfc6aa5cSAndroid Build Coastguard Worker
1765*dfc6aa5cSAndroid Build Coastguard WorkerA more significant restriction is that jpeg_finish_compress() cannot suspend.
1766*dfc6aa5cSAndroid Build Coastguard WorkerThis means you cannot use suspension with multi-pass operating modes, namely
1767*dfc6aa5cSAndroid Build Coastguard WorkerHuffman code optimization and multiple-scan output.  Those modes write the
1768*dfc6aa5cSAndroid Build Coastguard Workerwhole file during jpeg_finish_compress(), which will certainly result in
1769*dfc6aa5cSAndroid Build Coastguard Workerbuffer overrun.  (Note that this restriction applies only to compression,
1770*dfc6aa5cSAndroid Build Coastguard Workernot decompression.  The decompressor supports input suspension in all of its
1771*dfc6aa5cSAndroid Build Coastguard Workeroperating modes.)
1772*dfc6aa5cSAndroid Build Coastguard Worker
1773*dfc6aa5cSAndroid Build Coastguard WorkerDecompression suspension:
1774*dfc6aa5cSAndroid Build Coastguard Worker
1775*dfc6aa5cSAndroid Build Coastguard WorkerFor decompression suspension, use a fill_input_buffer() routine that simply
1776*dfc6aa5cSAndroid Build Coastguard Workerreturns FALSE (except perhaps during error recovery, as discussed below).
1777*dfc6aa5cSAndroid Build Coastguard WorkerThis will cause the decompressor to return to its caller with an indication
1778*dfc6aa5cSAndroid Build Coastguard Workerthat suspension has occurred.  This can happen at four places:
1779*dfc6aa5cSAndroid Build Coastguard Worker  * jpeg_read_header(): will return JPEG_SUSPENDED.
1780*dfc6aa5cSAndroid Build Coastguard Worker  * jpeg_start_decompress(): will return FALSE, rather than its usual TRUE.
1781*dfc6aa5cSAndroid Build Coastguard Worker  * jpeg_read_scanlines(): will return the number of scanlines already
1782*dfc6aa5cSAndroid Build Coastguard Worker        completed (possibly 0).
1783*dfc6aa5cSAndroid Build Coastguard Worker  * jpeg_finish_decompress(): will return FALSE, rather than its usual TRUE.
1784*dfc6aa5cSAndroid Build Coastguard WorkerThe surrounding application must recognize these cases, load more data into
1785*dfc6aa5cSAndroid Build Coastguard Workerthe input buffer, and repeat the call.  In the case of jpeg_read_scanlines(),
1786*dfc6aa5cSAndroid Build Coastguard Workerincrement the passed pointers past any scanlines successfully read.
1787*dfc6aa5cSAndroid Build Coastguard Worker
1788*dfc6aa5cSAndroid Build Coastguard WorkerJust as with compression, the decompressor will typically backtrack to a
1789*dfc6aa5cSAndroid Build Coastguard Workerconvenient restart point before suspending.  When fill_input_buffer() is
1790*dfc6aa5cSAndroid Build Coastguard Workercalled, next_input_byte/bytes_in_buffer point to the current restart point,
1791*dfc6aa5cSAndroid Build Coastguard Workerwhich is where the decompressor will backtrack to if FALSE is returned.
1792*dfc6aa5cSAndroid Build Coastguard WorkerThe data beyond that position must NOT be discarded if you suspend; it needs
1793*dfc6aa5cSAndroid Build Coastguard Workerto be re-read upon resumption.  In most implementations, you'll need to shift
1794*dfc6aa5cSAndroid Build Coastguard Workerthis data down to the start of your work buffer and then load more data after
1795*dfc6aa5cSAndroid Build Coastguard Workerit.  Again, this behavior means that a several-Kbyte work buffer is essential
1796*dfc6aa5cSAndroid Build Coastguard Workerfor decent performance; furthermore, you should load a reasonable amount of
1797*dfc6aa5cSAndroid Build Coastguard Workernew data before resuming decompression.  (If you loaded, say, only one new
1798*dfc6aa5cSAndroid Build Coastguard Workerbyte each time around, you could waste a LOT of cycles.)
1799*dfc6aa5cSAndroid Build Coastguard Worker
1800*dfc6aa5cSAndroid Build Coastguard WorkerThe skip_input_data() source manager routine requires special care in a
1801*dfc6aa5cSAndroid Build Coastguard Workersuspension scenario.  This routine is NOT granted the ability to suspend the
1802*dfc6aa5cSAndroid Build Coastguard Workerdecompressor; it can decrement bytes_in_buffer to zero, but no more.  If the
1803*dfc6aa5cSAndroid Build Coastguard Workerrequested skip distance exceeds the amount of data currently in the input
1804*dfc6aa5cSAndroid Build Coastguard Workerbuffer, then skip_input_data() must set bytes_in_buffer to zero and record the
1805*dfc6aa5cSAndroid Build Coastguard Workeradditional skip distance somewhere else.  The decompressor will immediately
1806*dfc6aa5cSAndroid Build Coastguard Workercall fill_input_buffer(), which should return FALSE, which will cause a
1807*dfc6aa5cSAndroid Build Coastguard Workersuspension return.  The surrounding application must then arrange to discard
1808*dfc6aa5cSAndroid Build Coastguard Workerthe recorded number of bytes before it resumes loading the input buffer.
1809*dfc6aa5cSAndroid Build Coastguard Worker(Yes, this design is rather baroque, but it avoids complexity in the far more
1810*dfc6aa5cSAndroid Build Coastguard Workercommon case where a non-suspending source manager is used.)
1811*dfc6aa5cSAndroid Build Coastguard Worker
1812*dfc6aa5cSAndroid Build Coastguard WorkerIf the input data has been exhausted, we recommend that you emit a warning
1813*dfc6aa5cSAndroid Build Coastguard Workerand insert dummy EOI markers just as a non-suspending data source manager
1814*dfc6aa5cSAndroid Build Coastguard Workerwould do.  This can be handled either in the surrounding application logic or
1815*dfc6aa5cSAndroid Build Coastguard Workerwithin fill_input_buffer(); the latter is probably more efficient.  If
1816*dfc6aa5cSAndroid Build Coastguard Workerfill_input_buffer() knows that no more data is available, it can set the
1817*dfc6aa5cSAndroid Build Coastguard Workerpointer/count to point to a dummy EOI marker and then return TRUE just as
1818*dfc6aa5cSAndroid Build Coastguard Workerthough it had read more data in a non-suspending situation.
1819*dfc6aa5cSAndroid Build Coastguard Worker
1820*dfc6aa5cSAndroid Build Coastguard WorkerThe decompressor does not attempt to suspend within standard JPEG markers;
1821*dfc6aa5cSAndroid Build Coastguard Workerinstead it will backtrack to the start of the marker and reprocess the whole
1822*dfc6aa5cSAndroid Build Coastguard Workermarker next time.  Hence the input buffer must be large enough to hold the
1823*dfc6aa5cSAndroid Build Coastguard Workerlongest standard marker in the file.  Standard JPEG markers should normally
1824*dfc6aa5cSAndroid Build Coastguard Workernot exceed a few hundred bytes each (DHT tables are typically the longest).
1825*dfc6aa5cSAndroid Build Coastguard WorkerWe recommend at least a 2K buffer for performance reasons, which is much
1826*dfc6aa5cSAndroid Build Coastguard Workerlarger than any correct marker is likely to be.  For robustness against
1827*dfc6aa5cSAndroid Build Coastguard Workerdamaged marker length counts, you may wish to insert a test in your
1828*dfc6aa5cSAndroid Build Coastguard Workerapplication for the case that the input buffer is completely full and yet
1829*dfc6aa5cSAndroid Build Coastguard Workerthe decoder has suspended without consuming any data --- otherwise, if this
1830*dfc6aa5cSAndroid Build Coastguard Workersituation did occur, it would lead to an endless loop.  (The library can't
1831*dfc6aa5cSAndroid Build Coastguard Workerprovide this test since it has no idea whether "the buffer is full", or
1832*dfc6aa5cSAndroid Build Coastguard Workereven whether there is a fixed-size input buffer.)
1833*dfc6aa5cSAndroid Build Coastguard Worker
1834*dfc6aa5cSAndroid Build Coastguard WorkerThe input buffer would need to be 64K to allow for arbitrary COM or APPn
1835*dfc6aa5cSAndroid Build Coastguard Workermarkers, but these are handled specially: they are either saved into allocated
1836*dfc6aa5cSAndroid Build Coastguard Workermemory, or skipped over by calling skip_input_data().  In the former case,
1837*dfc6aa5cSAndroid Build Coastguard Workersuspension is handled correctly, and in the latter case, the problem of
1838*dfc6aa5cSAndroid Build Coastguard Workerbuffer overrun is placed on skip_input_data's shoulders, as explained above.
1839*dfc6aa5cSAndroid Build Coastguard WorkerNote that if you provide your own marker handling routine for large markers,
1840*dfc6aa5cSAndroid Build Coastguard Workeryou should consider how to deal with buffer overflow.
1841*dfc6aa5cSAndroid Build Coastguard Worker
1842*dfc6aa5cSAndroid Build Coastguard WorkerMultiple-buffer management:
1843*dfc6aa5cSAndroid Build Coastguard Worker
1844*dfc6aa5cSAndroid Build Coastguard WorkerIn some applications it is desirable to store the compressed data in a linked
1845*dfc6aa5cSAndroid Build Coastguard Workerlist of buffer areas, so as to avoid data copying.  This can be handled by
1846*dfc6aa5cSAndroid Build Coastguard Workerhaving empty_output_buffer() or fill_input_buffer() set the pointer and count
1847*dfc6aa5cSAndroid Build Coastguard Workerto reference the next available buffer; FALSE is returned only if no more
1848*dfc6aa5cSAndroid Build Coastguard Workerbuffers are available.  Although seemingly straightforward, there is a
1849*dfc6aa5cSAndroid Build Coastguard Workerpitfall in this approach: the backtrack that occurs when FALSE is returned
1850*dfc6aa5cSAndroid Build Coastguard Workercould back up into an earlier buffer.  For example, when fill_input_buffer()
1851*dfc6aa5cSAndroid Build Coastguard Workeris called, the current pointer & count indicate the backtrack restart point.
1852*dfc6aa5cSAndroid Build Coastguard WorkerSince fill_input_buffer() will set the pointer and count to refer to a new
1853*dfc6aa5cSAndroid Build Coastguard Workerbuffer, the restart position must be saved somewhere else.  Suppose a second
1854*dfc6aa5cSAndroid Build Coastguard Workercall to fill_input_buffer() occurs in the same library call, and no
1855*dfc6aa5cSAndroid Build Coastguard Workeradditional input data is available, so fill_input_buffer must return FALSE.
1856*dfc6aa5cSAndroid Build Coastguard WorkerIf the JPEG library has not moved the pointer/count forward in the current
1857*dfc6aa5cSAndroid Build Coastguard Workerbuffer, then *the correct restart point is the saved position in the prior
1858*dfc6aa5cSAndroid Build Coastguard Workerbuffer*.  Prior buffers may be discarded only after the library establishes
1859*dfc6aa5cSAndroid Build Coastguard Workera restart point within a later buffer.  Similar remarks apply for output into
1860*dfc6aa5cSAndroid Build Coastguard Workera chain of buffers.
1861*dfc6aa5cSAndroid Build Coastguard Worker
1862*dfc6aa5cSAndroid Build Coastguard WorkerThe library will never attempt to backtrack over a skip_input_data() call,
1863*dfc6aa5cSAndroid Build Coastguard Workerso any skipped data can be permanently discarded.  You still have to deal
1864*dfc6aa5cSAndroid Build Coastguard Workerwith the case of skipping not-yet-received data, however.
1865*dfc6aa5cSAndroid Build Coastguard Worker
1866*dfc6aa5cSAndroid Build Coastguard WorkerIt's much simpler to use only a single buffer; when fill_input_buffer() is
1867*dfc6aa5cSAndroid Build Coastguard Workercalled, move any unconsumed data (beyond the current pointer/count) down to
1868*dfc6aa5cSAndroid Build Coastguard Workerthe beginning of this buffer and then load new data into the remaining buffer
1869*dfc6aa5cSAndroid Build Coastguard Workerspace.  This approach requires a little more data copying but is far easier
1870*dfc6aa5cSAndroid Build Coastguard Workerto get right.
1871*dfc6aa5cSAndroid Build Coastguard Worker
1872*dfc6aa5cSAndroid Build Coastguard Worker
1873*dfc6aa5cSAndroid Build Coastguard WorkerProgressive JPEG support
1874*dfc6aa5cSAndroid Build Coastguard Worker------------------------
1875*dfc6aa5cSAndroid Build Coastguard Worker
1876*dfc6aa5cSAndroid Build Coastguard WorkerProgressive JPEG rearranges the stored data into a series of scans of
1877*dfc6aa5cSAndroid Build Coastguard Workerincreasing quality.  In situations where a JPEG file is transmitted across a
1878*dfc6aa5cSAndroid Build Coastguard Workerslow communications link, a decoder can generate a low-quality image very
1879*dfc6aa5cSAndroid Build Coastguard Workerquickly from the first scan, then gradually improve the displayed quality as
1880*dfc6aa5cSAndroid Build Coastguard Workermore scans are received.  The final image after all scans are complete is
1881*dfc6aa5cSAndroid Build Coastguard Workeridentical to that of a regular (sequential) JPEG file of the same quality
1882*dfc6aa5cSAndroid Build Coastguard Workersetting.  Progressive JPEG files are often slightly smaller than equivalent
1883*dfc6aa5cSAndroid Build Coastguard Workersequential JPEG files, but the possibility of incremental display is the main
1884*dfc6aa5cSAndroid Build Coastguard Workerreason for using progressive JPEG.
1885*dfc6aa5cSAndroid Build Coastguard Worker
1886*dfc6aa5cSAndroid Build Coastguard WorkerThe IJG encoder library generates progressive JPEG files when given a
1887*dfc6aa5cSAndroid Build Coastguard Workersuitable "scan script" defining how to divide the data into scans.
1888*dfc6aa5cSAndroid Build Coastguard WorkerCreation of progressive JPEG files is otherwise transparent to the encoder.
1889*dfc6aa5cSAndroid Build Coastguard WorkerProgressive JPEG files can also be read transparently by the decoder library.
1890*dfc6aa5cSAndroid Build Coastguard WorkerIf the decoding application simply uses the library as defined above, it
1891*dfc6aa5cSAndroid Build Coastguard Workerwill receive a final decoded image without any indication that the file was
1892*dfc6aa5cSAndroid Build Coastguard Workerprogressive.  Of course, this approach does not allow incremental display.
1893*dfc6aa5cSAndroid Build Coastguard WorkerTo perform incremental display, an application needs to use the decoder
1894*dfc6aa5cSAndroid Build Coastguard Workerlibrary's "buffered-image" mode, in which it receives a decoded image
1895*dfc6aa5cSAndroid Build Coastguard Workermultiple times.
1896*dfc6aa5cSAndroid Build Coastguard Worker
1897*dfc6aa5cSAndroid Build Coastguard WorkerEach displayed scan requires about as much work to decode as a full JPEG
1898*dfc6aa5cSAndroid Build Coastguard Workerimage of the same size, so the decoder must be fairly fast in relation to the
1899*dfc6aa5cSAndroid Build Coastguard Workerdata transmission rate in order to make incremental display useful.  However,
1900*dfc6aa5cSAndroid Build Coastguard Workerit is possible to skip displaying the image and simply add the incoming bits
1901*dfc6aa5cSAndroid Build Coastguard Workerto the decoder's coefficient buffer.  This is fast because only Huffman
1902*dfc6aa5cSAndroid Build Coastguard Workerdecoding need be done, not IDCT, upsampling, colorspace conversion, etc.
1903*dfc6aa5cSAndroid Build Coastguard WorkerThe IJG decoder library allows the application to switch dynamically between
1904*dfc6aa5cSAndroid Build Coastguard Workerdisplaying the image and simply absorbing the incoming bits.  A properly
1905*dfc6aa5cSAndroid Build Coastguard Workercoded application can automatically adapt the number of display passes to
1906*dfc6aa5cSAndroid Build Coastguard Workersuit the time available as the image is received.  Also, a final
1907*dfc6aa5cSAndroid Build Coastguard Workerhigher-quality display cycle can be performed from the buffered data after
1908*dfc6aa5cSAndroid Build Coastguard Workerthe end of the file is reached.
1909*dfc6aa5cSAndroid Build Coastguard Worker
1910*dfc6aa5cSAndroid Build Coastguard WorkerProgressive compression:
1911*dfc6aa5cSAndroid Build Coastguard Worker
1912*dfc6aa5cSAndroid Build Coastguard WorkerTo create a progressive JPEG file (or a multiple-scan sequential JPEG file),
1913*dfc6aa5cSAndroid Build Coastguard Workerset the scan_info cinfo field to point to an array of scan descriptors, and
1914*dfc6aa5cSAndroid Build Coastguard Workerperform compression as usual.  Instead of constructing your own scan list,
1915*dfc6aa5cSAndroid Build Coastguard Workeryou can call the jpeg_simple_progression() helper routine to create a
1916*dfc6aa5cSAndroid Build Coastguard Workerrecommended progression sequence; this method should be used by all
1917*dfc6aa5cSAndroid Build Coastguard Workerapplications that don't want to get involved in the nitty-gritty of
1918*dfc6aa5cSAndroid Build Coastguard Workerprogressive scan sequence design.  (If you want to provide user control of
1919*dfc6aa5cSAndroid Build Coastguard Workerscan sequences, you may wish to borrow the scan script reading code found
1920*dfc6aa5cSAndroid Build Coastguard Workerin rdswitch.c, so that you can read scan script files just like cjpeg's.)
1921*dfc6aa5cSAndroid Build Coastguard WorkerWhen scan_info is not NULL, the compression library will store DCT'd data
1922*dfc6aa5cSAndroid Build Coastguard Workerinto a buffer array as jpeg_write_scanlines() is called, and will emit all
1923*dfc6aa5cSAndroid Build Coastguard Workerthe requested scans during jpeg_finish_compress().  This implies that
1924*dfc6aa5cSAndroid Build Coastguard Workermultiple-scan output cannot be created with a suspending data destination
1925*dfc6aa5cSAndroid Build Coastguard Workermanager, since jpeg_finish_compress() does not support suspension.  We
1926*dfc6aa5cSAndroid Build Coastguard Workershould also note that the compressor currently forces Huffman optimization
1927*dfc6aa5cSAndroid Build Coastguard Workermode when creating a progressive JPEG file, because the default Huffman
1928*dfc6aa5cSAndroid Build Coastguard Workertables are unsuitable for progressive files.
1929*dfc6aa5cSAndroid Build Coastguard Worker
1930*dfc6aa5cSAndroid Build Coastguard WorkerProgressive decompression:
1931*dfc6aa5cSAndroid Build Coastguard Worker
1932*dfc6aa5cSAndroid Build Coastguard WorkerWhen buffered-image mode is not used, the decoder library will read all of
1933*dfc6aa5cSAndroid Build Coastguard Workera multi-scan file during jpeg_start_decompress(), so that it can provide a
1934*dfc6aa5cSAndroid Build Coastguard Workerfinal decoded image.  (Here "multi-scan" means either progressive or
1935*dfc6aa5cSAndroid Build Coastguard Workermulti-scan sequential.)  This makes multi-scan files transparent to the
1936*dfc6aa5cSAndroid Build Coastguard Workerdecoding application.  However, existing applications that used suspending
1937*dfc6aa5cSAndroid Build Coastguard Workerinput with version 5 of the IJG library will need to be modified to check
1938*dfc6aa5cSAndroid Build Coastguard Workerfor a suspension return from jpeg_start_decompress().
1939*dfc6aa5cSAndroid Build Coastguard Worker
1940*dfc6aa5cSAndroid Build Coastguard WorkerTo perform incremental display, an application must use the library's
1941*dfc6aa5cSAndroid Build Coastguard Workerbuffered-image mode.  This is described in the next section.
1942*dfc6aa5cSAndroid Build Coastguard Worker
1943*dfc6aa5cSAndroid Build Coastguard Worker
1944*dfc6aa5cSAndroid Build Coastguard WorkerBuffered-image mode
1945*dfc6aa5cSAndroid Build Coastguard Worker-------------------
1946*dfc6aa5cSAndroid Build Coastguard Worker
1947*dfc6aa5cSAndroid Build Coastguard WorkerIn buffered-image mode, the library stores the partially decoded image in a
1948*dfc6aa5cSAndroid Build Coastguard Workercoefficient buffer, from which it can be read out as many times as desired.
1949*dfc6aa5cSAndroid Build Coastguard WorkerThis mode is typically used for incremental display of progressive JPEG files,
1950*dfc6aa5cSAndroid Build Coastguard Workerbut it can be used with any JPEG file.  Each scan of a progressive JPEG file
1951*dfc6aa5cSAndroid Build Coastguard Workeradds more data (more detail) to the buffered image.  The application can
1952*dfc6aa5cSAndroid Build Coastguard Workerdisplay in lockstep with the source file (one display pass per input scan),
1953*dfc6aa5cSAndroid Build Coastguard Workeror it can allow input processing to outrun display processing.  By making
1954*dfc6aa5cSAndroid Build Coastguard Workerinput and display processing run independently, it is possible for the
1955*dfc6aa5cSAndroid Build Coastguard Workerapplication to adapt progressive display to a wide range of data transmission
1956*dfc6aa5cSAndroid Build Coastguard Workerrates.
1957*dfc6aa5cSAndroid Build Coastguard Worker
1958*dfc6aa5cSAndroid Build Coastguard WorkerThe basic control flow for buffered-image decoding is
1959*dfc6aa5cSAndroid Build Coastguard Worker
1960*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_create_decompress()
1961*dfc6aa5cSAndroid Build Coastguard Worker        set data source
1962*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_read_header()
1963*dfc6aa5cSAndroid Build Coastguard Worker        set overall decompression parameters
1964*dfc6aa5cSAndroid Build Coastguard Worker        cinfo.buffered_image = TRUE;    /* select buffered-image mode */
1965*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_start_decompress()
1966*dfc6aa5cSAndroid Build Coastguard Worker        for (each output pass) {
1967*dfc6aa5cSAndroid Build Coastguard Worker            adjust output decompression parameters if required
1968*dfc6aa5cSAndroid Build Coastguard Worker            jpeg_start_output()         /* start a new output pass */
1969*dfc6aa5cSAndroid Build Coastguard Worker            for (all scanlines in image) {
1970*dfc6aa5cSAndroid Build Coastguard Worker                jpeg_read_scanlines()
1971*dfc6aa5cSAndroid Build Coastguard Worker                display scanlines
1972*dfc6aa5cSAndroid Build Coastguard Worker            }
1973*dfc6aa5cSAndroid Build Coastguard Worker            jpeg_finish_output()        /* terminate output pass */
1974*dfc6aa5cSAndroid Build Coastguard Worker        }
1975*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_finish_decompress()
1976*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_destroy_decompress()
1977*dfc6aa5cSAndroid Build Coastguard Worker
1978*dfc6aa5cSAndroid Build Coastguard WorkerThis differs from ordinary unbuffered decoding in that there is an additional
1979*dfc6aa5cSAndroid Build Coastguard Workerlevel of looping.  The application can choose how many output passes to make
1980*dfc6aa5cSAndroid Build Coastguard Workerand how to display each pass.
1981*dfc6aa5cSAndroid Build Coastguard Worker
1982*dfc6aa5cSAndroid Build Coastguard WorkerThe simplest approach to displaying progressive images is to do one display
1983*dfc6aa5cSAndroid Build Coastguard Workerpass for each scan appearing in the input file.  In this case the outer loop
1984*dfc6aa5cSAndroid Build Coastguard Workercondition is typically
1985*dfc6aa5cSAndroid Build Coastguard Worker        while (!jpeg_input_complete(&cinfo))
1986*dfc6aa5cSAndroid Build Coastguard Workerand the start-output call should read
1987*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_start_output(&cinfo, cinfo.input_scan_number);
1988*dfc6aa5cSAndroid Build Coastguard WorkerThe second parameter to jpeg_start_output() indicates which scan of the input
1989*dfc6aa5cSAndroid Build Coastguard Workerfile is to be displayed; the scans are numbered starting at 1 for this
1990*dfc6aa5cSAndroid Build Coastguard Workerpurpose.  (You can use a loop counter starting at 1 if you like, but using
1991*dfc6aa5cSAndroid Build Coastguard Workerthe library's input scan counter is easier.)  The library automatically reads
1992*dfc6aa5cSAndroid Build Coastguard Workerdata as necessary to complete each requested scan, and jpeg_finish_output()
1993*dfc6aa5cSAndroid Build Coastguard Workeradvances to the next scan or end-of-image marker (hence input_scan_number
1994*dfc6aa5cSAndroid Build Coastguard Workerwill be incremented by the time control arrives back at jpeg_start_output()).
1995*dfc6aa5cSAndroid Build Coastguard WorkerWith this technique, data is read from the input file only as needed, and
1996*dfc6aa5cSAndroid Build Coastguard Workerinput and output processing run in lockstep.
1997*dfc6aa5cSAndroid Build Coastguard Worker
1998*dfc6aa5cSAndroid Build Coastguard WorkerAfter reading the final scan and reaching the end of the input file, the
1999*dfc6aa5cSAndroid Build Coastguard Workerbuffered image remains available; it can be read additional times by
2000*dfc6aa5cSAndroid Build Coastguard Workerrepeating the jpeg_start_output()/jpeg_read_scanlines()/jpeg_finish_output()
2001*dfc6aa5cSAndroid Build Coastguard Workersequence.  For example, a useful technique is to use fast one-pass color
2002*dfc6aa5cSAndroid Build Coastguard Workerquantization for display passes made while the image is arriving, followed by
2003*dfc6aa5cSAndroid Build Coastguard Workera final display pass using two-pass quantization for highest quality.  This
2004*dfc6aa5cSAndroid Build Coastguard Workeris done by changing the library parameters before the final output pass.
2005*dfc6aa5cSAndroid Build Coastguard WorkerChanging parameters between passes is discussed in detail below.
2006*dfc6aa5cSAndroid Build Coastguard Worker
2007*dfc6aa5cSAndroid Build Coastguard WorkerIn general the last scan of a progressive file cannot be recognized as such
2008*dfc6aa5cSAndroid Build Coastguard Workeruntil after it is read, so a post-input display pass is the best approach if
2009*dfc6aa5cSAndroid Build Coastguard Workeryou want special processing in the final pass.
2010*dfc6aa5cSAndroid Build Coastguard Worker
2011*dfc6aa5cSAndroid Build Coastguard WorkerWhen done with the image, be sure to call jpeg_finish_decompress() to release
2012*dfc6aa5cSAndroid Build Coastguard Workerthe buffered image (or just use jpeg_destroy_decompress()).
2013*dfc6aa5cSAndroid Build Coastguard Worker
2014*dfc6aa5cSAndroid Build Coastguard WorkerIf input data arrives faster than it can be displayed, the application can
2015*dfc6aa5cSAndroid Build Coastguard Workercause the library to decode input data in advance of what's needed to produce
2016*dfc6aa5cSAndroid Build Coastguard Workeroutput.  This is done by calling the routine jpeg_consume_input().
2017*dfc6aa5cSAndroid Build Coastguard WorkerThe return value is one of the following:
2018*dfc6aa5cSAndroid Build Coastguard Worker        JPEG_REACHED_SOS:    reached an SOS marker (the start of a new scan)
2019*dfc6aa5cSAndroid Build Coastguard Worker        JPEG_REACHED_EOI:    reached the EOI marker (end of image)
2020*dfc6aa5cSAndroid Build Coastguard Worker        JPEG_ROW_COMPLETED:  completed reading one MCU row of compressed data
2021*dfc6aa5cSAndroid Build Coastguard Worker        JPEG_SCAN_COMPLETED: completed reading last MCU row of current scan
2022*dfc6aa5cSAndroid Build Coastguard Worker        JPEG_SUSPENDED:      suspended before completing any of the above
2023*dfc6aa5cSAndroid Build Coastguard Worker(JPEG_SUSPENDED can occur only if a suspending data source is used.)  This
2024*dfc6aa5cSAndroid Build Coastguard Workerroutine can be called at any time after initializing the JPEG object.  It
2025*dfc6aa5cSAndroid Build Coastguard Workerreads some additional data and returns when one of the indicated significant
2026*dfc6aa5cSAndroid Build Coastguard Workerevents occurs.  (If called after the EOI marker is reached, it will
2027*dfc6aa5cSAndroid Build Coastguard Workerimmediately return JPEG_REACHED_EOI without attempting to read more data.)
2028*dfc6aa5cSAndroid Build Coastguard Worker
2029*dfc6aa5cSAndroid Build Coastguard WorkerThe library's output processing will automatically call jpeg_consume_input()
2030*dfc6aa5cSAndroid Build Coastguard Workerwhenever the output processing overtakes the input; thus, simple lockstep
2031*dfc6aa5cSAndroid Build Coastguard Workerdisplay requires no direct calls to jpeg_consume_input().  But by adding
2032*dfc6aa5cSAndroid Build Coastguard Workercalls to jpeg_consume_input(), you can absorb data in advance of what is
2033*dfc6aa5cSAndroid Build Coastguard Workerbeing displayed.  This has two benefits:
2034*dfc6aa5cSAndroid Build Coastguard Worker  * You can limit buildup of unprocessed data in your input buffer.
2035*dfc6aa5cSAndroid Build Coastguard Worker  * You can eliminate extra display passes by paying attention to the
2036*dfc6aa5cSAndroid Build Coastguard Worker    state of the library's input processing.
2037*dfc6aa5cSAndroid Build Coastguard Worker
2038*dfc6aa5cSAndroid Build Coastguard WorkerThe first of these benefits only requires interspersing calls to
2039*dfc6aa5cSAndroid Build Coastguard Workerjpeg_consume_input() with your display operations and any other processing
2040*dfc6aa5cSAndroid Build Coastguard Workeryou may be doing.  To avoid wasting cycles due to backtracking, it's best to
2041*dfc6aa5cSAndroid Build Coastguard Workercall jpeg_consume_input() only after a hundred or so new bytes have arrived.
2042*dfc6aa5cSAndroid Build Coastguard WorkerThis is discussed further under "I/O suspension", above.  (Note: the JPEG
2043*dfc6aa5cSAndroid Build Coastguard Workerlibrary currently is not thread-safe.  You must not call jpeg_consume_input()
2044*dfc6aa5cSAndroid Build Coastguard Workerfrom one thread of control if a different library routine is working on the
2045*dfc6aa5cSAndroid Build Coastguard Workersame JPEG object in another thread.)
2046*dfc6aa5cSAndroid Build Coastguard Worker
2047*dfc6aa5cSAndroid Build Coastguard WorkerWhen input arrives fast enough that more than one new scan is available
2048*dfc6aa5cSAndroid Build Coastguard Workerbefore you start a new output pass, you may as well skip the output pass
2049*dfc6aa5cSAndroid Build Coastguard Workercorresponding to the completed scan.  This occurs for free if you pass
2050*dfc6aa5cSAndroid Build Coastguard Workercinfo.input_scan_number as the target scan number to jpeg_start_output().
2051*dfc6aa5cSAndroid Build Coastguard WorkerThe input_scan_number field is simply the index of the scan currently being
2052*dfc6aa5cSAndroid Build Coastguard Workerconsumed by the input processor.  You can ensure that this is up-to-date by
2053*dfc6aa5cSAndroid Build Coastguard Workeremptying the input buffer just before calling jpeg_start_output(): call
2054*dfc6aa5cSAndroid Build Coastguard Workerjpeg_consume_input() repeatedly until it returns JPEG_SUSPENDED or
2055*dfc6aa5cSAndroid Build Coastguard WorkerJPEG_REACHED_EOI.
2056*dfc6aa5cSAndroid Build Coastguard Worker
2057*dfc6aa5cSAndroid Build Coastguard WorkerThe target scan number passed to jpeg_start_output() is saved in the
2058*dfc6aa5cSAndroid Build Coastguard Workercinfo.output_scan_number field.  The library's output processing calls
2059*dfc6aa5cSAndroid Build Coastguard Workerjpeg_consume_input() whenever the current input scan number and row within
2060*dfc6aa5cSAndroid Build Coastguard Workerthat scan is less than or equal to the current output scan number and row.
2061*dfc6aa5cSAndroid Build Coastguard WorkerThus, input processing can "get ahead" of the output processing but is not
2062*dfc6aa5cSAndroid Build Coastguard Workerallowed to "fall behind".  You can achieve several different effects by
2063*dfc6aa5cSAndroid Build Coastguard Workermanipulating this interlock rule.  For example, if you pass a target scan
2064*dfc6aa5cSAndroid Build Coastguard Workernumber greater than the current input scan number, the output processor will
2065*dfc6aa5cSAndroid Build Coastguard Workerwait until that scan starts to arrive before producing any output.  (To avoid
2066*dfc6aa5cSAndroid Build Coastguard Workeran infinite loop, the target scan number is automatically reset to the last
2067*dfc6aa5cSAndroid Build Coastguard Workerscan number when the end of image is reached.  Thus, if you specify a large
2068*dfc6aa5cSAndroid Build Coastguard Workertarget scan number, the library will just absorb the entire input file and
2069*dfc6aa5cSAndroid Build Coastguard Workerthen perform an output pass.  This is effectively the same as what
2070*dfc6aa5cSAndroid Build Coastguard Workerjpeg_start_decompress() does when you don't select buffered-image mode.)
2071*dfc6aa5cSAndroid Build Coastguard WorkerWhen you pass a target scan number equal to the current input scan number,
2072*dfc6aa5cSAndroid Build Coastguard Workerthe image is displayed no faster than the current input scan arrives.  The
2073*dfc6aa5cSAndroid Build Coastguard Workerfinal possibility is to pass a target scan number less than the current input
2074*dfc6aa5cSAndroid Build Coastguard Workerscan number; this disables the input/output interlock and causes the output
2075*dfc6aa5cSAndroid Build Coastguard Workerprocessor to simply display whatever it finds in the image buffer, without
2076*dfc6aa5cSAndroid Build Coastguard Workerwaiting for input.  (However, the library will not accept a target scan
2077*dfc6aa5cSAndroid Build Coastguard Workernumber less than one, so you can't avoid waiting for the first scan.)
2078*dfc6aa5cSAndroid Build Coastguard Worker
2079*dfc6aa5cSAndroid Build Coastguard WorkerWhen data is arriving faster than the output display processing can advance
2080*dfc6aa5cSAndroid Build Coastguard Workerthrough the image, jpeg_consume_input() will store data into the buffered
2081*dfc6aa5cSAndroid Build Coastguard Workerimage beyond the point at which the output processing is reading data out
2082*dfc6aa5cSAndroid Build Coastguard Workeragain.  If the input arrives fast enough, it may "wrap around" the buffer to
2083*dfc6aa5cSAndroid Build Coastguard Workerthe point where the input is more than one whole scan ahead of the output.
2084*dfc6aa5cSAndroid Build Coastguard WorkerIf the output processing simply proceeds through its display pass without
2085*dfc6aa5cSAndroid Build Coastguard Workerpaying attention to the input, the effect seen on-screen is that the lower
2086*dfc6aa5cSAndroid Build Coastguard Workerpart of the image is one or more scans better in quality than the upper part.
2087*dfc6aa5cSAndroid Build Coastguard WorkerThen, when the next output scan is started, you have a choice of what target
2088*dfc6aa5cSAndroid Build Coastguard Workerscan number to use.  The recommended choice is to use the current input scan
2089*dfc6aa5cSAndroid Build Coastguard Workernumber at that time, which implies that you've skipped the output scans
2090*dfc6aa5cSAndroid Build Coastguard Workercorresponding to the input scans that were completed while you processed the
2091*dfc6aa5cSAndroid Build Coastguard Workerprevious output scan.  In this way, the decoder automatically adapts its
2092*dfc6aa5cSAndroid Build Coastguard Workerspeed to the arriving data, by skipping output scans as necessary to keep up
2093*dfc6aa5cSAndroid Build Coastguard Workerwith the arriving data.
2094*dfc6aa5cSAndroid Build Coastguard Worker
2095*dfc6aa5cSAndroid Build Coastguard WorkerWhen using this strategy, you'll want to be sure that you perform a final
2096*dfc6aa5cSAndroid Build Coastguard Workeroutput pass after receiving all the data; otherwise your last display may not
2097*dfc6aa5cSAndroid Build Coastguard Workerbe full quality across the whole screen.  So the right outer loop logic is
2098*dfc6aa5cSAndroid Build Coastguard Workersomething like this:
2099*dfc6aa5cSAndroid Build Coastguard Worker        do {
2100*dfc6aa5cSAndroid Build Coastguard Worker            absorb any waiting input by calling jpeg_consume_input()
2101*dfc6aa5cSAndroid Build Coastguard Worker            final_pass = jpeg_input_complete(&cinfo);
2102*dfc6aa5cSAndroid Build Coastguard Worker            adjust output decompression parameters if required
2103*dfc6aa5cSAndroid Build Coastguard Worker            jpeg_start_output(&cinfo, cinfo.input_scan_number);
2104*dfc6aa5cSAndroid Build Coastguard Worker            ...
2105*dfc6aa5cSAndroid Build Coastguard Worker            jpeg_finish_output()
2106*dfc6aa5cSAndroid Build Coastguard Worker        } while (!final_pass);
2107*dfc6aa5cSAndroid Build Coastguard Workerrather than quitting as soon as jpeg_input_complete() returns TRUE.  This
2108*dfc6aa5cSAndroid Build Coastguard Workerarrangement makes it simple to use higher-quality decoding parameters
2109*dfc6aa5cSAndroid Build Coastguard Workerfor the final pass.  But if you don't want to use special parameters for
2110*dfc6aa5cSAndroid Build Coastguard Workerthe final pass, the right loop logic is like this:
2111*dfc6aa5cSAndroid Build Coastguard Worker        for (;;) {
2112*dfc6aa5cSAndroid Build Coastguard Worker            absorb any waiting input by calling jpeg_consume_input()
2113*dfc6aa5cSAndroid Build Coastguard Worker            jpeg_start_output(&cinfo, cinfo.input_scan_number);
2114*dfc6aa5cSAndroid Build Coastguard Worker            ...
2115*dfc6aa5cSAndroid Build Coastguard Worker            jpeg_finish_output()
2116*dfc6aa5cSAndroid Build Coastguard Worker            if (jpeg_input_complete(&cinfo) &&
2117*dfc6aa5cSAndroid Build Coastguard Worker                cinfo.input_scan_number == cinfo.output_scan_number)
2118*dfc6aa5cSAndroid Build Coastguard Worker              break;
2119*dfc6aa5cSAndroid Build Coastguard Worker        }
2120*dfc6aa5cSAndroid Build Coastguard WorkerIn this case you don't need to know in advance whether an output pass is to
2121*dfc6aa5cSAndroid Build Coastguard Workerbe the last one, so it's not necessary to have reached EOF before starting
2122*dfc6aa5cSAndroid Build Coastguard Workerthe final output pass; rather, what you want to test is whether the output
2123*dfc6aa5cSAndroid Build Coastguard Workerpass was performed in sync with the final input scan.  This form of the loop
2124*dfc6aa5cSAndroid Build Coastguard Workerwill avoid an extra output pass whenever the decoder is able (or nearly able)
2125*dfc6aa5cSAndroid Build Coastguard Workerto keep up with the incoming data.
2126*dfc6aa5cSAndroid Build Coastguard Worker
2127*dfc6aa5cSAndroid Build Coastguard WorkerWhen the data transmission speed is high, you might begin a display pass,
2128*dfc6aa5cSAndroid Build Coastguard Workerthen find that much or all of the file has arrived before you can complete
2129*dfc6aa5cSAndroid Build Coastguard Workerthe pass.  (You can detect this by noting the JPEG_REACHED_EOI return code
2130*dfc6aa5cSAndroid Build Coastguard Workerfrom jpeg_consume_input(), or equivalently by testing jpeg_input_complete().)
2131*dfc6aa5cSAndroid Build Coastguard WorkerIn this situation you may wish to abort the current display pass and start a
2132*dfc6aa5cSAndroid Build Coastguard Workernew one using the newly arrived information.  To do so, just call
2133*dfc6aa5cSAndroid Build Coastguard Workerjpeg_finish_output() and then start a new pass with jpeg_start_output().
2134*dfc6aa5cSAndroid Build Coastguard Worker
2135*dfc6aa5cSAndroid Build Coastguard WorkerA variant strategy is to abort and restart display if more than one complete
2136*dfc6aa5cSAndroid Build Coastguard Workerscan arrives during an output pass; this can be detected by noting
2137*dfc6aa5cSAndroid Build Coastguard WorkerJPEG_REACHED_SOS returns and/or examining cinfo.input_scan_number.  This
2138*dfc6aa5cSAndroid Build Coastguard Workeridea should be employed with caution, however, since the display process
2139*dfc6aa5cSAndroid Build Coastguard Workermight never get to the bottom of the image before being aborted, resulting
2140*dfc6aa5cSAndroid Build Coastguard Workerin the lower part of the screen being several passes worse than the upper.
2141*dfc6aa5cSAndroid Build Coastguard WorkerIn most cases it's probably best to abort an output pass only if the whole
2142*dfc6aa5cSAndroid Build Coastguard Workerfile has arrived and you want to begin the final output pass immediately.
2143*dfc6aa5cSAndroid Build Coastguard Worker
2144*dfc6aa5cSAndroid Build Coastguard WorkerWhen receiving data across a communication link, we recommend always using
2145*dfc6aa5cSAndroid Build Coastguard Workerthe current input scan number for the output target scan number; if a
2146*dfc6aa5cSAndroid Build Coastguard Workerhigher-quality final pass is to be done, it should be started (aborting any
2147*dfc6aa5cSAndroid Build Coastguard Workerincomplete output pass) as soon as the end of file is received.  However,
2148*dfc6aa5cSAndroid Build Coastguard Workermany other strategies are possible.  For example, the application can examine
2149*dfc6aa5cSAndroid Build Coastguard Workerthe parameters of the current input scan and decide whether to display it or
2150*dfc6aa5cSAndroid Build Coastguard Workernot.  If the scan contains only chroma data, one might choose not to use it
2151*dfc6aa5cSAndroid Build Coastguard Workeras the target scan, expecting that the scan will be small and will arrive
2152*dfc6aa5cSAndroid Build Coastguard Workerquickly.  To skip to the next scan, call jpeg_consume_input() until it
2153*dfc6aa5cSAndroid Build Coastguard Workerreturns JPEG_REACHED_SOS or JPEG_REACHED_EOI.  Or just use the next higher
2154*dfc6aa5cSAndroid Build Coastguard Workernumber as the target scan for jpeg_start_output(); but that method doesn't
2155*dfc6aa5cSAndroid Build Coastguard Workerlet you inspect the next scan's parameters before deciding to display it.
2156*dfc6aa5cSAndroid Build Coastguard Worker
2157*dfc6aa5cSAndroid Build Coastguard Worker
2158*dfc6aa5cSAndroid Build Coastguard WorkerIn buffered-image mode, jpeg_start_decompress() never performs input and
2159*dfc6aa5cSAndroid Build Coastguard Workerthus never suspends.  An application that uses input suspension with
2160*dfc6aa5cSAndroid Build Coastguard Workerbuffered-image mode must be prepared for suspension returns from these
2161*dfc6aa5cSAndroid Build Coastguard Workerroutines:
2162*dfc6aa5cSAndroid Build Coastguard Worker* jpeg_start_output() performs input only if you request 2-pass quantization
2163*dfc6aa5cSAndroid Build Coastguard Worker  and the target scan isn't fully read yet.  (This is discussed below.)
2164*dfc6aa5cSAndroid Build Coastguard Worker* jpeg_read_scanlines(), as always, returns the number of scanlines that it
2165*dfc6aa5cSAndroid Build Coastguard Worker  was able to produce before suspending.
2166*dfc6aa5cSAndroid Build Coastguard Worker* jpeg_finish_output() will read any markers following the target scan,
2167*dfc6aa5cSAndroid Build Coastguard Worker  up to the end of the file or the SOS marker that begins another scan.
2168*dfc6aa5cSAndroid Build Coastguard Worker  (But it reads no input if jpeg_consume_input() has already reached the
2169*dfc6aa5cSAndroid Build Coastguard Worker  end of the file or a SOS marker beyond the target output scan.)
2170*dfc6aa5cSAndroid Build Coastguard Worker* jpeg_finish_decompress() will read until the end of file, and thus can
2171*dfc6aa5cSAndroid Build Coastguard Worker  suspend if the end hasn't already been reached (as can be tested by
2172*dfc6aa5cSAndroid Build Coastguard Worker  calling jpeg_input_complete()).
2173*dfc6aa5cSAndroid Build Coastguard Workerjpeg_start_output(), jpeg_finish_output(), and jpeg_finish_decompress()
2174*dfc6aa5cSAndroid Build Coastguard Workerall return TRUE if they completed their tasks, FALSE if they had to suspend.
2175*dfc6aa5cSAndroid Build Coastguard WorkerIn the event of a FALSE return, the application must load more input data
2176*dfc6aa5cSAndroid Build Coastguard Workerand repeat the call.  Applications that use non-suspending data sources need
2177*dfc6aa5cSAndroid Build Coastguard Workernot check the return values of these three routines.
2178*dfc6aa5cSAndroid Build Coastguard Worker
2179*dfc6aa5cSAndroid Build Coastguard Worker
2180*dfc6aa5cSAndroid Build Coastguard WorkerIt is possible to change decoding parameters between output passes in the
2181*dfc6aa5cSAndroid Build Coastguard Workerbuffered-image mode.  The decoder library currently supports only very
2182*dfc6aa5cSAndroid Build Coastguard Workerlimited changes of parameters.  ONLY THE FOLLOWING parameter changes are
2183*dfc6aa5cSAndroid Build Coastguard Workerallowed after jpeg_start_decompress() is called:
2184*dfc6aa5cSAndroid Build Coastguard Worker* dct_method can be changed before each call to jpeg_start_output().
2185*dfc6aa5cSAndroid Build Coastguard Worker  For example, one could use a fast DCT method for early scans, changing
2186*dfc6aa5cSAndroid Build Coastguard Worker  to a higher quality method for the final scan.
2187*dfc6aa5cSAndroid Build Coastguard Worker* dither_mode can be changed before each call to jpeg_start_output();
2188*dfc6aa5cSAndroid Build Coastguard Worker  of course this has no impact if not using color quantization.  Typically
2189*dfc6aa5cSAndroid Build Coastguard Worker  one would use ordered dither for initial passes, then switch to
2190*dfc6aa5cSAndroid Build Coastguard Worker  Floyd-Steinberg dither for the final pass.  Caution: changing dither mode
2191*dfc6aa5cSAndroid Build Coastguard Worker  can cause more memory to be allocated by the library.  Although the amount
2192*dfc6aa5cSAndroid Build Coastguard Worker  of memory involved is not large (a scanline or so), it may cause the
2193*dfc6aa5cSAndroid Build Coastguard Worker  initial max_memory_to_use specification to be exceeded, which in the worst
2194*dfc6aa5cSAndroid Build Coastguard Worker  case would result in an out-of-memory failure.
2195*dfc6aa5cSAndroid Build Coastguard Worker* do_block_smoothing can be changed before each call to jpeg_start_output().
2196*dfc6aa5cSAndroid Build Coastguard Worker  This setting is relevant only when decoding a progressive JPEG image.
2197*dfc6aa5cSAndroid Build Coastguard Worker  During the first DC-only scan, block smoothing provides a very "fuzzy" look
2198*dfc6aa5cSAndroid Build Coastguard Worker  instead of the very "blocky" look seen without it; which is better seems a
2199*dfc6aa5cSAndroid Build Coastguard Worker  matter of personal taste.  But block smoothing is nearly always a win
2200*dfc6aa5cSAndroid Build Coastguard Worker  during later stages, especially when decoding a successive-approximation
2201*dfc6aa5cSAndroid Build Coastguard Worker  image: smoothing helps to hide the slight blockiness that otherwise shows
2202*dfc6aa5cSAndroid Build Coastguard Worker  up on smooth gradients until the lowest coefficient bits are sent.
2203*dfc6aa5cSAndroid Build Coastguard Worker* Color quantization mode can be changed under the rules described below.
2204*dfc6aa5cSAndroid Build Coastguard Worker  You *cannot* change between full-color and quantized output (because that
2205*dfc6aa5cSAndroid Build Coastguard Worker  would alter the required I/O buffer sizes), but you can change which
2206*dfc6aa5cSAndroid Build Coastguard Worker  quantization method is used.
2207*dfc6aa5cSAndroid Build Coastguard Worker
2208*dfc6aa5cSAndroid Build Coastguard WorkerWhen generating color-quantized output, changing quantization method is a
2209*dfc6aa5cSAndroid Build Coastguard Workervery useful way of switching between high-speed and high-quality display.
2210*dfc6aa5cSAndroid Build Coastguard WorkerThe library allows you to change among its three quantization methods:
2211*dfc6aa5cSAndroid Build Coastguard Worker1. Single-pass quantization to a fixed color cube.
2212*dfc6aa5cSAndroid Build Coastguard Worker   Selected by cinfo.two_pass_quantize = FALSE and cinfo.colormap = NULL.
2213*dfc6aa5cSAndroid Build Coastguard Worker2. Single-pass quantization to an application-supplied colormap.
2214*dfc6aa5cSAndroid Build Coastguard Worker   Selected by setting cinfo.colormap to point to the colormap (the value of
2215*dfc6aa5cSAndroid Build Coastguard Worker   two_pass_quantize is ignored); also set cinfo.actual_number_of_colors.
2216*dfc6aa5cSAndroid Build Coastguard Worker3. Two-pass quantization to a colormap chosen specifically for the image.
2217*dfc6aa5cSAndroid Build Coastguard Worker   Selected by cinfo.two_pass_quantize = TRUE and cinfo.colormap = NULL.
2218*dfc6aa5cSAndroid Build Coastguard Worker   (This is the default setting selected by jpeg_read_header, but it is
2219*dfc6aa5cSAndroid Build Coastguard Worker   probably NOT what you want for the first pass of progressive display!)
2220*dfc6aa5cSAndroid Build Coastguard WorkerThese methods offer successively better quality and lesser speed.  However,
2221*dfc6aa5cSAndroid Build Coastguard Workeronly the first method is available for quantizing in non-RGB color spaces.
2222*dfc6aa5cSAndroid Build Coastguard Worker
2223*dfc6aa5cSAndroid Build Coastguard WorkerIMPORTANT: because the different quantizer methods have very different
2224*dfc6aa5cSAndroid Build Coastguard Workerworking-storage requirements, the library requires you to indicate which
2225*dfc6aa5cSAndroid Build Coastguard Workerone(s) you intend to use before you call jpeg_start_decompress().  (If we did
2226*dfc6aa5cSAndroid Build Coastguard Workernot require this, the max_memory_to_use setting would be a complete fiction.)
2227*dfc6aa5cSAndroid Build Coastguard WorkerYou do this by setting one or more of these three cinfo fields to TRUE:
2228*dfc6aa5cSAndroid Build Coastguard Worker        enable_1pass_quant              Fixed color cube colormap
2229*dfc6aa5cSAndroid Build Coastguard Worker        enable_external_quant           Externally-supplied colormap
2230*dfc6aa5cSAndroid Build Coastguard Worker        enable_2pass_quant              Two-pass custom colormap
2231*dfc6aa5cSAndroid Build Coastguard WorkerAll three are initialized FALSE by jpeg_read_header().  But
2232*dfc6aa5cSAndroid Build Coastguard Workerjpeg_start_decompress() automatically sets TRUE the one selected by the
2233*dfc6aa5cSAndroid Build Coastguard Workercurrent two_pass_quantize and colormap settings, so you only need to set the
2234*dfc6aa5cSAndroid Build Coastguard Workerenable flags for any other quantization methods you plan to change to later.
2235*dfc6aa5cSAndroid Build Coastguard Worker
2236*dfc6aa5cSAndroid Build Coastguard WorkerAfter setting the enable flags correctly at jpeg_start_decompress() time, you
2237*dfc6aa5cSAndroid Build Coastguard Workercan change to any enabled quantization method by setting two_pass_quantize
2238*dfc6aa5cSAndroid Build Coastguard Workerand colormap properly just before calling jpeg_start_output().  The following
2239*dfc6aa5cSAndroid Build Coastguard Workerspecial rules apply:
2240*dfc6aa5cSAndroid Build Coastguard Worker1. You must explicitly set cinfo.colormap to NULL when switching to 1-pass
2241*dfc6aa5cSAndroid Build Coastguard Worker   or 2-pass mode from a different mode, or when you want the 2-pass
2242*dfc6aa5cSAndroid Build Coastguard Worker   quantizer to be re-run to generate a new colormap.
2243*dfc6aa5cSAndroid Build Coastguard Worker2. To switch to an external colormap, or to change to a different external
2244*dfc6aa5cSAndroid Build Coastguard Worker   colormap than was used on the prior pass, you must call
2245*dfc6aa5cSAndroid Build Coastguard Worker   jpeg_new_colormap() after setting cinfo.colormap.
2246*dfc6aa5cSAndroid Build Coastguard WorkerNOTE: if you want to use the same colormap as was used in the prior pass,
2247*dfc6aa5cSAndroid Build Coastguard Workeryou should not do either of these things.  This will save some nontrivial
2248*dfc6aa5cSAndroid Build Coastguard Workerswitchover costs.
2249*dfc6aa5cSAndroid Build Coastguard Worker(These requirements exist because cinfo.colormap will always be non-NULL
2250*dfc6aa5cSAndroid Build Coastguard Workerafter completing a prior output pass, since both the 1-pass and 2-pass
2251*dfc6aa5cSAndroid Build Coastguard Workerquantizers set it to point to their output colormaps.  Thus you have to
2252*dfc6aa5cSAndroid Build Coastguard Workerdo one of these two things to notify the library that something has changed.
2253*dfc6aa5cSAndroid Build Coastguard WorkerYup, it's a bit klugy, but it's necessary to do it this way for backwards
2254*dfc6aa5cSAndroid Build Coastguard Workercompatibility.)
2255*dfc6aa5cSAndroid Build Coastguard Worker
2256*dfc6aa5cSAndroid Build Coastguard WorkerNote that in buffered-image mode, the library generates any requested colormap
2257*dfc6aa5cSAndroid Build Coastguard Workerduring jpeg_start_output(), not during jpeg_start_decompress().
2258*dfc6aa5cSAndroid Build Coastguard Worker
2259*dfc6aa5cSAndroid Build Coastguard WorkerWhen using two-pass quantization, jpeg_start_output() makes a pass over the
2260*dfc6aa5cSAndroid Build Coastguard Workerbuffered image to determine the optimum color map; it therefore may take a
2261*dfc6aa5cSAndroid Build Coastguard Workersignificant amount of time, whereas ordinarily it does little work.  The
2262*dfc6aa5cSAndroid Build Coastguard Workerprogress monitor hook is called during this pass, if defined.  It is also
2263*dfc6aa5cSAndroid Build Coastguard Workerimportant to realize that if the specified target scan number is greater than
2264*dfc6aa5cSAndroid Build Coastguard Workeror equal to the current input scan number, jpeg_start_output() will attempt
2265*dfc6aa5cSAndroid Build Coastguard Workerto consume input as it makes this pass.  If you use a suspending data source,
2266*dfc6aa5cSAndroid Build Coastguard Workeryou need to check for a FALSE return from jpeg_start_output() under these
2267*dfc6aa5cSAndroid Build Coastguard Workerconditions.  The combination of 2-pass quantization and a not-yet-fully-read
2268*dfc6aa5cSAndroid Build Coastguard Workertarget scan is the only case in which jpeg_start_output() will consume input.
2269*dfc6aa5cSAndroid Build Coastguard Worker
2270*dfc6aa5cSAndroid Build Coastguard Worker
2271*dfc6aa5cSAndroid Build Coastguard WorkerApplication authors who support buffered-image mode may be tempted to use it
2272*dfc6aa5cSAndroid Build Coastguard Workerfor all JPEG images, even single-scan ones.  This will work, but it is
2273*dfc6aa5cSAndroid Build Coastguard Workerinefficient: there is no need to create an image-sized coefficient buffer for
2274*dfc6aa5cSAndroid Build Coastguard Workersingle-scan images.  Requesting buffered-image mode for such an image wastes
2275*dfc6aa5cSAndroid Build Coastguard Workermemory.  Worse, it can cost time on large images, since the buffered data has
2276*dfc6aa5cSAndroid Build Coastguard Workerto be swapped out or written to a temporary file.  If you are concerned about
2277*dfc6aa5cSAndroid Build Coastguard Workermaximum performance on baseline JPEG files, you should use buffered-image
2278*dfc6aa5cSAndroid Build Coastguard Workermode only when the incoming file actually has multiple scans.  This can be
2279*dfc6aa5cSAndroid Build Coastguard Workertested by calling jpeg_has_multiple_scans(), which will return a correct
2280*dfc6aa5cSAndroid Build Coastguard Workerresult at any time after jpeg_read_header() completes.
2281*dfc6aa5cSAndroid Build Coastguard Worker
2282*dfc6aa5cSAndroid Build Coastguard WorkerIt is also worth noting that when you use jpeg_consume_input() to let input
2283*dfc6aa5cSAndroid Build Coastguard Workerprocessing get ahead of output processing, the resulting pattern of access to
2284*dfc6aa5cSAndroid Build Coastguard Workerthe coefficient buffer is quite nonsequential.  It's best to use the memory
2285*dfc6aa5cSAndroid Build Coastguard Workermanager jmemnobs.c if you can (ie, if you have enough real or virtual main
2286*dfc6aa5cSAndroid Build Coastguard Workermemory).  If not, at least make sure that max_memory_to_use is set as high as
2287*dfc6aa5cSAndroid Build Coastguard Workerpossible.  If the JPEG memory manager has to use a temporary file, you will
2288*dfc6aa5cSAndroid Build Coastguard Workerprobably see a lot of disk traffic and poor performance.  (This could be
2289*dfc6aa5cSAndroid Build Coastguard Workerimproved with additional work on the memory manager, but we haven't gotten
2290*dfc6aa5cSAndroid Build Coastguard Workeraround to it yet.)
2291*dfc6aa5cSAndroid Build Coastguard Worker
2292*dfc6aa5cSAndroid Build Coastguard WorkerIn some applications it may be convenient to use jpeg_consume_input() for all
2293*dfc6aa5cSAndroid Build Coastguard Workerinput processing, including reading the initial markers; that is, you may
2294*dfc6aa5cSAndroid Build Coastguard Workerwish to call jpeg_consume_input() instead of jpeg_read_header() during
2295*dfc6aa5cSAndroid Build Coastguard Workerstartup.  This works, but note that you must check for JPEG_REACHED_SOS and
2296*dfc6aa5cSAndroid Build Coastguard WorkerJPEG_REACHED_EOI return codes as the equivalent of jpeg_read_header's codes.
2297*dfc6aa5cSAndroid Build Coastguard WorkerOnce the first SOS marker has been reached, you must call
2298*dfc6aa5cSAndroid Build Coastguard Workerjpeg_start_decompress() before jpeg_consume_input() will consume more input;
2299*dfc6aa5cSAndroid Build Coastguard Workerit'll just keep returning JPEG_REACHED_SOS until you do.  If you read a
2300*dfc6aa5cSAndroid Build Coastguard Workertables-only file this way, jpeg_consume_input() will return JPEG_REACHED_EOI
2301*dfc6aa5cSAndroid Build Coastguard Workerwithout ever returning JPEG_REACHED_SOS; be sure to check for this case.
2302*dfc6aa5cSAndroid Build Coastguard WorkerIf this happens, the decompressor will not read any more input until you call
2303*dfc6aa5cSAndroid Build Coastguard Workerjpeg_abort() to reset it.  It is OK to call jpeg_consume_input() even when not
2304*dfc6aa5cSAndroid Build Coastguard Workerusing buffered-image mode, but in that case it's basically a no-op after the
2305*dfc6aa5cSAndroid Build Coastguard Workerinitial markers have been read: it will just return JPEG_SUSPENDED.
2306*dfc6aa5cSAndroid Build Coastguard Worker
2307*dfc6aa5cSAndroid Build Coastguard Worker
2308*dfc6aa5cSAndroid Build Coastguard WorkerAbbreviated datastreams and multiple images
2309*dfc6aa5cSAndroid Build Coastguard Worker-------------------------------------------
2310*dfc6aa5cSAndroid Build Coastguard Worker
2311*dfc6aa5cSAndroid Build Coastguard WorkerA JPEG compression or decompression object can be reused to process multiple
2312*dfc6aa5cSAndroid Build Coastguard Workerimages.  This saves a small amount of time per image by eliminating the
2313*dfc6aa5cSAndroid Build Coastguard Worker"create" and "destroy" operations, but that isn't the real purpose of the
2314*dfc6aa5cSAndroid Build Coastguard Workerfeature.  Rather, reuse of an object provides support for abbreviated JPEG
2315*dfc6aa5cSAndroid Build Coastguard Workerdatastreams.  Object reuse can also simplify processing a series of images in
2316*dfc6aa5cSAndroid Build Coastguard Workera single input or output file.  This section explains these features.
2317*dfc6aa5cSAndroid Build Coastguard Worker
2318*dfc6aa5cSAndroid Build Coastguard WorkerA JPEG file normally contains several hundred bytes worth of quantization
2319*dfc6aa5cSAndroid Build Coastguard Workerand Huffman tables.  In a situation where many images will be stored or
2320*dfc6aa5cSAndroid Build Coastguard Workertransmitted with identical tables, this may represent an annoying overhead.
2321*dfc6aa5cSAndroid Build Coastguard WorkerThe JPEG standard therefore permits tables to be omitted.  The standard
2322*dfc6aa5cSAndroid Build Coastguard Workerdefines three classes of JPEG datastreams:
2323*dfc6aa5cSAndroid Build Coastguard Worker  * "Interchange" datastreams contain an image and all tables needed to decode
2324*dfc6aa5cSAndroid Build Coastguard Worker     the image.  These are the usual kind of JPEG file.
2325*dfc6aa5cSAndroid Build Coastguard Worker  * "Abbreviated image" datastreams contain an image, but are missing some or
2326*dfc6aa5cSAndroid Build Coastguard Worker    all of the tables needed to decode that image.
2327*dfc6aa5cSAndroid Build Coastguard Worker  * "Abbreviated table specification" (henceforth "tables-only") datastreams
2328*dfc6aa5cSAndroid Build Coastguard Worker    contain only table specifications.
2329*dfc6aa5cSAndroid Build Coastguard WorkerTo decode an abbreviated image, it is necessary to load the missing table(s)
2330*dfc6aa5cSAndroid Build Coastguard Workerinto the decoder beforehand.  This can be accomplished by reading a separate
2331*dfc6aa5cSAndroid Build Coastguard Workertables-only file.  A variant scheme uses a series of images in which the first
2332*dfc6aa5cSAndroid Build Coastguard Workerimage is an interchange (complete) datastream, while subsequent ones are
2333*dfc6aa5cSAndroid Build Coastguard Workerabbreviated and rely on the tables loaded by the first image.  It is assumed
2334*dfc6aa5cSAndroid Build Coastguard Workerthat once the decoder has read a table, it will remember that table until a
2335*dfc6aa5cSAndroid Build Coastguard Workernew definition for the same table number is encountered.
2336*dfc6aa5cSAndroid Build Coastguard Worker
2337*dfc6aa5cSAndroid Build Coastguard WorkerIt is the application designer's responsibility to figure out how to associate
2338*dfc6aa5cSAndroid Build Coastguard Workerthe correct tables with an abbreviated image.  While abbreviated datastreams
2339*dfc6aa5cSAndroid Build Coastguard Workercan be useful in a closed environment, their use is strongly discouraged in
2340*dfc6aa5cSAndroid Build Coastguard Workerany situation where data exchange with other applications might be needed.
2341*dfc6aa5cSAndroid Build Coastguard WorkerCaveat designer.
2342*dfc6aa5cSAndroid Build Coastguard Worker
2343*dfc6aa5cSAndroid Build Coastguard WorkerThe JPEG library provides support for reading and writing any combination of
2344*dfc6aa5cSAndroid Build Coastguard Workertables-only datastreams and abbreviated images.  In both compression and
2345*dfc6aa5cSAndroid Build Coastguard Workerdecompression objects, a quantization or Huffman table will be retained for
2346*dfc6aa5cSAndroid Build Coastguard Workerthe lifetime of the object, unless it is overwritten by a new table definition.
2347*dfc6aa5cSAndroid Build Coastguard Worker
2348*dfc6aa5cSAndroid Build Coastguard Worker
2349*dfc6aa5cSAndroid Build Coastguard WorkerTo create abbreviated image datastreams, it is only necessary to tell the
2350*dfc6aa5cSAndroid Build Coastguard Workercompressor not to emit some or all of the tables it is using.  Each
2351*dfc6aa5cSAndroid Build Coastguard Workerquantization and Huffman table struct contains a boolean field "sent_table",
2352*dfc6aa5cSAndroid Build Coastguard Workerwhich normally is initialized to FALSE.  For each table used by the image, the
2353*dfc6aa5cSAndroid Build Coastguard Workerheader-writing process emits the table and sets sent_table = TRUE unless it is
2354*dfc6aa5cSAndroid Build Coastguard Workeralready TRUE.  (In normal usage, this prevents outputting the same table
2355*dfc6aa5cSAndroid Build Coastguard Workerdefinition multiple times, as would otherwise occur because the chroma
2356*dfc6aa5cSAndroid Build Coastguard Workercomponents typically share tables.)  Thus, setting this field to TRUE before
2357*dfc6aa5cSAndroid Build Coastguard Workercalling jpeg_start_compress() will prevent the table from being written at
2358*dfc6aa5cSAndroid Build Coastguard Workerall.
2359*dfc6aa5cSAndroid Build Coastguard Worker
2360*dfc6aa5cSAndroid Build Coastguard WorkerIf you want to create a "pure" abbreviated image file containing no tables,
2361*dfc6aa5cSAndroid Build Coastguard Workerjust call "jpeg_suppress_tables(&cinfo, TRUE)" after constructing all the
2362*dfc6aa5cSAndroid Build Coastguard Workertables.  If you want to emit some but not all tables, you'll need to set the
2363*dfc6aa5cSAndroid Build Coastguard Workerindividual sent_table fields directly.
2364*dfc6aa5cSAndroid Build Coastguard Worker
2365*dfc6aa5cSAndroid Build Coastguard WorkerTo create an abbreviated image, you must also call jpeg_start_compress()
2366*dfc6aa5cSAndroid Build Coastguard Workerwith a second parameter of FALSE, not TRUE.  Otherwise jpeg_start_compress()
2367*dfc6aa5cSAndroid Build Coastguard Workerwill force all the sent_table fields to FALSE.  (This is a safety feature to
2368*dfc6aa5cSAndroid Build Coastguard Workerprevent abbreviated images from being created accidentally.)
2369*dfc6aa5cSAndroid Build Coastguard Worker
2370*dfc6aa5cSAndroid Build Coastguard WorkerTo create a tables-only file, perform the same parameter setup that you
2371*dfc6aa5cSAndroid Build Coastguard Workernormally would, but instead of calling jpeg_start_compress() and so on, call
2372*dfc6aa5cSAndroid Build Coastguard Workerjpeg_write_tables(&cinfo).  This will write an abbreviated datastream
2373*dfc6aa5cSAndroid Build Coastguard Workercontaining only SOI, DQT and/or DHT markers, and EOI.  All the quantization
2374*dfc6aa5cSAndroid Build Coastguard Workerand Huffman tables that are currently defined in the compression object will
2375*dfc6aa5cSAndroid Build Coastguard Workerbe emitted unless their sent_tables flag is already TRUE, and then all the
2376*dfc6aa5cSAndroid Build Coastguard Workersent_tables flags will be set TRUE.
2377*dfc6aa5cSAndroid Build Coastguard Worker
2378*dfc6aa5cSAndroid Build Coastguard WorkerA sure-fire way to create matching tables-only and abbreviated image files
2379*dfc6aa5cSAndroid Build Coastguard Workeris to proceed as follows:
2380*dfc6aa5cSAndroid Build Coastguard Worker
2381*dfc6aa5cSAndroid Build Coastguard Worker        create JPEG compression object
2382*dfc6aa5cSAndroid Build Coastguard Worker        set JPEG parameters
2383*dfc6aa5cSAndroid Build Coastguard Worker        set destination to tables-only file
2384*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_write_tables(&cinfo);
2385*dfc6aa5cSAndroid Build Coastguard Worker        set destination to image file
2386*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_start_compress(&cinfo, FALSE);
2387*dfc6aa5cSAndroid Build Coastguard Worker        write data...
2388*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_finish_compress(&cinfo);
2389*dfc6aa5cSAndroid Build Coastguard Worker
2390*dfc6aa5cSAndroid Build Coastguard WorkerSince the JPEG parameters are not altered between writing the table file and
2391*dfc6aa5cSAndroid Build Coastguard Workerthe abbreviated image file, the same tables are sure to be used.  Of course,
2392*dfc6aa5cSAndroid Build Coastguard Workeryou can repeat the jpeg_start_compress() ... jpeg_finish_compress() sequence
2393*dfc6aa5cSAndroid Build Coastguard Workermany times to produce many abbreviated image files matching the table file.
2394*dfc6aa5cSAndroid Build Coastguard Worker
2395*dfc6aa5cSAndroid Build Coastguard WorkerYou cannot suppress output of the computed Huffman tables when Huffman
2396*dfc6aa5cSAndroid Build Coastguard Workeroptimization is selected.  (If you could, there'd be no way to decode the
2397*dfc6aa5cSAndroid Build Coastguard Workerimage...)  Generally, you don't want to set optimize_coding = TRUE when
2398*dfc6aa5cSAndroid Build Coastguard Workeryou are trying to produce abbreviated files.
2399*dfc6aa5cSAndroid Build Coastguard Worker
2400*dfc6aa5cSAndroid Build Coastguard WorkerIn some cases you might want to compress an image using tables which are
2401*dfc6aa5cSAndroid Build Coastguard Workernot stored in the application, but are defined in an interchange or
2402*dfc6aa5cSAndroid Build Coastguard Workertables-only file readable by the application.  This can be done by setting up
2403*dfc6aa5cSAndroid Build Coastguard Workera JPEG decompression object to read the specification file, then copying the
2404*dfc6aa5cSAndroid Build Coastguard Workertables into your compression object.  See jpeg_copy_critical_parameters()
2405*dfc6aa5cSAndroid Build Coastguard Workerfor an example of copying quantization tables.
2406*dfc6aa5cSAndroid Build Coastguard Worker
2407*dfc6aa5cSAndroid Build Coastguard Worker
2408*dfc6aa5cSAndroid Build Coastguard WorkerTo read abbreviated image files, you simply need to load the proper tables
2409*dfc6aa5cSAndroid Build Coastguard Workerinto the decompression object before trying to read the abbreviated image.
2410*dfc6aa5cSAndroid Build Coastguard WorkerIf the proper tables are stored in the application program, you can just
2411*dfc6aa5cSAndroid Build Coastguard Workerallocate the table structs and fill in their contents directly.  For example,
2412*dfc6aa5cSAndroid Build Coastguard Workerto load a fixed quantization table into table slot "n":
2413*dfc6aa5cSAndroid Build Coastguard Worker
2414*dfc6aa5cSAndroid Build Coastguard Worker    if (cinfo.quant_tbl_ptrs[n] == NULL)
2415*dfc6aa5cSAndroid Build Coastguard Worker      cinfo.quant_tbl_ptrs[n] = jpeg_alloc_quant_table((j_common_ptr) &cinfo);
2416*dfc6aa5cSAndroid Build Coastguard Worker    quant_ptr = cinfo.quant_tbl_ptrs[n];        /* quant_ptr is JQUANT_TBL* */
2417*dfc6aa5cSAndroid Build Coastguard Worker    for (i = 0; i < 64; i++) {
2418*dfc6aa5cSAndroid Build Coastguard Worker      /* Qtable[] is desired quantization table, in natural array order */
2419*dfc6aa5cSAndroid Build Coastguard Worker      quant_ptr->quantval[i] = Qtable[i];
2420*dfc6aa5cSAndroid Build Coastguard Worker    }
2421*dfc6aa5cSAndroid Build Coastguard Worker
2422*dfc6aa5cSAndroid Build Coastguard WorkerCode to load a fixed Huffman table is typically (for AC table "n"):
2423*dfc6aa5cSAndroid Build Coastguard Worker
2424*dfc6aa5cSAndroid Build Coastguard Worker    if (cinfo.ac_huff_tbl_ptrs[n] == NULL)
2425*dfc6aa5cSAndroid Build Coastguard Worker      cinfo.ac_huff_tbl_ptrs[n] = jpeg_alloc_huff_table((j_common_ptr) &cinfo);
2426*dfc6aa5cSAndroid Build Coastguard Worker    huff_ptr = cinfo.ac_huff_tbl_ptrs[n];       /* huff_ptr is JHUFF_TBL* */
2427*dfc6aa5cSAndroid Build Coastguard Worker    for (i = 1; i <= 16; i++) {
2428*dfc6aa5cSAndroid Build Coastguard Worker      /* counts[i] is number of Huffman codes of length i bits, i=1..16 */
2429*dfc6aa5cSAndroid Build Coastguard Worker      huff_ptr->bits[i] = counts[i];
2430*dfc6aa5cSAndroid Build Coastguard Worker    }
2431*dfc6aa5cSAndroid Build Coastguard Worker    for (i = 0; i < 256; i++) {
2432*dfc6aa5cSAndroid Build Coastguard Worker      /* symbols[] is the list of Huffman symbols, in code-length order */
2433*dfc6aa5cSAndroid Build Coastguard Worker      huff_ptr->huffval[i] = symbols[i];
2434*dfc6aa5cSAndroid Build Coastguard Worker    }
2435*dfc6aa5cSAndroid Build Coastguard Worker
2436*dfc6aa5cSAndroid Build Coastguard Worker(Note that trying to set cinfo.quant_tbl_ptrs[n] to point directly at a
2437*dfc6aa5cSAndroid Build Coastguard Workerconstant JQUANT_TBL object is not safe.  If the incoming file happened to
2438*dfc6aa5cSAndroid Build Coastguard Workercontain a quantization table definition, your master table would get
2439*dfc6aa5cSAndroid Build Coastguard Workeroverwritten!  Instead allocate a working table copy and copy the master table
2440*dfc6aa5cSAndroid Build Coastguard Workerinto it, as illustrated above.  Ditto for Huffman tables, of course.)
2441*dfc6aa5cSAndroid Build Coastguard Worker
2442*dfc6aa5cSAndroid Build Coastguard WorkerYou might want to read the tables from a tables-only file, rather than
2443*dfc6aa5cSAndroid Build Coastguard Workerhard-wiring them into your application.  The jpeg_read_header() call is
2444*dfc6aa5cSAndroid Build Coastguard Workersufficient to read a tables-only file.  You must pass a second parameter of
2445*dfc6aa5cSAndroid Build Coastguard WorkerFALSE to indicate that you do not require an image to be present.  Thus, the
2446*dfc6aa5cSAndroid Build Coastguard Workertypical scenario is
2447*dfc6aa5cSAndroid Build Coastguard Worker
2448*dfc6aa5cSAndroid Build Coastguard Worker        create JPEG decompression object
2449*dfc6aa5cSAndroid Build Coastguard Worker        set source to tables-only file
2450*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_read_header(&cinfo, FALSE);
2451*dfc6aa5cSAndroid Build Coastguard Worker        set source to abbreviated image file
2452*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_read_header(&cinfo, TRUE);
2453*dfc6aa5cSAndroid Build Coastguard Worker        set decompression parameters
2454*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_start_decompress(&cinfo);
2455*dfc6aa5cSAndroid Build Coastguard Worker        read data...
2456*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_finish_decompress(&cinfo);
2457*dfc6aa5cSAndroid Build Coastguard Worker
2458*dfc6aa5cSAndroid Build Coastguard WorkerIn some cases, you may want to read a file without knowing whether it contains
2459*dfc6aa5cSAndroid Build Coastguard Workeran image or just tables.  In that case, pass FALSE and check the return value
2460*dfc6aa5cSAndroid Build Coastguard Workerfrom jpeg_read_header(): it will be JPEG_HEADER_OK if an image was found,
2461*dfc6aa5cSAndroid Build Coastguard WorkerJPEG_HEADER_TABLES_ONLY if only tables were found.  (A third return value,
2462*dfc6aa5cSAndroid Build Coastguard WorkerJPEG_SUSPENDED, is possible when using a suspending data source manager.)
2463*dfc6aa5cSAndroid Build Coastguard WorkerNote that jpeg_read_header() will not complain if you read an abbreviated
2464*dfc6aa5cSAndroid Build Coastguard Workerimage for which you haven't loaded the missing tables; the missing-table check
2465*dfc6aa5cSAndroid Build Coastguard Workeroccurs later, in jpeg_start_decompress().
2466*dfc6aa5cSAndroid Build Coastguard Worker
2467*dfc6aa5cSAndroid Build Coastguard Worker
2468*dfc6aa5cSAndroid Build Coastguard WorkerIt is possible to read a series of images from a single source file by
2469*dfc6aa5cSAndroid Build Coastguard Workerrepeating the jpeg_read_header() ... jpeg_finish_decompress() sequence,
2470*dfc6aa5cSAndroid Build Coastguard Workerwithout releasing/recreating the JPEG object or the data source module.
2471*dfc6aa5cSAndroid Build Coastguard Worker(If you did reinitialize, any partial bufferload left in the data source
2472*dfc6aa5cSAndroid Build Coastguard Workerbuffer at the end of one image would be discarded, causing you to lose the
2473*dfc6aa5cSAndroid Build Coastguard Workerstart of the next image.)  When you use this method, stored tables are
2474*dfc6aa5cSAndroid Build Coastguard Workerautomatically carried forward, so some of the images can be abbreviated images
2475*dfc6aa5cSAndroid Build Coastguard Workerthat depend on tables from earlier images.
2476*dfc6aa5cSAndroid Build Coastguard Worker
2477*dfc6aa5cSAndroid Build Coastguard WorkerIf you intend to write a series of images into a single destination file,
2478*dfc6aa5cSAndroid Build Coastguard Workeryou might want to make a specialized data destination module that doesn't
2479*dfc6aa5cSAndroid Build Coastguard Workerflush the output buffer at term_destination() time.  This would speed things
2480*dfc6aa5cSAndroid Build Coastguard Workerup by some trifling amount.  Of course, you'd need to remember to flush the
2481*dfc6aa5cSAndroid Build Coastguard Workerbuffer after the last image.  You can make the later images be abbreviated
2482*dfc6aa5cSAndroid Build Coastguard Workerones by passing FALSE to jpeg_start_compress().
2483*dfc6aa5cSAndroid Build Coastguard Worker
2484*dfc6aa5cSAndroid Build Coastguard Worker
2485*dfc6aa5cSAndroid Build Coastguard WorkerSpecial markers
2486*dfc6aa5cSAndroid Build Coastguard Worker---------------
2487*dfc6aa5cSAndroid Build Coastguard Worker
2488*dfc6aa5cSAndroid Build Coastguard WorkerSome applications may need to insert or extract special data in the JPEG
2489*dfc6aa5cSAndroid Build Coastguard Workerdatastream.  The JPEG standard provides marker types "COM" (comment) and
2490*dfc6aa5cSAndroid Build Coastguard Worker"APP0" through "APP15" (application) to hold application-specific data.
2491*dfc6aa5cSAndroid Build Coastguard WorkerUnfortunately, the use of these markers is not specified by the standard.
2492*dfc6aa5cSAndroid Build Coastguard WorkerCOM markers are fairly widely used to hold user-supplied text.  The JFIF file
2493*dfc6aa5cSAndroid Build Coastguard Workerformat spec uses APP0 markers with specified initial strings to hold certain
2494*dfc6aa5cSAndroid Build Coastguard Workerdata.  Adobe applications use APP14 markers beginning with the string "Adobe"
2495*dfc6aa5cSAndroid Build Coastguard Workerfor miscellaneous data.  Other APPn markers are rarely seen, but might
2496*dfc6aa5cSAndroid Build Coastguard Workercontain almost anything.
2497*dfc6aa5cSAndroid Build Coastguard Worker
2498*dfc6aa5cSAndroid Build Coastguard WorkerIf you wish to store user-supplied text, we recommend you use COM markers
2499*dfc6aa5cSAndroid Build Coastguard Workerand place readable 7-bit ASCII text in them.  Newline conventions are not
2500*dfc6aa5cSAndroid Build Coastguard Workerstandardized --- expect to find LF (Unix style), CR/LF (DOS style), or CR
2501*dfc6aa5cSAndroid Build Coastguard Worker(Mac style).  A robust COM reader should be able to cope with random binary
2502*dfc6aa5cSAndroid Build Coastguard Workergarbage, including nulls, since some applications generate COM markers
2503*dfc6aa5cSAndroid Build Coastguard Workercontaining non-ASCII junk.  (But yours should not be one of them.)
2504*dfc6aa5cSAndroid Build Coastguard Worker
2505*dfc6aa5cSAndroid Build Coastguard WorkerFor program-supplied data, use an APPn marker, and be sure to begin it with an
2506*dfc6aa5cSAndroid Build Coastguard Workeridentifying string so that you can tell whether the marker is actually yours.
2507*dfc6aa5cSAndroid Build Coastguard WorkerIt's probably best to avoid using APP0 or APP14 for any private markers.
2508*dfc6aa5cSAndroid Build Coastguard Worker(NOTE: the upcoming SPIFF standard will use APP8 markers; we recommend you
2509*dfc6aa5cSAndroid Build Coastguard Workernot use APP8 markers for any private purposes, either.)
2510*dfc6aa5cSAndroid Build Coastguard Worker
2511*dfc6aa5cSAndroid Build Coastguard WorkerKeep in mind that at most 65533 bytes can be put into one marker, but you
2512*dfc6aa5cSAndroid Build Coastguard Workercan have as many markers as you like.
2513*dfc6aa5cSAndroid Build Coastguard Worker
2514*dfc6aa5cSAndroid Build Coastguard WorkerBy default, the IJG compression library will write a JFIF APP0 marker if the
2515*dfc6aa5cSAndroid Build Coastguard Workerselected JPEG colorspace is grayscale or YCbCr, or an Adobe APP14 marker if
2516*dfc6aa5cSAndroid Build Coastguard Workerthe selected colorspace is RGB, CMYK, or YCCK.  You can disable this, but
2517*dfc6aa5cSAndroid Build Coastguard Workerwe don't recommend it.  The decompression library will recognize JFIF and
2518*dfc6aa5cSAndroid Build Coastguard WorkerAdobe markers and will set the JPEG colorspace properly when one is found.
2519*dfc6aa5cSAndroid Build Coastguard Worker
2520*dfc6aa5cSAndroid Build Coastguard Worker
2521*dfc6aa5cSAndroid Build Coastguard WorkerYou can write special markers immediately following the datastream header by
2522*dfc6aa5cSAndroid Build Coastguard Workercalling jpeg_write_marker() after jpeg_start_compress() and before the first
2523*dfc6aa5cSAndroid Build Coastguard Workercall to jpeg_write_scanlines().  When you do this, the markers appear after
2524*dfc6aa5cSAndroid Build Coastguard Workerthe SOI and the JFIF APP0 and Adobe APP14 markers (if written), but before
2525*dfc6aa5cSAndroid Build Coastguard Workerall else.  Specify the marker type parameter as "JPEG_COM" for COM or
2526*dfc6aa5cSAndroid Build Coastguard Worker"JPEG_APP0 + n" for APPn.  (Actually, jpeg_write_marker will let you write
2527*dfc6aa5cSAndroid Build Coastguard Workerany marker type, but we don't recommend writing any other kinds of marker.)
2528*dfc6aa5cSAndroid Build Coastguard WorkerFor example, to write a user comment string pointed to by comment_text:
2529*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_write_marker(cinfo, JPEG_COM, comment_text, strlen(comment_text));
2530*dfc6aa5cSAndroid Build Coastguard Worker
2531*dfc6aa5cSAndroid Build Coastguard WorkerIf it's not convenient to store all the marker data in memory at once,
2532*dfc6aa5cSAndroid Build Coastguard Workeryou can instead call jpeg_write_m_header() followed by multiple calls to
2533*dfc6aa5cSAndroid Build Coastguard Workerjpeg_write_m_byte().  If you do it this way, it's your responsibility to
2534*dfc6aa5cSAndroid Build Coastguard Workercall jpeg_write_m_byte() exactly the number of times given in the length
2535*dfc6aa5cSAndroid Build Coastguard Workerparameter to jpeg_write_m_header().  (This method lets you empty the
2536*dfc6aa5cSAndroid Build Coastguard Workeroutput buffer partway through a marker, which might be important when
2537*dfc6aa5cSAndroid Build Coastguard Workerusing a suspending data destination module.  In any case, if you are using
2538*dfc6aa5cSAndroid Build Coastguard Workera suspending destination, you should flush its buffer after inserting
2539*dfc6aa5cSAndroid Build Coastguard Workerany special markers.  See "I/O suspension".)
2540*dfc6aa5cSAndroid Build Coastguard Worker
2541*dfc6aa5cSAndroid Build Coastguard WorkerOr, if you prefer to synthesize the marker byte sequence yourself,
2542*dfc6aa5cSAndroid Build Coastguard Workeryou can just cram it straight into the data destination module.
2543*dfc6aa5cSAndroid Build Coastguard Worker
2544*dfc6aa5cSAndroid Build Coastguard WorkerIf you are writing JFIF 1.02 extension markers (thumbnail images), don't
2545*dfc6aa5cSAndroid Build Coastguard Workerforget to set cinfo.JFIF_minor_version = 2 so that the encoder will write the
2546*dfc6aa5cSAndroid Build Coastguard Workercorrect JFIF version number in the JFIF header marker.  The library's default
2547*dfc6aa5cSAndroid Build Coastguard Workeris to write version 1.01, but that's wrong if you insert any 1.02 extension
2548*dfc6aa5cSAndroid Build Coastguard Workermarkers.  (We could probably get away with just defaulting to 1.02, but there
2549*dfc6aa5cSAndroid Build Coastguard Workerused to be broken decoders that would complain about unknown minor version
2550*dfc6aa5cSAndroid Build Coastguard Workernumbers.  To reduce compatibility risks it's safest not to write 1.02 unless
2551*dfc6aa5cSAndroid Build Coastguard Workeryou are actually using 1.02 extensions.)
2552*dfc6aa5cSAndroid Build Coastguard Worker
2553*dfc6aa5cSAndroid Build Coastguard Worker
2554*dfc6aa5cSAndroid Build Coastguard WorkerWhen reading, two methods of handling special markers are available:
2555*dfc6aa5cSAndroid Build Coastguard Worker1. You can ask the library to save the contents of COM and/or APPn markers
2556*dfc6aa5cSAndroid Build Coastguard Workerinto memory, and then examine them at your leisure afterwards.
2557*dfc6aa5cSAndroid Build Coastguard Worker2. You can supply your own routine to process COM and/or APPn markers
2558*dfc6aa5cSAndroid Build Coastguard Workeron-the-fly as they are read.
2559*dfc6aa5cSAndroid Build Coastguard WorkerThe first method is simpler to use, especially if you are using a suspending
2560*dfc6aa5cSAndroid Build Coastguard Workerdata source; writing a marker processor that copes with input suspension is
2561*dfc6aa5cSAndroid Build Coastguard Workernot easy (consider what happens if the marker is longer than your available
2562*dfc6aa5cSAndroid Build Coastguard Workerinput buffer).  However, the second method conserves memory since the marker
2563*dfc6aa5cSAndroid Build Coastguard Workerdata need not be kept around after it's been processed.
2564*dfc6aa5cSAndroid Build Coastguard Worker
2565*dfc6aa5cSAndroid Build Coastguard WorkerFor either method, you'd normally set up marker handling after creating a
2566*dfc6aa5cSAndroid Build Coastguard Workerdecompression object and before calling jpeg_read_header(), because the
2567*dfc6aa5cSAndroid Build Coastguard Workermarkers of interest will typically be near the head of the file and so will
2568*dfc6aa5cSAndroid Build Coastguard Workerbe scanned by jpeg_read_header.  Once you've established a marker handling
2569*dfc6aa5cSAndroid Build Coastguard Workermethod, it will be used for the life of that decompression object
2570*dfc6aa5cSAndroid Build Coastguard Worker(potentially many datastreams), unless you change it.  Marker handling is
2571*dfc6aa5cSAndroid Build Coastguard Workerdetermined separately for COM markers and for each APPn marker code.
2572*dfc6aa5cSAndroid Build Coastguard Worker
2573*dfc6aa5cSAndroid Build Coastguard Worker
2574*dfc6aa5cSAndroid Build Coastguard WorkerTo save the contents of special markers in memory, call
2575*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_save_markers(cinfo, marker_code, length_limit)
2576*dfc6aa5cSAndroid Build Coastguard Workerwhere marker_code is the marker type to save, JPEG_COM or JPEG_APP0+n.
2577*dfc6aa5cSAndroid Build Coastguard Worker(To arrange to save all the special marker types, you need to call this
2578*dfc6aa5cSAndroid Build Coastguard Workerroutine 17 times, for COM and APP0-APP15.)  If the incoming marker is longer
2579*dfc6aa5cSAndroid Build Coastguard Workerthan length_limit data bytes, only length_limit bytes will be saved; this
2580*dfc6aa5cSAndroid Build Coastguard Workerparameter allows you to avoid chewing up memory when you only need to see the
2581*dfc6aa5cSAndroid Build Coastguard Workerfirst few bytes of a potentially large marker.  If you want to save all the
2582*dfc6aa5cSAndroid Build Coastguard Workerdata, set length_limit to 0xFFFF; that is enough since marker lengths are only
2583*dfc6aa5cSAndroid Build Coastguard Worker16 bits.  As a special case, setting length_limit to 0 prevents that marker
2584*dfc6aa5cSAndroid Build Coastguard Workertype from being saved at all.  (That is the default behavior, in fact.)
2585*dfc6aa5cSAndroid Build Coastguard Worker
2586*dfc6aa5cSAndroid Build Coastguard WorkerAfter jpeg_read_header() completes, you can examine the special markers by
2587*dfc6aa5cSAndroid Build Coastguard Workerfollowing the cinfo->marker_list pointer chain.  All the special markers in
2588*dfc6aa5cSAndroid Build Coastguard Workerthe file appear in this list, in order of their occurrence in the file (but
2589*dfc6aa5cSAndroid Build Coastguard Workeromitting any markers of types you didn't ask for).  Both the original data
2590*dfc6aa5cSAndroid Build Coastguard Workerlength and the saved data length are recorded for each list entry; the latter
2591*dfc6aa5cSAndroid Build Coastguard Workerwill not exceed length_limit for the particular marker type.  Note that these
2592*dfc6aa5cSAndroid Build Coastguard Workerlengths exclude the marker length word, whereas the stored representation
2593*dfc6aa5cSAndroid Build Coastguard Workerwithin the JPEG file includes it.  (Hence the maximum data length is really
2594*dfc6aa5cSAndroid Build Coastguard Workeronly 65533.)
2595*dfc6aa5cSAndroid Build Coastguard Worker
2596*dfc6aa5cSAndroid Build Coastguard WorkerIt is possible that additional special markers appear in the file beyond the
2597*dfc6aa5cSAndroid Build Coastguard WorkerSOS marker at which jpeg_read_header stops; if so, the marker list will be
2598*dfc6aa5cSAndroid Build Coastguard Workerextended during reading of the rest of the file.  This is not expected to be
2599*dfc6aa5cSAndroid Build Coastguard Workercommon, however.  If you are short on memory you may want to reset the length
2600*dfc6aa5cSAndroid Build Coastguard Workerlimit to zero for all marker types after finishing jpeg_read_header, to
2601*dfc6aa5cSAndroid Build Coastguard Workerensure that the max_memory_to_use setting cannot be exceeded due to addition
2602*dfc6aa5cSAndroid Build Coastguard Workerof later markers.
2603*dfc6aa5cSAndroid Build Coastguard Worker
2604*dfc6aa5cSAndroid Build Coastguard WorkerThe marker list remains stored until you call jpeg_finish_decompress or
2605*dfc6aa5cSAndroid Build Coastguard Workerjpeg_abort, at which point the memory is freed and the list is set to empty.
2606*dfc6aa5cSAndroid Build Coastguard Worker(jpeg_destroy also releases the storage, of course.)
2607*dfc6aa5cSAndroid Build Coastguard Worker
2608*dfc6aa5cSAndroid Build Coastguard WorkerNote that the library is internally interested in APP0 and APP14 markers;
2609*dfc6aa5cSAndroid Build Coastguard Workerif you try to set a small nonzero length limit on these types, the library
2610*dfc6aa5cSAndroid Build Coastguard Workerwill silently force the length up to the minimum it wants.  (But you can set
2611*dfc6aa5cSAndroid Build Coastguard Workera zero length limit to prevent them from being saved at all.)  Also, in a
2612*dfc6aa5cSAndroid Build Coastguard Worker16-bit environment, the maximum length limit may be constrained to less than
2613*dfc6aa5cSAndroid Build Coastguard Worker65533 by malloc() limitations.  It is therefore best not to assume that the
2614*dfc6aa5cSAndroid Build Coastguard Workereffective length limit is exactly what you set it to be.
2615*dfc6aa5cSAndroid Build Coastguard Worker
2616*dfc6aa5cSAndroid Build Coastguard Worker
2617*dfc6aa5cSAndroid Build Coastguard WorkerIf you want to supply your own marker-reading routine, you do it by calling
2618*dfc6aa5cSAndroid Build Coastguard Workerjpeg_set_marker_processor().  A marker processor routine must have the
2619*dfc6aa5cSAndroid Build Coastguard Workersignature
2620*dfc6aa5cSAndroid Build Coastguard Worker        boolean jpeg_marker_parser_method (j_decompress_ptr cinfo)
2621*dfc6aa5cSAndroid Build Coastguard WorkerAlthough the marker code is not explicitly passed, the routine can find it
2622*dfc6aa5cSAndroid Build Coastguard Workerin cinfo->unread_marker.  At the time of call, the marker proper has been
2623*dfc6aa5cSAndroid Build Coastguard Workerread from the data source module.  The processor routine is responsible for
2624*dfc6aa5cSAndroid Build Coastguard Workerreading the marker length word and the remaining parameter bytes, if any.
2625*dfc6aa5cSAndroid Build Coastguard WorkerReturn TRUE to indicate success.  (FALSE should be returned only if you are
2626*dfc6aa5cSAndroid Build Coastguard Workerusing a suspending data source and it tells you to suspend.  See the standard
2627*dfc6aa5cSAndroid Build Coastguard Workermarker processors in jdmarker.c for appropriate coding methods if you need to
2628*dfc6aa5cSAndroid Build Coastguard Workeruse a suspending data source.)
2629*dfc6aa5cSAndroid Build Coastguard Worker
2630*dfc6aa5cSAndroid Build Coastguard WorkerIf you override the default APP0 or APP14 processors, it is up to you to
2631*dfc6aa5cSAndroid Build Coastguard Workerrecognize JFIF and Adobe markers if you want colorspace recognition to occur
2632*dfc6aa5cSAndroid Build Coastguard Workerproperly.  We recommend copying and extending the default processors if you
2633*dfc6aa5cSAndroid Build Coastguard Workerwant to do that.  (A better idea is to save these marker types for later
2634*dfc6aa5cSAndroid Build Coastguard Workerexamination by calling jpeg_save_markers(); that method doesn't interfere
2635*dfc6aa5cSAndroid Build Coastguard Workerwith the library's own processing of these markers.)
2636*dfc6aa5cSAndroid Build Coastguard Worker
2637*dfc6aa5cSAndroid Build Coastguard Workerjpeg_set_marker_processor() and jpeg_save_markers() are mutually exclusive
2638*dfc6aa5cSAndroid Build Coastguard Worker--- if you call one it overrides any previous call to the other, for the
2639*dfc6aa5cSAndroid Build Coastguard Workerparticular marker type specified.
2640*dfc6aa5cSAndroid Build Coastguard Worker
2641*dfc6aa5cSAndroid Build Coastguard WorkerA simple example of an external COM processor can be found in djpeg.c.
2642*dfc6aa5cSAndroid Build Coastguard WorkerAlso, see jpegtran.c for an example of using jpeg_save_markers.
2643*dfc6aa5cSAndroid Build Coastguard Worker
2644*dfc6aa5cSAndroid Build Coastguard Worker
2645*dfc6aa5cSAndroid Build Coastguard WorkerICC profiles
2646*dfc6aa5cSAndroid Build Coastguard Worker------------
2647*dfc6aa5cSAndroid Build Coastguard Worker
2648*dfc6aa5cSAndroid Build Coastguard WorkerTwo functions are provided for writing and reading International Color
2649*dfc6aa5cSAndroid Build Coastguard WorkerConsortium (ICC) device profiles embedded in JFIF JPEG image files:
2650*dfc6aa5cSAndroid Build Coastguard Worker
2651*dfc6aa5cSAndroid Build Coastguard Worker        void jpeg_write_icc_profile (j_compress_ptr cinfo,
2652*dfc6aa5cSAndroid Build Coastguard Worker                                     const JOCTET *icc_data_ptr,
2653*dfc6aa5cSAndroid Build Coastguard Worker                                     unsigned int icc_data_len);
2654*dfc6aa5cSAndroid Build Coastguard Worker        boolean jpeg_read_icc_profile (j_decompress_ptr cinfo,
2655*dfc6aa5cSAndroid Build Coastguard Worker                                       JOCTET **icc_data_ptr,
2656*dfc6aa5cSAndroid Build Coastguard Worker                                       unsigned int *icc_data_len);
2657*dfc6aa5cSAndroid Build Coastguard Worker
2658*dfc6aa5cSAndroid Build Coastguard WorkerThe ICC has defined a standard for including such data in JPEG "APP2" markers.
2659*dfc6aa5cSAndroid Build Coastguard WorkerThe aforementioned functions do not know anything about the internal structure
2660*dfc6aa5cSAndroid Build Coastguard Workerof the ICC profile data; they just know how to embed the profile data into a
2661*dfc6aa5cSAndroid Build Coastguard WorkerJPEG file while writing it, or to extract the profile data from a JPEG file
2662*dfc6aa5cSAndroid Build Coastguard Workerwhile reading it.
2663*dfc6aa5cSAndroid Build Coastguard Worker
2664*dfc6aa5cSAndroid Build Coastguard Workerjpeg_write_icc_profile() must be called after calling jpeg_start_compress() and
2665*dfc6aa5cSAndroid Build Coastguard Workerbefore the first call to jpeg_write_scanlines() or jpeg_write_raw_data().  This
2666*dfc6aa5cSAndroid Build Coastguard Workerordering ensures that the APP2 marker(s) will appear after the SOI and JFIF or
2667*dfc6aa5cSAndroid Build Coastguard WorkerAdobe markers, but before all other data.
2668*dfc6aa5cSAndroid Build Coastguard Worker
2669*dfc6aa5cSAndroid Build Coastguard Workerjpeg_read_icc_profile() returns TRUE if an ICC profile was found and FALSE
2670*dfc6aa5cSAndroid Build Coastguard Workerotherwise.  If an ICC profile was found, then the function will allocate a
2671*dfc6aa5cSAndroid Build Coastguard Workermemory region containing the profile and will return a pointer to that memory
2672*dfc6aa5cSAndroid Build Coastguard Workerregion in *icc_data_ptr, as well as the length of the region in *icc_data_len.
2673*dfc6aa5cSAndroid Build Coastguard WorkerThis memory region is allocated by the library using malloc() and must be freed
2674*dfc6aa5cSAndroid Build Coastguard Workerby the caller using free() when the memory region is no longer needed.  Callers
2675*dfc6aa5cSAndroid Build Coastguard Workerwishing to use jpeg_read_icc_profile() must call
2676*dfc6aa5cSAndroid Build Coastguard Worker
2677*dfc6aa5cSAndroid Build Coastguard Worker        jpeg_save_markers(cinfo, JPEG_APP0 + 2, 0xFFFF);
2678*dfc6aa5cSAndroid Build Coastguard Worker
2679*dfc6aa5cSAndroid Build Coastguard Workerprior to calling jpeg_read_header().  jpeg_read_icc_profile() can be called at
2680*dfc6aa5cSAndroid Build Coastguard Workerany point between jpeg_read_header() and jpeg_finish_decompress().
2681*dfc6aa5cSAndroid Build Coastguard Worker
2682*dfc6aa5cSAndroid Build Coastguard Worker
2683*dfc6aa5cSAndroid Build Coastguard WorkerRaw (downsampled) image data
2684*dfc6aa5cSAndroid Build Coastguard Worker----------------------------
2685*dfc6aa5cSAndroid Build Coastguard Worker
2686*dfc6aa5cSAndroid Build Coastguard WorkerSome applications need to supply already-downsampled image data to the JPEG
2687*dfc6aa5cSAndroid Build Coastguard Workercompressor, or to receive raw downsampled data from the decompressor.  The
2688*dfc6aa5cSAndroid Build Coastguard Workerlibrary supports this requirement by allowing the application to write or
2689*dfc6aa5cSAndroid Build Coastguard Workerread raw data, bypassing the normal preprocessing or postprocessing steps.
2690*dfc6aa5cSAndroid Build Coastguard WorkerThe interface is different from the standard one and is somewhat harder to
2691*dfc6aa5cSAndroid Build Coastguard Workeruse.  If your interest is merely in bypassing color conversion, we recommend
2692*dfc6aa5cSAndroid Build Coastguard Workerthat you use the standard interface and simply set jpeg_color_space =
2693*dfc6aa5cSAndroid Build Coastguard Workerin_color_space (or jpeg_color_space = out_color_space for decompression).
2694*dfc6aa5cSAndroid Build Coastguard WorkerThe mechanism described in this section is necessary only to supply or
2695*dfc6aa5cSAndroid Build Coastguard Workerreceive downsampled image data, in which not all components have the same
2696*dfc6aa5cSAndroid Build Coastguard Workerdimensions.
2697*dfc6aa5cSAndroid Build Coastguard Worker
2698*dfc6aa5cSAndroid Build Coastguard Worker
2699*dfc6aa5cSAndroid Build Coastguard WorkerTo compress raw data, you must supply the data in the colorspace to be used
2700*dfc6aa5cSAndroid Build Coastguard Workerin the JPEG file (please read the earlier section on Special color spaces)
2701*dfc6aa5cSAndroid Build Coastguard Workerand downsampled to the sampling factors specified in the JPEG parameters.
2702*dfc6aa5cSAndroid Build Coastguard WorkerYou must supply the data in the format used internally by the JPEG library,
2703*dfc6aa5cSAndroid Build Coastguard Workernamely a JSAMPIMAGE array.  This is an array of pointers to two-dimensional
2704*dfc6aa5cSAndroid Build Coastguard Workerarrays, each of type JSAMPARRAY.  Each 2-D array holds the values for one
2705*dfc6aa5cSAndroid Build Coastguard Workercolor component.  This structure is necessary since the components are of
2706*dfc6aa5cSAndroid Build Coastguard Workerdifferent sizes.  If the image dimensions are not a multiple of the MCU size,
2707*dfc6aa5cSAndroid Build Coastguard Workeryou must also pad the data correctly (usually, this is done by replicating
2708*dfc6aa5cSAndroid Build Coastguard Workerthe last column and/or row).  The data must be padded to a multiple of a DCT
2709*dfc6aa5cSAndroid Build Coastguard Workerblock in each component: that is, each downsampled row must contain a
2710*dfc6aa5cSAndroid Build Coastguard Workermultiple of 8 valid samples, and there must be a multiple of 8 sample rows
2711*dfc6aa5cSAndroid Build Coastguard Workerfor each component.  (For applications such as conversion of digital TV
2712*dfc6aa5cSAndroid Build Coastguard Workerimages, the standard image size is usually a multiple of the DCT block size,
2713*dfc6aa5cSAndroid Build Coastguard Workerso that no padding need actually be done.)
2714*dfc6aa5cSAndroid Build Coastguard Worker
2715*dfc6aa5cSAndroid Build Coastguard WorkerThe procedure for compression of raw data is basically the same as normal
2716*dfc6aa5cSAndroid Build Coastguard Workercompression, except that you call jpeg_write_raw_data() in place of
2717*dfc6aa5cSAndroid Build Coastguard Workerjpeg_write_scanlines().  Before calling jpeg_start_compress(), you must do
2718*dfc6aa5cSAndroid Build Coastguard Workerthe following:
2719*dfc6aa5cSAndroid Build Coastguard Worker  * Set cinfo->raw_data_in to TRUE.  (It is set FALSE by jpeg_set_defaults().)
2720*dfc6aa5cSAndroid Build Coastguard Worker    This notifies the library that you will be supplying raw data.
2721*dfc6aa5cSAndroid Build Coastguard Worker  * Ensure jpeg_color_space is correct --- an explicit jpeg_set_colorspace()
2722*dfc6aa5cSAndroid Build Coastguard Worker    call is a good idea.  Note that since color conversion is bypassed,
2723*dfc6aa5cSAndroid Build Coastguard Worker    in_color_space is ignored, except that jpeg_set_defaults() uses it to
2724*dfc6aa5cSAndroid Build Coastguard Worker    choose the default jpeg_color_space setting.
2725*dfc6aa5cSAndroid Build Coastguard Worker  * Ensure the sampling factors, cinfo->comp_info[i].h_samp_factor and
2726*dfc6aa5cSAndroid Build Coastguard Worker    cinfo->comp_info[i].v_samp_factor, are correct.  Since these indicate the
2727*dfc6aa5cSAndroid Build Coastguard Worker    dimensions of the data you are supplying, it's wise to set them
2728*dfc6aa5cSAndroid Build Coastguard Worker    explicitly, rather than assuming the library's defaults are what you want.
2729*dfc6aa5cSAndroid Build Coastguard Worker
2730*dfc6aa5cSAndroid Build Coastguard WorkerTo pass raw data to the library, call jpeg_write_raw_data() in place of
2731*dfc6aa5cSAndroid Build Coastguard Workerjpeg_write_scanlines().  The two routines work similarly except that
2732*dfc6aa5cSAndroid Build Coastguard Workerjpeg_write_raw_data takes a JSAMPIMAGE data array rather than JSAMPARRAY.
2733*dfc6aa5cSAndroid Build Coastguard WorkerThe scanlines count passed to and returned from jpeg_write_raw_data is
2734*dfc6aa5cSAndroid Build Coastguard Workermeasured in terms of the component with the largest v_samp_factor.
2735*dfc6aa5cSAndroid Build Coastguard Worker
2736*dfc6aa5cSAndroid Build Coastguard Workerjpeg_write_raw_data() processes one MCU row per call, which is to say
2737*dfc6aa5cSAndroid Build Coastguard Workerv_samp_factor*DCTSIZE sample rows of each component.  The passed num_lines
2738*dfc6aa5cSAndroid Build Coastguard Workervalue must be at least max_v_samp_factor*DCTSIZE, and the return value will
2739*dfc6aa5cSAndroid Build Coastguard Workerbe exactly that amount (or possibly some multiple of that amount, in future
2740*dfc6aa5cSAndroid Build Coastguard Workerlibrary versions).  This is true even on the last call at the bottom of the
2741*dfc6aa5cSAndroid Build Coastguard Workerimage; don't forget to pad your data as necessary.
2742*dfc6aa5cSAndroid Build Coastguard Worker
2743*dfc6aa5cSAndroid Build Coastguard WorkerThe required dimensions of the supplied data can be computed for each
2744*dfc6aa5cSAndroid Build Coastguard Workercomponent as
2745*dfc6aa5cSAndroid Build Coastguard Worker        cinfo->comp_info[i].width_in_blocks*DCTSIZE  samples per row
2746*dfc6aa5cSAndroid Build Coastguard Worker        cinfo->comp_info[i].height_in_blocks*DCTSIZE rows in image
2747*dfc6aa5cSAndroid Build Coastguard Workerafter jpeg_start_compress() has initialized those fields.  If the valid data
2748*dfc6aa5cSAndroid Build Coastguard Workeris smaller than this, it must be padded appropriately.  For some sampling
2749*dfc6aa5cSAndroid Build Coastguard Workerfactors and image sizes, additional dummy DCT blocks are inserted to make
2750*dfc6aa5cSAndroid Build Coastguard Workerthe image a multiple of the MCU dimensions.  The library creates such dummy
2751*dfc6aa5cSAndroid Build Coastguard Workerblocks itself; it does not read them from your supplied data.  Therefore you
2752*dfc6aa5cSAndroid Build Coastguard Workerneed never pad by more than DCTSIZE samples.  An example may help here.
2753*dfc6aa5cSAndroid Build Coastguard WorkerAssume 2h2v downsampling of YCbCr data, that is
2754*dfc6aa5cSAndroid Build Coastguard Worker        cinfo->comp_info[0].h_samp_factor = 2           for Y
2755*dfc6aa5cSAndroid Build Coastguard Worker        cinfo->comp_info[0].v_samp_factor = 2
2756*dfc6aa5cSAndroid Build Coastguard Worker        cinfo->comp_info[1].h_samp_factor = 1           for Cb
2757*dfc6aa5cSAndroid Build Coastguard Worker        cinfo->comp_info[1].v_samp_factor = 1
2758*dfc6aa5cSAndroid Build Coastguard Worker        cinfo->comp_info[2].h_samp_factor = 1           for Cr
2759*dfc6aa5cSAndroid Build Coastguard Worker        cinfo->comp_info[2].v_samp_factor = 1
2760*dfc6aa5cSAndroid Build Coastguard Workerand suppose that the nominal image dimensions (cinfo->image_width and
2761*dfc6aa5cSAndroid Build Coastguard Workercinfo->image_height) are 101x101 pixels.  Then jpeg_start_compress() will
2762*dfc6aa5cSAndroid Build Coastguard Workercompute downsampled_width = 101 and width_in_blocks = 13 for Y,
2763*dfc6aa5cSAndroid Build Coastguard Workerdownsampled_width = 51 and width_in_blocks = 7 for Cb and Cr (and the same
2764*dfc6aa5cSAndroid Build Coastguard Workerfor the height fields).  You must pad the Y data to at least 13*8 = 104
2765*dfc6aa5cSAndroid Build Coastguard Workercolumns and rows, the Cb/Cr data to at least 7*8 = 56 columns and rows.  The
2766*dfc6aa5cSAndroid Build Coastguard WorkerMCU height is max_v_samp_factor = 2 DCT rows so you must pass at least 16
2767*dfc6aa5cSAndroid Build Coastguard Workerscanlines on each call to jpeg_write_raw_data(), which is to say 16 actual
2768*dfc6aa5cSAndroid Build Coastguard Workersample rows of Y and 8 each of Cb and Cr.  A total of 7 MCU rows are needed,
2769*dfc6aa5cSAndroid Build Coastguard Workerso you must pass a total of 7*16 = 112 "scanlines".  The last DCT block row
2770*dfc6aa5cSAndroid Build Coastguard Workerof Y data is dummy, so it doesn't matter what you pass for it in the data
2771*dfc6aa5cSAndroid Build Coastguard Workerarrays, but the scanlines count must total up to 112 so that all of the Cb
2772*dfc6aa5cSAndroid Build Coastguard Workerand Cr data gets passed.
2773*dfc6aa5cSAndroid Build Coastguard Worker
2774*dfc6aa5cSAndroid Build Coastguard WorkerOutput suspension is supported with raw-data compression: if the data
2775*dfc6aa5cSAndroid Build Coastguard Workerdestination module suspends, jpeg_write_raw_data() will return 0.
2776*dfc6aa5cSAndroid Build Coastguard WorkerIn this case the same data rows must be passed again on the next call.
2777*dfc6aa5cSAndroid Build Coastguard Worker
2778*dfc6aa5cSAndroid Build Coastguard Worker
2779*dfc6aa5cSAndroid Build Coastguard WorkerDecompression with raw data output implies bypassing all postprocessing:
2780*dfc6aa5cSAndroid Build Coastguard Workeryou cannot ask for rescaling or color quantization, for instance.  More
2781*dfc6aa5cSAndroid Build Coastguard Workerseriously, you must deal with the color space and sampling factors present in
2782*dfc6aa5cSAndroid Build Coastguard Workerthe incoming file.  If your application only handles, say, 2h1v YCbCr data,
2783*dfc6aa5cSAndroid Build Coastguard Workeryou must check for and fail on other color spaces or other sampling factors.
2784*dfc6aa5cSAndroid Build Coastguard WorkerThe library will not convert to a different color space for you.
2785*dfc6aa5cSAndroid Build Coastguard Worker
2786*dfc6aa5cSAndroid Build Coastguard WorkerTo obtain raw data output, set cinfo->raw_data_out = TRUE before
2787*dfc6aa5cSAndroid Build Coastguard Workerjpeg_start_decompress() (it is set FALSE by jpeg_read_header()).  Be sure to
2788*dfc6aa5cSAndroid Build Coastguard Workerverify that the color space and sampling factors are ones you can handle.
2789*dfc6aa5cSAndroid Build Coastguard WorkerThen call jpeg_read_raw_data() in place of jpeg_read_scanlines().  The
2790*dfc6aa5cSAndroid Build Coastguard Workerdecompression process is otherwise the same as usual.
2791*dfc6aa5cSAndroid Build Coastguard Worker
2792*dfc6aa5cSAndroid Build Coastguard Workerjpeg_read_raw_data() returns one MCU row per call, and thus you must pass a
2793*dfc6aa5cSAndroid Build Coastguard Workerbuffer of at least max_v_samp_factor*DCTSIZE scanlines (scanline counting is
2794*dfc6aa5cSAndroid Build Coastguard Workerthe same as for raw-data compression).  The buffer you pass must be large
2795*dfc6aa5cSAndroid Build Coastguard Workerenough to hold the actual data plus padding to DCT-block boundaries.  As with
2796*dfc6aa5cSAndroid Build Coastguard Workercompression, any entirely dummy DCT blocks are not processed so you need not
2797*dfc6aa5cSAndroid Build Coastguard Workerallocate space for them, but the total scanline count includes them.  The
2798*dfc6aa5cSAndroid Build Coastguard Workerabove example of computing buffer dimensions for raw-data compression is
2799*dfc6aa5cSAndroid Build Coastguard Workerequally valid for decompression.
2800*dfc6aa5cSAndroid Build Coastguard Worker
2801*dfc6aa5cSAndroid Build Coastguard WorkerInput suspension is supported with raw-data decompression: if the data source
2802*dfc6aa5cSAndroid Build Coastguard Workermodule suspends, jpeg_read_raw_data() will return 0.  You can also use
2803*dfc6aa5cSAndroid Build Coastguard Workerbuffered-image mode to read raw data in multiple passes.
2804*dfc6aa5cSAndroid Build Coastguard Worker
2805*dfc6aa5cSAndroid Build Coastguard Worker
2806*dfc6aa5cSAndroid Build Coastguard WorkerReally raw data: DCT coefficients
2807*dfc6aa5cSAndroid Build Coastguard Worker---------------------------------
2808*dfc6aa5cSAndroid Build Coastguard Worker
2809*dfc6aa5cSAndroid Build Coastguard WorkerIt is possible to read or write the contents of a JPEG file as raw DCT
2810*dfc6aa5cSAndroid Build Coastguard Workercoefficients.  This facility is mainly intended for use in lossless
2811*dfc6aa5cSAndroid Build Coastguard Workertranscoding between different JPEG file formats.  Other possible applications
2812*dfc6aa5cSAndroid Build Coastguard Workerinclude lossless cropping of a JPEG image, lossless reassembly of a
2813*dfc6aa5cSAndroid Build Coastguard Workermulti-strip or multi-tile TIFF/JPEG file into a single JPEG datastream, etc.
2814*dfc6aa5cSAndroid Build Coastguard Worker
2815*dfc6aa5cSAndroid Build Coastguard WorkerTo read the contents of a JPEG file as DCT coefficients, open the file and do
2816*dfc6aa5cSAndroid Build Coastguard Workerjpeg_read_header() as usual.  But instead of calling jpeg_start_decompress()
2817*dfc6aa5cSAndroid Build Coastguard Workerand jpeg_read_scanlines(), call jpeg_read_coefficients().  This will read the
2818*dfc6aa5cSAndroid Build Coastguard Workerentire image into a set of virtual coefficient-block arrays, one array per
2819*dfc6aa5cSAndroid Build Coastguard Workercomponent.  The return value is a pointer to an array of virtual-array
2820*dfc6aa5cSAndroid Build Coastguard Workerdescriptors.  Each virtual array can be accessed directly using the JPEG
2821*dfc6aa5cSAndroid Build Coastguard Workermemory manager's access_virt_barray method (see Memory management, below,
2822*dfc6aa5cSAndroid Build Coastguard Workerand also read structure.txt's discussion of virtual array handling).  Or,
2823*dfc6aa5cSAndroid Build Coastguard Workerfor simple transcoding to a different JPEG file format, the array list can
2824*dfc6aa5cSAndroid Build Coastguard Workerjust be handed directly to jpeg_write_coefficients().
2825*dfc6aa5cSAndroid Build Coastguard Worker
2826*dfc6aa5cSAndroid Build Coastguard WorkerEach block in the block arrays contains quantized coefficient values in
2827*dfc6aa5cSAndroid Build Coastguard Workernormal array order (not JPEG zigzag order).  The block arrays contain only
2828*dfc6aa5cSAndroid Build Coastguard WorkerDCT blocks containing real data; any entirely-dummy blocks added to fill out
2829*dfc6aa5cSAndroid Build Coastguard Workerinterleaved MCUs at the right or bottom edges of the image are discarded
2830*dfc6aa5cSAndroid Build Coastguard Workerduring reading and are not stored in the block arrays.  (The size of each
2831*dfc6aa5cSAndroid Build Coastguard Workerblock array can be determined from the width_in_blocks and height_in_blocks
2832*dfc6aa5cSAndroid Build Coastguard Workerfields of the component's comp_info entry.)  This is also the data format
2833*dfc6aa5cSAndroid Build Coastguard Workerexpected by jpeg_write_coefficients().
2834*dfc6aa5cSAndroid Build Coastguard Worker
2835*dfc6aa5cSAndroid Build Coastguard WorkerWhen you are done using the virtual arrays, call jpeg_finish_decompress()
2836*dfc6aa5cSAndroid Build Coastguard Workerto release the array storage and return the decompression object to an idle
2837*dfc6aa5cSAndroid Build Coastguard Workerstate; or just call jpeg_destroy() if you don't need to reuse the object.
2838*dfc6aa5cSAndroid Build Coastguard Worker
2839*dfc6aa5cSAndroid Build Coastguard WorkerIf you use a suspending data source, jpeg_read_coefficients() will return
2840*dfc6aa5cSAndroid Build Coastguard WorkerNULL if it is forced to suspend; a non-NULL return value indicates successful
2841*dfc6aa5cSAndroid Build Coastguard Workercompletion.  You need not test for a NULL return value when using a
2842*dfc6aa5cSAndroid Build Coastguard Workernon-suspending data source.
2843*dfc6aa5cSAndroid Build Coastguard Worker
2844*dfc6aa5cSAndroid Build Coastguard WorkerIt is also possible to call jpeg_read_coefficients() to obtain access to the
2845*dfc6aa5cSAndroid Build Coastguard Workerdecoder's coefficient arrays during a normal decode cycle in buffered-image
2846*dfc6aa5cSAndroid Build Coastguard Workermode.  This frammish might be useful for progressively displaying an incoming
2847*dfc6aa5cSAndroid Build Coastguard Workerimage and then re-encoding it without loss.  To do this, decode in buffered-
2848*dfc6aa5cSAndroid Build Coastguard Workerimage mode as discussed previously, then call jpeg_read_coefficients() after
2849*dfc6aa5cSAndroid Build Coastguard Workerthe last jpeg_finish_output() call.  The arrays will be available for your use
2850*dfc6aa5cSAndroid Build Coastguard Workeruntil you call jpeg_finish_decompress().
2851*dfc6aa5cSAndroid Build Coastguard Worker
2852*dfc6aa5cSAndroid Build Coastguard Worker
2853*dfc6aa5cSAndroid Build Coastguard WorkerTo write the contents of a JPEG file as DCT coefficients, you must provide
2854*dfc6aa5cSAndroid Build Coastguard Workerthe DCT coefficients stored in virtual block arrays.  You can either pass
2855*dfc6aa5cSAndroid Build Coastguard Workerblock arrays read from an input JPEG file by jpeg_read_coefficients(), or
2856*dfc6aa5cSAndroid Build Coastguard Workerallocate virtual arrays from the JPEG compression object and fill them
2857*dfc6aa5cSAndroid Build Coastguard Workeryourself.  In either case, jpeg_write_coefficients() is substituted for
2858*dfc6aa5cSAndroid Build Coastguard Workerjpeg_start_compress() and jpeg_write_scanlines().  Thus the sequence is
2859*dfc6aa5cSAndroid Build Coastguard Worker  * Create compression object
2860*dfc6aa5cSAndroid Build Coastguard Worker  * Set all compression parameters as necessary
2861*dfc6aa5cSAndroid Build Coastguard Worker  * Request virtual arrays if needed
2862*dfc6aa5cSAndroid Build Coastguard Worker  * jpeg_write_coefficients()
2863*dfc6aa5cSAndroid Build Coastguard Worker  * jpeg_finish_compress()
2864*dfc6aa5cSAndroid Build Coastguard Worker  * Destroy or re-use compression object
2865*dfc6aa5cSAndroid Build Coastguard Workerjpeg_write_coefficients() is passed a pointer to an array of virtual block
2866*dfc6aa5cSAndroid Build Coastguard Workerarray descriptors; the number of arrays is equal to cinfo.num_components.
2867*dfc6aa5cSAndroid Build Coastguard Worker
2868*dfc6aa5cSAndroid Build Coastguard WorkerThe virtual arrays need only have been requested, not realized, before
2869*dfc6aa5cSAndroid Build Coastguard Workerjpeg_write_coefficients() is called.  A side-effect of
2870*dfc6aa5cSAndroid Build Coastguard Workerjpeg_write_coefficients() is to realize any virtual arrays that have been
2871*dfc6aa5cSAndroid Build Coastguard Workerrequested from the compression object's memory manager.  Thus, when obtaining
2872*dfc6aa5cSAndroid Build Coastguard Workerthe virtual arrays from the compression object, you should fill the arrays
2873*dfc6aa5cSAndroid Build Coastguard Workerafter calling jpeg_write_coefficients().  The data is actually written out
2874*dfc6aa5cSAndroid Build Coastguard Workerwhen you call jpeg_finish_compress(); jpeg_write_coefficients() only writes
2875*dfc6aa5cSAndroid Build Coastguard Workerthe file header.
2876*dfc6aa5cSAndroid Build Coastguard Worker
2877*dfc6aa5cSAndroid Build Coastguard WorkerWhen writing raw DCT coefficients, it is crucial that the JPEG quantization
2878*dfc6aa5cSAndroid Build Coastguard Workertables and sampling factors match the way the data was encoded, or the
2879*dfc6aa5cSAndroid Build Coastguard Workerresulting file will be invalid.  For transcoding from an existing JPEG file,
2880*dfc6aa5cSAndroid Build Coastguard Workerwe recommend using jpeg_copy_critical_parameters().  This routine initializes
2881*dfc6aa5cSAndroid Build Coastguard Workerall the compression parameters to default values (like jpeg_set_defaults()),
2882*dfc6aa5cSAndroid Build Coastguard Workerthen copies the critical information from a source decompression object.
2883*dfc6aa5cSAndroid Build Coastguard WorkerThe decompression object should have just been used to read the entire
2884*dfc6aa5cSAndroid Build Coastguard WorkerJPEG input file --- that is, it should be awaiting jpeg_finish_decompress().
2885*dfc6aa5cSAndroid Build Coastguard Worker
2886*dfc6aa5cSAndroid Build Coastguard Workerjpeg_write_coefficients() marks all tables stored in the compression object
2887*dfc6aa5cSAndroid Build Coastguard Workeras needing to be written to the output file (thus, it acts like
2888*dfc6aa5cSAndroid Build Coastguard Workerjpeg_start_compress(cinfo, TRUE)).  This is for safety's sake, to avoid
2889*dfc6aa5cSAndroid Build Coastguard Workeremitting abbreviated JPEG files by accident.  If you really want to emit an
2890*dfc6aa5cSAndroid Build Coastguard Workerabbreviated JPEG file, call jpeg_suppress_tables(), or set the tables'
2891*dfc6aa5cSAndroid Build Coastguard Workerindividual sent_table flags, between calling jpeg_write_coefficients() and
2892*dfc6aa5cSAndroid Build Coastguard Workerjpeg_finish_compress().
2893*dfc6aa5cSAndroid Build Coastguard Worker
2894*dfc6aa5cSAndroid Build Coastguard Worker
2895*dfc6aa5cSAndroid Build Coastguard WorkerProgress monitoring
2896*dfc6aa5cSAndroid Build Coastguard Worker-------------------
2897*dfc6aa5cSAndroid Build Coastguard Worker
2898*dfc6aa5cSAndroid Build Coastguard WorkerSome applications may need to regain control from the JPEG library every so
2899*dfc6aa5cSAndroid Build Coastguard Workeroften.  The typical use of this feature is to produce a percent-done bar or
2900*dfc6aa5cSAndroid Build Coastguard Workerother progress display.  (For a simple example, see cjpeg.c or djpeg.c.)
2901*dfc6aa5cSAndroid Build Coastguard WorkerAlthough you do get control back frequently during the data-transferring pass
2902*dfc6aa5cSAndroid Build Coastguard Worker(the jpeg_read_scanlines or jpeg_write_scanlines loop), any additional passes
2903*dfc6aa5cSAndroid Build Coastguard Workerwill occur inside jpeg_finish_compress or jpeg_start_decompress; those
2904*dfc6aa5cSAndroid Build Coastguard Workerroutines may take a long time to execute, and you don't get control back
2905*dfc6aa5cSAndroid Build Coastguard Workeruntil they are done.
2906*dfc6aa5cSAndroid Build Coastguard Worker
2907*dfc6aa5cSAndroid Build Coastguard WorkerYou can define a progress-monitor routine which will be called periodically
2908*dfc6aa5cSAndroid Build Coastguard Workerby the library.  No guarantees are made about how often this call will occur,
2909*dfc6aa5cSAndroid Build Coastguard Workerso we don't recommend you use it for mouse tracking or anything like that.
2910*dfc6aa5cSAndroid Build Coastguard WorkerAt present, a call will occur once per MCU row, scanline, or sample row
2911*dfc6aa5cSAndroid Build Coastguard Workergroup, whichever unit is convenient for the current processing mode; so the
2912*dfc6aa5cSAndroid Build Coastguard Workerwider the image, the longer the time between calls.  During the data
2913*dfc6aa5cSAndroid Build Coastguard Workertransferring pass, only one call occurs per call of jpeg_read_scanlines or
2914*dfc6aa5cSAndroid Build Coastguard Workerjpeg_write_scanlines, so don't pass a large number of scanlines at once if
2915*dfc6aa5cSAndroid Build Coastguard Workeryou want fine resolution in the progress count.  (If you really need to use
2916*dfc6aa5cSAndroid Build Coastguard Workerthe callback mechanism for time-critical tasks like mouse tracking, you could
2917*dfc6aa5cSAndroid Build Coastguard Workerinsert additional calls inside some of the library's inner loops.)
2918*dfc6aa5cSAndroid Build Coastguard Worker
2919*dfc6aa5cSAndroid Build Coastguard WorkerTo establish a progress-monitor callback, create a struct jpeg_progress_mgr,
2920*dfc6aa5cSAndroid Build Coastguard Workerfill in its progress_monitor field with a pointer to your callback routine,
2921*dfc6aa5cSAndroid Build Coastguard Workerand set cinfo->progress to point to the struct.  The callback will be called
2922*dfc6aa5cSAndroid Build Coastguard Workerwhenever cinfo->progress is non-NULL.  (This pointer is set to NULL by
2923*dfc6aa5cSAndroid Build Coastguard Workerjpeg_create_compress or jpeg_create_decompress; the library will not change
2924*dfc6aa5cSAndroid Build Coastguard Workerit thereafter.  So if you allocate dynamic storage for the progress struct,
2925*dfc6aa5cSAndroid Build Coastguard Workermake sure it will live as long as the JPEG object does.  Allocating from the
2926*dfc6aa5cSAndroid Build Coastguard WorkerJPEG memory manager with lifetime JPOOL_PERMANENT will work nicely.)  You
2927*dfc6aa5cSAndroid Build Coastguard Workercan use the same callback routine for both compression and decompression.
2928*dfc6aa5cSAndroid Build Coastguard Worker
2929*dfc6aa5cSAndroid Build Coastguard WorkerThe jpeg_progress_mgr struct contains four fields which are set by the library:
2930*dfc6aa5cSAndroid Build Coastguard Worker        long pass_counter;      /* work units completed in this pass */
2931*dfc6aa5cSAndroid Build Coastguard Worker        long pass_limit;        /* total number of work units in this pass */
2932*dfc6aa5cSAndroid Build Coastguard Worker        int completed_passes;   /* passes completed so far */
2933*dfc6aa5cSAndroid Build Coastguard Worker        int total_passes;       /* total number of passes expected */
2934*dfc6aa5cSAndroid Build Coastguard WorkerDuring any one pass, pass_counter increases from 0 up to (not including)
2935*dfc6aa5cSAndroid Build Coastguard Workerpass_limit; the step size is usually but not necessarily 1.  The pass_limit
2936*dfc6aa5cSAndroid Build Coastguard Workervalue may change from one pass to another.  The expected total number of
2937*dfc6aa5cSAndroid Build Coastguard Workerpasses is in total_passes, and the number of passes already completed is in
2938*dfc6aa5cSAndroid Build Coastguard Workercompleted_passes.  Thus the fraction of work completed may be estimated as
2939*dfc6aa5cSAndroid Build Coastguard Worker                completed_passes + (pass_counter/pass_limit)
2940*dfc6aa5cSAndroid Build Coastguard Worker                --------------------------------------------
2941*dfc6aa5cSAndroid Build Coastguard Worker                                total_passes
2942*dfc6aa5cSAndroid Build Coastguard Workerignoring the fact that the passes may not be equal amounts of work.
2943*dfc6aa5cSAndroid Build Coastguard Worker
2944*dfc6aa5cSAndroid Build Coastguard WorkerWhen decompressing, pass_limit can even change within a pass, because it
2945*dfc6aa5cSAndroid Build Coastguard Workerdepends on the number of scans in the JPEG file, which isn't always known in
2946*dfc6aa5cSAndroid Build Coastguard Workeradvance.  The computed fraction-of-work-done may jump suddenly (if the library
2947*dfc6aa5cSAndroid Build Coastguard Workerdiscovers it has overestimated the number of scans) or even decrease (in the
2948*dfc6aa5cSAndroid Build Coastguard Workeropposite case).  It is not wise to put great faith in the work estimate.
2949*dfc6aa5cSAndroid Build Coastguard Worker
2950*dfc6aa5cSAndroid Build Coastguard WorkerWhen using the decompressor's buffered-image mode, the progress monitor work
2951*dfc6aa5cSAndroid Build Coastguard Workerestimate is likely to be completely unhelpful, because the library has no way
2952*dfc6aa5cSAndroid Build Coastguard Workerto know how many output passes will be demanded of it.  Currently, the library
2953*dfc6aa5cSAndroid Build Coastguard Workersets total_passes based on the assumption that there will be one more output
2954*dfc6aa5cSAndroid Build Coastguard Workerpass if the input file end hasn't yet been read (jpeg_input_complete() isn't
2955*dfc6aa5cSAndroid Build Coastguard WorkerTRUE), but no more output passes if the file end has been reached when the
2956*dfc6aa5cSAndroid Build Coastguard Workeroutput pass is started.  This means that total_passes will rise as additional
2957*dfc6aa5cSAndroid Build Coastguard Workeroutput passes are requested.  If you have a way of determining the input file
2958*dfc6aa5cSAndroid Build Coastguard Workersize, estimating progress based on the fraction of the file that's been read
2959*dfc6aa5cSAndroid Build Coastguard Workerwill probably be more useful than using the library's value.
2960*dfc6aa5cSAndroid Build Coastguard Worker
2961*dfc6aa5cSAndroid Build Coastguard Worker
2962*dfc6aa5cSAndroid Build Coastguard WorkerMemory management
2963*dfc6aa5cSAndroid Build Coastguard Worker-----------------
2964*dfc6aa5cSAndroid Build Coastguard Worker
2965*dfc6aa5cSAndroid Build Coastguard WorkerThis section covers some key facts about the JPEG library's built-in memory
2966*dfc6aa5cSAndroid Build Coastguard Workermanager.  For more info, please read structure.txt's section about the memory
2967*dfc6aa5cSAndroid Build Coastguard Workermanager, and consult the source code if necessary.
2968*dfc6aa5cSAndroid Build Coastguard Worker
2969*dfc6aa5cSAndroid Build Coastguard WorkerAll memory and temporary file allocation within the library is done via the
2970*dfc6aa5cSAndroid Build Coastguard Workermemory manager.  If necessary, you can replace the "back end" of the memory
2971*dfc6aa5cSAndroid Build Coastguard Workermanager to control allocation yourself (for example, if you don't want the
2972*dfc6aa5cSAndroid Build Coastguard Workerlibrary to use malloc() and free() for some reason).
2973*dfc6aa5cSAndroid Build Coastguard Worker
2974*dfc6aa5cSAndroid Build Coastguard WorkerSome data is allocated "permanently" and will not be freed until the JPEG
2975*dfc6aa5cSAndroid Build Coastguard Workerobject is destroyed.  Most data is allocated "per image" and is freed by
2976*dfc6aa5cSAndroid Build Coastguard Workerjpeg_finish_compress, jpeg_finish_decompress, or jpeg_abort.  You can call the
2977*dfc6aa5cSAndroid Build Coastguard Workermemory manager yourself to allocate structures that will automatically be
2978*dfc6aa5cSAndroid Build Coastguard Workerfreed at these times.  Typical code for this is
2979*dfc6aa5cSAndroid Build Coastguard Worker  ptr = (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE, size);
2980*dfc6aa5cSAndroid Build Coastguard WorkerUse JPOOL_PERMANENT to get storage that lasts as long as the JPEG object.
2981*dfc6aa5cSAndroid Build Coastguard WorkerUse alloc_large instead of alloc_small for anything bigger than a few Kbytes.
2982*dfc6aa5cSAndroid Build Coastguard WorkerThere are also alloc_sarray and alloc_barray routines that automatically
2983*dfc6aa5cSAndroid Build Coastguard Workerbuild 2-D sample or block arrays.
2984*dfc6aa5cSAndroid Build Coastguard Worker
2985*dfc6aa5cSAndroid Build Coastguard WorkerThe library's minimum space requirements to process an image depend on the
2986*dfc6aa5cSAndroid Build Coastguard Workerimage's width, but not on its height, because the library ordinarily works
2987*dfc6aa5cSAndroid Build Coastguard Workerwith "strip" buffers that are as wide as the image but just a few rows high.
2988*dfc6aa5cSAndroid Build Coastguard WorkerSome operating modes (eg, two-pass color quantization) require full-image
2989*dfc6aa5cSAndroid Build Coastguard Workerbuffers.  Such buffers are treated as "virtual arrays": only the current strip
2990*dfc6aa5cSAndroid Build Coastguard Workerneed be in memory, and the rest can be swapped out to a temporary file.
2991*dfc6aa5cSAndroid Build Coastguard Worker
2992*dfc6aa5cSAndroid Build Coastguard WorkerWhen using temporary files, the library will make the in-memory buffers for
2993*dfc6aa5cSAndroid Build Coastguard Workerits virtual arrays just big enough to stay within a "maximum memory" setting.
2994*dfc6aa5cSAndroid Build Coastguard WorkerYour application can set this limit by setting cinfo->mem->max_memory_to_use
2995*dfc6aa5cSAndroid Build Coastguard Workerafter creating the JPEG object.  (Of course, there is still a minimum size for
2996*dfc6aa5cSAndroid Build Coastguard Workerthe buffers, so the max-memory setting is effective only if it is bigger than
2997*dfc6aa5cSAndroid Build Coastguard Workerthe minimum space needed.)  If you allocate any large structures yourself, you
2998*dfc6aa5cSAndroid Build Coastguard Workermust allocate them before jpeg_start_compress() or jpeg_start_decompress() in
2999*dfc6aa5cSAndroid Build Coastguard Workerorder to have them counted against the max memory limit.  Also keep in mind
3000*dfc6aa5cSAndroid Build Coastguard Workerthat space allocated with alloc_small() is ignored, on the assumption that
3001*dfc6aa5cSAndroid Build Coastguard Workerit's too small to be worth worrying about; so a reasonable safety margin
3002*dfc6aa5cSAndroid Build Coastguard Workershould be left when setting max_memory_to_use.
3003*dfc6aa5cSAndroid Build Coastguard Worker
3004*dfc6aa5cSAndroid Build Coastguard WorkerNOTE: Unless you develop your own memory manager back end, then temporary files
3005*dfc6aa5cSAndroid Build Coastguard Workerwill never be used.  The back end provided in libjpeg-turbo (jmemnobs.c) simply
3006*dfc6aa5cSAndroid Build Coastguard Workermalloc()s and free()s virtual arrays, and an error occurs if the required
3007*dfc6aa5cSAndroid Build Coastguard Workermemory exceeds the limit specified in cinfo->mem->max_memory_to_use.
3008*dfc6aa5cSAndroid Build Coastguard Worker
3009*dfc6aa5cSAndroid Build Coastguard Worker
3010*dfc6aa5cSAndroid Build Coastguard WorkerMemory usage
3011*dfc6aa5cSAndroid Build Coastguard Worker------------
3012*dfc6aa5cSAndroid Build Coastguard Worker
3013*dfc6aa5cSAndroid Build Coastguard WorkerWorking memory requirements while performing compression or decompression
3014*dfc6aa5cSAndroid Build Coastguard Workerdepend on image dimensions, image characteristics (such as colorspace and
3015*dfc6aa5cSAndroid Build Coastguard WorkerJPEG process), and operating mode (application-selected options).
3016*dfc6aa5cSAndroid Build Coastguard Worker
3017*dfc6aa5cSAndroid Build Coastguard WorkerAs of v6b, the decompressor requires:
3018*dfc6aa5cSAndroid Build Coastguard Worker 1. About 24K in more-or-less-fixed-size data.  This varies a bit depending
3019*dfc6aa5cSAndroid Build Coastguard Worker    on operating mode and image characteristics (particularly color vs.
3020*dfc6aa5cSAndroid Build Coastguard Worker    grayscale), but it doesn't depend on image dimensions.
3021*dfc6aa5cSAndroid Build Coastguard Worker 2. Strip buffers (of size proportional to the image width) for IDCT and
3022*dfc6aa5cSAndroid Build Coastguard Worker    upsampling results.  The worst case for commonly used sampling factors
3023*dfc6aa5cSAndroid Build Coastguard Worker    is about 34 bytes * width in pixels for a color image.  A grayscale image
3024*dfc6aa5cSAndroid Build Coastguard Worker    only needs about 8 bytes per pixel column.
3025*dfc6aa5cSAndroid Build Coastguard Worker 3. A full-image DCT coefficient buffer is needed to decode a multi-scan JPEG
3026*dfc6aa5cSAndroid Build Coastguard Worker    file (including progressive JPEGs), or whenever you select buffered-image
3027*dfc6aa5cSAndroid Build Coastguard Worker    mode.  This takes 2 bytes/coefficient.  At typical 2x2 sampling, that's
3028*dfc6aa5cSAndroid Build Coastguard Worker    3 bytes per pixel for a color image.  Worst case (1x1 sampling) requires
3029*dfc6aa5cSAndroid Build Coastguard Worker    6 bytes/pixel.  For grayscale, figure 2 bytes/pixel.
3030*dfc6aa5cSAndroid Build Coastguard Worker 4. To perform 2-pass color quantization, the decompressor also needs a
3031*dfc6aa5cSAndroid Build Coastguard Worker    128K color lookup table and a full-image pixel buffer (3 bytes/pixel).
3032*dfc6aa5cSAndroid Build Coastguard WorkerThis does not count any memory allocated by the application, such as a
3033*dfc6aa5cSAndroid Build Coastguard Workerbuffer to hold the final output image.
3034*dfc6aa5cSAndroid Build Coastguard Worker
3035*dfc6aa5cSAndroid Build Coastguard WorkerThe above figures are valid for 8-bit JPEG data precision and a machine with
3036*dfc6aa5cSAndroid Build Coastguard Worker32-bit ints.  For 12-bit JPEG data, double the size of the strip buffers and
3037*dfc6aa5cSAndroid Build Coastguard Workerquantization pixel buffer.  The "fixed-size" data will be somewhat smaller
3038*dfc6aa5cSAndroid Build Coastguard Workerwith 16-bit ints, larger with 64-bit ints.  Also, CMYK or other unusual
3039*dfc6aa5cSAndroid Build Coastguard Workercolor spaces will require different amounts of space.
3040*dfc6aa5cSAndroid Build Coastguard Worker
3041*dfc6aa5cSAndroid Build Coastguard WorkerThe full-image coefficient and pixel buffers, if needed at all, do not
3042*dfc6aa5cSAndroid Build Coastguard Workerhave to be fully RAM resident; you can have the library use temporary
3043*dfc6aa5cSAndroid Build Coastguard Workerfiles instead when the total memory usage would exceed a limit you set.
3044*dfc6aa5cSAndroid Build Coastguard Worker(But if your OS supports virtual memory, it's probably better to just use
3045*dfc6aa5cSAndroid Build Coastguard Workerjmemnobs and let the OS do the swapping.)
3046*dfc6aa5cSAndroid Build Coastguard Worker
3047*dfc6aa5cSAndroid Build Coastguard WorkerThe compressor's memory requirements are similar, except that it has no need
3048*dfc6aa5cSAndroid Build Coastguard Workerfor color quantization.  Also, it needs a full-image DCT coefficient buffer
3049*dfc6aa5cSAndroid Build Coastguard Workerif Huffman-table optimization is asked for, even if progressive mode is not
3050*dfc6aa5cSAndroid Build Coastguard Workerrequested.
3051*dfc6aa5cSAndroid Build Coastguard Worker
3052*dfc6aa5cSAndroid Build Coastguard WorkerIf you need more detailed information about memory usage in a particular
3053*dfc6aa5cSAndroid Build Coastguard Workersituation, you can enable the MEM_STATS code in jmemmgr.c.
3054*dfc6aa5cSAndroid Build Coastguard Worker
3055*dfc6aa5cSAndroid Build Coastguard Worker
3056*dfc6aa5cSAndroid Build Coastguard WorkerLibrary compile-time options
3057*dfc6aa5cSAndroid Build Coastguard Worker----------------------------
3058*dfc6aa5cSAndroid Build Coastguard Worker
3059*dfc6aa5cSAndroid Build Coastguard WorkerA number of compile-time options are available by modifying jmorecfg.h.
3060*dfc6aa5cSAndroid Build Coastguard Worker
3061*dfc6aa5cSAndroid Build Coastguard WorkerThe JPEG standard provides for both the baseline 8-bit DCT process and
3062*dfc6aa5cSAndroid Build Coastguard Workera 12-bit DCT process.  The IJG code supports 12-bit lossy JPEG if you define
3063*dfc6aa5cSAndroid Build Coastguard WorkerBITS_IN_JSAMPLE as 12 rather than 8.  Note that this causes JSAMPLE to be
3064*dfc6aa5cSAndroid Build Coastguard Workerlarger than a char, so it affects the surrounding application's image data.
3065*dfc6aa5cSAndroid Build Coastguard WorkerThe sample applications cjpeg and djpeg can support 12-bit mode only for PPM
3066*dfc6aa5cSAndroid Build Coastguard Workerand GIF file formats; you must disable the other file formats to compile a
3067*dfc6aa5cSAndroid Build Coastguard Worker12-bit cjpeg or djpeg.  At present, a 12-bit library can handle *only* 12-bit
3068*dfc6aa5cSAndroid Build Coastguard Workerimages, not both precisions.
3069*dfc6aa5cSAndroid Build Coastguard Worker
3070*dfc6aa5cSAndroid Build Coastguard WorkerNote that a 12-bit library always compresses in Huffman optimization mode,
3071*dfc6aa5cSAndroid Build Coastguard Workerin order to generate valid Huffman tables.  This is necessary because our
3072*dfc6aa5cSAndroid Build Coastguard Workerdefault Huffman tables only cover 8-bit data.  If you need to output 12-bit
3073*dfc6aa5cSAndroid Build Coastguard Workerfiles in one pass, you'll have to supply suitable default Huffman tables.
3074*dfc6aa5cSAndroid Build Coastguard WorkerYou may also want to supply your own DCT quantization tables; the existing
3075*dfc6aa5cSAndroid Build Coastguard Workerquality-scaling code has been developed for 8-bit use, and probably doesn't
3076*dfc6aa5cSAndroid Build Coastguard Workergenerate especially good tables for 12-bit.
3077*dfc6aa5cSAndroid Build Coastguard Worker
3078*dfc6aa5cSAndroid Build Coastguard WorkerThe maximum number of components (color channels) in the image is determined
3079*dfc6aa5cSAndroid Build Coastguard Workerby MAX_COMPONENTS.  The JPEG standard allows up to 255 components, but we
3080*dfc6aa5cSAndroid Build Coastguard Workerexpect that few applications will need more than four or so.
3081*dfc6aa5cSAndroid Build Coastguard Worker
3082*dfc6aa5cSAndroid Build Coastguard WorkerOn machines with unusual data type sizes, you may be able to improve
3083*dfc6aa5cSAndroid Build Coastguard Workerperformance or reduce memory space by tweaking the various typedefs in
3084*dfc6aa5cSAndroid Build Coastguard Workerjmorecfg.h.  In particular, on some RISC CPUs, access to arrays of "short"s
3085*dfc6aa5cSAndroid Build Coastguard Workeris quite slow; consider trading memory for speed by making JCOEF, INT16, and
3086*dfc6aa5cSAndroid Build Coastguard WorkerUINT16 be "int" or "unsigned int".  UINT8 is also a candidate to become int.
3087*dfc6aa5cSAndroid Build Coastguard WorkerYou probably don't want to make JSAMPLE be int unless you have lots of memory
3088*dfc6aa5cSAndroid Build Coastguard Workerto burn.
3089*dfc6aa5cSAndroid Build Coastguard Worker
3090*dfc6aa5cSAndroid Build Coastguard WorkerYou can reduce the size of the library by compiling out various optional
3091*dfc6aa5cSAndroid Build Coastguard Workerfunctions.  To do this, undefine xxx_SUPPORTED symbols as necessary.
3092*dfc6aa5cSAndroid Build Coastguard Worker
3093*dfc6aa5cSAndroid Build Coastguard WorkerYou can also save a few K by not having text error messages in the library;
3094*dfc6aa5cSAndroid Build Coastguard Workerthe standard error message table occupies about 5Kb.  This is particularly
3095*dfc6aa5cSAndroid Build Coastguard Workerreasonable for embedded applications where there's no good way to display
3096*dfc6aa5cSAndroid Build Coastguard Workera message anyway.  To do this, remove the creation of the message table
3097*dfc6aa5cSAndroid Build Coastguard Worker(jpeg_std_message_table[]) from jerror.c, and alter format_message to do
3098*dfc6aa5cSAndroid Build Coastguard Workersomething reasonable without it.  You could output the numeric value of the
3099*dfc6aa5cSAndroid Build Coastguard Workermessage code number, for example.  If you do this, you can also save a couple
3100*dfc6aa5cSAndroid Build Coastguard Workermore K by modifying the TRACEMSn() macros in jerror.h to expand to nothing;
3101*dfc6aa5cSAndroid Build Coastguard Workeryou don't need trace capability anyway, right?
3102*dfc6aa5cSAndroid Build Coastguard Worker
3103*dfc6aa5cSAndroid Build Coastguard Worker
3104*dfc6aa5cSAndroid Build Coastguard WorkerPortability considerations
3105*dfc6aa5cSAndroid Build Coastguard Worker--------------------------
3106*dfc6aa5cSAndroid Build Coastguard Worker
3107*dfc6aa5cSAndroid Build Coastguard WorkerThe JPEG library has been written to be extremely portable; the sample
3108*dfc6aa5cSAndroid Build Coastguard Workerapplications cjpeg and djpeg are slightly less so.  This section summarizes
3109*dfc6aa5cSAndroid Build Coastguard Workerthe design goals in this area.  (If you encounter any bugs that cause the
3110*dfc6aa5cSAndroid Build Coastguard Workerlibrary to be less portable than is claimed here, we'd appreciate hearing
3111*dfc6aa5cSAndroid Build Coastguard Workerabout them.)
3112*dfc6aa5cSAndroid Build Coastguard Worker
3113*dfc6aa5cSAndroid Build Coastguard WorkerThe code works fine on ANSI C and C++ compilers, using any of the popular
3114*dfc6aa5cSAndroid Build Coastguard Workersystem include file setups, and some not-so-popular ones too.
3115*dfc6aa5cSAndroid Build Coastguard Worker
3116*dfc6aa5cSAndroid Build Coastguard WorkerThe code is not dependent on the exact sizes of the C data types.  As
3117*dfc6aa5cSAndroid Build Coastguard Workerdistributed, we make the assumptions that
3118*dfc6aa5cSAndroid Build Coastguard Worker        char    is at least 8 bits wide
3119*dfc6aa5cSAndroid Build Coastguard Worker        short   is at least 16 bits wide
3120*dfc6aa5cSAndroid Build Coastguard Worker        int     is at least 16 bits wide
3121*dfc6aa5cSAndroid Build Coastguard Worker        long    is at least 32 bits wide
3122*dfc6aa5cSAndroid Build Coastguard Worker(These are the minimum requirements of the ANSI C standard.)  Wider types will
3123*dfc6aa5cSAndroid Build Coastguard Workerwork fine, although memory may be used inefficiently if char is much larger
3124*dfc6aa5cSAndroid Build Coastguard Workerthan 8 bits or short is much bigger than 16 bits.  The code should work
3125*dfc6aa5cSAndroid Build Coastguard Workerequally well with 16- or 32-bit ints.
3126*dfc6aa5cSAndroid Build Coastguard Worker
3127*dfc6aa5cSAndroid Build Coastguard WorkerIn a system where these assumptions are not met, you may be able to make the
3128*dfc6aa5cSAndroid Build Coastguard Workercode work by modifying the typedefs in jmorecfg.h.  However, you will probably
3129*dfc6aa5cSAndroid Build Coastguard Workerhave difficulty if int is less than 16 bits wide, since references to plain
3130*dfc6aa5cSAndroid Build Coastguard Workerint abound in the code.
3131*dfc6aa5cSAndroid Build Coastguard Worker
3132*dfc6aa5cSAndroid Build Coastguard Workerchar can be either signed or unsigned, although the code runs faster if an
3133*dfc6aa5cSAndroid Build Coastguard Workerunsigned char type is available.  If char is wider than 8 bits, you will need
3134*dfc6aa5cSAndroid Build Coastguard Workerto redefine JOCTET and/or provide custom data source/destination managers so
3135*dfc6aa5cSAndroid Build Coastguard Workerthat JOCTET represents exactly 8 bits of data on external storage.
3136*dfc6aa5cSAndroid Build Coastguard Worker
3137*dfc6aa5cSAndroid Build Coastguard WorkerThe JPEG library proper does not assume ASCII representation of characters.
3138*dfc6aa5cSAndroid Build Coastguard WorkerBut some of the image file I/O modules in cjpeg/djpeg do have ASCII
3139*dfc6aa5cSAndroid Build Coastguard Workerdependencies in file-header manipulation; so does cjpeg's select_file_type()
3140*dfc6aa5cSAndroid Build Coastguard Workerroutine.
3141*dfc6aa5cSAndroid Build Coastguard Worker
3142*dfc6aa5cSAndroid Build Coastguard WorkerThe JPEG library does not rely heavily on the C library.  In particular, C
3143*dfc6aa5cSAndroid Build Coastguard Workerstdio is used only by the data source/destination modules and the error
3144*dfc6aa5cSAndroid Build Coastguard Workerhandler, all of which are application-replaceable.  (cjpeg/djpeg are more
3145*dfc6aa5cSAndroid Build Coastguard Workerheavily dependent on stdio.)  malloc and free are called only from the memory
3146*dfc6aa5cSAndroid Build Coastguard Workermanager "back end" module, so you can use a different memory allocator by
3147*dfc6aa5cSAndroid Build Coastguard Workerreplacing that one file.
3148*dfc6aa5cSAndroid Build Coastguard Worker
3149*dfc6aa5cSAndroid Build Coastguard WorkerMore info about porting the code may be gleaned by reading jconfig.txt,
3150*dfc6aa5cSAndroid Build Coastguard Workerjmorecfg.h, and jinclude.h.
3151