]> git.xonotic.org Git - xonotic/netradiant.git/blob - libs/jpeg6/jpegint.h
transfer from internal tree r5311 branches/1.4-gpl
[xonotic/netradiant.git] / libs / jpeg6 / jpegint.h
1 /*\r
2 \r
3  * jpegint.h\r
4 \r
5  *\r
6 \r
7  * Copyright (C) 1991-1995, Thomas G. Lane.\r
8 \r
9  * This file is part of the Independent JPEG Group's software.\r
10 \r
11  * For conditions of distribution and use, see the accompanying README file.\r
12 \r
13  *\r
14 \r
15  * This file provides common declarations for the various JPEG modules.\r
16 \r
17  * These declarations are considered internal to the JPEG library; most\r
18 \r
19  * applications using the library shouldn't need to include this file.\r
20 \r
21  */\r
22 \r
23 \r
24 \r
25 \r
26 \r
27 /* Declarations for both compression & decompression */\r
28 \r
29 \r
30 \r
31 typedef enum {                  /* Operating modes for buffer controllers */\r
32 \r
33         JBUF_PASS_THRU,         /* Plain stripwise operation */\r
34 \r
35         /* Remaining modes require a full-image buffer to have been created */\r
36 \r
37         JBUF_SAVE_SOURCE,       /* Run source subobject only, save output */\r
38 \r
39         JBUF_CRANK_DEST,        /* Run dest subobject only, using saved data */\r
40 \r
41         JBUF_SAVE_AND_PASS      /* Run both subobjects, save output */\r
42 \r
43 } J_BUF_MODE;\r
44 \r
45 \r
46 \r
47 /* Values of global_state field (jdapi.c has some dependencies on ordering!) */\r
48 \r
49 #define CSTATE_START    100     /* after create_compress */\r
50 \r
51 #define CSTATE_SCANNING 101     /* start_compress done, write_scanlines OK */\r
52 \r
53 #define CSTATE_RAW_OK   102     /* start_compress done, write_raw_data OK */\r
54 \r
55 #define CSTATE_WRCOEFS  103     /* jpeg_write_coefficients done */\r
56 \r
57 #define DSTATE_START    200     /* after create_decompress */\r
58 \r
59 #define DSTATE_INHEADER 201     /* reading header markers, no SOS yet */\r
60 \r
61 #define DSTATE_READY    202     /* found SOS, ready for start_decompress */\r
62 \r
63 #define DSTATE_PRELOAD  203     /* reading multiscan file in start_decompress*/\r
64 \r
65 #define DSTATE_PRESCAN  204     /* performing dummy pass for 2-pass quant */\r
66 \r
67 #define DSTATE_SCANNING 205     /* start_decompress done, read_scanlines OK */\r
68 \r
69 #define DSTATE_RAW_OK   206     /* start_decompress done, read_raw_data OK */\r
70 \r
71 #define DSTATE_BUFIMAGE 207     /* expecting jpeg_start_output */\r
72 \r
73 #define DSTATE_BUFPOST  208     /* looking for SOS/EOI in jpeg_finish_output */\r
74 \r
75 #define DSTATE_RDCOEFS  209     /* reading file in jpeg_read_coefficients */\r
76 \r
77 #define DSTATE_STOPPING 210     /* looking for EOI in jpeg_finish_decompress */\r
78 \r
79 \r
80 \r
81 \r
82 \r
83 /* Declarations for compression modules */\r
84 \r
85 \r
86 \r
87 /* Master control module */\r
88 \r
89 struct jpeg_comp_master {\r
90 \r
91   JMETHOD(void, prepare_for_pass, (j_compress_ptr cinfo));\r
92 \r
93   JMETHOD(void, pass_startup, (j_compress_ptr cinfo));\r
94 \r
95   JMETHOD(void, finish_pass, (j_compress_ptr cinfo));\r
96 \r
97 \r
98 \r
99   /* State variables made visible to other modules */\r
100 \r
101   boolean call_pass_startup;    /* True if pass_startup must be called */\r
102 \r
103   boolean is_last_pass;         /* True during last pass */\r
104 \r
105 };\r
106 \r
107 \r
108 \r
109 /* Main buffer control (downsampled-data buffer) */\r
110 \r
111 struct jpeg_c_main_controller {\r
112 \r
113   JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode));\r
114 \r
115   JMETHOD(void, process_data, (j_compress_ptr cinfo,\r
116 \r
117                                JSAMPARRAY input_buf, JDIMENSION *in_row_ctr,\r
118 \r
119                                JDIMENSION in_rows_avail));\r
120 \r
121 };\r
122 \r
123 \r
124 \r
125 /* Compression preprocessing (downsampling input buffer control) */\r
126 \r
127 struct jpeg_c_prep_controller {\r
128 \r
129   JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode));\r
130 \r
131   JMETHOD(void, pre_process_data, (j_compress_ptr cinfo,\r
132 \r
133                                    JSAMPARRAY input_buf,\r
134 \r
135                                    JDIMENSION *in_row_ctr,\r
136 \r
137                                    JDIMENSION in_rows_avail,\r
138 \r
139                                    JSAMPIMAGE output_buf,\r
140 \r
141                                    JDIMENSION *out_row_group_ctr,\r
142 \r
143                                    JDIMENSION out_row_groups_avail));\r
144 \r
145 };\r
146 \r
147 \r
148 \r
149 /* Coefficient buffer control */\r
150 \r
151 struct jpeg_c_coef_controller {\r
152 \r
153   JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode));\r
154 \r
155   JMETHOD(boolean, compress_data, (j_compress_ptr cinfo,\r
156 \r
157                                    JSAMPIMAGE input_buf));\r
158 \r
159 };\r
160 \r
161 \r
162 \r
163 /* Colorspace conversion */\r
164 \r
165 struct jpeg_color_converter {\r
166 \r
167   JMETHOD(void, start_pass, (j_compress_ptr cinfo));\r
168 \r
169   JMETHOD(void, color_convert, (j_compress_ptr cinfo,\r
170 \r
171                                 JSAMPARRAY input_buf, JSAMPIMAGE output_buf,\r
172 \r
173                                 JDIMENSION output_row, int num_rows));\r
174 \r
175 };\r
176 \r
177 \r
178 \r
179 /* Downsampling */\r
180 \r
181 struct jpeg_downsampler {\r
182 \r
183   JMETHOD(void, start_pass, (j_compress_ptr cinfo));\r
184 \r
185   JMETHOD(void, downsample, (j_compress_ptr cinfo,\r
186 \r
187                              JSAMPIMAGE input_buf, JDIMENSION in_row_index,\r
188 \r
189                              JSAMPIMAGE output_buf,\r
190 \r
191                              JDIMENSION out_row_group_index));\r
192 \r
193 \r
194 \r
195   boolean need_context_rows;    /* TRUE if need rows above & below */\r
196 \r
197 };\r
198 \r
199 \r
200 \r
201 /* Forward DCT (also controls coefficient quantization) */\r
202 \r
203 struct jpeg_forward_dct {\r
204 \r
205   JMETHOD(void, start_pass, (j_compress_ptr cinfo));\r
206 \r
207   /* perhaps this should be an array??? */\r
208 \r
209   JMETHOD(void, forward_DCT, (j_compress_ptr cinfo,\r
210 \r
211                               jpeg_component_info * compptr,\r
212 \r
213                               JSAMPARRAY sample_data, JBLOCKROW coef_blocks,\r
214 \r
215                               JDIMENSION start_row, JDIMENSION start_col,\r
216 \r
217                               JDIMENSION num_blocks));\r
218 \r
219 };\r
220 \r
221 \r
222 \r
223 /* Entropy encoding */\r
224 \r
225 struct jpeg_entropy_encoder {\r
226 \r
227   JMETHOD(void, start_pass, (j_compress_ptr cinfo, boolean gather_statistics));\r
228 \r
229   JMETHOD(boolean, encode_mcu, (j_compress_ptr cinfo, JBLOCKROW *MCU_data));\r
230 \r
231   JMETHOD(void, finish_pass, (j_compress_ptr cinfo));\r
232 \r
233 };\r
234 \r
235 \r
236 \r
237 /* Marker writing */\r
238 \r
239 struct jpeg_marker_writer {\r
240 \r
241   /* write_any_marker is exported for use by applications */\r
242 \r
243   /* Probably only COM and APPn markers should be written */\r
244 \r
245   JMETHOD(void, write_any_marker, (j_compress_ptr cinfo, int marker,\r
246 \r
247                                    const JOCTET *dataptr, unsigned int datalen));\r
248 \r
249   JMETHOD(void, write_file_header, (j_compress_ptr cinfo));\r
250 \r
251   JMETHOD(void, write_frame_header, (j_compress_ptr cinfo));\r
252 \r
253   JMETHOD(void, write_scan_header, (j_compress_ptr cinfo));\r
254 \r
255   JMETHOD(void, write_file_trailer, (j_compress_ptr cinfo));\r
256 \r
257   JMETHOD(void, write_tables_only, (j_compress_ptr cinfo));\r
258 \r
259 };\r
260 \r
261 \r
262 \r
263 \r
264 \r
265 /* Declarations for decompression modules */\r
266 \r
267 \r
268 \r
269 /* Master control module */\r
270 \r
271 struct jpeg_decomp_master {\r
272 \r
273   JMETHOD(void, prepare_for_output_pass, (j_decompress_ptr cinfo));\r
274 \r
275   JMETHOD(void, finish_output_pass, (j_decompress_ptr cinfo));\r
276 \r
277 \r
278 \r
279   /* State variables made visible to other modules */\r
280 \r
281   boolean is_dummy_pass;        /* True during 1st pass for 2-pass quant */\r
282 \r
283 };\r
284 \r
285 \r
286 \r
287 /* Input control module */\r
288 \r
289 struct jpeg_input_controller {\r
290 \r
291   JMETHOD(int, consume_input, (j_decompress_ptr cinfo));\r
292 \r
293   JMETHOD(void, reset_input_controller, (j_decompress_ptr cinfo));\r
294 \r
295   JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo));\r
296 \r
297   JMETHOD(void, finish_input_pass, (j_decompress_ptr cinfo));\r
298 \r
299 \r
300 \r
301   /* State variables made visible to other modules */\r
302 \r
303   boolean has_multiple_scans;   /* True if file has multiple scans */\r
304 \r
305   boolean eoi_reached;          /* True when EOI has been consumed */\r
306 \r
307 };\r
308 \r
309 \r
310 \r
311 /* Main buffer control (downsampled-data buffer) */\r
312 \r
313 struct jpeg_d_main_controller {\r
314 \r
315   JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode));\r
316 \r
317   JMETHOD(void, process_data, (j_decompress_ptr cinfo,\r
318 \r
319                                JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,\r
320 \r
321                                JDIMENSION out_rows_avail));\r
322 \r
323 };\r
324 \r
325 \r
326 \r
327 /* Coefficient buffer control */\r
328 \r
329 struct jpeg_d_coef_controller {\r
330 \r
331   JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo));\r
332 \r
333   JMETHOD(int, consume_data, (j_decompress_ptr cinfo));\r
334 \r
335   JMETHOD(void, start_output_pass, (j_decompress_ptr cinfo));\r
336 \r
337   JMETHOD(int, decompress_data, (j_decompress_ptr cinfo,\r
338 \r
339                                  JSAMPIMAGE output_buf));\r
340 \r
341   /* Pointer to array of coefficient virtual arrays, or NULL if none */\r
342 \r
343   jvirt_barray_ptr *coef_arrays;\r
344 \r
345 };\r
346 \r
347 \r
348 \r
349 /* Decompression postprocessing (color quantization buffer control) */\r
350 \r
351 struct jpeg_d_post_controller {\r
352 \r
353   JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode));\r
354 \r
355   JMETHOD(void, post_process_data, (j_decompress_ptr cinfo,\r
356 \r
357                                     JSAMPIMAGE input_buf,\r
358 \r
359                                     JDIMENSION *in_row_group_ctr,\r
360 \r
361                                     JDIMENSION in_row_groups_avail,\r
362 \r
363                                     JSAMPARRAY output_buf,\r
364 \r
365                                     JDIMENSION *out_row_ctr,\r
366 \r
367                                     JDIMENSION out_rows_avail));\r
368 \r
369 };\r
370 \r
371 \r
372 \r
373 /* Marker reading & parsing */\r
374 \r
375 struct jpeg_marker_reader {\r
376 \r
377   JMETHOD(void, reset_marker_reader, (j_decompress_ptr cinfo));\r
378 \r
379   /* Read markers until SOS or EOI.\r
380 \r
381    * Returns same codes as are defined for jpeg_consume_input:\r
382 \r
383    * JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI.\r
384 \r
385    */\r
386 \r
387   JMETHOD(int, read_markers, (j_decompress_ptr cinfo));\r
388 \r
389   /* Read a restart marker --- exported for use by entropy decoder only */\r
390 \r
391   jpeg_marker_parser_method read_restart_marker;\r
392 \r
393   /* Application-overridable marker processing methods */\r
394 \r
395   jpeg_marker_parser_method process_COM;\r
396 \r
397   jpeg_marker_parser_method process_APPn[16];\r
398 \r
399 \r
400 \r
401   /* State of marker reader --- nominally internal, but applications\r
402 \r
403    * supplying COM or APPn handlers might like to know the state.\r
404 \r
405    */\r
406 \r
407   boolean saw_SOI;              /* found SOI? */\r
408 \r
409   boolean saw_SOF;              /* found SOF? */\r
410 \r
411   int next_restart_num;         /* next restart number expected (0-7) */\r
412 \r
413   unsigned int discarded_bytes; /* # of bytes skipped looking for a marker */\r
414 \r
415 };\r
416 \r
417 \r
418 \r
419 /* Entropy decoding */\r
420 \r
421 struct jpeg_entropy_decoder {\r
422 \r
423   JMETHOD(void, start_pass, (j_decompress_ptr cinfo));\r
424 \r
425   JMETHOD(boolean, decode_mcu, (j_decompress_ptr cinfo,\r
426 \r
427                                 JBLOCKROW *MCU_data));\r
428 \r
429 };\r
430 \r
431 \r
432 \r
433 /* Inverse DCT (also performs dequantization) */\r
434 \r
435 typedef JMETHOD(void, inverse_DCT_method_ptr,\r
436 \r
437                 (j_decompress_ptr cinfo, jpeg_component_info * compptr,\r
438 \r
439                  JCOEFPTR coef_block,\r
440 \r
441                  JSAMPARRAY output_buf, JDIMENSION output_col));\r
442 \r
443 \r
444 \r
445 struct jpeg_inverse_dct {\r
446 \r
447   JMETHOD(void, start_pass, (j_decompress_ptr cinfo));\r
448 \r
449   /* It is useful to allow each component to have a separate IDCT method. */\r
450 \r
451   inverse_DCT_method_ptr inverse_DCT[MAX_COMPONENTS];\r
452 \r
453 };\r
454 \r
455 \r
456 \r
457 /* Upsampling (note that upsampler must also call color converter) */\r
458 \r
459 struct jpeg_upsampler {\r
460 \r
461   JMETHOD(void, start_pass, (j_decompress_ptr cinfo));\r
462 \r
463   JMETHOD(void, upsample, (j_decompress_ptr cinfo,\r
464 \r
465                            JSAMPIMAGE input_buf,\r
466 \r
467                            JDIMENSION *in_row_group_ctr,\r
468 \r
469                            JDIMENSION in_row_groups_avail,\r
470 \r
471                            JSAMPARRAY output_buf,\r
472 \r
473                            JDIMENSION *out_row_ctr,\r
474 \r
475                            JDIMENSION out_rows_avail));\r
476 \r
477 \r
478 \r
479   boolean need_context_rows;    /* TRUE if need rows above & below */\r
480 \r
481 };\r
482 \r
483 \r
484 \r
485 /* Colorspace conversion */\r
486 \r
487 struct jpeg_color_deconverter {\r
488 \r
489   JMETHOD(void, start_pass, (j_decompress_ptr cinfo));\r
490 \r
491   JMETHOD(void, color_convert, (j_decompress_ptr cinfo,\r
492 \r
493                                 JSAMPIMAGE input_buf, JDIMENSION input_row,\r
494 \r
495                                 JSAMPARRAY output_buf, int num_rows));\r
496 \r
497 };\r
498 \r
499 \r
500 \r
501 /* Color quantization or color precision reduction */\r
502 \r
503 struct jpeg_color_quantizer {\r
504 \r
505   JMETHOD(void, start_pass, (j_decompress_ptr cinfo, boolean is_pre_scan));\r
506 \r
507   JMETHOD(void, color_quantize, (j_decompress_ptr cinfo,\r
508 \r
509                                  JSAMPARRAY input_buf, JSAMPARRAY output_buf,\r
510 \r
511                                  int num_rows));\r
512 \r
513   JMETHOD(void, finish_pass, (j_decompress_ptr cinfo));\r
514 \r
515   JMETHOD(void, new_color_map, (j_decompress_ptr cinfo));\r
516 \r
517 };\r
518 \r
519 \r
520 \r
521 \r
522 \r
523 /* Miscellaneous useful macros */\r
524 \r
525 \r
526 \r
527 #undef MAX\r
528 \r
529 #define MAX(a,b)        ((a) > (b) ? (a) : (b))\r
530 \r
531 #undef MIN\r
532 \r
533 #define MIN(a,b)        ((a) < (b) ? (a) : (b))\r
534 \r
535 \r
536 \r
537 \r
538 \r
539 /* We assume that right shift corresponds to signed division by 2 with\r
540 \r
541  * rounding towards minus infinity.  This is correct for typical "arithmetic\r
542 \r
543  * shift" instructions that shift in copies of the sign bit.  But some\r
544 \r
545  * C compilers implement >> with an unsigned shift.  For these machines you\r
546 \r
547  * must define RIGHT_SHIFT_IS_UNSIGNED.\r
548 \r
549  * RIGHT_SHIFT provides a proper signed right shift of an INT32 quantity.\r
550 \r
551  * It is only applied with constant shift counts.  SHIFT_TEMPS must be\r
552 \r
553  * included in the variables of any routine using RIGHT_SHIFT.\r
554 \r
555  */\r
556 \r
557 \r
558 \r
559 #ifdef RIGHT_SHIFT_IS_UNSIGNED\r
560 \r
561 #define SHIFT_TEMPS     INT32 shift_temp;\r
562 \r
563 #define RIGHT_SHIFT(x,shft)  \\r
564 \r
565         ((shift_temp = (x)) < 0 ? \\r
566 \r
567          (shift_temp >> (shft)) | ((~((INT32) 0)) << (32-(shft))) : \\r
568 \r
569          (shift_temp >> (shft)))\r
570 \r
571 #else\r
572 \r
573 #define SHIFT_TEMPS\r
574 \r
575 #define RIGHT_SHIFT(x,shft)     ((x) >> (shft))\r
576 \r
577 #endif\r
578 \r
579 \r
580 \r
581 \r
582 \r
583 /* Short forms of external names for systems with brain-damaged linkers. */\r
584 \r
585 \r
586 \r
587 #ifdef NEED_SHORT_EXTERNAL_NAMES\r
588 \r
589 #define jinit_compress_master   jICompress\r
590 \r
591 #define jinit_c_master_control  jICMaster\r
592 \r
593 #define jinit_c_main_controller jICMainC\r
594 \r
595 #define jinit_c_prep_controller jICPrepC\r
596 \r
597 #define jinit_c_coef_controller jICCoefC\r
598 \r
599 #define jinit_color_converter   jICColor\r
600 \r
601 #define jinit_downsampler       jIDownsampler\r
602 \r
603 #define jinit_forward_dct       jIFDCT\r
604 \r
605 #define jinit_huff_encoder      jIHEncoder\r
606 \r
607 #define jinit_phuff_encoder     jIPHEncoder\r
608 \r
609 #define jinit_marker_writer     jIMWriter\r
610 \r
611 #define jinit_master_decompress jIDMaster\r
612 \r
613 #define jinit_d_main_controller jIDMainC\r
614 \r
615 #define jinit_d_coef_controller jIDCoefC\r
616 \r
617 #define jinit_d_post_controller jIDPostC\r
618 \r
619 #define jinit_input_controller  jIInCtlr\r
620 \r
621 #define jinit_marker_reader     jIMReader\r
622 \r
623 #define jinit_huff_decoder      jIHDecoder\r
624 \r
625 #define jinit_phuff_decoder     jIPHDecoder\r
626 \r
627 #define jinit_inverse_dct       jIIDCT\r
628 \r
629 #define jinit_upsampler         jIUpsampler\r
630 \r
631 #define jinit_color_deconverter jIDColor\r
632 \r
633 #define jinit_1pass_quantizer   jI1Quant\r
634 \r
635 #define jinit_2pass_quantizer   jI2Quant\r
636 \r
637 #define jinit_merged_upsampler  jIMUpsampler\r
638 \r
639 #define jinit_memory_mgr        jIMemMgr\r
640 \r
641 #define jdiv_round_up           jDivRound\r
642 \r
643 #define jround_up               jRound\r
644 \r
645 #define jcopy_sample_rows       jCopySamples\r
646 \r
647 #define jcopy_block_row         jCopyBlocks\r
648 \r
649 #define jzero_far               jZeroFar\r
650 \r
651 #define jpeg_zigzag_order       jZIGTable\r
652 \r
653 #define jpeg_natural_order      jZAGTable\r
654 \r
655 #endif /* NEED_SHORT_EXTERNAL_NAMES */\r
656 \r
657 \r
658 \r
659 \r
660 \r
661 /* Compression module initialization routines */\r
662 \r
663 EXTERN void jinit_compress_master JPP((j_compress_ptr cinfo));\r
664 \r
665 EXTERN void jinit_c_master_control JPP((j_compress_ptr cinfo,\r
666 \r
667                                         boolean transcode_only));\r
668 \r
669 EXTERN void jinit_c_main_controller JPP((j_compress_ptr cinfo,\r
670 \r
671                                          boolean need_full_buffer));\r
672 \r
673 EXTERN void jinit_c_prep_controller JPP((j_compress_ptr cinfo,\r
674 \r
675                                          boolean need_full_buffer));\r
676 \r
677 EXTERN void jinit_c_coef_controller JPP((j_compress_ptr cinfo,\r
678 \r
679                                          boolean need_full_buffer));\r
680 \r
681 EXTERN void jinit_color_converter JPP((j_compress_ptr cinfo));\r
682 \r
683 EXTERN void jinit_downsampler JPP((j_compress_ptr cinfo));\r
684 \r
685 EXTERN void jinit_forward_dct JPP((j_compress_ptr cinfo));\r
686 \r
687 EXTERN void jinit_huff_encoder JPP((j_compress_ptr cinfo));\r
688 \r
689 EXTERN void jinit_phuff_encoder JPP((j_compress_ptr cinfo));\r
690 \r
691 EXTERN void jinit_marker_writer JPP((j_compress_ptr cinfo));\r
692 \r
693 /* Decompression module initialization routines */\r
694 \r
695 EXTERN void jinit_master_decompress JPP((j_decompress_ptr cinfo));\r
696 \r
697 EXTERN void jinit_d_main_controller JPP((j_decompress_ptr cinfo,\r
698 \r
699                                          boolean need_full_buffer));\r
700 \r
701 EXTERN void jinit_d_coef_controller JPP((j_decompress_ptr cinfo,\r
702 \r
703                                          boolean need_full_buffer));\r
704 \r
705 EXTERN void jinit_d_post_controller JPP((j_decompress_ptr cinfo,\r
706 \r
707                                          boolean need_full_buffer));\r
708 \r
709 EXTERN void jinit_input_controller JPP((j_decompress_ptr cinfo));\r
710 \r
711 EXTERN void jinit_marker_reader JPP((j_decompress_ptr cinfo));\r
712 \r
713 EXTERN void jinit_huff_decoder JPP((j_decompress_ptr cinfo));\r
714 \r
715 EXTERN void jinit_phuff_decoder JPP((j_decompress_ptr cinfo));\r
716 \r
717 EXTERN void jinit_inverse_dct JPP((j_decompress_ptr cinfo));\r
718 \r
719 EXTERN void jinit_upsampler JPP((j_decompress_ptr cinfo));\r
720 \r
721 EXTERN void jinit_color_deconverter JPP((j_decompress_ptr cinfo));\r
722 \r
723 EXTERN void jinit_1pass_quantizer JPP((j_decompress_ptr cinfo));\r
724 \r
725 EXTERN void jinit_2pass_quantizer JPP((j_decompress_ptr cinfo));\r
726 \r
727 EXTERN void jinit_merged_upsampler JPP((j_decompress_ptr cinfo));\r
728 \r
729 /* Memory manager initialization */\r
730 \r
731 EXTERN void jinit_memory_mgr JPP((j_common_ptr cinfo));\r
732 \r
733 \r
734 \r
735 /* Utility routines in jutils.c */\r
736 \r
737 EXTERN long jdiv_round_up JPP((long a, long b));\r
738 \r
739 EXTERN long jround_up JPP((long a, long b));\r
740 \r
741 EXTERN void jcopy_sample_rows JPP((JSAMPARRAY input_array, int source_row,\r
742 \r
743                                    JSAMPARRAY output_array, int dest_row,\r
744 \r
745                                    int num_rows, JDIMENSION num_cols));\r
746 \r
747 EXTERN void jcopy_block_row JPP((JBLOCKROW input_row, JBLOCKROW output_row,\r
748 \r
749                                  JDIMENSION num_blocks));\r
750 \r
751 EXTERN void jzero_far JPP((void FAR * target, size_t bytestozero));\r
752 \r
753 /* Constant tables in jutils.c */\r
754 \r
755 extern const int jpeg_zigzag_order[]; /* natural coef order to zigzag order */\r
756 \r
757 extern const int jpeg_natural_order[]; /* zigzag coef order to natural order */\r
758 \r
759 \r
760 \r
761 /* Suppress undefined-structure complaints if necessary. */\r
762 \r
763 \r
764 \r
765 #ifdef INCOMPLETE_TYPES_BROKEN\r
766 \r
767 #ifndef AM_MEMORY_MANAGER       /* only jmemmgr.c defines these */\r
768 \r
769 struct jvirt_sarray_control { long dummy; };\r
770 \r
771 struct jvirt_barray_control { long dummy; };\r
772 \r
773 #endif\r
774 \r
775 #endif /* INCOMPLETE_TYPES_BROKEN */\r
776 \r