ijl.h
上传用户:sycq158
上传日期:2008-10-22
资源大小:15361k
文件大小:53k
源码类别:

游戏

开发平台:

Visual C++

  1. /*M*
  2. //
  3. //
  4. //               INTEL CORPORATION PROPRIETARY INFORMATION
  5. //  This software is supplied under the terms of a license agreement or
  6. //  nondisclosure agreement with Intel Corporation and may not be copied
  7. //  or disclosed except in accordance with the terms of that agreement.
  8. //        Copyright (c) 1998 Intel Corporation. All Rights Reserved.
  9. //
  10. //
  11. //  File:
  12. //    ijl.h
  13. //
  14. //  Purpose:
  15. //    IJL Common Header File
  16. //    This file contains:  definitions for data types, data
  17. //    structures, error codes, and function prototypes used
  18. //    in the Intel(R) JPEG Library (IJL).
  19. //
  20. //  Version:
  21. //    1.5
  22. //
  23. *M*/
  24. #ifndef __IJL_H__
  25. #define __IJL_H__
  26. #if defined( __cplusplus )
  27. extern "C" {
  28. #endif
  29. #ifndef IJL_ALL_WARNINGS
  30. #if _MSC_VER >= 1000
  31. /* nonstandard extension used : nameless struct/union          */
  32. #pragma warning(disable : 4201)
  33. /* nonstandard extension used : bit field types other than int */
  34. #pragma warning(disable : 4214)
  35. /* unreferenced inline function has been removed               */
  36. #pragma warning(disable : 4514)
  37. /* named type definition in parentheses                        */
  38. #pragma warning(disable : 4115)
  39. #endif /* _MSC_VER >= 1000 */
  40. #endif /* IJL_ALL_WARNINGS */
  41. #define IJL_STDCALL __stdcall
  42. /* align struct on 8 bytes boundary */
  43. #pragma pack (8)
  44. /* /////////////////////////////////////////////////////////////////////////
  45. // Macros/Constants */
  46. /* Size of file I/O buffer (4K). */
  47. #define JBUFSIZE    4096
  48. #define IJL_INT64  __int64
  49. #define IJL_UINT64 unsigned IJL_INT64
  50. #ifndef IJLAPI
  51.   #ifdef IJL_MSEXPORTS
  52.     #define IJLAPI(type,name,arg) 
  53.       extern __declspec(dllimport) type IJL_STDCALL name arg
  54.   #else
  55.     #define IJLAPI(type,name,arg) 
  56.       extern type IJL_STDCALL name arg
  57.   #endif
  58. #endif
  59. #define IJL_DIB_ALIGN (sizeof(int) - 1)
  60. #define IJL_DIB_UWIDTH(width,nchannels) 
  61.   ((width) * (nchannels))
  62. #define IJL_DIB_AWIDTH(width,nchannels) 
  63.   ( ((IJL_DIB_UWIDTH(width,nchannels) + IJL_DIB_ALIGN) & (~IJL_DIB_ALIGN)) )
  64. #define IJL_DIB_PAD_BYTES(width,nchannels) 
  65.   ( IJL_DIB_AWIDTH(width,nchannels) - IJL_DIB_UWIDTH(width,nchannels) )
  66. #define IJL_DIB_SCALE_SIZE(jpgsize,scale) 
  67.   ( ((jpgsize) + (scale) - 1) / (scale) )
  68. /*D*
  69. ////////////////////////////////////////////////////////////////////////////
  70. // Name:        IJLibVersion
  71. //
  72. // Purpose:     Stores library version info.
  73. //
  74. // Context:
  75. //
  76. // Example:
  77. //   major           - 1
  78. //   minor           - 0
  79. //   build           - 1
  80. //   Name            - "ijl10.dll"
  81. //   Version         - "1.0.1 Beta1"
  82. //   InternalVersion - "1.0.1.1"
  83. //   BuildDate       - "Sep 22 1998"
  84. //   CallConv        - "DLL"
  85. //
  86. ////////////////////////////////////////////////////////////////////////////
  87. *D*/
  88. typedef struct _IJLibVersion
  89. {
  90.   int         major;
  91.   int         minor;
  92.   int         build;
  93.   const char* Name;
  94.   const char* Version;
  95.   const char* InternalVersion;
  96.   const char* BuildDate;
  97.   const char* CallConv;
  98. } IJLibVersion;
  99. /*D*
  100. ////////////////////////////////////////////////////////////////////////////
  101. // Name:        IJL_RECT
  102. //
  103. // Purpose:     Keep coordinates for rectangle region of image
  104. //
  105. // Context:     Used to specify roi
  106. //
  107. // Fields:
  108. //
  109. ////////////////////////////////////////////////////////////////////////////
  110. *D*/
  111. typedef struct _IJL_RECT
  112. {
  113.   long  left;
  114.   long  top;
  115.   long  right;
  116.   long  bottom;
  117. } IJL_RECT;
  118. /*D*
  119. ////////////////////////////////////////////////////////////////////////////
  120. // Name:        IJL_HANDLE
  121. //
  122. // Purpose:     file handle
  123. //
  124. // Context:     used internally
  125. //
  126. // Fields:
  127. //
  128. ////////////////////////////////////////////////////////////////////////////
  129. *D*/
  130. typedef void* IJL_HANDLE;
  131. /*D*
  132. ////////////////////////////////////////////////////////////////////////////
  133. // Name:        IJLIOTYPE
  134. //
  135. // Purpose:     Possible types of data read/write/other operations to be
  136. //              performed by the functions IJL_Read and IJL_Write.
  137. //
  138. //              See the Developer's Guide for details on appropriate usage.
  139. //
  140. // Fields:
  141. //
  142. //  IJL_JFILE_XXXXXXX   Indicates JPEG data in a stdio file.
  143. //
  144. //  IJL_JBUFF_XXXXXXX   Indicates JPEG data in an addressable buffer.
  145. //
  146. ////////////////////////////////////////////////////////////////////////////
  147. *D*/
  148. typedef enum _IJLIOTYPE
  149. {
  150.   IJL_SETUP                   = -1,
  151.   /* Read JPEG parameters (i.e., height, width, channels, sampling, etc.) */
  152.   /* from a JPEG bit stream. */
  153.   IJL_JFILE_READPARAMS        =  0,
  154.   IJL_JBUFF_READPARAMS        =  1,
  155.   /* Read a JPEG Interchange Format image. */
  156.   IJL_JFILE_READWHOLEIMAGE    =  2,
  157.   IJL_JBUFF_READWHOLEIMAGE    =  3,
  158.   /* Read JPEG tables from a JPEG Abbreviated Format bit stream. */
  159.   IJL_JFILE_READHEADER        =  4,
  160.   IJL_JBUFF_READHEADER        =  5,
  161.   /* Read image info from a JPEG Abbreviated Format bit stream. */
  162.   IJL_JFILE_READENTROPY       =  6,
  163.   IJL_JBUFF_READENTROPY       =  7,
  164.   /* Write an entire JFIF bit stream. */
  165.   IJL_JFILE_WRITEWHOLEIMAGE   =  8,
  166.   IJL_JBUFF_WRITEWHOLEIMAGE   =  9,
  167.   /* Write a JPEG Abbreviated Format bit stream. */
  168.   IJL_JFILE_WRITEHEADER       = 10,
  169.   IJL_JBUFF_WRITEHEADER       = 11,
  170.   /* Write image info to a JPEG Abbreviated Format bit stream. */
  171.   IJL_JFILE_WRITEENTROPY      = 12,
  172.   IJL_JBUFF_WRITEENTROPY      = 13,
  173.   /* Scaled Decoding Options: */
  174.   /* Reads a JPEG image scaled to 1/2 size. */
  175.   IJL_JFILE_READONEHALF       = 14,
  176.   IJL_JBUFF_READONEHALF       = 15,
  177.   /* Reads a JPEG image scaled to 1/4 size. */
  178.   IJL_JFILE_READONEQUARTER    = 16,
  179.   IJL_JBUFF_READONEQUARTER    = 17,
  180.   /* Reads a JPEG image scaled to 1/8 size. */
  181.   IJL_JFILE_READONEEIGHTH     = 18,
  182.   IJL_JBUFF_READONEEIGHTH     = 19,
  183.   /* Reads an embedded thumbnail from a JFIF bit stream. */
  184.   IJL_JFILE_READTHUMBNAIL     = 20,
  185.   IJL_JBUFF_READTHUMBNAIL     = 21
  186. } IJLIOTYPE;
  187. /*D*
  188. ////////////////////////////////////////////////////////////////////////////
  189. // Name:        IJL_COLOR
  190. //
  191. // Purpose:     Possible color space formats.
  192. //
  193. //              Note these formats do *not* necessarily denote
  194. //              the number of channels in the color space.
  195. //              There exists separate "channel" fields in the
  196. //              JPEG_CORE_PROPERTIES data structure specifically
  197. //              for indicating the number of channels in the
  198. //              JPEG and/or DIB color spaces.
  199. //
  200. //              See the Developer's Guide for details on appropriate usage.
  201. //
  202. ////////////////////////////////////////////////////////////////////////////
  203. *D*/
  204. typedef enum _IJL_COLOR
  205. {
  206.   IJL_RGB         = 1,    /* Red-Green-Blue color space. */
  207.   IJL_BGR         = 2,    /* Reversed channel ordering from IJL_RGB. */
  208.   IJL_YCBCR       = 3,    /* Luminance-Chrominance color space as defined */
  209.                           /* by CCIR Recommendation 601. */
  210.   IJL_G           = 4,    /* Grayscale color space. */
  211.   IJL_RGBA_FPX    = 5,    /* FlashPix RGB 4 channel color space that */
  212.                           /* has pre-multiplied opacity. */
  213.   IJL_YCBCRA_FPX  = 6,    /* FlashPix YCbCr 4 channel color space that */
  214.                           /* has pre-multiplied opacity. */
  215.   IJL_OTHER       = 255   /* Some other color space not defined by the IJL. */
  216.                           /* (This means no color space conversion will */
  217.                           /* be done by the IJL.) */
  218. } IJL_COLOR;
  219. /*D*
  220. ////////////////////////////////////////////////////////////////////////////
  221. // Name:        IJL_JPGSUBSAMPLING
  222. //
  223. // Purpose:     Possible subsampling formats used in the JPEG.
  224. //
  225. //              See the Developer's Guide for details on appropriate usage.
  226. //
  227. ////////////////////////////////////////////////////////////////////////////
  228. *D*/
  229. typedef enum _IJL_JPGSUBSAMPLING
  230. {
  231.   IJL_NONE    = 0,    /* Corresponds to "No Subsampling". */
  232.                       /* Valid on a JPEG w/ any number of channels. */
  233.   IJL_411     = 1,    /* Valid on a JPEG w/ 3 channels. */
  234.   IJL_422     = 2,    /* Valid on a JPEG w/ 3 channels. */
  235.   IJL_4114    = 3,    /* Valid on a JPEG w/ 4 channels. */
  236.   IJL_4224    = 4     /* Valid on a JPEG w/ 4 channels. */
  237. } IJL_JPGSUBSAMPLING;
  238. /*D*
  239. ////////////////////////////////////////////////////////////////////////////
  240. // Name:        IJL_DIBSUBSAMPLING
  241. //
  242. // Purpose:     Possible subsampling formats used in the DIB.
  243. //
  244. //              See the Developer's Guide for details on appropriate usage.
  245. //
  246. ////////////////////////////////////////////////////////////////////////////
  247. *D*/
  248. typedef IJL_JPGSUBSAMPLING IJL_DIBSUBSAMPLING;
  249. /*D*
  250. ////////////////////////////////////////////////////////////////////////////
  251. // Name:        HUFFMAN_TABLE
  252. //
  253. // Purpose:     Stores Huffman table information in a fast-to-use format.
  254. //
  255. // Context:     Used by Huffman encoder/decoder to access Huffman table
  256. //              data.  Raw Huffman tables are formatted to fit this
  257. //              structure prior to use.
  258. //
  259. // Fields:
  260. //  huff_class  0 == DC Huffman or lossless table, 1 == AC table.
  261. //  ident       Huffman table identifier, 0-3 valid (Extended Baseline).
  262. //  huffelem    Huffman elements for codes <= 8 bits long;
  263. //              contains both zero run-length and symbol length in bits.
  264. //  huffval     Huffman values for codes 9-16 bits in length.
  265. //  mincode     Smallest Huffman code of length n.
  266. //  maxcode     Largest Huffman code of length n.
  267. //  valptr      Starting index into huffval[] for symbols of length k.
  268. //
  269. ////////////////////////////////////////////////////////////////////////////
  270. *D*/
  271. typedef struct _HUFFMAN_TABLE
  272. {
  273.   int             huff_class;
  274.   int             ident;
  275.   unsigned int    huffelem[256];
  276.   unsigned short  huffval[256];
  277.   unsigned short  mincode[17];
  278.   short           maxcode[18];
  279.   unsigned short  valptr[17];
  280. } HUFFMAN_TABLE;
  281. /*D*
  282. ////////////////////////////////////////////////////////////////////////////
  283. // Name:        JPEGHuffTable
  284. //
  285. // Purpose:     Stores pointers to JPEG-binary spec compliant
  286. //              Huffman table information.
  287. //
  288. // Context:     Used by interface and table methods to specify encoder
  289. //              tables to generate and store JPEG images.
  290. //
  291. // Fields:
  292. //  bits        Points to number of codes of length i (<=16 supported).
  293. //  vals        Value associated with each Huffman code.
  294. //  hclass      0 == DC table, 1 == AC table.
  295. //  ident       Specifies the identifier for this table.
  296. //              0-3 for extended JPEG compliance.
  297. //
  298. ////////////////////////////////////////////////////////////////////////////
  299. *D*/
  300. typedef struct _JPEGHuffTable
  301. {
  302.   unsigned char* bits;
  303.   unsigned char* vals;
  304.   unsigned char  hclass;
  305.   unsigned char  ident;
  306. } JPEGHuffTable;
  307. /*D*
  308. ////////////////////////////////////////////////////////////////////////////
  309. // Name:        QUANT_TABLE
  310. //
  311. // Purpose:     Stores quantization table information in a
  312. //              fast-to-use format.
  313. //
  314. // Context:     Used by quantizer/dequantizer to store formatted
  315. //              quantization tables.
  316. //
  317. // Fields:
  318. //  precision   0 => elements contains 8-bit elements,
  319. //              1 => elements contains 16-bit elements.
  320. //  ident       Table identifier (0-3).
  321. //  elements    Pointer to 64 table elements + 16 extra elements to catch
  322. //              input data errors that may cause malfunction of the
  323. //              Huffman decoder.
  324. //  elarray     Space for elements (see above) plus 8 bytes to align
  325. //              to a quadword boundary.
  326. //
  327. ////////////////////////////////////////////////////////////////////////////
  328. *D*/
  329. typedef struct _QUANT_TABLE
  330. {
  331.   int    precision;
  332.   int    ident;
  333.   short* elements;
  334.   short  elarray [84];
  335. } QUANT_TABLE;
  336. /*D*
  337. ////////////////////////////////////////////////////////////////////////////
  338. // Name:        JPEGQuantTable
  339. //
  340. // Purpose:     Stores pointers to JPEG binary spec compliant
  341. //              quantization table information.
  342. //
  343. // Context:     Used by interface and table methods to specify encoder
  344. //              tables to generate and store JPEG images.
  345. //
  346. // Fields:
  347. //  quantizer   Zig-zag order elements specifying quantization factors.
  348. //  ident       Specifies identifier for this table.
  349. //              0-3 valid for Extended Baseline JPEG compliance.
  350. //
  351. ////////////////////////////////////////////////////////////////////////////
  352. *D*/
  353. typedef struct _JPEGQuantTable
  354. {
  355.   unsigned char* quantizer;
  356.   unsigned char  ident;
  357. } JPEGQuantTable;
  358. /*D*
  359. ////////////////////////////////////////////////////////////////////////////
  360. // Name:        FRAME_COMPONENT
  361. //
  362. // Purpose:     One frame-component structure is allocated per component
  363. //              in a frame.
  364. //
  365. // Context:     Used by Huffman decoder to manage components.
  366. //
  367. // Fields:
  368. //  ident       Component identifier.  The tables use this ident to
  369. //              determine the correct table for each component.
  370. //  hsampling   Horizontal subsampling factor for this component,
  371. //              1-4 are legal.
  372. //  vsampling   Vertical subsampling factor for this component,
  373. //              1-4 are legal.
  374. //  quant_sel   Quantization table selector.  The quantization table
  375. //              used by this component is determined via this selector.
  376. //
  377. ////////////////////////////////////////////////////////////////////////////
  378. *D*/
  379. typedef struct _FRAME_COMPONENT
  380. {
  381.   int ident;
  382.   int hsampling;
  383.   int vsampling;
  384.   int quant_sel;
  385. } FRAME_COMPONENT;
  386. /*D*
  387. ////////////////////////////////////////////////////////////////////////////
  388. // Name:        FRAME
  389. //
  390. // Purpose:     Stores frame-specific data.
  391. //
  392. // Context:     One Frame structure per image.
  393. //
  394. // Fields:
  395. //  precision       Sample precision in bits.
  396. //  width           Width of the source image in pixels.
  397. //  height          Height of the source image in pixels.
  398. //  MCUheight       Height of a frame MCU.
  399. //  MCUwidth        Width of a frame MCU.
  400. //  max_hsampling   Max horiz sampling ratio of any component in the frame.
  401. //  max_vsampling   Max vert sampling ratio of any component in the frame.
  402. //  ncomps          Number of components/channels in the frame.
  403. //  horMCU          Number of horizontal MCUs in the frame.
  404. //  totalMCU        Total number of MCUs in the frame.
  405. //  comps           Array of 'ncomps' component descriptors.
  406. //  restart_interv  Indicates number of MCUs after which to restart the
  407. //                  entropy parameters.
  408. //  SeenAllDCScans  Used when decoding Multiscan images to determine if
  409. //                  all channels of an image have been decoded.
  410. //  SeenAllACScans  (See SeenAllDCScans)
  411. //
  412. ////////////////////////////////////////////////////////////////////////////
  413. *D*/
  414. typedef struct _FRAME
  415. {
  416.   int              precision;
  417.   int              width;
  418.   int              height;
  419.   int              MCUheight;
  420.   int              MCUwidth;
  421.   int              max_hsampling;
  422.   int              max_vsampling;
  423.   int              ncomps;
  424.   int              horMCU;
  425.   long             totalMCU;
  426.   FRAME_COMPONENT* comps;
  427.   int              restart_interv;
  428.   int              SeenAllDCScans;
  429.   int              SeenAllACScans;
  430. } FRAME;
  431. /*D*
  432. ////////////////////////////////////////////////////////////////////////////
  433. // Name:        SCAN_COMPONENT
  434. //
  435. // Purpose:     One scan-component structure is allocated per component
  436. //              of each scan in a frame.
  437. //
  438. // Context:     Used by Huffman decoder to manage components within scans.
  439. //
  440. // Fields:
  441. //  comp        Component number, index to the comps member of FRAME.
  442. //  hsampling   Horizontal sampling factor.
  443. //  vsampling   Vertical sampling factor.
  444. //  dc_table    DC Huffman table pointer for this scan.
  445. //  ac_table    AC Huffman table pointer for this scan.
  446. //  quant_table Quantization table pointer for this scan.
  447. //
  448. ////////////////////////////////////////////////////////////////////////////
  449. *D*/
  450. typedef struct _SCAN_COMPONENT
  451. {
  452.   int            comp;
  453.   int            hsampling;
  454.   int            vsampling;
  455.   HUFFMAN_TABLE* dc_table;
  456.   HUFFMAN_TABLE* ac_table;
  457.   QUANT_TABLE*   quant_table;
  458. } SCAN_COMPONENT;
  459. /*D*
  460. ////////////////////////////////////////////////////////////////////////////
  461. // Name:        SCAN
  462. //
  463. // Purpose:     One SCAN structure is allocated per scan in a frame.
  464. //
  465. // Context:     Used by Huffman decoder to manage scans.
  466. //
  467. // Fields:
  468. //  ncomps          Number of image components in a scan, 1-4 legal.
  469. //  gray_scale      If TRUE, decode only the Y channel.
  470. //  start_spec      Start coefficient of spectral or predictor selector.
  471. //  end_spec        End coefficient of spectral selector.
  472. //  approx_high     High bit position in successive approximation
  473. //                  Progressive coding.
  474. //  approx_low      Low bit position in successive approximation
  475. //                  Progressive coding.
  476. //  restart_interv  Restart interval, 0 if disabled.
  477. //  curxMCU         Next horizontal MCU index to be processed after
  478. //                  an interrupted SCAN.
  479. //  curyMCU         Next vertical MCU index to be processed after
  480. //                  an interrupted SCAN.
  481. //  dc_diff         Array of DC predictor values for DPCM modes.
  482. //  comps           Array of ncomps SCAN_COMPONENT component identifiers.
  483. //
  484. ////////////////////////////////////////////////////////////////////////////
  485. *D*/
  486. typedef struct _SCAN
  487. {
  488.   int             ncomps;
  489.   int             gray_scale;
  490.   int             start_spec;
  491.   int             end_spec;
  492.   int             approx_high;
  493.   int             approx_low;
  494.   unsigned int    restart_interv;
  495.   int             curxMCU;
  496.   int             curyMCU;
  497.   int             dc_diff[4];
  498.   SCAN_COMPONENT* comps;
  499. } SCAN;
  500. /*D*
  501. ////////////////////////////////////////////////////////////////////////////
  502. // Name:        DCTTYPE
  503. //
  504. // Purpose:     Possible algorithms to be used to perform the discrete
  505. //              cosine transform (DCT).
  506. //
  507. // Fields:
  508. //  IJL_AAN     The AAN (Arai, Agui, and Nakajima) algorithm from
  509. //              Trans. IEICE, vol. E 71(11), 1095-1097, Nov. 1988.
  510. //  IJL_IPP     The modified K. R. Rao and P. Yip algorithm from
  511. //              Intel Performance Primitives Library
  512. //
  513. ////////////////////////////////////////////////////////////////////////////
  514. *D*/
  515. typedef enum _DCTTYPE
  516. {
  517.   IJL_AAN = 0,
  518.   IJL_IPP = 1
  519. } DCTTYPE;
  520. /*D*
  521. ////////////////////////////////////////////////////////////////////////////
  522. // Name:        UPSAMPLING_TYPE
  523. //
  524. // Purpose:            -  Possible algorithms to be used to perform upsampling
  525. //
  526. // Fields:
  527. //  IJL_BOX_FILTER      - the algorithm is simple replication of the input pixel
  528. //                        onto the corresponding output pixels (box filter);
  529. //  IJL_TRIANGLE_FILTER - 3/4 * nearer pixel + 1/4 * further pixel in each
  530. //                        dimension
  531. ////////////////////////////////////////////////////////////////////////////
  532. *D*/
  533. typedef enum _UPSAMPLING_TYPE
  534. {
  535.   IJL_BOX_FILTER      = 0,
  536.   IJL_TRIANGLE_FILTER = 1
  537. } UPSAMPLING_TYPE;
  538. /*D*
  539. ////////////////////////////////////////////////////////////////////////////
  540. // Name:        SAMPLING_STATE
  541. //
  542. // Purpose:     Stores current conditions of sampling. Only for upsampling 
  543. //              with triangle filter is used now.
  544. //
  545. // Fields:
  546. //  top_row        - pointer to buffer with MCUs, that are located above than
  547. //                   current row of MCUs;
  548. //  cur_row        - pointer to buffer with current row of MCUs;
  549. //  bottom_row     - pointer to buffer with MCUs, that are located below than
  550. //                   current row of MCUs;
  551. //  last_row       - pointer to bottom boundary of last row of MCUs
  552. //  cur_row_number - number of row of MCUs, that is decoding;
  553. //  user_interrupt - field to store jprops->interrupt, because of we prohibit 
  554. //                   interrupts while top row of MCUs is upsampling.
  555. ////////////////////////////////////////////////////////////////////////////
  556. *D*/
  557. typedef struct _SAMPLING_STATE
  558. {
  559.   short* top_row;
  560.   short* cur_row;
  561.   short* bottom_row;
  562.   short* last_row;
  563.   int    cur_row_number;
  564. } SAMPLING_STATE;
  565. /*D*
  566. ////////////////////////////////////////////////////////////////////////////
  567. // Name:        PROCESSOR_TYPE
  568. //
  569. // Purpose:     Possible types of processors.
  570. //              Note that the enums are defined in ascending order
  571. //              depending upon their various IA32 instruction support.
  572. //
  573. // Fields:
  574. //
  575. // IJL_OTHER_PROC
  576. //      Does not support the CPUID instruction and
  577. //      assumes no Pentium(R) processor instructions.
  578. //
  579. // IJL_PENTIUM_PROC
  580. //      Corresponds to an Intel(R) Pentium(R) processor
  581. //      (or a 100% compatible) that supports the
  582. //      Pentium(R) processor instructions.
  583. //
  584. // IJL_PENTIUM_PRO_PROC
  585. //      Corresponds to an Intel(R) Pentium(R) Pro processor
  586. //      (or a 100% compatible) that supports the
  587. //      Pentium(R) Pro processor instructions.
  588. //
  589. // IJL_PENTIUM_PROC_MMX_TECH
  590. //      Corresponds to an Intel(R) Pentium(R) processor
  591. //      with MMX(TM) technology (or a 100% compatible)
  592. //      that supports the MMX(TM) instructions.
  593. //
  594. // IJL_PENTIUM_II_PROC
  595. //      Corresponds to an Intel(R) Pentium(R) II processor
  596. //      (or a 100% compatible) that supports both the
  597. //      Pentium(R) Pro processor instructions and the
  598. //      MMX(TM) instructions.
  599. //
  600. // IJL_PENTIUM_III_PROC
  601. //      Corresponds to an Intel(R) Pentium(R) III processor
  602. //
  603. // IJL_NEW_PROCESSOR
  604. //      Correponds to new processor
  605. //
  606. //  Any additional processor types that support a superset
  607. //  of both the Pentium(R) Pro processor instructions and the
  608. //  MMX(TM) instructions should be given an enum value greater
  609. //  than IJL_PENTIUM_III_PROC.
  610. //
  611. ////////////////////////////////////////////////////////////////////////////
  612. *D*/
  613. typedef enum _PROCESSOR_TYPE
  614. {
  615.   IJL_OTHER_PROC            = 0,
  616.   IJL_PENTIUM_PROC          = 1,
  617.   IJL_PENTIUM_PRO_PROC      = 2,
  618.   IJL_PENTIUM_PROC_MMX_TECH = 3,
  619.   IJL_PENTIUM_II_PROC       = 4,
  620.   IJL_PENTIUM_III_PROC      = 5,
  621.   IJL_PENTIUM_4_PROC        = 6,
  622.   IJL_NEW_PROCESSOR         = 7
  623. } PROCESSOR_TYPE;
  624. /*D*
  625. ////////////////////////////////////////////////////////////////////////////
  626. // Name:        RAW_DATA_TYPES_STATE
  627. //
  628. // Purpose:     Stores data types: raw dct coefficients or raw sampled data.
  629. //              Pointer to structure in JPEG_PROPERTIES is NULL, if any raw
  630. //              data isn't request (DIBBytes!=NULL).
  631. //
  632. // Fields:
  633. //  short* raw_ptrs[4] - pointers to buffers with raw data; one pointer 
  634. //                       corresponds one JPG component;
  635. //  data_type          - 0 - raw dct coefficients, 1 - raw sampled data.
  636. ////////////////////////////////////////////////////////////////////////////
  637. *D*/
  638. typedef struct _RAW_DATA_TYPES_STATE
  639. {
  640.   int data_type;
  641.   unsigned short* raw_ptrs[4];
  642. } RAW_DATA_TYPES_STATE;
  643. /*D*
  644. ////////////////////////////////////////////////////////////////////////////
  645. // Name:        ENTROPYSTRUCT
  646. //
  647. // Purpose:     Stores the decoder state information necessary to "jump"
  648. //              to a particular MCU row in a compressed entropy stream.
  649. //
  650. // Context:     Used to persist the decoder state within Decode_Scan when
  651. //              decoding using ROIs.
  652. //
  653. // Fields:
  654. //      offset              Offset (in bytes) into the entropy stream
  655. //                          from the beginning.
  656. //      dcval1              DC val at the beginning of the MCU row
  657. //                          for component 1.
  658. //      dcval2              DC val at the beginning of the MCU row
  659. //                          for component 2.
  660. //      dcval3              DC val at the beginning of the MCU row
  661. //                          for component 3.
  662. //      dcval4              DC val at the beginning of the MCU row
  663. //                          for component 4.
  664. //      bit_buffer_64       64-bit Huffman bit buffer.  Stores current
  665. //                          bit buffer at the start of a MCU row.
  666. //                          Also used as a 32-bit buffer on 32-bit
  667. //                          architectures.
  668. //      bitbuf_bits_valid   Number of valid bits in the above bit buffer.
  669. //      unread_marker       Have any markers been decoded but not
  670. //                          processed at the beginning of a MCU row?
  671. //                          This entry holds the unprocessed marker, or
  672. //                          0 if none.
  673. //
  674. ////////////////////////////////////////////////////////////////////////////
  675. *D*/
  676. typedef struct _ENTROPYSTRUCT
  677. {
  678.   unsigned int   offset;
  679.   int            dcval1;
  680.   int            dcval2;
  681.   int            dcval3;
  682.   int            dcval4;
  683.   IJL_UINT64     bit_buffer_64;
  684.   int            bitbuf_bits_valid;
  685.   unsigned char  unread_marker;
  686. } ENTROPYSTRUCT;
  687. /*D*
  688. ////////////////////////////////////////////////////////////////////////////
  689. // Name:        STATE
  690. //
  691. // Purpose:     Stores the active state of the IJL.
  692. //
  693. // Context:     Used by all low-level routines to store pseudo-global or
  694. //              state variables.
  695. //
  696. // Fields:
  697. //      bit_buffer_64           64-bit bitbuffer utilized by Huffman
  698. //                              encoder/decoder algorithms utilizing routines
  699. //                              designed for MMX(TM) technology.
  700. //      bit_buffer_32           32-bit bitbuffer for all other Huffman
  701. //                              encoder/decoder algorithms.
  702. //      bitbuf_bits_valid       Number of bits in the above two fields that
  703. //                              are valid.
  704. //
  705. //      cur_entropy_ptr         Current position (absolute address) in
  706. //                              the entropy buffer.
  707. //      start_entropy_ptr       Starting position (absolute address) of
  708. //                              the entropy buffer.
  709. //      end_entropy_ptr         Ending position (absolute address) of
  710. //                              the entropy buffer.
  711. //      entropy_bytes_processed Number of bytes actually processed
  712. //                              (passed over) in the entropy buffer.
  713. //      entropy_buf_maxsize     Max size of the entropy buffer.
  714. //      entropy_bytes_left      Number of bytes left in the entropy buffer.
  715. //      Prog_EndOfBlock_Run     Progressive block run counter.
  716. //
  717. //      DIB_ptr                 Temporary offset into the input/output DIB.
  718. //
  719. //      unread_marker           If a marker has been read but not processed,
  720. //                              stick it in this field.
  721. //      processor_type          (0, 1, or 2) == current processor does not
  722. //                              support MMX(TM) instructions.
  723. //                              (3 or 4) == current processor does
  724. //                              support MMX(TM) instructions.
  725. //      cur_scan_comp           On which component of the scan are we working?
  726. //      file                    Process file handle, or
  727. //                              0x00000000 if no file is defined.
  728. //      JPGBuffer               Entropy buffer (~4K).
  729. //
  730. //
  731. ////////////////////////////////////////////////////////////////////////////
  732. *D*/
  733. typedef struct _STATE
  734. {
  735.   /* Bit buffer. */
  736.   IJL_UINT64     bit_buffer_64;
  737.   unsigned int   bit_buffer_32;
  738.   int            bitbuf_bits_valid;
  739.   /* Entropy. */
  740.   unsigned char* cur_entropy_ptr;
  741.   unsigned char* start_entropy_ptr;
  742.   unsigned char* end_entropy_ptr;
  743.   int            entropy_bytes_processed;
  744.   int            entropy_buf_maxsize;
  745.   int            entropy_bytes_left;
  746.   int            Prog_EndOfBlock_Run;
  747.   /* Input or output DIB. */
  748.   unsigned char* DIB_ptr;
  749.   /* Control. */
  750.   unsigned char  unread_marker;
  751.   PROCESSOR_TYPE processor_type;
  752.   int            cur_scan_comp;
  753.   IJL_HANDLE     file;
  754.   unsigned char  JPGBuffer [JBUFSIZE];
  755. } STATE;
  756. /*D*
  757. ////////////////////////////////////////////////////////////////////////////
  758. // Name:        FAST_MCU_PROCESSING_TYPE
  759. //
  760. // Purpose:     Advanced Control Option.  Do NOT modify.
  761. //              WARNING:  Used for internal reference only.
  762. //
  763. // Fields:
  764. //
  765. //   IJL_(sampling)_(JPEG color space)_(sampling)_(DIB color space)
  766. //      Decode is read left to right w/ upsampling.
  767. //      Encode is read right to left w/ subsampling.
  768. //
  769. ////////////////////////////////////////////////////////////////////////////
  770. *D*/
  771. typedef enum _FAST_MCU_PROCESSING_TYPE
  772. {
  773.   IJL_NO_CC_OR_US                   = 0,
  774.   IJL_111_YCBCR_111_RGB             = 1,
  775.   IJL_111_YCBCR_111_BGR             = 2,
  776.   IJL_411_YCBCR_111_RGB             = 3,
  777.   IJL_411_YCBCR_111_BGR             = 4,
  778.   IJL_422_YCBCR_111_RGB             = 5,
  779.   IJL_422_YCBCR_111_BGR             = 6,
  780.   IJL_111_YCBCR_1111_RGBA_FPX       = 7,
  781.   IJL_411_YCBCR_1111_RGBA_FPX       = 8,
  782.   IJL_422_YCBCR_1111_RGBA_FPX       = 9,
  783.   IJL_1111_YCBCRA_FPX_1111_RGBA_FPX = 10,
  784.   IJL_4114_YCBCRA_FPX_1111_RGBA_FPX = 11,
  785.   IJL_4224_YCBCRA_FPX_1111_RGBA_FPX = 12,
  786.   IJL_111_RGB_1111_RGBA_FPX         = 13,
  787.   IJL_1111_RGBA_FPX_1111_RGBA_FPX   = 14,
  788.   IJL_111_OTHER_111_OTHER           = 15,
  789.   IJL_411_OTHER_111_OTHER           = 16,
  790.   IJL_422_OTHER_111_OTHER           = 17,
  791.   IJL_YCBYCR_YCBCR                  = 18,
  792.   IJL_YCBCR_YCBYCR                  = 19   // decoding to YCbCr 422 format
  793. } FAST_MCU_PROCESSING_TYPE;
  794. /*D*
  795. ////////////////////////////////////////////////////////////////////////////
  796. // Name:        JPEG_PROPERTIES
  797. //
  798. // Purpose:     Stores low-level and control information.  It is used by
  799. //              both the encoder and decoder.  An advanced external user
  800. //              may access this structure to expand the interface
  801. //              capability.
  802. //
  803. //              See the Developer's Guide for an expanded description
  804. //              of this structure and its use.
  805. //
  806. // Context:     Used by all interface methods and most IJL routines.
  807. //
  808. // Fields:
  809. //
  810. //  iotype              IN:     Specifies type of data operation
  811. //                              (read/write/other) to be
  812. //                              performed by IJL_Read or IJL_Write.
  813. //  roi                 IN:     Rectangle-Of-Interest to read from, or
  814. //                              write to, in pixels.
  815. //  dcttype             IN:     DCT alogrithm to be used.
  816. //  fast_processing     OUT:    Supported fast pre/post-processing path.
  817. //                              This is set by the IJL.
  818. //  interrupt           IN:     Signals an interrupt has been requested.
  819. //
  820. //  DIBBytes            IN:     Pointer to buffer of uncompressed data.
  821. //  DIBWidth            IN:     Width of uncompressed data.
  822. //  DIBHeight           IN:     Height of uncompressed data.
  823. //  DIBPadBytes         IN:     Padding (in bytes) at end of each
  824. //                              row in the uncompressed data.
  825. //  DIBChannels         IN:     Number of components in the
  826. //                              uncompressed data.
  827. //  DIBColor            IN:     Color space of uncompressed data.
  828. //  DIBSubsampling      IN:     Required to be IJL_NONE or IJL_422.
  829. //  DIBLineBytes        OUT:    Number of bytes in an output DIB line
  830. //                              including padding.
  831. //
  832. //  JPGFile             IN:     Pointer to file based JPEG.
  833. //  JPGBytes            IN:     Pointer to buffer based JPEG.
  834. //  JPGSizeBytes        IN:     Max buffer size. Used with JPGBytes.
  835. //                      OUT:    Number of compressed bytes written.
  836. //  JPGWidth            IN:     Width of JPEG image.
  837. //                      OUT:    After reading (except READHEADER).
  838. //  JPGHeight           IN:     Height of JPEG image.
  839. //                      OUT:    After reading (except READHEADER).
  840. //  JPGChannels         IN:     Number of components in JPEG image.
  841. //                      OUT:    After reading (except READHEADER).
  842. //  JPGColor            IN:     Color space of JPEG image.
  843. //  JPGSubsampling      IN:     Subsampling of JPEG image.
  844. //                      OUT:    After reading (except READHEADER).
  845. //  JPGThumbWidth       OUT:    JFIF embedded thumbnail width [0-255].
  846. //  JPGThumbHeight      OUT:    JFIF embedded thumbnail height [0-255].
  847. //
  848. //  cconversion_reqd    OUT:    If color conversion done on decode, TRUE.
  849. //  upsampling_reqd     OUT:    If upsampling done on decode, TRUE.
  850. //  jquality            IN:     [0-100] where highest quality is 100.
  851. //  jinterleaveType     IN/OUT: 0 => MCU interleaved file, and
  852. //                              1 => 1 scan per component.
  853. //  numxMCUs            OUT:    Number of MCUs in the x direction.
  854. //  numyMCUs            OUT:    Number of MCUs in the y direction.
  855. //
  856. //  nqtables            IN/OUT: Number of quantization tables.
  857. //  maxquantindex       IN/OUT: Maximum index of quantization tables.
  858. //  nhuffActables       IN/OUT: Number of AC Huffman tables.
  859. //  nhuffDctables       IN/OUT: Number of DC Huffman tables.
  860. //  maxhuffindex        IN/OUT: Maximum index of Huffman tables.
  861. //  jFmtQuant           IN/OUT: Formatted quantization table info.
  862. //  jFmtAcHuffman       IN/OUT: Formatted AC Huffman table info.
  863. //  jFmtDcHuffman       IN/OUT: Formatted DC Huffman table info.
  864. //
  865. //  jEncFmtQuant        IN/OUT: Pointer to one of the above, or
  866. //                              to externally persisted table.
  867. //  jEncFmtAcHuffman    IN/OUT: Pointer to one of the above, or
  868. //                              to externally persisted table.
  869. //  jEncFmtDcHuffman    IN/OUT: Pointer to one of the above, or
  870. //                              to externally persisted table.
  871. //
  872. //  use_default_qtables IN:     Set to default quantization tables.
  873. //                              Clear to supply your own.
  874. //  use_default_htables IN:     Set to default Huffman tables.
  875. //                              Clear to supply your own.
  876. //  rawquanttables      IN:     Up to 4 sets of quantization tables.
  877. //  rawhufftables       IN:     Alternating pairs (DC/AC) of up to 4
  878. //                              sets of raw Huffman tables.
  879. //  HuffIdentifierAC    IN:     Indicates what channel the user-
  880. //                              supplied Huffman AC tables apply to.
  881. //  HuffIdentifierDC    IN:     Indicates what channel the user-
  882. //                              supplied Huffman DC tables apply to.
  883. //
  884. //  jframe              OUT:    Structure with frame-specific info.
  885. //  needframe           OUT:    TRUE when a frame has been detected.
  886. //
  887. //  jscan               Persistence for current scan pointer when
  888. //                      interrupted.
  889. //
  890. //  state               OUT:    Contains info on the state of the IJL.
  891. //  SawAdobeMarker      OUT:    Decoder saw an APP14 marker somewhere.
  892. //  AdobeXform          OUT:    If SawAdobeMarker TRUE, this indicates
  893. //                              the JPEG color space given by that marker.
  894. //
  895. //  rowoffsets          Persistence for the decoder MCU row origins
  896. //                      when decoding by ROI.  Offsets (in bytes
  897. //                      from the beginning of the entropy data)
  898. //                      to the start of each of the decoded rows.
  899. //                      Fill the offsets with -1 if they have not
  900. //                      been initalized and NULL could be the
  901. //                      offset to the first row.
  902. //
  903. //  MCUBuf              OUT:    Quadword aligned internal buffer.
  904. //                              Big enough for the largest MCU
  905. //                              (10 blocks) with extra room for
  906. //                              additional operations.
  907. //  tMCUBuf             OUT:    Version of above, without alignment.
  908. //
  909. //  processor_type      OUT:    Determines type of processor found
  910. //                              during initialization.
  911. //
  912. //  raw_coefs           IN:     Place to hold pointers to raw data buffers or
  913. //                              raw DCT coefficients buffers
  914. //
  915. //  progressive_found   OUT:    1 when progressive image detected.
  916. //  coef_buffer         IN:     Pointer to a larger buffer containing
  917. //                              frequency coefficients when they
  918. //                              cannot be decoded dynamically
  919. //                              (i.e., as in progressive decoding).
  920. //
  921. //  upsampling_type     IN:     Type of sampling:
  922. //                              IJL_BOX_FILTER or IJL_TRIANGLE_FILTER.
  923. //  SAMPLING_STATE*    OUT:     pointer to structure, describing current
  924. //                              condition of upsampling
  925. //
  926. //  AdobeVersion       OUT      version field, if Adobe APP14 marker detected
  927. //  AdobeFlags0        OUT      flags0 field, if Adobe APP14 marker detected
  928. //  AdobeFlags1        OUT      flags1 field, if Adobe APP14 marker detected
  929. //
  930. //  jfif_app0_detected OUT:     1 - if JFIF APP0 marker detected,  
  931. //                              0 - if not
  932. //  jfif_app0_version  IN/OUT   The JFIF file version
  933. //  jfif_app0_units    IN/OUT   units for the X and Y densities
  934. //                              0 - no units, X and Y specify
  935. //                                  the pixel aspect ratio
  936. //                              1 - X and Y are dots per inch
  937. //                              2 - X and Y are dots per cm
  938. //  jfif_app0_Xdensity IN/OUT   horizontal pixel density
  939. //  jfif_app0_Ydensity IN/OUT   vertical pixel density
  940. //
  941. //  jpeg_comment       IN       pointer to JPEG comments
  942. //  jpeg_comment_size  IN/OUT   size of JPEG comments, in bytes
  943. //
  944. //  raw_coefs          IN/OUT   if !NULL, then pointer to vector of pointers
  945. //                              (size = JPGChannels) to buffers for raw (short)
  946. //                              dct coefficients. 1 pointer corresponds to one
  947. //                              component;
  948. //
  949. ////////////////////////////////////////////////////////////////////////////
  950. *D*/
  951. typedef struct _JPEG_PROPERTIES
  952. {
  953.   /* Compression/Decompression control. */
  954.   IJLIOTYPE                iotype;               /* default = IJL_SETUP */
  955.   IJL_RECT                 roi;                  /* default = 0 */
  956.   DCTTYPE                  dcttype;              /* default = IJL_AAN */
  957.   FAST_MCU_PROCESSING_TYPE fast_processing;      /* default = IJL_NO_CC_OR_US */
  958.   int                      interrupt;            /* default = FALSE */
  959.   /* DIB specific I/O data specifiers. */
  960.   unsigned char*           DIBBytes;             /* default = NULL */
  961.   int                      DIBWidth;             /* default = 0 */
  962.   int                      DIBHeight;            /* default = 0 */
  963.   int                      DIBPadBytes;          /* default = 0 */
  964.   int                      DIBChannels;          /* default = 3 */
  965.   IJL_COLOR                DIBColor;             /* default = IJL_BGR */
  966.   IJL_DIBSUBSAMPLING       DIBSubsampling;       /* default = IJL_NONE */
  967.   int                      DIBLineBytes;         /* default = 0 */
  968.   /* JPEG specific I/O data specifiers. */
  969.   const char*              JPGFile;              /* default = NULL */
  970.   unsigned char*           JPGBytes;             /* default = NULL */
  971.   int                      JPGSizeBytes;         /* default = 0 */
  972.   int                      JPGWidth;             /* default = 0 */
  973.   int                      JPGHeight;            /* default = 0 */
  974.   int                      JPGChannels;          /* default = 3 */
  975.   IJL_COLOR                JPGColor;             /* default = IJL_YCBCR */
  976.   IJL_JPGSUBSAMPLING       JPGSubsampling;       /* default = IJL_411 */
  977.   int                      JPGThumbWidth;        /* default = 0 */
  978.   int                      JPGThumbHeight;       /* default = 0 */
  979.   /* JPEG conversion properties. */
  980.   int                      cconversion_reqd;     /* default = TRUE */
  981.   int                      upsampling_reqd;      /* default = TRUE */
  982.   int                      jquality;             /* default = 75 */
  983.   int                      jinterleaveType;      /* default = 0 */
  984.   int                      numxMCUs;             /* default = 0 */
  985.   int                      numyMCUs;             /* default = 0 */
  986.   /* Tables. */
  987.   int                      nqtables;
  988.   int                      maxquantindex;
  989.   int                      nhuffActables;
  990.   int                      nhuffDctables;
  991.   int                      maxhuffindex;
  992.   QUANT_TABLE              jFmtQuant[4];
  993.   HUFFMAN_TABLE            jFmtAcHuffman[4];
  994.   HUFFMAN_TABLE            jFmtDcHuffman[4];
  995.   short*                   jEncFmtQuant[4];
  996.   HUFFMAN_TABLE*           jEncFmtAcHuffman[4];
  997.   HUFFMAN_TABLE*           jEncFmtDcHuffman[4];
  998.   /* Allow user-defined tables. */
  999.   int                      use_external_qtables;
  1000.   int                      use_external_htables;
  1001.   JPEGQuantTable           rawquanttables[4];
  1002.   JPEGHuffTable            rawhufftables[8];
  1003.   char                     HuffIdentifierAC[4];
  1004.   char                     HuffIdentifierDC[4];
  1005.   /* Frame specific members. */
  1006.   FRAME                    jframe;
  1007.   int                      needframe;
  1008.   /* SCAN persistent members. */
  1009.   SCAN*                    jscan;
  1010.   /* State members. */
  1011.   STATE                    state;
  1012.   int                      SawAdobeMarker;
  1013.   int                      AdobeXform;
  1014.   /* ROI decoder members. */
  1015.   ENTROPYSTRUCT*           rowoffsets;
  1016.   /* Intermediate buffers. */
  1017.   unsigned char*           MCUBuf;
  1018.   unsigned char            tMCUBuf[720*2];
  1019.   /* Processor detected. */
  1020.   PROCESSOR_TYPE           processor_type;
  1021.   RAW_DATA_TYPES_STATE*    raw_coefs;
  1022.   /* Progressive mode members. */
  1023.   int                      progressive_found;
  1024.   short*                   coef_buffer;
  1025.   /* Upsampling mode members. */
  1026.   UPSAMPLING_TYPE          upsampling_type;
  1027.   SAMPLING_STATE*          sampling_state_ptr;
  1028.   /* Adobe APP14 segment variables */
  1029.   unsigned short           AdobeVersion;         /* default = 100 */
  1030.   unsigned short           AdobeFlags0;          /* default = 0 */
  1031.   unsigned short           AdobeFlags1;          /* default = 0 */
  1032.   /* JFIF APP0 segment variables */
  1033.   int                      jfif_app0_detected;
  1034.   unsigned short           jfif_app0_version;    /* default = 0x0101 */
  1035.   unsigned char            jfif_app0_units;      /* default = 0 - pixel */
  1036.   unsigned short           jfif_app0_Xdensity;   /* default = 1 */
  1037.   unsigned short           jfif_app0_Ydensity;   /* default = 1 */
  1038.   /* comments related fields */
  1039.   char*                    jpeg_comment;         /* default = NULL */
  1040.   unsigned short           jpeg_comment_size;    /* default = 0 */
  1041. } JPEG_PROPERTIES;
  1042. /*D*
  1043. ////////////////////////////////////////////////////////////////////////////
  1044. // Name:        JPEG_CORE_PROPERTIES
  1045. //
  1046. // Purpose:     This is the primary data structure between the IJL and
  1047. //              the external user.  It stores JPEG state information
  1048. //              and controls the IJL.  It is user-modifiable.
  1049. //
  1050. //              See the Developer's Guide for details on appropriate usage.
  1051. //
  1052. // Context:     Used by all low-level IJL routines to store
  1053. //              pseudo-global information.
  1054. //
  1055. // Fields:
  1056. //
  1057. //  UseJPEGPROPERTIES   Set this flag != 0 if you wish to override
  1058. //                      the JPEG_CORE_PROPERTIES "IN" parameters with
  1059. //                      the JPEG_PROPERTIES parameters.
  1060. //
  1061. //  DIBBytes            IN:     Pointer to buffer of uncompressed data.
  1062. //  DIBWidth            IN:     Width of uncompressed data.
  1063. //  DIBHeight           IN:     Height of uncompressed data.
  1064. //  DIBPadBytes         IN:     Padding (in bytes) at end of each
  1065. //                              row in the uncompressed data.
  1066. //  DIBChannels         IN:     Number of components in the
  1067. //                              uncompressed data.
  1068. //  DIBColor            IN:     Color space of uncompressed data.
  1069. //  DIBSubsampling      IN:     Required to be IJL_NONE or IJL_422.
  1070. //
  1071. //  JPGFile             IN:     Pointer to file based JPEG.
  1072. //  JPGBytes            IN:     Pointer to buffer based JPEG.
  1073. //  JPGSizeBytes        IN:     Max buffer size. Used with JPGBytes.
  1074. //                      OUT:    Number of compressed bytes written.
  1075. //  JPGWidth            IN:     Width of JPEG image.
  1076. //                      OUT:    After reading (except READHEADER).
  1077. //  JPGHeight           IN:     Height of JPEG image.
  1078. //                      OUT:    After reading (except READHEADER).
  1079. //  JPGChannels         IN:     Number of components in JPEG image.
  1080. //                      OUT:    After reading (except READHEADER).
  1081. //  JPGColor            IN:     Color space of JPEG image.
  1082. //  JPGSubsampling      IN:     Subsampling of JPEG image.
  1083. //                      OUT:    After reading (except READHEADER).
  1084. //  JPGThumbWidth       OUT:    JFIF embedded thumbnail width [0-255].
  1085. //  JPGThumbHeight      OUT:    JFIF embedded thumbnail height [0-255].
  1086. //
  1087. //  cconversion_reqd    OUT:    If color conversion done on decode, TRUE.
  1088. //  upsampling_reqd     OUT:    If upsampling done on decode, TRUE.
  1089. //  jquality            IN:     [0-100] where highest quality is 100.
  1090. //
  1091. //  jprops              "Low-Level" IJL data structure.
  1092. //
  1093. ////////////////////////////////////////////////////////////////////////////
  1094. *D*/
  1095. typedef struct _JPEG_CORE_PROPERTIES
  1096. {
  1097.   int                UseJPEGPROPERTIES;         /* default = 0 */
  1098.   /* DIB specific I/O data specifiers. */
  1099.   unsigned char*     DIBBytes;                  /* default = NULL */
  1100.   int                DIBWidth;                  /* default = 0 */
  1101.   int                DIBHeight;                 /* default = 0 */
  1102.   int                DIBPadBytes;               /* default = 0 */
  1103.   int                DIBChannels;               /* default = 3 */
  1104.   IJL_COLOR          DIBColor;                  /* default = IJL_BGR */
  1105.   IJL_DIBSUBSAMPLING DIBSubsampling;            /* default = IJL_NONE */
  1106.   /* JPEG specific I/O data specifiers. */
  1107.   const char*        JPGFile;                   /* default = NULL */
  1108.   unsigned char*     JPGBytes;                  /* default = NULL */
  1109.   int                JPGSizeBytes;              /* default = 0 */
  1110.   int                JPGWidth;                  /* default = 0 */
  1111.   int                JPGHeight;                 /* default = 0 */
  1112.   int                JPGChannels;               /* default = 3 */
  1113.   IJL_COLOR          JPGColor;                  /* default = IJL_YCBCR */
  1114.   IJL_JPGSUBSAMPLING JPGSubsampling;            /* default = IJL_411 */
  1115.   int                JPGThumbWidth;             /* default = 0 */
  1116.   int                JPGThumbHeight;            /* default = 0 */
  1117.   /* JPEG conversion properties. */
  1118.   int                cconversion_reqd;          /* default = TRUE */
  1119.   int                upsampling_reqd;           /* default = TRUE */
  1120.   int                jquality;                  /* default = 75 */
  1121.   /* Low-level properties. */
  1122.   JPEG_PROPERTIES    jprops;
  1123. } JPEG_CORE_PROPERTIES;
  1124. /*D*
  1125. ////////////////////////////////////////////////////////////////////////////
  1126. // Name:        IJLERR
  1127. //
  1128. // Purpose:     Listing of possible "error" codes returned by the IJL.
  1129. //
  1130. //              See the Developer's Guide for details on appropriate usage.
  1131. //
  1132. // Context:     Used for error checking.
  1133. //
  1134. ////////////////////////////////////////////////////////////////////////////
  1135. *D*/
  1136. typedef enum _IJLERR
  1137. {
  1138.   /* The following "error" values indicate an "OK" condition. */
  1139.   IJL_OK                          = 0,
  1140.   IJL_INTERRUPT_OK                = 1,
  1141.   IJL_ROI_OK                      = 2,
  1142.   /* The following "error" values indicate an error has occurred. */
  1143.   IJL_EXCEPTION_DETECTED          =  -1,
  1144.   IJL_INVALID_ENCODER             =  -2,
  1145.   IJL_UNSUPPORTED_SUBSAMPLING     =  -3,
  1146.   IJL_UNSUPPORTED_BYTES_PER_PIXEL =  -4,
  1147.   IJL_MEMORY_ERROR                =  -5,
  1148.   IJL_BAD_HUFFMAN_TABLE           =  -6,
  1149.   IJL_BAD_QUANT_TABLE             =  -7,
  1150.   IJL_INVALID_JPEG_PROPERTIES     =  -8,
  1151.   IJL_ERR_FILECLOSE               =  -9,
  1152.   IJL_INVALID_FILENAME            = -10,
  1153.   IJL_ERROR_EOF                   = -11,
  1154.   IJL_PROG_NOT_SUPPORTED          = -12,
  1155.   IJL_ERR_NOT_JPEG                = -13,
  1156.   IJL_ERR_COMP                    = -14,
  1157.   IJL_ERR_SOF                     = -15,
  1158.   IJL_ERR_DNL                     = -16,
  1159.   IJL_ERR_NO_HUF                  = -17,
  1160.   IJL_ERR_NO_QUAN                 = -18,
  1161.   IJL_ERR_NO_FRAME                = -19,
  1162.   IJL_ERR_MULT_FRAME              = -20,
  1163.   IJL_ERR_DATA                    = -21,
  1164.   IJL_ERR_NO_IMAGE                = -22,
  1165.   IJL_FILE_ERROR                  = -23,
  1166.   IJL_INTERNAL_ERROR              = -24,
  1167.   IJL_BAD_RST_MARKER              = -25,
  1168.   IJL_THUMBNAIL_DIB_TOO_SMALL     = -26,
  1169.   IJL_THUMBNAIL_DIB_WRONG_COLOR   = -27,
  1170.   IJL_BUFFER_TOO_SMALL            = -28,
  1171.   IJL_UNSUPPORTED_FRAME           = -29,
  1172.   IJL_ERR_COM_BUFFER              = -30,
  1173.   IJL_RESERVED                    = -99
  1174. } IJLERR;
  1175. /* /////////////////////////////////////////////////////////////////////////
  1176. //                     Function Prototypes (API Calls)                    //
  1177. ///////////////////////////////////////////////////////////////////////// */
  1178. /*F*
  1179. ////////////////////////////////////////////////////////////////////////////
  1180. // Name:        ijlInit
  1181. //
  1182. // Purpose:     Used to initalize the IJL.
  1183. //
  1184. //              See the Developer's Guide for details on appropriate usage.
  1185. //
  1186. // Context:     Always call this before anything else.
  1187. //              Also, only call this with a new jcprops structure, or
  1188. //              after calling IJL_Free.  Otherwise, dynamically
  1189. //              allocated memory may be leaked.
  1190. //
  1191. // Returns:     Any IJLERR value.  IJL_OK indicates success.
  1192. //
  1193. // Parameters:
  1194. //  jcprops     Pointer to an externally allocated
  1195. //              JPEG_CORE_PROPERTIES structure.
  1196. //
  1197. ////////////////////////////////////////////////////////////////////////////
  1198. *F*/
  1199. IJLAPI(IJLERR, ijlInit, ( JPEG_CORE_PROPERTIES* jcprops ));
  1200. /*F*
  1201. ////////////////////////////////////////////////////////////////////////////
  1202. // Name:        ijlFree
  1203. //
  1204. // Purpose:     Used to properly close down the IJL.
  1205. //
  1206. //              See the Developer's Guide for details on appropriate usage.
  1207. //
  1208. // Context:     Always call this when done using the IJL to perform
  1209. //              clean-up of dynamically allocated memory.
  1210. //              Note, IJL_Init will have to be called to use the
  1211. //              IJL again.
  1212. //
  1213. // Returns:     Any IJLERR value.  IJL_OK indicates success.
  1214. //
  1215. // Parameters:
  1216. //  jcprops     Pointer to an externally allocated
  1217. //              JPEG_CORE_PROPERTIES structure.
  1218. //
  1219. ////////////////////////////////////////////////////////////////////////////
  1220. *F*/
  1221. IJLAPI(IJLERR, ijlFree, ( JPEG_CORE_PROPERTIES* jcprops ));
  1222. /*F*
  1223. ////////////////////////////////////////////////////////////////////////////
  1224. // Name:        IJL_Read
  1225. //
  1226. // Purpose:     Used to read JPEG data (entropy, or header, or both) into
  1227. //              a user-supplied buffer (to hold the image data) and/or
  1228. //              into the JPEG_CORE_PROPERTIES structure (to hold the
  1229. //              header info).
  1230. //
  1231. // Context:     See the Developer's Guide for a detailed description
  1232. //              on the use of this function.  The jcprops main data
  1233. //              members are checked for consistency.
  1234. //
  1235. // Returns:     Any IJLERR value.  IJL_OK indicates success.
  1236. //
  1237. // Parameters:
  1238. //  jcprops     Pointer to an externally allocated
  1239. //              JPEG_CORE_PROPERTIES structure.
  1240. //  iotype      Specifies what type of read operation to perform.
  1241. //
  1242. ////////////////////////////////////////////////////////////////////////////
  1243. *F*/
  1244. IJLAPI(IJLERR, ijlRead, ( JPEG_CORE_PROPERTIES* jcprops, IJLIOTYPE iotype ));
  1245. /*F*
  1246. ////////////////////////////////////////////////////////////////////////////
  1247. // Name:        ijlWrite
  1248. //
  1249. // Purpose:     Used to write JPEG data (entropy, or header, or both) into
  1250. //              a user-supplied buffer (to hold the image data) and/or
  1251. //              into the JPEG_CORE_PROPERTIES structure (to hold the
  1252. //              header info).
  1253. //
  1254. // Context:     See the Developer's Guide for a detailed description
  1255. //              on the use of this function.  The jcprops main data
  1256. //              members are checked for consistency.
  1257. //
  1258. // Returns:     Any IJLERR value.  IJL_OK indicates success.
  1259. //
  1260. // Parameters:
  1261. //  jcprops     Pointer to an externally allocated
  1262. //              JPEG_CORE_PROPERTIES structure.
  1263. //  iotype      Specifies what type of write operation to perform.
  1264. //
  1265. ////////////////////////////////////////////////////////////////////////////
  1266. *F*/
  1267. IJLAPI(IJLERR, ijlWrite, ( JPEG_CORE_PROPERTIES* jcprops, IJLIOTYPE iotype ));
  1268. /*F*
  1269. ////////////////////////////////////////////////////////////////////////////
  1270. // Name:        ijlGetLibVersion
  1271. //
  1272. // Purpose:     To identify the version number of the IJL.
  1273. //
  1274. // Context:     Call to get the IJL version number.
  1275. //
  1276. // Returns:     pointer to IJLibVersion struct
  1277. //
  1278. // Parameters:  none
  1279. //
  1280. ////////////////////////////////////////////////////////////////////////////
  1281. *F*/
  1282. IJLAPI(const IJLibVersion*, ijlGetLibVersion, (void));
  1283. /*F*
  1284. ////////////////////////////////////////////////////////////////////////////
  1285. // Name:        ijlErrorStr
  1286. //
  1287. // Purpose:     Gets the string to describe error code.
  1288. //
  1289. // Context:     Is called to get descriptive string on arbitrary IJLERR code.
  1290. //
  1291. // Returns:     pointer to string
  1292. //
  1293. // Parameters:  IJLERR - IJL error code
  1294. //
  1295. ////////////////////////////////////////////////////////////////////////////
  1296. *F*/
  1297. IJLAPI(const char*, ijlErrorStr, (IJLERR code));
  1298. #if defined( __cplusplus )
  1299. }
  1300. #endif
  1301. #endif  /* __IJL_H__ */