libjpeg.doc
上传用户:wuyixingx
上传日期:2007-01-08
资源大小:745k
文件大小:159k
源码类别:

图形图象

开发平台:

C/C++

  1. a choice of exiting via ERREXIT() or inserting fake data into the buffer.
  2. In most cases, generating a warning message and inserting a fake EOI marker
  3. is the best course of action --- this will allow the decompressor to output
  4. however much of the image is there.  In pathological cases, the decompressor
  5. may swallow the EOI and again demand data ... just keep feeding it fake EOIs.
  6. jdatasrc.c illustrates the recommended error recovery behavior.
  7. term_source() is NOT called by jpeg_abort() or jpeg_destroy().  If you want
  8. the source manager to be cleaned up during an abort, you must do it yourself.
  9. You will also need code to create a jpeg_source_mgr struct, fill in its method
  10. pointers, and insert a pointer to the struct into the "src" field of the JPEG
  11. decompression object.  This can be done in-line in your setup code if you
  12. like, but it's probably cleaner to provide a separate routine similar to the
  13. jpeg_stdio_src() routine of the supplied source manager.
  14. For more information, consult the stdio source and destination managers
  15. in jdatasrc.c and jdatadst.c.
  16. I/O suspension
  17. --------------
  18. Some applications need to use the JPEG library as an incremental memory-to-
  19. memory filter: when the compressed data buffer is filled or emptied, they want
  20. control to return to the outer loop, rather than expecting that the buffer can
  21. be emptied or reloaded within the data source/destination manager subroutine.
  22. The library supports this need by providing an "I/O suspension" mode, which we
  23. describe in this section.
  24. The I/O suspension mode is not a panacea: nothing is guaranteed about the
  25. maximum amount of time spent in any one call to the library, so it will not
  26. eliminate response-time problems in single-threaded applications.  If you
  27. need guaranteed response time, we suggest you "bite the bullet" and implement
  28. a real multi-tasking capability.
  29. To use I/O suspension, cooperation is needed between the calling application
  30. and the data source or destination manager; you will always need a custom
  31. source/destination manager.  (Please read the previous section if you haven't
  32. already.)  The basic idea is that the empty_output_buffer() or
  33. fill_input_buffer() routine is a no-op, merely returning FALSE to indicate
  34. that it has done nothing.  Upon seeing this, the JPEG library suspends
  35. operation and returns to its caller.  The surrounding application is
  36. responsible for emptying or refilling the work buffer before calling the
  37. JPEG library again.
  38. Compression suspension:
  39. For compression suspension, use an empty_output_buffer() routine that returns
  40. FALSE; typically it will not do anything else.  This will cause the
  41. compressor to return to the caller of jpeg_write_scanlines(), with the return
  42. value indicating that not all the supplied scanlines have been accepted.
  43. The application must make more room in the output buffer, adjust the output
  44. buffer pointer/count appropriately, and then call jpeg_write_scanlines()
  45. again, pointing to the first unconsumed scanline.
  46. When forced to suspend, the compressor will backtrack to a convenient stopping
  47. point (usually the start of the current MCU); it will regenerate some output
  48. data when restarted.  Therefore, although empty_output_buffer() is only
  49. called when the buffer is filled, you should NOT write out the entire buffer
  50. after a suspension.  Write only the data up to the current position of
  51. next_output_byte/free_in_buffer.  The data beyond that point will be
  52. regenerated after resumption.
  53. Because of the backtracking behavior, a good-size output buffer is essential
  54. for efficiency; you don't want the compressor to suspend often.  (In fact, an
  55. overly small buffer could lead to infinite looping, if a single MCU required
  56. more data than would fit in the buffer.)  We recommend a buffer of at least
  57. several Kbytes.  You may want to insert explicit code to ensure that you don't
  58. call jpeg_write_scanlines() unless there is a reasonable amount of space in
  59. the output buffer; in other words, flush the buffer before trying to compress
  60. more data.
  61. The compressor does not allow suspension while it is trying to write JPEG
  62. markers at the beginning and end of the file.  This means that:
  63.   * At the beginning of a compression operation, there must be enough free
  64.     space in the output buffer to hold the header markers (typically 600 or
  65.     so bytes).  The recommended buffer size is bigger than this anyway, so
  66.     this is not a problem as long as you start with an empty buffer.  However,
  67.     this restriction might catch you if you insert large special markers, such
  68.     as a JFIF thumbnail image, without flushing the buffer afterwards.
  69.   * When you call jpeg_finish_compress(), there must be enough space in the
  70.     output buffer to emit any buffered data and the final EOI marker.  In the
  71.     current implementation, half a dozen bytes should suffice for this, but
  72.     for safety's sake we recommend ensuring that at least 100 bytes are free
  73.     before calling jpeg_finish_compress().
  74. A more significant restriction is that jpeg_finish_compress() cannot suspend.
  75. This means you cannot use suspension with multi-pass operating modes, namely
  76. Huffman code optimization and multiple-scan output.  Those modes write the
  77. whole file during jpeg_finish_compress(), which will certainly result in
  78. buffer overrun.  (Note that this restriction applies only to compression,
  79. not decompression.  The decompressor supports input suspension in all of its
  80. operating modes.)
  81. Decompression suspension:
  82. For decompression suspension, use a fill_input_buffer() routine that simply
  83. returns FALSE (except perhaps during error recovery, as discussed below).
  84. This will cause the decompressor to return to its caller with an indication
  85. that suspension has occurred.  This can happen at four places:
  86.   * jpeg_read_header(): will return JPEG_SUSPENDED.
  87.   * jpeg_start_decompress(): will return FALSE, rather than its usual TRUE.
  88.   * jpeg_read_scanlines(): will return the number of scanlines already
  89. completed (possibly 0).
  90.   * jpeg_finish_decompress(): will return FALSE, rather than its usual TRUE.
  91. The surrounding application must recognize these cases, load more data into
  92. the input buffer, and repeat the call.  In the case of jpeg_read_scanlines(),
  93. increment the passed pointers past any scanlines successfully read.
  94. Just as with compression, the decompressor will typically backtrack to a
  95. convenient restart point before suspending.  When fill_input_buffer() is
  96. called, next_input_byte/bytes_in_buffer point to the current restart point,
  97. which is where the decompressor will backtrack to if FALSE is returned.
  98. The data beyond that position must NOT be discarded if you suspend; it needs
  99. to be re-read upon resumption.  In most implementations, you'll need to shift
  100. this data down to the start of your work buffer and then load more data after
  101. it.  Again, this behavior means that a several-Kbyte work buffer is essential
  102. for decent performance; furthermore, you should load a reasonable amount of
  103. new data before resuming decompression.  (If you loaded, say, only one new
  104. byte each time around, you could waste a LOT of cycles.)
  105. The skip_input_data() source manager routine requires special care in a
  106. suspension scenario.  This routine is NOT granted the ability to suspend the
  107. decompressor; it can decrement bytes_in_buffer to zero, but no more.  If the
  108. requested skip distance exceeds the amount of data currently in the input
  109. buffer, then skip_input_data() must set bytes_in_buffer to zero and record the
  110. additional skip distance somewhere else.  The decompressor will immediately
  111. call fill_input_buffer(), which should return FALSE, which will cause a
  112. suspension return.  The surrounding application must then arrange to discard
  113. the recorded number of bytes before it resumes loading the input buffer.
  114. (Yes, this design is rather baroque, but it avoids complexity in the far more
  115. common case where a non-suspending source manager is used.)
  116. If the input data has been exhausted, we recommend that you emit a warning
  117. and insert dummy EOI markers just as a non-suspending data source manager
  118. would do.  This can be handled either in the surrounding application logic or
  119. within fill_input_buffer(); the latter is probably more efficient.  If
  120. fill_input_buffer() knows that no more data is available, it can set the
  121. pointer/count to point to a dummy EOI marker and then return TRUE just as
  122. though it had read more data in a non-suspending situation.
  123. The decompressor does not attempt to suspend within standard JPEG markers;
  124. instead it will backtrack to the start of the marker and reprocess the whole
  125. marker next time.  Hence the input buffer must be large enough to hold the
  126. longest standard marker in the file.  Standard JPEG markers should normally
  127. not exceed a few hundred bytes each (DHT tables are typically the longest).
  128. We recommend at least a 2K buffer for performance reasons, which is much
  129. larger than any correct marker is likely to be.  For robustness against
  130. damaged marker length counts, you may wish to insert a test in your
  131. application for the case that the input buffer is completely full and yet
  132. the decoder has suspended without consuming any data --- otherwise, if this
  133. situation did occur, it would lead to an endless loop.  (The library can't
  134. provide this test since it has no idea whether "the buffer is full", or
  135. even whether there is a fixed-size input buffer.)
  136. The input buffer would need to be 64K to allow for arbitrary COM or APPn
  137. markers, but these are handled specially: they are either saved into allocated
  138. memory, or skipped over by calling skip_input_data().  In the former case,
  139. suspension is handled correctly, and in the latter case, the problem of
  140. buffer overrun is placed on skip_input_data's shoulders, as explained above.
  141. Note that if you provide your own marker handling routine for large markers,
  142. you should consider how to deal with buffer overflow.
  143. Multiple-buffer management:
  144. In some applications it is desirable to store the compressed data in a linked
  145. list of buffer areas, so as to avoid data copying.  This can be handled by
  146. having empty_output_buffer() or fill_input_buffer() set the pointer and count
  147. to reference the next available buffer; FALSE is returned only if no more
  148. buffers are available.  Although seemingly straightforward, there is a
  149. pitfall in this approach: the backtrack that occurs when FALSE is returned
  150. could back up into an earlier buffer.  For example, when fill_input_buffer()
  151. is called, the current pointer & count indicate the backtrack restart point.
  152. Since fill_input_buffer() will set the pointer and count to refer to a new
  153. buffer, the restart position must be saved somewhere else.  Suppose a second
  154. call to fill_input_buffer() occurs in the same library call, and no
  155. additional input data is available, so fill_input_buffer must return FALSE.
  156. If the JPEG library has not moved the pointer/count forward in the current
  157. buffer, then *the correct restart point is the saved position in the prior
  158. buffer*.  Prior buffers may be discarded only after the library establishes
  159. a restart point within a later buffer.  Similar remarks apply for output into
  160. a chain of buffers.
  161. The library will never attempt to backtrack over a skip_input_data() call,
  162. so any skipped data can be permanently discarded.  You still have to deal
  163. with the case of skipping not-yet-received data, however.
  164. It's much simpler to use only a single buffer; when fill_input_buffer() is
  165. called, move any unconsumed data (beyond the current pointer/count) down to
  166. the beginning of this buffer and then load new data into the remaining buffer
  167. space.  This approach requires a little more data copying but is far easier
  168. to get right.
  169. Progressive JPEG support
  170. ------------------------
  171. Progressive JPEG rearranges the stored data into a series of scans of
  172. increasing quality.  In situations where a JPEG file is transmitted across a
  173. slow communications link, a decoder can generate a low-quality image very
  174. quickly from the first scan, then gradually improve the displayed quality as
  175. more scans are received.  The final image after all scans are complete is
  176. identical to that of a regular (sequential) JPEG file of the same quality
  177. setting.  Progressive JPEG files are often slightly smaller than equivalent
  178. sequential JPEG files, but the possibility of incremental display is the main
  179. reason for using progressive JPEG.
  180. The IJG encoder library generates progressive JPEG files when given a
  181. suitable "scan script" defining how to divide the data into scans.
  182. Creation of progressive JPEG files is otherwise transparent to the encoder.
  183. Progressive JPEG files can also be read transparently by the decoder library.
  184. If the decoding application simply uses the library as defined above, it
  185. will receive a final decoded image without any indication that the file was
  186. progressive.  Of course, this approach does not allow incremental display.
  187. To perform incremental display, an application needs to use the decoder
  188. library's "buffered-image" mode, in which it receives a decoded image
  189. multiple times.
  190. Each displayed scan requires about as much work to decode as a full JPEG
  191. image of the same size, so the decoder must be fairly fast in relation to the
  192. data transmission rate in order to make incremental display useful.  However,
  193. it is possible to skip displaying the image and simply add the incoming bits
  194. to the decoder's coefficient buffer.  This is fast because only Huffman
  195. decoding need be done, not IDCT, upsampling, colorspace conversion, etc.
  196. The IJG decoder library allows the application to switch dynamically between
  197. displaying the image and simply absorbing the incoming bits.  A properly
  198. coded application can automatically adapt the number of display passes to
  199. suit the time available as the image is received.  Also, a final
  200. higher-quality display cycle can be performed from the buffered data after
  201. the end of the file is reached.
  202. Progressive compression:
  203. To create a progressive JPEG file (or a multiple-scan sequential JPEG file),
  204. set the scan_info cinfo field to point to an array of scan descriptors, and
  205. perform compression as usual.  Instead of constructing your own scan list,
  206. you can call the jpeg_simple_progression() helper routine to create a
  207. recommended progression sequence; this method should be used by all
  208. applications that don't want to get involved in the nitty-gritty of
  209. progressive scan sequence design.  (If you want to provide user control of
  210. scan sequences, you may wish to borrow the scan script reading code found
  211. in rdswitch.c, so that you can read scan script files just like cjpeg's.)
  212. When scan_info is not NULL, the compression library will store DCT'd data
  213. into a buffer array as jpeg_write_scanlines() is called, and will emit all
  214. the requested scans during jpeg_finish_compress().  This implies that
  215. multiple-scan output cannot be created with a suspending data destination
  216. manager, since jpeg_finish_compress() does not support suspension.  We
  217. should also note that the compressor currently forces Huffman optimization
  218. mode when creating a progressive JPEG file, because the default Huffman
  219. tables are unsuitable for progressive files.
  220. Progressive decompression:
  221. When buffered-image mode is not used, the decoder library will read all of
  222. a multi-scan file during jpeg_start_decompress(), so that it can provide a
  223. final decoded image.  (Here "multi-scan" means either progressive or
  224. multi-scan sequential.)  This makes multi-scan files transparent to the
  225. decoding application.  However, existing applications that used suspending
  226. input with version 5 of the IJG library will need to be modified to check
  227. for a suspension return from jpeg_start_decompress().
  228. To perform incremental display, an application must use the library's
  229. buffered-image mode.  This is described in the next section.
  230. Buffered-image mode
  231. -------------------
  232. In buffered-image mode, the library stores the partially decoded image in a
  233. coefficient buffer, from which it can be read out as many times as desired.
  234. This mode is typically used for incremental display of progressive JPEG files,
  235. but it can be used with any JPEG file.  Each scan of a progressive JPEG file
  236. adds more data (more detail) to the buffered image.  The application can
  237. display in lockstep with the source file (one display pass per input scan),
  238. or it can allow input processing to outrun display processing.  By making
  239. input and display processing run independently, it is possible for the
  240. application to adapt progressive display to a wide range of data transmission
  241. rates.
  242. The basic control flow for buffered-image decoding is
  243. jpeg_create_decompress()
  244. set data source
  245. jpeg_read_header()
  246. set overall decompression parameters
  247. cinfo.buffered_image = TRUE; /* select buffered-image mode */
  248. jpeg_start_decompress()
  249. for (each output pass) {
  250.     adjust output decompression parameters if required
  251.     jpeg_start_output() /* start a new output pass */
  252.     for (all scanlines in image) {
  253.         jpeg_read_scanlines()
  254.         display scanlines
  255.     }
  256.     jpeg_finish_output() /* terminate output pass */
  257. }
  258. jpeg_finish_decompress()
  259. jpeg_destroy_decompress()
  260. This differs from ordinary unbuffered decoding in that there is an additional
  261. level of looping.  The application can choose how many output passes to make
  262. and how to display each pass.
  263. The simplest approach to displaying progressive images is to do one display
  264. pass for each scan appearing in the input file.  In this case the outer loop
  265. condition is typically
  266. while (! jpeg_input_complete(&cinfo))
  267. and the start-output call should read
  268. jpeg_start_output(&cinfo, cinfo.input_scan_number);
  269. The second parameter to jpeg_start_output() indicates which scan of the input
  270. file is to be displayed; the scans are numbered starting at 1 for this
  271. purpose.  (You can use a loop counter starting at 1 if you like, but using
  272. the library's input scan counter is easier.)  The library automatically reads
  273. data as necessary to complete each requested scan, and jpeg_finish_output()
  274. advances to the next scan or end-of-image marker (hence input_scan_number
  275. will be incremented by the time control arrives back at jpeg_start_output()).
  276. With this technique, data is read from the input file only as needed, and
  277. input and output processing run in lockstep.
  278. After reading the final scan and reaching the end of the input file, the
  279. buffered image remains available; it can be read additional times by
  280. repeating the jpeg_start_output()/jpeg_read_scanlines()/jpeg_finish_output()
  281. sequence.  For example, a useful technique is to use fast one-pass color
  282. quantization for display passes made while the image is arriving, followed by
  283. a final display pass using two-pass quantization for highest quality.  This
  284. is done by changing the library parameters before the final output pass.
  285. Changing parameters between passes is discussed in detail below.
  286. In general the last scan of a progressive file cannot be recognized as such
  287. until after it is read, so a post-input display pass is the best approach if
  288. you want special processing in the final pass.
  289. When done with the image, be sure to call jpeg_finish_decompress() to release
  290. the buffered image (or just use jpeg_destroy_decompress()).
  291. If input data arrives faster than it can be displayed, the application can
  292. cause the library to decode input data in advance of what's needed to produce
  293. output.  This is done by calling the routine jpeg_consume_input().
  294. The return value is one of the following:
  295. JPEG_REACHED_SOS:    reached an SOS marker (the start of a new scan)
  296. JPEG_REACHED_EOI:    reached the EOI marker (end of image)
  297. JPEG_ROW_COMPLETED:  completed reading one MCU row of compressed data
  298. JPEG_SCAN_COMPLETED: completed reading last MCU row of current scan
  299. JPEG_SUSPENDED:      suspended before completing any of the above
  300. (JPEG_SUSPENDED can occur only if a suspending data source is used.)  This
  301. routine can be called at any time after initializing the JPEG object.  It
  302. reads some additional data and returns when one of the indicated significant
  303. events occurs.  (If called after the EOI marker is reached, it will
  304. immediately return JPEG_REACHED_EOI without attempting to read more data.)
  305. The library's output processing will automatically call jpeg_consume_input()
  306. whenever the output processing overtakes the input; thus, simple lockstep
  307. display requires no direct calls to jpeg_consume_input().  But by adding
  308. calls to jpeg_consume_input(), you can absorb data in advance of what is
  309. being displayed.  This has two benefits:
  310.   * You can limit buildup of unprocessed data in your input buffer.
  311.   * You can eliminate extra display passes by paying attention to the
  312.     state of the library's input processing.
  313. The first of these benefits only requires interspersing calls to
  314. jpeg_consume_input() with your display operations and any other processing
  315. you may be doing.  To avoid wasting cycles due to backtracking, it's best to
  316. call jpeg_consume_input() only after a hundred or so new bytes have arrived.
  317. This is discussed further under "I/O suspension", above.  (Note: the JPEG
  318. library currently is not thread-safe.  You must not call jpeg_consume_input()
  319. from one thread of control if a different library routine is working on the
  320. same JPEG object in another thread.)
  321. When input arrives fast enough that more than one new scan is available
  322. before you start a new output pass, you may as well skip the output pass
  323. corresponding to the completed scan.  This occurs for free if you pass
  324. cinfo.input_scan_number as the target scan number to jpeg_start_output().
  325. The input_scan_number field is simply the index of the scan currently being
  326. consumed by the input processor.  You can ensure that this is up-to-date by
  327. emptying the input buffer just before calling jpeg_start_output(): call
  328. jpeg_consume_input() repeatedly until it returns JPEG_SUSPENDED or
  329. JPEG_REACHED_EOI.
  330. The target scan number passed to jpeg_start_output() is saved in the
  331. cinfo.output_scan_number field.  The library's output processing calls
  332. jpeg_consume_input() whenever the current input scan number and row within
  333. that scan is less than or equal to the current output scan number and row.
  334. Thus, input processing can "get ahead" of the output processing but is not
  335. allowed to "fall behind".  You can achieve several different effects by
  336. manipulating this interlock rule.  For example, if you pass a target scan
  337. number greater than the current input scan number, the output processor will
  338. wait until that scan starts to arrive before producing any output.  (To avoid
  339. an infinite loop, the target scan number is automatically reset to the last
  340. scan number when the end of image is reached.  Thus, if you specify a large
  341. target scan number, the library will just absorb the entire input file and
  342. then perform an output pass.  This is effectively the same as what
  343. jpeg_start_decompress() does when you don't select buffered-image mode.)
  344. When you pass a target scan number equal to the current input scan number,
  345. the image is displayed no faster than the current input scan arrives.  The
  346. final possibility is to pass a target scan number less than the current input
  347. scan number; this disables the input/output interlock and causes the output
  348. processor to simply display whatever it finds in the image buffer, without
  349. waiting for input.  (However, the library will not accept a target scan
  350. number less than one, so you can't avoid waiting for the first scan.)
  351. When data is arriving faster than the output display processing can advance
  352. through the image, jpeg_consume_input() will store data into the buffered
  353. image beyond the point at which the output processing is reading data out
  354. again.  If the input arrives fast enough, it may "wrap around" the buffer to
  355. the point where the input is more than one whole scan ahead of the output.
  356. If the output processing simply proceeds through its display pass without
  357. paying attention to the input, the effect seen on-screen is that the lower
  358. part of the image is one or more scans better in quality than the upper part.
  359. Then, when the next output scan is started, you have a choice of what target
  360. scan number to use.  The recommended choice is to use the current input scan
  361. number at that time, which implies that you've skipped the output scans
  362. corresponding to the input scans that were completed while you processed the
  363. previous output scan.  In this way, the decoder automatically adapts its
  364. speed to the arriving data, by skipping output scans as necessary to keep up
  365. with the arriving data.
  366. When using this strategy, you'll want to be sure that you perform a final
  367. output pass after receiving all the data; otherwise your last display may not
  368. be full quality across the whole screen.  So the right outer loop logic is
  369. something like this:
  370. do {
  371.     absorb any waiting input by calling jpeg_consume_input()
  372.     final_pass = jpeg_input_complete(&cinfo);
  373.     adjust output decompression parameters if required
  374.     jpeg_start_output(&cinfo, cinfo.input_scan_number);
  375.     ...
  376.     jpeg_finish_output()
  377. } while (! final_pass);
  378. rather than quitting as soon as jpeg_input_complete() returns TRUE.  This
  379. arrangement makes it simple to use higher-quality decoding parameters
  380. for the final pass.  But if you don't want to use special parameters for
  381. the final pass, the right loop logic is like this:
  382. for (;;) {
  383.     absorb any waiting input by calling jpeg_consume_input()
  384.     jpeg_start_output(&cinfo, cinfo.input_scan_number);
  385.     ...
  386.     jpeg_finish_output()
  387.     if (jpeg_input_complete(&cinfo) &&
  388.         cinfo.input_scan_number == cinfo.output_scan_number)
  389.       break;
  390. }
  391. In this case you don't need to know in advance whether an output pass is to
  392. be the last one, so it's not necessary to have reached EOF before starting
  393. the final output pass; rather, what you want to test is whether the output
  394. pass was performed in sync with the final input scan.  This form of the loop
  395. will avoid an extra output pass whenever the decoder is able (or nearly able)
  396. to keep up with the incoming data.
  397. When the data transmission speed is high, you might begin a display pass,
  398. then find that much or all of the file has arrived before you can complete
  399. the pass.  (You can detect this by noting the JPEG_REACHED_EOI return code
  400. from jpeg_consume_input(), or equivalently by testing jpeg_input_complete().)
  401. In this situation you may wish to abort the current display pass and start a
  402. new one using the newly arrived information.  To do so, just call
  403. jpeg_finish_output() and then start a new pass with jpeg_start_output().
  404. A variant strategy is to abort and restart display if more than one complete
  405. scan arrives during an output pass; this can be detected by noting
  406. JPEG_REACHED_SOS returns and/or examining cinfo.input_scan_number.  This
  407. idea should be employed with caution, however, since the display process
  408. might never get to the bottom of the image before being aborted, resulting
  409. in the lower part of the screen being several passes worse than the upper.
  410. In most cases it's probably best to abort an output pass only if the whole
  411. file has arrived and you want to begin the final output pass immediately.
  412. When receiving data across a communication link, we recommend always using
  413. the current input scan number for the output target scan number; if a
  414. higher-quality final pass is to be done, it should be started (aborting any
  415. incomplete output pass) as soon as the end of file is received.  However,
  416. many other strategies are possible.  For example, the application can examine
  417. the parameters of the current input scan and decide whether to display it or
  418. not.  If the scan contains only chroma data, one might choose not to use it
  419. as the target scan, expecting that the scan will be small and will arrive
  420. quickly.  To skip to the next scan, call jpeg_consume_input() until it
  421. returns JPEG_REACHED_SOS or JPEG_REACHED_EOI.  Or just use the next higher
  422. number as the target scan for jpeg_start_output(); but that method doesn't
  423. let you inspect the next scan's parameters before deciding to display it.
  424. In buffered-image mode, jpeg_start_decompress() never performs input and
  425. thus never suspends.  An application that uses input suspension with
  426. buffered-image mode must be prepared for suspension returns from these
  427. routines:
  428. * jpeg_start_output() performs input only if you request 2-pass quantization
  429.   and the target scan isn't fully read yet.  (This is discussed below.)
  430. * jpeg_read_scanlines(), as always, returns the number of scanlines that it
  431.   was able to produce before suspending.
  432. * jpeg_finish_output() will read any markers following the target scan,
  433.   up to the end of the file or the SOS marker that begins another scan.
  434.   (But it reads no input if jpeg_consume_input() has already reached the
  435.   end of the file or a SOS marker beyond the target output scan.)
  436. * jpeg_finish_decompress() will read until the end of file, and thus can
  437.   suspend if the end hasn't already been reached (as can be tested by
  438.   calling jpeg_input_complete()).
  439. jpeg_start_output(), jpeg_finish_output(), and jpeg_finish_decompress()
  440. all return TRUE if they completed their tasks, FALSE if they had to suspend.
  441. In the event of a FALSE return, the application must load more input data
  442. and repeat the call.  Applications that use non-suspending data sources need
  443. not check the return values of these three routines.
  444. It is possible to change decoding parameters between output passes in the
  445. buffered-image mode.  The decoder library currently supports only very
  446. limited changes of parameters.  ONLY THE FOLLOWING parameter changes are
  447. allowed after jpeg_start_decompress() is called:
  448. * dct_method can be changed before each call to jpeg_start_output().
  449.   For example, one could use a fast DCT method for early scans, changing
  450.   to a higher quality method for the final scan.
  451. * dither_mode can be changed before each call to jpeg_start_output();
  452.   of course this has no impact if not using color quantization.  Typically
  453.   one would use ordered dither for initial passes, then switch to
  454.   Floyd-Steinberg dither for the final pass.  Caution: changing dither mode
  455.   can cause more memory to be allocated by the library.  Although the amount
  456.   of memory involved is not large (a scanline or so), it may cause the
  457.   initial max_memory_to_use specification to be exceeded, which in the worst
  458.   case would result in an out-of-memory failure.
  459. * do_block_smoothing can be changed before each call to jpeg_start_output().
  460.   This setting is relevant only when decoding a progressive JPEG image.
  461.   During the first DC-only scan, block smoothing provides a very "fuzzy" look
  462.   instead of the very "blocky" look seen without it; which is better seems a
  463.   matter of personal taste.  But block smoothing is nearly always a win
  464.   during later stages, especially when decoding a successive-approximation
  465.   image: smoothing helps to hide the slight blockiness that otherwise shows
  466.   up on smooth gradients until the lowest coefficient bits are sent.
  467. * Color quantization mode can be changed under the rules described below.
  468.   You *cannot* change between full-color and quantized output (because that
  469.   would alter the required I/O buffer sizes), but you can change which
  470.   quantization method is used.
  471. When generating color-quantized output, changing quantization method is a
  472. very useful way of switching between high-speed and high-quality display.
  473. The library allows you to change among its three quantization methods:
  474. 1. Single-pass quantization to a fixed color cube.
  475.    Selected by cinfo.two_pass_quantize = FALSE and cinfo.colormap = NULL.
  476. 2. Single-pass quantization to an application-supplied colormap.
  477.    Selected by setting cinfo.colormap to point to the colormap (the value of
  478.    two_pass_quantize is ignored); also set cinfo.actual_number_of_colors.
  479. 3. Two-pass quantization to a colormap chosen specifically for the image.
  480.    Selected by cinfo.two_pass_quantize = TRUE and cinfo.colormap = NULL.
  481.    (This is the default setting selected by jpeg_read_header, but it is
  482.    probably NOT what you want for the first pass of progressive display!)
  483. These methods offer successively better quality and lesser speed.  However,
  484. only the first method is available for quantizing in non-RGB color spaces.
  485. IMPORTANT: because the different quantizer methods have very different
  486. working-storage requirements, the library requires you to indicate which
  487. one(s) you intend to use before you call jpeg_start_decompress().  (If we did
  488. not require this, the max_memory_to_use setting would be a complete fiction.)
  489. You do this by setting one or more of these three cinfo fields to TRUE:
  490. enable_1pass_quant Fixed color cube colormap
  491. enable_external_quant Externally-supplied colormap
  492. enable_2pass_quant Two-pass custom colormap
  493. All three are initialized FALSE by jpeg_read_header().  But
  494. jpeg_start_decompress() automatically sets TRUE the one selected by the
  495. current two_pass_quantize and colormap settings, so you only need to set the
  496. enable flags for any other quantization methods you plan to change to later.
  497. After setting the enable flags correctly at jpeg_start_decompress() time, you
  498. can change to any enabled quantization method by setting two_pass_quantize
  499. and colormap properly just before calling jpeg_start_output().  The following
  500. special rules apply:
  501. 1. You must explicitly set cinfo.colormap to NULL when switching to 1-pass
  502.    or 2-pass mode from a different mode, or when you want the 2-pass
  503.    quantizer to be re-run to generate a new colormap.
  504. 2. To switch to an external colormap, or to change to a different external
  505.    colormap than was used on the prior pass, you must call
  506.    jpeg_new_colormap() after setting cinfo.colormap.
  507. NOTE: if you want to use the same colormap as was used in the prior pass,
  508. you should not do either of these things.  This will save some nontrivial
  509. switchover costs.
  510. (These requirements exist because cinfo.colormap will always be non-NULL
  511. after completing a prior output pass, since both the 1-pass and 2-pass
  512. quantizers set it to point to their output colormaps.  Thus you have to
  513. do one of these two things to notify the library that something has changed.
  514. Yup, it's a bit klugy, but it's necessary to do it this way for backwards
  515. compatibility.)
  516. Note that in buffered-image mode, the library generates any requested colormap
  517. during jpeg_start_output(), not during jpeg_start_decompress().
  518. When using two-pass quantization, jpeg_start_output() makes a pass over the
  519. buffered image to determine the optimum color map; it therefore may take a
  520. significant amount of time, whereas ordinarily it does little work.  The
  521. progress monitor hook is called during this pass, if defined.  It is also
  522. important to realize that if the specified target scan number is greater than
  523. or equal to the current input scan number, jpeg_start_output() will attempt
  524. to consume input as it makes this pass.  If you use a suspending data source,
  525. you need to check for a FALSE return from jpeg_start_output() under these
  526. conditions.  The combination of 2-pass quantization and a not-yet-fully-read
  527. target scan is the only case in which jpeg_start_output() will consume input.
  528. Application authors who support buffered-image mode may be tempted to use it
  529. for all JPEG images, even single-scan ones.  This will work, but it is
  530. inefficient: there is no need to create an image-sized coefficient buffer for
  531. single-scan images.  Requesting buffered-image mode for such an image wastes
  532. memory.  Worse, it can cost time on large images, since the buffered data has
  533. to be swapped out or written to a temporary file.  If you are concerned about
  534. maximum performance on baseline JPEG files, you should use buffered-image
  535. mode only when the incoming file actually has multiple scans.  This can be
  536. tested by calling jpeg_has_multiple_scans(), which will return a correct
  537. result at any time after jpeg_read_header() completes.
  538. It is also worth noting that when you use jpeg_consume_input() to let input
  539. processing get ahead of output processing, the resulting pattern of access to
  540. the coefficient buffer is quite nonsequential.  It's best to use the memory
  541. manager jmemnobs.c if you can (ie, if you have enough real or virtual main
  542. memory).  If not, at least make sure that max_memory_to_use is set as high as
  543. possible.  If the JPEG memory manager has to use a temporary file, you will
  544. probably see a lot of disk traffic and poor performance.  (This could be
  545. improved with additional work on the memory manager, but we haven't gotten
  546. around to it yet.)
  547. In some applications it may be convenient to use jpeg_consume_input() for all
  548. input processing, including reading the initial markers; that is, you may
  549. wish to call jpeg_consume_input() instead of jpeg_read_header() during
  550. startup.  This works, but note that you must check for JPEG_REACHED_SOS and
  551. JPEG_REACHED_EOI return codes as the equivalent of jpeg_read_header's codes.
  552. Once the first SOS marker has been reached, you must call
  553. jpeg_start_decompress() before jpeg_consume_input() will consume more input;
  554. it'll just keep returning JPEG_REACHED_SOS until you do.  If you read a
  555. tables-only file this way, jpeg_consume_input() will return JPEG_REACHED_EOI
  556. without ever returning JPEG_REACHED_SOS; be sure to check for this case.
  557. If this happens, the decompressor will not read any more input until you call
  558. jpeg_abort() to reset it.  It is OK to call jpeg_consume_input() even when not
  559. using buffered-image mode, but in that case it's basically a no-op after the
  560. initial markers have been read: it will just return JPEG_SUSPENDED.
  561. Abbreviated datastreams and multiple images
  562. -------------------------------------------
  563. A JPEG compression or decompression object can be reused to process multiple
  564. images.  This saves a small amount of time per image by eliminating the
  565. "create" and "destroy" operations, but that isn't the real purpose of the
  566. feature.  Rather, reuse of an object provides support for abbreviated JPEG
  567. datastreams.  Object reuse can also simplify processing a series of images in
  568. a single input or output file.  This section explains these features.
  569. A JPEG file normally contains several hundred bytes worth of quantization
  570. and Huffman tables.  In a situation where many images will be stored or
  571. transmitted with identical tables, this may represent an annoying overhead.
  572. The JPEG standard therefore permits tables to be omitted.  The standard
  573. defines three classes of JPEG datastreams:
  574.   * "Interchange" datastreams contain an image and all tables needed to decode
  575.      the image.  These are the usual kind of JPEG file.
  576.   * "Abbreviated image" datastreams contain an image, but are missing some or
  577.     all of the tables needed to decode that image.
  578.   * "Abbreviated table specification" (henceforth "tables-only") datastreams
  579.     contain only table specifications.
  580. To decode an abbreviated image, it is necessary to load the missing table(s)
  581. into the decoder beforehand.  This can be accomplished by reading a separate
  582. tables-only file.  A variant scheme uses a series of images in which the first
  583. image is an interchange (complete) datastream, while subsequent ones are
  584. abbreviated and rely on the tables loaded by the first image.  It is assumed
  585. that once the decoder has read a table, it will remember that table until a
  586. new definition for the same table number is encountered.
  587. It is the application designer's responsibility to figure out how to associate
  588. the correct tables with an abbreviated image.  While abbreviated datastreams
  589. can be useful in a closed environment, their use is strongly discouraged in
  590. any situation where data exchange with other applications might be needed.
  591. Caveat designer.
  592. The JPEG library provides support for reading and writing any combination of
  593. tables-only datastreams and abbreviated images.  In both compression and
  594. decompression objects, a quantization or Huffman table will be retained for
  595. the lifetime of the object, unless it is overwritten by a new table definition.
  596. To create abbreviated image datastreams, it is only necessary to tell the
  597. compressor not to emit some or all of the tables it is using.  Each
  598. quantization and Huffman table struct contains a boolean field "sent_table",
  599. which normally is initialized to FALSE.  For each table used by the image, the
  600. header-writing process emits the table and sets sent_table = TRUE unless it is
  601. already TRUE.  (In normal usage, this prevents outputting the same table
  602. definition multiple times, as would otherwise occur because the chroma
  603. components typically share tables.)  Thus, setting this field to TRUE before
  604. calling jpeg_start_compress() will prevent the table from being written at
  605. all.
  606. If you want to create a "pure" abbreviated image file containing no tables,
  607. just call "jpeg_suppress_tables(&cinfo, TRUE)" after constructing all the
  608. tables.  If you want to emit some but not all tables, you'll need to set the
  609. individual sent_table fields directly.
  610. To create an abbreviated image, you must also call jpeg_start_compress()
  611. with a second parameter of FALSE, not TRUE.  Otherwise jpeg_start_compress()
  612. will force all the sent_table fields to FALSE.  (This is a safety feature to
  613. prevent abbreviated images from being created accidentally.)
  614. To create a tables-only file, perform the same parameter setup that you
  615. normally would, but instead of calling jpeg_start_compress() and so on, call
  616. jpeg_write_tables(&cinfo).  This will write an abbreviated datastream
  617. containing only SOI, DQT and/or DHT markers, and EOI.  All the quantization
  618. and Huffman tables that are currently defined in the compression object will
  619. be emitted unless their sent_tables flag is already TRUE, and then all the
  620. sent_tables flags will be set TRUE.
  621. A sure-fire way to create matching tables-only and abbreviated image files
  622. is to proceed as follows:
  623. create JPEG compression object
  624. set JPEG parameters
  625. set destination to tables-only file
  626. jpeg_write_tables(&cinfo);
  627. set destination to image file
  628. jpeg_start_compress(&cinfo, FALSE);
  629. write data...
  630. jpeg_finish_compress(&cinfo);
  631. Since the JPEG parameters are not altered between writing the table file and
  632. the abbreviated image file, the same tables are sure to be used.  Of course,
  633. you can repeat the jpeg_start_compress() ... jpeg_finish_compress() sequence
  634. many times to produce many abbreviated image files matching the table file.
  635. You cannot suppress output of the computed Huffman tables when Huffman
  636. optimization is selected.  (If you could, there'd be no way to decode the
  637. image...)  Generally, you don't want to set optimize_coding = TRUE when
  638. you are trying to produce abbreviated files.
  639. In some cases you might want to compress an image using tables which are
  640. not stored in the application, but are defined in an interchange or
  641. tables-only file readable by the application.  This can be done by setting up
  642. a JPEG decompression object to read the specification file, then copying the
  643. tables into your compression object.  See jpeg_copy_critical_parameters()
  644. for an example of copying quantization tables.
  645. To read abbreviated image files, you simply need to load the proper tables
  646. into the decompression object before trying to read the abbreviated image.
  647. If the proper tables are stored in the application program, you can just
  648. allocate the table structs and fill in their contents directly.  For example,
  649. to load a fixed quantization table into table slot "n":
  650.     if (cinfo.quant_tbl_ptrs[n] == NULL)
  651.       cinfo.quant_tbl_ptrs[n] = jpeg_alloc_quant_table((j_common_ptr) &cinfo);
  652.     quant_ptr = cinfo.quant_tbl_ptrs[n]; /* quant_ptr is JQUANT_TBL* */
  653.     for (i = 0; i < 64; i++) {
  654.       /* Qtable[] is desired quantization table, in natural array order */
  655.       quant_ptr->quantval[i] = Qtable[i];
  656.     }
  657. Code to load a fixed Huffman table is typically (for AC table "n"):
  658.     if (cinfo.ac_huff_tbl_ptrs[n] == NULL)
  659.       cinfo.ac_huff_tbl_ptrs[n] = jpeg_alloc_huff_table((j_common_ptr) &cinfo);
  660.     huff_ptr = cinfo.ac_huff_tbl_ptrs[n]; /* huff_ptr is JHUFF_TBL* */
  661.     for (i = 1; i <= 16; i++) {
  662.       /* counts[i] is number of Huffman codes of length i bits, i=1..16 */
  663.       huff_ptr->bits[i] = counts[i];
  664.     }
  665.     for (i = 0; i < 256; i++) {
  666.       /* symbols[] is the list of Huffman symbols, in code-length order */
  667.       huff_ptr->huffval[i] = symbols[i];
  668.     }
  669. (Note that trying to set cinfo.quant_tbl_ptrs[n] to point directly at a
  670. constant JQUANT_TBL object is not safe.  If the incoming file happened to
  671. contain a quantization table definition, your master table would get
  672. overwritten!  Instead allocate a working table copy and copy the master table
  673. into it, as illustrated above.  Ditto for Huffman tables, of course.)
  674. You might want to read the tables from a tables-only file, rather than
  675. hard-wiring them into your application.  The jpeg_read_header() call is
  676. sufficient to read a tables-only file.  You must pass a second parameter of
  677. FALSE to indicate that you do not require an image to be present.  Thus, the
  678. typical scenario is
  679. create JPEG decompression object
  680. set source to tables-only file
  681. jpeg_read_header(&cinfo, FALSE);
  682. set source to abbreviated image file
  683. jpeg_read_header(&cinfo, TRUE);
  684. set decompression parameters
  685. jpeg_start_decompress(&cinfo);
  686. read data...
  687. jpeg_finish_decompress(&cinfo);
  688. In some cases, you may want to read a file without knowing whether it contains
  689. an image or just tables.  In that case, pass FALSE and check the return value
  690. from jpeg_read_header(): it will be JPEG_HEADER_OK if an image was found,
  691. JPEG_HEADER_TABLES_ONLY if only tables were found.  (A third return value,
  692. JPEG_SUSPENDED, is possible when using a suspending data source manager.)
  693. Note that jpeg_read_header() will not complain if you read an abbreviated
  694. image for which you haven't loaded the missing tables; the missing-table check
  695. occurs later, in jpeg_start_decompress().
  696. It is possible to read a series of images from a single source file by
  697. repeating the jpeg_read_header() ... jpeg_finish_decompress() sequence,
  698. without releasing/recreating the JPEG object or the data source module.
  699. (If you did reinitialize, any partial bufferload left in the data source
  700. buffer at the end of one image would be discarded, causing you to lose the
  701. start of the next image.)  When you use this method, stored tables are
  702. automatically carried forward, so some of the images can be abbreviated images
  703. that depend on tables from earlier images.
  704. If you intend to write a series of images into a single destination file,
  705. you might want to make a specialized data destination module that doesn't
  706. flush the output buffer at term_destination() time.  This would speed things
  707. up by some trifling amount.  Of course, you'd need to remember to flush the
  708. buffer after the last image.  You can make the later images be abbreviated
  709. ones by passing FALSE to jpeg_start_compress().
  710. Special markers
  711. ---------------
  712. Some applications may need to insert or extract special data in the JPEG
  713. datastream.  The JPEG standard provides marker types "COM" (comment) and
  714. "APP0" through "APP15" (application) to hold application-specific data.
  715. Unfortunately, the use of these markers is not specified by the standard.
  716. COM markers are fairly widely used to hold user-supplied text.  The JFIF file
  717. format spec uses APP0 markers with specified initial strings to hold certain
  718. data.  Adobe applications use APP14 markers beginning with the string "Adobe"
  719. for miscellaneous data.  Other APPn markers are rarely seen, but might
  720. contain almost anything.
  721. If you wish to store user-supplied text, we recommend you use COM markers
  722. and place readable 7-bit ASCII text in them.  Newline conventions are not
  723. standardized --- expect to find LF (Unix style), CR/LF (DOS style), or CR
  724. (Mac style).  A robust COM reader should be able to cope with random binary
  725. garbage, including nulls, since some applications generate COM markers
  726. containing non-ASCII junk.  (But yours should not be one of them.)
  727. For program-supplied data, use an APPn marker, and be sure to begin it with an
  728. identifying string so that you can tell whether the marker is actually yours.
  729. It's probably best to avoid using APP0 or APP14 for any private markers.
  730. (NOTE: the upcoming SPIFF standard will use APP8 markers; we recommend you
  731. not use APP8 markers for any private purposes, either.)
  732. Keep in mind that at most 65533 bytes can be put into one marker, but you
  733. can have as many markers as you like.
  734. By default, the IJG compression library will write a JFIF APP0 marker if the
  735. selected JPEG colorspace is grayscale or YCbCr, or an Adobe APP14 marker if
  736. the selected colorspace is RGB, CMYK, or YCCK.  You can disable this, but
  737. we don't recommend it.  The decompression library will recognize JFIF and
  738. Adobe markers and will set the JPEG colorspace properly when one is found.
  739. You can write special markers immediately following the datastream header by
  740. calling jpeg_write_marker() after jpeg_start_compress() and before the first
  741. call to jpeg_write_scanlines().  When you do this, the markers appear after
  742. the SOI and the JFIF APP0 and Adobe APP14 markers (if written), but before
  743. all else.  Specify the marker type parameter as "JPEG_COM" for COM or
  744. "JPEG_APP0 + n" for APPn.  (Actually, jpeg_write_marker will let you write
  745. any marker type, but we don't recommend writing any other kinds of marker.)
  746. For example, to write a user comment string pointed to by comment_text:
  747. jpeg_write_marker(cinfo, JPEG_COM, comment_text, strlen(comment_text));
  748. If it's not convenient to store all the marker data in memory at once,
  749. you can instead call jpeg_write_m_header() followed by multiple calls to
  750. jpeg_write_m_byte().  If you do it this way, it's your responsibility to
  751. call jpeg_write_m_byte() exactly the number of times given in the length
  752. parameter to jpeg_write_m_header().  (This method lets you empty the
  753. output buffer partway through a marker, which might be important when
  754. using a suspending data destination module.  In any case, if you are using
  755. a suspending destination, you should flush its buffer after inserting
  756. any special markers.  See "I/O suspension".)
  757. Or, if you prefer to synthesize the marker byte sequence yourself,
  758. you can just cram it straight into the data destination module.
  759. If you are writing JFIF 1.02 extension markers (thumbnail images), don't
  760. forget to set cinfo.JFIF_minor_version = 2 so that the encoder will write the
  761. correct JFIF version number in the JFIF header marker.  The library's default
  762. is to write version 1.01, but that's wrong if you insert any 1.02 extension
  763. markers.  (We could probably get away with just defaulting to 1.02, but there
  764. used to be broken decoders that would complain about unknown minor version
  765. numbers.  To reduce compatibility risks it's safest not to write 1.02 unless
  766. you are actually using 1.02 extensions.)
  767. When reading, two methods of handling special markers are available:
  768. 1. You can ask the library to save the contents of COM and/or APPn markers
  769. into memory, and then examine them at your leisure afterwards.
  770. 2. You can supply your own routine to process COM and/or APPn markers
  771. on-the-fly as they are read.
  772. The first method is simpler to use, especially if you are using a suspending
  773. data source; writing a marker processor that copes with input suspension is
  774. not easy (consider what happens if the marker is longer than your available
  775. input buffer).  However, the second method conserves memory since the marker
  776. data need not be kept around after it's been processed.
  777. For either method, you'd normally set up marker handling after creating a
  778. decompression object and before calling jpeg_read_header(), because the
  779. markers of interest will typically be near the head of the file and so will
  780. be scanned by jpeg_read_header.  Once you've established a marker handling
  781. method, it will be used for the life of that decompression object
  782. (potentially many datastreams), unless you change it.  Marker handling is
  783. determined separately for COM markers and for each APPn marker code.
  784. To save the contents of special markers in memory, call
  785. jpeg_save_markers(cinfo, marker_code, length_limit)
  786. where marker_code is the marker type to save, JPEG_COM or JPEG_APP0+n.
  787. (To arrange to save all the special marker types, you need to call this
  788. routine 17 times, for COM and APP0-APP15.)  If the incoming marker is longer
  789. than length_limit data bytes, only length_limit bytes will be saved; this
  790. parameter allows you to avoid chewing up memory when you only need to see the
  791. first few bytes of a potentially large marker.  If you want to save all the
  792. data, set length_limit to 0xFFFF; that is enough since marker lengths are only
  793. 16 bits.  As a special case, setting length_limit to 0 prevents that marker
  794. type from being saved at all.  (That is the default behavior, in fact.)
  795. After jpeg_read_header() completes, you can examine the special markers by
  796. following the cinfo->marker_list pointer chain.  All the special markers in
  797. the file appear in this list, in order of their occurrence in the file (but
  798. omitting any markers of types you didn't ask for).  Both the original data
  799. length and the saved data length are recorded for each list entry; the latter
  800. will not exceed length_limit for the particular marker type.  Note that these
  801. lengths exclude the marker length word, whereas the stored representation
  802. within the JPEG file includes it.  (Hence the maximum data length is really
  803. only 65533.)
  804. It is possible that additional special markers appear in the file beyond the
  805. SOS marker at which jpeg_read_header stops; if so, the marker list will be
  806. extended during reading of the rest of the file.  This is not expected to be
  807. common, however.  If you are short on memory you may want to reset the length
  808. limit to zero for all marker types after finishing jpeg_read_header, to
  809. ensure that the max_memory_to_use setting cannot be exceeded due to addition
  810. of later markers.
  811. The marker list remains stored until you call jpeg_finish_decompress or
  812. jpeg_abort, at which point the memory is freed and the list is set to empty.
  813. (jpeg_destroy also releases the storage, of course.)
  814. Note that the library is internally interested in APP0 and APP14 markers;
  815. if you try to set a small nonzero length limit on these types, the library
  816. will silently force the length up to the minimum it wants.  (But you can set
  817. a zero length limit to prevent them from being saved at all.)  Also, in a
  818. 16-bit environment, the maximum length limit may be constrained to less than
  819. 65533 by malloc() limitations.  It is therefore best not to assume that the
  820. effective length limit is exactly what you set it to be.
  821. If you want to supply your own marker-reading routine, you do it by calling
  822. jpeg_set_marker_processor().  A marker processor routine must have the
  823. signature
  824. boolean jpeg_marker_parser_method (j_decompress_ptr cinfo)
  825. Although the marker code is not explicitly passed, the routine can find it
  826. in cinfo->unread_marker.  At the time of call, the marker proper has been
  827. read from the data source module.  The processor routine is responsible for
  828. reading the marker length word and the remaining parameter bytes, if any.
  829. Return TRUE to indicate success.  (FALSE should be returned only if you are
  830. using a suspending data source and it tells you to suspend.  See the standard
  831. marker processors in jdmarker.c for appropriate coding methods if you need to
  832. use a suspending data source.)
  833. If you override the default APP0 or APP14 processors, it is up to you to
  834. recognize JFIF and Adobe markers if you want colorspace recognition to occur
  835. properly.  We recommend copying and extending the default processors if you
  836. want to do that.  (A better idea is to save these marker types for later
  837. examination by calling jpeg_save_markers(); that method doesn't interfere
  838. with the library's own processing of these markers.)
  839. jpeg_set_marker_processor() and jpeg_save_markers() are mutually exclusive
  840. --- if you call one it overrides any previous call to the other, for the
  841. particular marker type specified.
  842. A simple example of an external COM processor can be found in djpeg.c.
  843. Also, see jpegtran.c for an example of using jpeg_save_markers.
  844. Raw (downsampled) image data
  845. ----------------------------
  846. Some applications need to supply already-downsampled image data to the JPEG
  847. compressor, or to receive raw downsampled data from the decompressor.  The
  848. library supports this requirement by allowing the application to write or
  849. read raw data, bypassing the normal preprocessing or postprocessing steps.
  850. The interface is different from the standard one and is somewhat harder to
  851. use.  If your interest is merely in bypassing color conversion, we recommend
  852. that you use the standard interface and simply set jpeg_color_space =
  853. in_color_space (or jpeg_color_space = out_color_space for decompression).
  854. The mechanism described in this section is necessary only to supply or
  855. receive downsampled image data, in which not all components have the same
  856. dimensions.
  857. To compress raw data, you must supply the data in the colorspace to be used
  858. in the JPEG file (please read the earlier section on Special color spaces)
  859. and downsampled to the sampling factors specified in the JPEG parameters.
  860. You must supply the data in the format used internally by the JPEG library,
  861. namely a JSAMPIMAGE array.  This is an array of pointers to two-dimensional
  862. arrays, each of type JSAMPARRAY.  Each 2-D array holds the values for one
  863. color component.  This structure is necessary since the components are of
  864. different sizes.  If the image dimensions are not a multiple of the MCU size,
  865. you must also pad the data correctly (usually, this is done by replicating
  866. the last column and/or row).  The data must be padded to a multiple of a DCT
  867. block in each component: that is, each downsampled row must contain a
  868. multiple of 8 valid samples, and there must be a multiple of 8 sample rows
  869. for each component.  (For applications such as conversion of digital TV
  870. images, the standard image size is usually a multiple of the DCT block size,
  871. so that no padding need actually be done.)
  872. The procedure for compression of raw data is basically the same as normal
  873. compression, except that you call jpeg_write_raw_data() in place of
  874. jpeg_write_scanlines().  Before calling jpeg_start_compress(), you must do
  875. the following:
  876.   * Set cinfo->raw_data_in to TRUE.  (It is set FALSE by jpeg_set_defaults().)
  877.     This notifies the library that you will be supplying raw data.
  878.   * Ensure jpeg_color_space is correct --- an explicit jpeg_set_colorspace()
  879.     call is a good idea.  Note that since color conversion is bypassed,
  880.     in_color_space is ignored, except that jpeg_set_defaults() uses it to
  881.     choose the default jpeg_color_space setting.
  882.   * Ensure the sampling factors, cinfo->comp_info[i].h_samp_factor and
  883.     cinfo->comp_info[i].v_samp_factor, are correct.  Since these indicate the
  884.     dimensions of the data you are supplying, it's wise to set them
  885.     explicitly, rather than assuming the library's defaults are what you want.
  886. To pass raw data to the library, call jpeg_write_raw_data() in place of
  887. jpeg_write_scanlines().  The two routines work similarly except that
  888. jpeg_write_raw_data takes a JSAMPIMAGE data array rather than JSAMPARRAY.
  889. The scanlines count passed to and returned from jpeg_write_raw_data is
  890. measured in terms of the component with the largest v_samp_factor.
  891. jpeg_write_raw_data() processes one MCU row per call, which is to say
  892. v_samp_factor*DCTSIZE sample rows of each component.  The passed num_lines
  893. value must be at least max_v_samp_factor*DCTSIZE, and the return value will
  894. be exactly that amount (or possibly some multiple of that amount, in future
  895. library versions).  This is true even on the last call at the bottom of the
  896. image; don't forget to pad your data as necessary.
  897. The required dimensions of the supplied data can be computed for each
  898. component as
  899. cinfo->comp_info[i].width_in_blocks*DCTSIZE  samples per row
  900. cinfo->comp_info[i].height_in_blocks*DCTSIZE rows in image
  901. after jpeg_start_compress() has initialized those fields.  If the valid data
  902. is smaller than this, it must be padded appropriately.  For some sampling
  903. factors and image sizes, additional dummy DCT blocks are inserted to make
  904. the image a multiple of the MCU dimensions.  The library creates such dummy
  905. blocks itself; it does not read them from your supplied data.  Therefore you
  906. need never pad by more than DCTSIZE samples.  An example may help here.
  907. Assume 2h2v downsampling of YCbCr data, that is
  908. cinfo->comp_info[0].h_samp_factor = 2 for Y
  909. cinfo->comp_info[0].v_samp_factor = 2
  910. cinfo->comp_info[1].h_samp_factor = 1 for Cb
  911. cinfo->comp_info[1].v_samp_factor = 1
  912. cinfo->comp_info[2].h_samp_factor = 1 for Cr
  913. cinfo->comp_info[2].v_samp_factor = 1
  914. and suppose that the nominal image dimensions (cinfo->image_width and
  915. cinfo->image_height) are 101x101 pixels.  Then jpeg_start_compress() will
  916. compute downsampled_width = 101 and width_in_blocks = 13 for Y,
  917. downsampled_width = 51 and width_in_blocks = 7 for Cb and Cr (and the same
  918. for the height fields).  You must pad the Y data to at least 13*8 = 104
  919. columns and rows, the Cb/Cr data to at least 7*8 = 56 columns and rows.  The
  920. MCU height is max_v_samp_factor = 2 DCT rows so you must pass at least 16
  921. scanlines on each call to jpeg_write_raw_data(), which is to say 16 actual
  922. sample rows of Y and 8 each of Cb and Cr.  A total of 7 MCU rows are needed,
  923. so you must pass a total of 7*16 = 112 "scanlines".  The last DCT block row
  924. of Y data is dummy, so it doesn't matter what you pass for it in the data
  925. arrays, but the scanlines count must total up to 112 so that all of the Cb
  926. and Cr data gets passed.
  927. Output suspension is supported with raw-data compression: if the data
  928. destination module suspends, jpeg_write_raw_data() will return 0.
  929. In this case the same data rows must be passed again on the next call.
  930. Decompression with raw data output implies bypassing all postprocessing:
  931. you cannot ask for rescaling or color quantization, for instance.  More
  932. seriously, you must deal with the color space and sampling factors present in
  933. the incoming file.  If your application only handles, say, 2h1v YCbCr data,
  934. you must check for and fail on other color spaces or other sampling factors.
  935. The library will not convert to a different color space for you.
  936. To obtain raw data output, set cinfo->raw_data_out = TRUE before
  937. jpeg_start_decompress() (it is set FALSE by jpeg_read_header()).  Be sure to
  938. verify that the color space and sampling factors are ones you can handle.
  939. Then call jpeg_read_raw_data() in place of jpeg_read_scanlines().  The
  940. decompression process is otherwise the same as usual.
  941. jpeg_read_raw_data() returns one MCU row per call, and thus you must pass a
  942. buffer of at least max_v_samp_factor*DCTSIZE scanlines (scanline counting is
  943. the same as for raw-data compression).  The buffer you pass must be large
  944. enough to hold the actual data plus padding to DCT-block boundaries.  As with
  945. compression, any entirely dummy DCT blocks are not processed so you need not
  946. allocate space for them, but the total scanline count includes them.  The
  947. above example of computing buffer dimensions for raw-data compression is
  948. equally valid for decompression.
  949. Input suspension is supported with raw-data decompression: if the data source
  950. module suspends, jpeg_read_raw_data() will return 0.  You can also use
  951. buffered-image mode to read raw data in multiple passes.
  952. Really raw data: DCT coefficients
  953. ---------------------------------
  954. It is possible to read or write the contents of a JPEG file as raw DCT
  955. coefficients.  This facility is mainly intended for use in lossless
  956. transcoding between different JPEG file formats.  Other possible applications
  957. include lossless cropping of a JPEG image, lossless reassembly of a
  958. multi-strip or multi-tile TIFF/JPEG file into a single JPEG datastream, etc.
  959. To read the contents of a JPEG file as DCT coefficients, open the file and do
  960. jpeg_read_header() as usual.  But instead of calling jpeg_start_decompress()
  961. and jpeg_read_scanlines(), call jpeg_read_coefficients().  This will read the
  962. entire image into a set of virtual coefficient-block arrays, one array per
  963. component.  The return value is a pointer to an array of virtual-array
  964. descriptors.  Each virtual array can be accessed directly using the JPEG
  965. memory manager's access_virt_barray method (see Memory management, below,
  966. and also read structure.doc's discussion of virtual array handling).  Or,
  967. for simple transcoding to a different JPEG file format, the array list can
  968. just be handed directly to jpeg_write_coefficients().
  969. Each block in the block arrays contains quantized coefficient values in
  970. normal array order (not JPEG zigzag order).  The block arrays contain only
  971. DCT blocks containing real data; any entirely-dummy blocks added to fill out
  972. interleaved MCUs at the right or bottom edges of the image are discarded
  973. during reading and are not stored in the block arrays.  (The size of each
  974. block array can be determined from the width_in_blocks and height_in_blocks
  975. fields of the component's comp_info entry.)  This is also the data format
  976. expected by jpeg_write_coefficients().
  977. When you are done using the virtual arrays, call jpeg_finish_decompress()
  978. to release the array storage and return the decompression object to an idle
  979. state; or just call jpeg_destroy() if you don't need to reuse the object.
  980. If you use a suspending data source, jpeg_read_coefficients() will return
  981. NULL if it is forced to suspend; a non-NULL return value indicates successful
  982. completion.  You need not test for a NULL return value when using a
  983. non-suspending data source.
  984. It is also possible to call jpeg_read_coefficients() to obtain access to the
  985. decoder's coefficient arrays during a normal decode cycle in buffered-image
  986. mode.  This frammish might be useful for progressively displaying an incoming
  987. image and then re-encoding it without loss.  To do this, decode in buffered-
  988. image mode as discussed previously, then call jpeg_read_coefficients() after
  989. the last jpeg_finish_output() call.  The arrays will be available for your use
  990. until you call jpeg_finish_decompress().
  991. To write the contents of a JPEG file as DCT coefficients, you must provide
  992. the DCT coefficients stored in virtual block arrays.  You can either pass
  993. block arrays read from an input JPEG file by jpeg_read_coefficients(), or
  994. allocate virtual arrays from the JPEG compression object and fill them
  995. yourself.  In either case, jpeg_write_coefficients() is substituted for
  996. jpeg_start_compress() and jpeg_write_scanlines().  Thus the sequence is
  997.   * Create compression object
  998.   * Set all compression parameters as necessary
  999.   * Request virtual arrays if needed
  1000.   * jpeg_write_coefficients()
  1001.   * jpeg_finish_compress()
  1002.   * Destroy or re-use compression object
  1003. jpeg_write_coefficients() is passed a pointer to an array of virtual block
  1004. array descriptors; the number of arrays is equal to cinfo.num_components.
  1005. The virtual arrays need only have been requested, not realized, before
  1006. jpeg_write_coefficients() is called.  A side-effect of
  1007. jpeg_write_coefficients() is to realize any virtual arrays that have been
  1008. requested from the compression object's memory manager.  Thus, when obtaining
  1009. the virtual arrays from the compression object, you should fill the arrays
  1010. after calling jpeg_write_coefficients().  The data is actually written out
  1011. when you call jpeg_finish_compress(); jpeg_write_coefficients() only writes
  1012. the file header.
  1013. When writing raw DCT coefficients, it is crucial that the JPEG quantization
  1014. tables and sampling factors match the way the data was encoded, or the
  1015. resulting file will be invalid.  For transcoding from an existing JPEG file,
  1016. we recommend using jpeg_copy_critical_parameters().  This routine initializes
  1017. all the compression parameters to default values (like jpeg_set_defaults()),
  1018. then copies the critical information from a source decompression object.
  1019. The decompression object should have just been used to read the entire
  1020. JPEG input file --- that is, it should be awaiting jpeg_finish_decompress().
  1021. jpeg_write_coefficients() marks all tables stored in the compression object
  1022. as needing to be written to the output file (thus, it acts like
  1023. jpeg_start_compress(cinfo, TRUE)).  This is for safety's sake, to avoid
  1024. emitting abbreviated JPEG files by accident.  If you really want to emit an
  1025. abbreviated JPEG file, call jpeg_suppress_tables(), or set the tables'
  1026. individual sent_table flags, between calling jpeg_write_coefficients() and
  1027. jpeg_finish_compress().
  1028. Progress monitoring
  1029. -------------------
  1030. Some applications may need to regain control from the JPEG library every so
  1031. often.  The typical use of this feature is to produce a percent-done bar or
  1032. other progress display.  (For a simple example, see cjpeg.c or djpeg.c.)
  1033. Although you do get control back frequently during the data-transferring pass
  1034. (the jpeg_read_scanlines or jpeg_write_scanlines loop), any additional passes
  1035. will occur inside jpeg_finish_compress or jpeg_start_decompress; those
  1036. routines may take a long time to execute, and you don't get control back
  1037. until they are done.
  1038. You can define a progress-monitor routine which will be called periodically
  1039. by the library.  No guarantees are made about how often this call will occur,
  1040. so we don't recommend you use it for mouse tracking or anything like that.
  1041. At present, a call will occur once per MCU row, scanline, or sample row
  1042. group, whichever unit is convenient for the current processing mode; so the
  1043. wider the image, the longer the time between calls.  During the data
  1044. transferring pass, only one call occurs per call of jpeg_read_scanlines or
  1045. jpeg_write_scanlines, so don't pass a large number of scanlines at once if
  1046. you want fine resolution in the progress count.  (If you really need to use
  1047. the callback mechanism for time-critical tasks like mouse tracking, you could
  1048. insert additional calls inside some of the library's inner loops.)
  1049. To establish a progress-monitor callback, create a struct jpeg_progress_mgr,
  1050. fill in its progress_monitor field with a pointer to your callback routine,
  1051. and set cinfo->progress to point to the struct.  The callback will be called
  1052. whenever cinfo->progress is non-NULL.  (This pointer is set to NULL by
  1053. jpeg_create_compress or jpeg_create_decompress; the library will not change
  1054. it thereafter.  So if you allocate dynamic storage for the progress struct,
  1055. make sure it will live as long as the JPEG object does.  Allocating from the
  1056. JPEG memory manager with lifetime JPOOL_PERMANENT will work nicely.)  You
  1057. can use the same callback routine for both compression and decompression.
  1058. The jpeg_progress_mgr struct contains four fields which are set by the library:
  1059. long pass_counter; /* work units completed in this pass */
  1060. long pass_limit; /* total number of work units in this pass */
  1061. int completed_passes; /* passes completed so far */
  1062. int total_passes; /* total number of passes expected */
  1063. During any one pass, pass_counter increases from 0 up to (not including)
  1064. pass_limit; the step size is usually but not necessarily 1.  The pass_limit
  1065. value may change from one pass to another.  The expected total number of
  1066. passes is in total_passes, and the number of passes already completed is in
  1067. completed_passes.  Thus the fraction of work completed may be estimated as
  1068. completed_passes + (pass_counter/pass_limit)
  1069. --------------------------------------------
  1070. total_passes
  1071. ignoring the fact that the passes may not be equal amounts of work.
  1072. When decompressing, pass_limit can even change within a pass, because it
  1073. depends on the number of scans in the JPEG file, which isn't always known in
  1074. advance.  The computed fraction-of-work-done may jump suddenly (if the library
  1075. discovers it has overestimated the number of scans) or even decrease (in the
  1076. opposite case).  It is not wise to put great faith in the work estimate.
  1077. When using the decompressor's buffered-image mode, the progress monitor work
  1078. estimate is likely to be completely unhelpful, because the library has no way
  1079. to know how many output passes will be demanded of it.  Currently, the library
  1080. sets total_passes based on the assumption that there will be one more output
  1081. pass if the input file end hasn't yet been read (jpeg_input_complete() isn't
  1082. TRUE), but no more output passes if the file end has been reached when the
  1083. output pass is started.  This means that total_passes will rise as additional
  1084. output passes are requested.  If you have a way of determining the input file
  1085. size, estimating progress based on the fraction of the file that's been read
  1086. will probably be more useful than using the library's value.
  1087. Memory management
  1088. -----------------
  1089. This section covers some key facts about the JPEG library's built-in memory
  1090. manager.  For more info, please read structure.doc's section about the memory
  1091. manager, and consult the source code if necessary.
  1092. All memory and temporary file allocation within the library is done via the
  1093. memory manager.  If necessary, you can replace the "back end" of the memory
  1094. manager to control allocation yourself (for example, if you don't want the
  1095. library to use malloc() and free() for some reason).
  1096. Some data is allocated "permanently" and will not be freed until the JPEG
  1097. object is destroyed.  Most data is allocated "per image" and is freed by
  1098. jpeg_finish_compress, jpeg_finish_decompress, or jpeg_abort.  You can call the
  1099. memory manager yourself to allocate structures that will automatically be
  1100. freed at these times.  Typical code for this is
  1101.   ptr = (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, size);
  1102. Use JPOOL_PERMANENT to get storage that lasts as long as the JPEG object.
  1103. Use alloc_large instead of alloc_small for anything bigger than a few Kbytes.
  1104. There are also alloc_sarray and alloc_barray routines that automatically
  1105. build 2-D sample or block arrays.
  1106. The library's minimum space requirements to process an image depend on the
  1107. image's width, but not on its height, because the library ordinarily works
  1108. with "strip" buffers that are as wide as the image but just a few rows high.
  1109. Some operating modes (eg, two-pass color quantization) require full-image
  1110. buffers.  Such buffers are treated as "virtual arrays": only the current strip
  1111. need be in memory, and the rest can be swapped out to a temporary file.
  1112. If you use the simplest memory manager back end (jmemnobs.c), then no
  1113. temporary files are used; virtual arrays are simply malloc()'d.  Images bigger
  1114. than memory can be processed only if your system supports virtual memory.
  1115. The other memory manager back ends support temporary files of various flavors
  1116. and thus work in machines without virtual memory.  They may also be useful on
  1117. Unix machines if you need to process images that exceed available swap space.
  1118. When using temporary files, the library will make the in-memory buffers for
  1119. its virtual arrays just big enough to stay within a "maximum memory" setting.
  1120. Your application can set this limit by setting cinfo->mem->max_memory_to_use
  1121. after creating the JPEG object.  (Of course, there is still a minimum size for
  1122. the buffers, so the max-memory setting is effective only if it is bigger than
  1123. the minimum space needed.)  If you allocate any large structures yourself, you
  1124. must allocate them before jpeg_start_compress() or jpeg_start_decompress() in
  1125. order to have them counted against the max memory limit.  Also keep in mind
  1126. that space allocated with alloc_small() is ignored, on the assumption that
  1127. it's too small to be worth worrying about; so a reasonable safety margin
  1128. should be left when setting max_memory_to_use.
  1129. If you use the jmemname.c or jmemdos.c memory manager back end, it is
  1130. important to clean up the JPEG object properly to ensure that the temporary
  1131. files get deleted.  (This is especially crucial with jmemdos.c, where the
  1132. "temporary files" may be extended-memory segments; if they are not freed,
  1133. DOS will require a reboot to recover the memory.)  Thus, with these memory
  1134. managers, it's a good idea to provide a signal handler that will trap any
  1135. early exit from your program.  The handler should call either jpeg_abort()
  1136. or jpeg_destroy() for any active JPEG objects.  A handler is not needed with
  1137. jmemnobs.c, and shouldn't be necessary with jmemansi.c or jmemmac.c either,
  1138. since the C library is supposed to take care of deleting files made with
  1139. tmpfile().
  1140. Memory usage
  1141. ------------
  1142. Working memory requirements while performing compression or decompression
  1143. depend on image dimensions, image characteristics (such as colorspace and
  1144. JPEG process), and operating mode (application-selected options).
  1145. As of v6b, the decompressor requires:
  1146.  1. About 24K in more-or-less-fixed-size data.  This varies a bit depending
  1147.     on operating mode and image characteristics (particularly color vs.
  1148.     grayscale), but it doesn't depend on image dimensions.
  1149.  2. Strip buffers (of size proportional to the image width) for IDCT and
  1150.     upsampling results.  The worst case for commonly used sampling factors
  1151.     is about 34 bytes * width in pixels for a color image.  A grayscale image
  1152.     only needs about 8 bytes per pixel column.
  1153.  3. A full-image DCT coefficient buffer is needed to decode a multi-scan JPEG
  1154.     file (including progressive JPEGs), or whenever you select buffered-image
  1155.     mode.  This takes 2 bytes/coefficient.  At typical 2x2 sampling, that's
  1156.     3 bytes per pixel for a color image.  Worst case (1x1 sampling) requires
  1157.     6 bytes/pixel.  For grayscale, figure 2 bytes/pixel.
  1158.  4. To perform 2-pass color quantization, the decompressor also needs a
  1159.     128K color lookup table and a full-image pixel buffer (3 bytes/pixel).
  1160. This does not count any memory allocated by the application, such as a
  1161. buffer to hold the final output image.
  1162. The above figures are valid for 8-bit JPEG data precision and a machine with
  1163. 32-bit ints.  For 12-bit JPEG data, double the size of the strip buffers and
  1164. quantization pixel buffer.  The "fixed-size" data will be somewhat smaller
  1165. with 16-bit ints, larger with 64-bit ints.  Also, CMYK or other unusual
  1166. color spaces will require different amounts of space.
  1167. The full-image coefficient and pixel buffers, if needed at all, do not
  1168. have to be fully RAM resident; you can have the library use temporary
  1169. files instead when the total memory usage would exceed a limit you set.
  1170. (But if your OS supports virtual memory, it's probably better to just use
  1171. jmemnobs and let the OS do the swapping.)
  1172. The compressor's memory requirements are similar, except that it has no need
  1173. for color quantization.  Also, it needs a full-image DCT coefficient buffer
  1174. if Huffman-table optimization is asked for, even if progressive mode is not
  1175. requested.
  1176. If you need more detailed information about memory usage in a particular
  1177. situation, you can enable the MEM_STATS code in jmemmgr.c.
  1178. Library compile-time options
  1179. ----------------------------
  1180. A number of compile-time options are available by modifying jmorecfg.h.
  1181. The JPEG standard provides for both the baseline 8-bit DCT process and
  1182. a 12-bit DCT process.  The IJG code supports 12-bit lossy JPEG if you define
  1183. BITS_IN_JSAMPLE as 12 rather than 8.  Note that this causes JSAMPLE to be
  1184. larger than a char, so it affects the surrounding application's image data.
  1185. The sample applications cjpeg and djpeg can support 12-bit mode only for PPM
  1186. and GIF file formats; you must disable the other file formats to compile a
  1187. 12-bit cjpeg or djpeg.  (install.doc has more information about that.)
  1188. At present, a 12-bit library can handle *only* 12-bit images, not both
  1189. precisions.  (If you need to include both 8- and 12-bit libraries in a single
  1190. application, you could probably do it by defining NEED_SHORT_EXTERNAL_NAMES
  1191. for just one of the copies.  You'd have to access the 8-bit and 12-bit copies
  1192. from separate application source files.  This is untested ... if you try it,
  1193. we'd like to hear whether it works!)
  1194. Note that a 12-bit library always compresses in Huffman optimization mode,
  1195. in order to generate valid Huffman tables.  This is necessary because our
  1196. default Huffman tables only cover 8-bit data.  If you need to output 12-bit
  1197. files in one pass, you'll have to supply suitable default Huffman tables.
  1198. You may also want to supply your own DCT quantization tables; the existing
  1199. quality-scaling code has been developed for 8-bit use, and probably doesn't
  1200. generate especially good tables for 12-bit.
  1201. The maximum number of components (color channels) in the image is determined
  1202. by MAX_COMPONENTS.  The JPEG standard allows up to 255 components, but we
  1203. expect that few applications will need more than four or so.
  1204. On machines with unusual data type sizes, you may be able to improve
  1205. performance or reduce memory space by tweaking the various typedefs in
  1206. jmorecfg.h.  In particular, on some RISC CPUs, access to arrays of "short"s
  1207. is quite slow; consider trading memory for speed by making JCOEF, INT16, and
  1208. UINT16 be "int" or "unsigned int".  UINT8 is also a candidate to become int.
  1209. You probably don't want to make JSAMPLE be int unless you have lots of memory
  1210. to burn.
  1211. You can reduce the size of the library by compiling out various optional
  1212. functions.  To do this, undefine xxx_SUPPORTED symbols as necessary.
  1213. You can also save a few K by not having text error messages in the library;
  1214. the standard error message table occupies about 5Kb.  This is particularly
  1215. reasonable for embedded applications where there's no good way to display 
  1216. a message anyway.  To do this, remove the creation of the message table
  1217. (jpeg_std_message_table[]) from jerror.c, and alter format_message to do
  1218. something reasonable without it.  You could output the numeric value of the
  1219. message code number, for example.  If you do this, you can also save a couple
  1220. more K by modifying the TRACEMSn() macros in jerror.h to expand to nothing;
  1221. you don't need trace capability anyway, right?
  1222. Portability considerations
  1223. --------------------------
  1224. The JPEG library has been written to be extremely portable; the sample
  1225. applications cjpeg and djpeg are slightly less so.  This section summarizes
  1226. the design goals in this area.  (If you encounter any bugs that cause the
  1227. library to be less portable than is claimed here, we'd appreciate hearing
  1228. about them.)
  1229. The code works fine on ANSI C, C++, and pre-ANSI C compilers, using any of
  1230. the popular system include file setups, and some not-so-popular ones too.
  1231. See install.doc for configuration procedures.
  1232. The code is not dependent on the exact sizes of the C data types.  As
  1233. distributed, we make the assumptions that
  1234. char is at least 8 bits wide
  1235. short is at least 16 bits wide
  1236. int is at least 16 bits wide
  1237. long is at least 32 bits wide
  1238. (These are the minimum requirements of the ANSI C standard.)  Wider types will
  1239. work fine, although memory may be used inefficiently if char is much larger
  1240. than 8 bits or short is much bigger than 16 bits.  The code should work
  1241. equally well with 16- or 32-bit ints.
  1242. In a system where these assumptions are not met, you may be able to make the
  1243. code work by modifying the typedefs in jmorecfg.h.  However, you will probably
  1244. have difficulty if int is less than 16 bits wide, since references to plain
  1245. int abound in the code.
  1246. char can be either signed or unsigned, although the code runs faster if an
  1247. unsigned char type is available.  If char is wider than 8 bits, you will need
  1248. to redefine JOCTET and/or provide custom data source/destination managers so
  1249. that JOCTET represents exactly 8 bits of data on external storage.
  1250. The JPEG library proper does not assume ASCII representation of characters.
  1251. But some of the image file I/O modules in cjpeg/djpeg do have ASCII
  1252. dependencies in file-header manipulation; so does cjpeg's select_file_type()
  1253. routine.
  1254. The JPEG library does not rely heavily on the C library.  In particular, C
  1255. stdio is used only by the data source/destination modules and the error
  1256. handler, all of which are application-replaceable.  (cjpeg/djpeg are more
  1257. heavily dependent on stdio.)  malloc and free are called only from the memory
  1258. manager "back end" module, so you can use a different memory allocator by
  1259. replacing that one file.
  1260. The code generally assumes that C names must be unique in the first 15
  1261. characters.  However, global function names can be made unique in the
  1262. first 6 characters by defining NEED_SHORT_EXTERNAL_NAMES.
  1263. More info about porting the code may be gleaned by reading jconfig.doc,
  1264. jmorecfg.h, and jinclude.h.
  1265. Notes for MS-DOS implementors
  1266. -----------------------------
  1267. The IJG code is designed to work efficiently in 80x86 "small" or "medium"
  1268. memory models (i.e., data pointers are 16 bits unless explicitly declared
  1269. "far"; code pointers can be either size).  You may be able to use small
  1270. model to compile cjpeg or djpeg by itself, but you will probably have to use
  1271. medium model for any larger application.  This won't make much difference in
  1272. performance.  You *will* take a noticeable performance hit if you use a
  1273. large-data memory model (perhaps 10%-25%), and you should avoid "huge" model
  1274. if at all possible.
  1275. The JPEG library typically needs 2Kb-3Kb of stack space.  It will also
  1276. malloc about 20K-30K of near heap space while executing (and lots of far
  1277. heap, but that doesn't count in this calculation).  This figure will vary
  1278. depending on selected operating mode, and to a lesser extent on image size.
  1279. There is also about 5Kb-6Kb of constant data which will be allocated in the
  1280. near data segment (about 4Kb of this is the error message table).
  1281. Thus you have perhaps 20K available for other modules' static data and near
  1282. heap space before you need to go to a larger memory model.  The C library's
  1283. static data will account for several K of this, but that still leaves a good
  1284. deal for your needs.  (If you are tight on space, you could reduce the sizes
  1285. of the I/O buffers allocated by jdatasrc.c and jdatadst.c, say from 4K to
  1286. 1K.  Another possibility is to move the error message table to far memory;
  1287. this should be doable with only localized hacking on jerror.c.)
  1288. About 2K of the near heap space is "permanent" memory that will not be
  1289. released until you destroy the JPEG object.  This is only an issue if you
  1290. save a JPEG object between compression or decompression operations.
  1291. Far data space may also be a tight resource when you are dealing with large
  1292. images.  The most memory-intensive case is decompression with two-pass color
  1293. quantization, or single-pass quantization to an externally supplied color
  1294. map.  This requires a 128Kb color lookup table plus strip buffers amounting
  1295. to about 40 bytes per column for typical sampling ratios (eg, about 25600
  1296. bytes for a 640-pixel-wide image).  You may not be able to process wide
  1297. images if you have large data structures of your own.
  1298. Of course, all of these concerns vanish if you use a 32-bit flat-memory-model
  1299. compiler, such as DJGPP or Watcom C.  We highly recommend flat model if you
  1300. can use it; the JPEG library is significantly faster in flat model.