LIBJPEG.TXT
上传用户:dgcrss
上传日期:2007-01-03
资源大小:390k
文件大小:146k
源码类别:

图片显示

开发平台:

Visual C++

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