jpegint.h
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 16k
Category:

Windows Kernel

Development Platform:

Visual C++

  1. /*
  2.  * jpegint.h
  3.  *
  4.  * Copyright (C) 1991-1996, Thomas G. Lane.
  5.  * This file is part of the Independent JPEG Group's software.
  6.  * For conditions of distribution and use, see the accompanying README file.
  7.  *
  8.  * This file provides common declarations for the various JPEG modules.
  9.  * These declarations are considered internal to the JPEG library; most
  10.  * applications using the library shouldn't need to include this file.
  11.  */
  12. /* Declarations for both compression & decompression */
  13. #ifdef NIFTY
  14. typedef struct
  15. {
  16.   short g, b;
  17. } coef_c1;
  18.  
  19. typedef struct
  20. {
  21.   short r, g;
  22. } coef_c2;
  23.  
  24. #endif
  25. typedef enum { /* Operating modes for buffer controllers */
  26. JBUF_PASS_THRU, /* Plain stripwise operation */
  27. /* Remaining modes require a full-image buffer to have been created */
  28. JBUF_SAVE_SOURCE, /* Run source subobject only, save output */
  29. JBUF_CRANK_DEST, /* Run dest subobject only, using saved data */
  30. JBUF_SAVE_AND_PASS /* Run both subobjects, save output */
  31. } J_BUF_MODE;
  32. /* Values of global_state field (jdapi.c has some dependencies on ordering!) */
  33. #define CSTATE_START 100 /* after create_compress */
  34. #define CSTATE_SCANNING 101 /* start_compress done, write_scanlines OK */
  35. #define CSTATE_RAW_OK 102 /* start_compress done, write_raw_data OK */
  36. #define CSTATE_WRCOEFS 103 /* jpeg_write_coefficients done */
  37. #define DSTATE_START 200 /* after create_decompress */
  38. #define DSTATE_INHEADER 201 /* reading header markers, no SOS yet */
  39. #define DSTATE_READY 202 /* found SOS, ready for start_decompress */
  40. #define DSTATE_PRELOAD 203 /* reading multiscan file in start_decompress*/
  41. #define DSTATE_PRESCAN 204 /* performing dummy pass for 2-pass quant */
  42. #define DSTATE_SCANNING 205 /* start_decompress done, read_scanlines OK */
  43. #define DSTATE_RAW_OK 206 /* start_decompress done, read_raw_data OK */
  44. #define DSTATE_BUFIMAGE 207 /* expecting jpeg_start_output */
  45. #define DSTATE_BUFPOST 208 /* looking for SOS/EOI in jpeg_finish_output */
  46. #define DSTATE_RDCOEFS 209 /* reading file in jpeg_read_coefficients */
  47. #define DSTATE_STOPPING 210 /* looking for EOI in jpeg_finish_decompress */
  48. /* Declarations for compression modules */
  49. /* Master control module */
  50. struct jpeg_comp_master {
  51.   JMETHOD(void, prepare_for_pass, (j_compress_ptr cinfo));
  52.   JMETHOD(void, pass_startup, (j_compress_ptr cinfo));
  53.   JMETHOD(void, finish_pass, (j_compress_ptr cinfo));
  54.   /* State variables made visible to other modules */
  55.   boolean call_pass_startup; /* True if pass_startup must be called */
  56.   boolean is_last_pass; /* True during last pass */
  57. };
  58. /* Main buffer control (downsampled-data buffer) */
  59. struct jpeg_c_main_controller {
  60.   JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode));
  61.   JMETHOD(void, process_data, (j_compress_ptr cinfo,
  62.        JSAMPARRAY input_buf, JDIMENSION *in_row_ctr,
  63.        JDIMENSION in_rows_avail));
  64. };
  65. /* Compression preprocessing (downsampling input buffer control) */
  66. struct jpeg_c_prep_controller {
  67.   JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode));
  68.   JMETHOD(void, pre_process_data, (j_compress_ptr cinfo,
  69.    JSAMPARRAY input_buf,
  70.    JDIMENSION *in_row_ctr,
  71.    JDIMENSION in_rows_avail,
  72.    JSAMPIMAGE output_buf,
  73.    JDIMENSION *out_row_group_ctr,
  74.    JDIMENSION out_row_groups_avail));
  75. };
  76. /* Coefficient buffer control */
  77. struct jpeg_c_coef_controller {
  78.   JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode));
  79.   JMETHOD(boolean, compress_data, (j_compress_ptr cinfo,
  80.    JSAMPIMAGE input_buf));
  81. };
  82. /* Colorspace conversion */
  83. struct jpeg_color_converter {
  84.   JMETHOD(void, start_pass, (j_compress_ptr cinfo));
  85.   JMETHOD(void, color_convert, (j_compress_ptr cinfo,
  86. JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
  87. JDIMENSION output_row, int num_rows));
  88. };
  89. /* Downsampling */
  90. struct jpeg_downsampler {
  91.   JMETHOD(void, start_pass, (j_compress_ptr cinfo));
  92.   JMETHOD(void, downsample, (j_compress_ptr cinfo,
  93.      JSAMPIMAGE input_buf, JDIMENSION in_row_index,
  94.      JSAMPIMAGE output_buf,
  95.      JDIMENSION out_row_group_index));
  96.   boolean need_context_rows; /* TRUE if need rows above & below */
  97. };
  98. /* Forward DCT (also controls coefficient quantization) */
  99. struct jpeg_forward_dct {
  100.   JMETHOD(void, start_pass, (j_compress_ptr cinfo));
  101.   /* perhaps this should be an array??? */
  102.   JMETHOD(void, forward_DCT, (j_compress_ptr cinfo,
  103.       jpeg_component_info * compptr,
  104.       JSAMPARRAY sample_data, JBLOCKROW coef_blocks,
  105.       JDIMENSION start_row, JDIMENSION start_col,
  106.       JDIMENSION num_blocks));
  107. };
  108. /* Entropy encoding */
  109. struct jpeg_entropy_encoder {
  110.   JMETHOD(void, start_pass, (j_compress_ptr cinfo, boolean gather_statistics));
  111.   JMETHOD(boolean, encode_mcu, (j_compress_ptr cinfo, JBLOCKROW *MCU_data));
  112.   JMETHOD(void, finish_pass, (j_compress_ptr cinfo));
  113. };
  114. /* Marker writing */
  115. struct jpeg_marker_writer {
  116.   /* write_any_marker is exported for use by applications */
  117.   /* Probably only COM and APPn markers should be written */
  118.   JMETHOD(void, write_any_marker, (j_compress_ptr cinfo, int marker,
  119.    const JOCTET *dataptr, unsigned int datalen));
  120.   JMETHOD(void, write_file_header, (j_compress_ptr cinfo));
  121.   JMETHOD(void, write_frame_header, (j_compress_ptr cinfo));
  122.   JMETHOD(void, write_scan_header, (j_compress_ptr cinfo));
  123.   JMETHOD(void, write_file_trailer, (j_compress_ptr cinfo));
  124.   JMETHOD(void, write_tables_only, (j_compress_ptr cinfo));
  125. };
  126. /* Declarations for decompression modules */
  127. /* Master control module */
  128. struct jpeg_decomp_master {
  129.   JMETHOD(void, prepare_for_output_pass, (j_decompress_ptr cinfo));
  130.   JMETHOD(void, finish_output_pass, (j_decompress_ptr cinfo));
  131.   /* State variables made visible to other modules */
  132.   boolean is_dummy_pass; /* True during 1st pass for 2-pass quant */
  133. };
  134. /* Input control module */
  135. struct jpeg_input_controller {
  136.   JMETHOD(int, consume_input, (j_decompress_ptr cinfo));
  137.   JMETHOD(void, reset_input_controller, (j_decompress_ptr cinfo));
  138.   JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo));
  139.   JMETHOD(void, finish_input_pass, (j_decompress_ptr cinfo));
  140.   /* State variables made visible to other modules */
  141.   boolean has_multiple_scans; /* True if file has multiple scans */
  142.   boolean eoi_reached; /* True when EOI has been consumed */
  143. };
  144. /* Main buffer control (downsampled-data buffer) */
  145. struct jpeg_d_main_controller {
  146.   JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode));
  147.   JMETHOD(void, process_data, (j_decompress_ptr cinfo,
  148.        JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
  149.        JDIMENSION out_rows_avail));
  150. };
  151. /* Coefficient buffer control */
  152. struct jpeg_d_coef_controller {
  153.   JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo));
  154.   JMETHOD(int, consume_data, (j_decompress_ptr cinfo));
  155.   JMETHOD(void, start_output_pass, (j_decompress_ptr cinfo));
  156.   JMETHOD(int, decompress_data, (j_decompress_ptr cinfo,
  157.  JSAMPIMAGE output_buf));
  158.   /* Pointer to array of coefficient virtual arrays, or NULL if none */
  159.   jvirt_barray_ptr *coef_arrays;
  160. };
  161. /* Decompression postprocessing (color quantization buffer control) */
  162. struct jpeg_d_post_controller {
  163.   JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode));
  164.   JMETHOD(void, post_process_data, (j_decompress_ptr cinfo,
  165.     JSAMPIMAGE input_buf,
  166.     JDIMENSION *in_row_group_ctr,
  167.     JDIMENSION in_row_groups_avail,
  168.     JSAMPARRAY output_buf,
  169.     JDIMENSION *out_row_ctr,
  170.     JDIMENSION out_rows_avail));
  171. };
  172. /* Marker reading & parsing */
  173. struct jpeg_marker_reader {
  174.   JMETHOD(void, reset_marker_reader, (j_decompress_ptr cinfo));
  175.   /* Read markers until SOS or EOI.
  176.    * Returns same codes as are defined for jpeg_consume_input:
  177.    * JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI.
  178.    */
  179.   JMETHOD(int, read_markers, (j_decompress_ptr cinfo));
  180.   /* Read a restart marker --- exported for use by entropy decoder only */
  181.   jpeg_marker_parser_method read_restart_marker;
  182.   /* Application-overridable marker processing methods */
  183.   jpeg_marker_parser_method process_COM;
  184.   jpeg_marker_parser_method process_APPn[16];
  185.   /* State of marker reader --- nominally internal, but applications
  186.    * supplying COM or APPn handlers might like to know the state.
  187.    */
  188.   boolean saw_SOI; /* found SOI? */
  189.   boolean saw_SOF; /* found SOF? */
  190.   int next_restart_num; /* next restart number expected (0-7) */
  191.   unsigned int discarded_bytes; /* # of bytes skipped looking for a marker */
  192. };
  193. /* Entropy decoding */
  194. struct jpeg_entropy_decoder {
  195.   JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
  196.   JMETHOD(boolean, decode_mcu, (j_decompress_ptr cinfo,
  197. JBLOCKROW *MCU_data));
  198. };
  199. /* Inverse DCT (also performs dequantization) */
  200. typedef JMETHOD(void, inverse_DCT_method_ptr,
  201. (j_decompress_ptr cinfo, jpeg_component_info * compptr,
  202.  JCOEFPTR coef_block,
  203.  JSAMPARRAY output_buf, JDIMENSION output_col));
  204. struct jpeg_inverse_dct {
  205.   JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
  206.   /* It is useful to allow each component to have a separate IDCT method. */
  207.   inverse_DCT_method_ptr inverse_DCT[MAX_COMPONENTS];
  208. };
  209. /* Upsampling (note that upsampler must also call color converter) */
  210. struct jpeg_upsampler {
  211.   JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
  212.   JMETHOD(void, upsample, (j_decompress_ptr cinfo,
  213.    JSAMPIMAGE input_buf,
  214.    JDIMENSION *in_row_group_ctr,
  215.    JDIMENSION in_row_groups_avail,
  216.    JSAMPARRAY output_buf,
  217.    JDIMENSION *out_row_ctr,
  218.    JDIMENSION out_rows_avail));
  219.   boolean need_context_rows; /* TRUE if need rows above & below */
  220. };
  221. /* Colorspace conversion */
  222. struct jpeg_color_deconverter {
  223.   JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
  224.   JMETHOD(void, color_convert, (j_decompress_ptr cinfo,
  225. JSAMPIMAGE input_buf, JDIMENSION input_row,
  226. JSAMPARRAY output_buf, int num_rows));
  227. };
  228. /* Color quantization or color precision reduction */
  229. struct jpeg_color_quantizer {
  230.   JMETHOD(void, start_pass, (j_decompress_ptr cinfo, boolean is_pre_scan));
  231.   JMETHOD(void, color_quantize, (j_decompress_ptr cinfo,
  232.  JSAMPARRAY input_buf, JSAMPARRAY output_buf,
  233.  int num_rows));
  234.   JMETHOD(void, finish_pass, (j_decompress_ptr cinfo));
  235.   JMETHOD(void, new_color_map, (j_decompress_ptr cinfo));
  236. };
  237. /* Miscellaneous useful macros */
  238. #undef MAX
  239. #define MAX(a,b) ((a) > (b) ? (a) : (b))
  240. #undef MIN
  241. #define MIN(a,b) ((a) < (b) ? (a) : (b))
  242. /* We assume that right shift corresponds to signed division by 2 with
  243.  * rounding towards minus infinity.  This is correct for typical "arithmetic
  244.  * shift" instructions that shift in copies of the sign bit.  But some
  245.  * C compilers implement >> with an unsigned shift.  For these machines you
  246.  * must define RIGHT_SHIFT_IS_UNSIGNED.
  247.  * RIGHT_SHIFT provides a proper signed right shift of an INT32 quantity.
  248.  * It is only applied with constant shift counts.  SHIFT_TEMPS must be
  249.  * included in the variables of any routine using RIGHT_SHIFT.
  250.  */
  251. #ifdef RIGHT_SHIFT_IS_UNSIGNED
  252. #define SHIFT_TEMPS INT32 shift_temp;
  253. #define RIGHT_SHIFT(x,shft)  
  254. ((shift_temp = (x)) < 0 ? 
  255.  (shift_temp >> (shft)) | ((~((INT32) 0)) << (32-(shft))) : 
  256.  (shift_temp >> (shft)))
  257. #else
  258. #define SHIFT_TEMPS
  259. #define RIGHT_SHIFT(x,shft) ((x) >> (shft))
  260. #endif
  261. /* Short forms of external names for systems with brain-damaged linkers. */
  262. #ifdef NEED_SHORT_EXTERNAL_NAMES
  263. #define jinit_compress_master jICompress
  264. #define jinit_c_master_control jICMaster
  265. #define jinit_c_main_controller jICMainC
  266. #define jinit_c_prep_controller jICPrepC
  267. #define jinit_c_coef_controller jICCoefC
  268. #define jinit_color_converter jICColor
  269. #define jinit_downsampler jIDownsampler
  270. #define jinit_forward_dct jIFDCT
  271. #define jinit_huff_encoder jIHEncoder
  272. #define jinit_phuff_encoder jIPHEncoder
  273. #define jinit_marker_writer jIMWriter
  274. #define jinit_master_decompress jIDMaster
  275. #define jinit_d_main_controller jIDMainC
  276. #define jinit_d_coef_controller jIDCoefC
  277. #define jinit_d_post_controller jIDPostC
  278. #define jinit_input_controller jIInCtlr
  279. #define jinit_marker_reader jIMReader
  280. #define jinit_huff_decoder jIHDecoder
  281. #define jinit_phuff_decoder jIPHDecoder
  282. #define jinit_inverse_dct jIIDCT
  283. #define jinit_upsampler jIUpsampler
  284. #define jinit_color_deconverter jIDColor
  285. #define jinit_1pass_quantizer jI1Quant
  286. #define jinit_2pass_quantizer jI2Quant
  287. #define jinit_merged_upsampler jIMUpsampler
  288. #define jinit_memory_mgr jIMemMgr
  289. #define jdiv_round_up jDivRound
  290. #define jround_up jRound
  291. #define jcopy_sample_rows jCopySamples
  292. #define jcopy_block_row jCopyBlocks
  293. #define jzero_far jZeroFar
  294. #define jpeg_zigzag_order jZIGTable
  295. #define jpeg_natural_order jZAGTable
  296. #endif /* NEED_SHORT_EXTERNAL_NAMES */
  297. /* Compression module initialization routines */
  298. EXTERN(void) jinit_compress_master JPP((j_compress_ptr cinfo));
  299. EXTERN(void) jinit_c_master_control JPP((j_compress_ptr cinfo,
  300.  boolean transcode_only));
  301. EXTERN(void) jinit_c_main_controller JPP((j_compress_ptr cinfo,
  302.   boolean need_full_buffer));
  303. EXTERN(void) jinit_c_prep_controller JPP((j_compress_ptr cinfo,
  304.   boolean need_full_buffer));
  305. EXTERN(void) jinit_c_coef_controller JPP((j_compress_ptr cinfo,
  306.   boolean need_full_buffer));
  307. EXTERN(void) jinit_color_converter JPP((j_compress_ptr cinfo));
  308. EXTERN(void) jinit_downsampler JPP((j_compress_ptr cinfo));
  309. EXTERN(void) jinit_forward_dct JPP((j_compress_ptr cinfo));
  310. EXTERN(void) jinit_huff_encoder JPP((j_compress_ptr cinfo));
  311. EXTERN(void) jinit_phuff_encoder JPP((j_compress_ptr cinfo));
  312. EXTERN(void) jinit_marker_writer JPP((j_compress_ptr cinfo));
  313. /* Decompression module initialization routines */
  314. EXTERN(void) jinit_master_decompress JPP((j_decompress_ptr cinfo));
  315. EXTERN(void) jinit_d_main_controller JPP((j_decompress_ptr cinfo,
  316.   boolean need_full_buffer));
  317. EXTERN(void) jinit_d_coef_controller JPP((j_decompress_ptr cinfo,
  318.   boolean need_full_buffer));
  319. EXTERN(void) jinit_d_post_controller JPP((j_decompress_ptr cinfo,
  320.   boolean need_full_buffer));
  321. EXTERN(void) jinit_input_controller JPP((j_decompress_ptr cinfo));
  322. EXTERN(void) jinit_marker_reader JPP((j_decompress_ptr cinfo));
  323. EXTERN(void) jinit_huff_decoder JPP((j_decompress_ptr cinfo));
  324. EXTERN(void) jinit_phuff_decoder JPP((j_decompress_ptr cinfo));
  325. EXTERN(void) jinit_inverse_dct JPP((j_decompress_ptr cinfo));
  326. EXTERN(void) jinit_upsampler JPP((j_decompress_ptr cinfo));
  327. EXTERN(void) jinit_color_deconverter JPP((j_decompress_ptr cinfo));
  328. EXTERN(void) jinit_1pass_quantizer JPP((j_decompress_ptr cinfo));
  329. EXTERN(void) jinit_2pass_quantizer JPP((j_decompress_ptr cinfo));
  330. EXTERN(void) jinit_merged_upsampler JPP((j_decompress_ptr cinfo));
  331. /* Memory manager initialization */
  332. EXTERN(void) jinit_memory_mgr JPP((j_common_ptr cinfo));
  333. /* Utility routines in jutils.c */
  334. EXTERN(long) jdiv_round_up JPP((long a, long b));
  335. EXTERN(long) jround_up JPP((long a, long b));
  336. EXTERN(void) jcopy_sample_rows JPP((JSAMPARRAY input_array, int source_row,
  337.     JSAMPARRAY output_array, int dest_row,
  338.     int num_rows, JDIMENSION num_cols));
  339. EXTERN(void) jcopy_block_row JPP((JBLOCKROW input_row, JBLOCKROW output_row,
  340.   JDIMENSION num_blocks));
  341. EXTERN(void) jzero_far JPP((void FAR * target, size_t bytestozero));
  342. /* Constant tables in jutils.c */
  343. extern const int jpeg_zigzag_order[]; /* natural coef order to zigzag order */
  344. extern const int jpeg_natural_order[]; /* zigzag coef order to natural order */
  345. /* Suppress undefined-structure complaints if necessary. */
  346. #ifdef INCOMPLETE_TYPES_BROKEN
  347. #ifndef AM_MEMORY_MANAGER /* only jmemmgr.c defines these */
  348. struct jvirt_sarray_control { long dummy; };
  349. struct jvirt_barray_control { long dummy; };
  350. #endif
  351. #endif /* INCOMPLETE_TYPES_BROKEN */