1342 lines
45 KiB
C
1342 lines
45 KiB
C
/*M*
|
|
//
|
|
//
|
|
// INTEL CORPORATION PROPRIETARY INFORMATION
|
|
// This software is supplied under the terms of a license agreement or
|
|
// nondisclosure agreement with Intel Corporation and may not be copied
|
|
// or disclosed except in accordance with the terms of that agreement.
|
|
// Copyright (c) 1998 Intel Corporation. All Rights Reserved.
|
|
//
|
|
//
|
|
// File:
|
|
// ijl.h
|
|
//
|
|
// Purpose:
|
|
// IJL Common Header File
|
|
// This file contains: definitions for data types, data
|
|
// structures, error codes, and function prototypes used
|
|
// in the Intel(R) JPEG Library (IJL).
|
|
//
|
|
// Version:
|
|
// 1.0 beta 1
|
|
//
|
|
*M*/
|
|
|
|
#ifndef __IJL_H__
|
|
#define __IJL_H__
|
|
|
|
|
|
#if defined( __cplusplus )
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
#ifndef IJL_ALL_WARNINGS
|
|
|
|
#if _MSC_VER >= 1000
|
|
|
|
/* nonstandard extension used : nameless struct/union */
|
|
#pragma warning(disable : 4201)
|
|
/* nonstandard extension used : bit field types other than int */
|
|
#pragma warning(disable : 4214)
|
|
/* unreferenced inline function has been removed */
|
|
#pragma warning(disable : 4514)
|
|
/* named type definition in parentheses */
|
|
#pragma warning(disable : 4115)
|
|
|
|
#endif /* _MSC_VER >= 1000 */
|
|
|
|
#endif /* IJL_ALL_WARNINGS */
|
|
|
|
|
|
|
|
|
|
#define _X86_
|
|
#define WIN32_LEAN_AND_MEAN
|
|
#include <windows.h>
|
|
|
|
|
|
#ifdef _MSC_VER
|
|
# pragma pack (8)
|
|
#endif
|
|
|
|
|
|
/* /////////////////////////////////////////////////////////////////////////
|
|
// Macros/Constants */
|
|
|
|
#define IJL_NONE 0
|
|
#define IJL_OTHER 255
|
|
#define JBUFSIZE 4096 // Size of file I/O buffer (4K).
|
|
|
|
|
|
#ifndef INT64
|
|
#define INT64 __int64
|
|
#endif
|
|
#ifndef UINT64
|
|
#define UINT64 unsigned INT64
|
|
#endif
|
|
|
|
|
|
#if defined( _IJL_STDIMP_ )
|
|
|
|
# define IJLAPI(type,name,arg) \
|
|
extern type WINAPI name arg
|
|
|
|
#else
|
|
|
|
# if !defined( _IJL_API_ )
|
|
|
|
# define IJLAPI(type,name,arg) \
|
|
extern __declspec(dllimport) type WINAPI name arg
|
|
|
|
# else
|
|
|
|
# define IJLAPI(type,name,arg) \
|
|
extern __declspec(dllexport) type WINAPI name arg
|
|
|
|
# endif // _IJL_API_
|
|
|
|
#endif //_IJL_STDIMP_
|
|
|
|
|
|
|
|
|
|
/*D*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: IJLibVersion
|
|
//
|
|
// Purpose: Stores library version info.
|
|
//
|
|
// Context:
|
|
//
|
|
// Example:
|
|
// major - 1
|
|
// minor - 0
|
|
// build - 1
|
|
// Name - "ijl10.dll"
|
|
// Version - "1.0.1 Beta1"
|
|
// InternalVersion - "1.0.1.1"
|
|
// BuildDate - "Sep 22 1998"
|
|
// CallConv - "DLL"
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*D*/
|
|
|
|
typedef struct _IJLibVersion
|
|
{
|
|
int major;
|
|
int minor;
|
|
int build;
|
|
LPCTSTR Name;
|
|
LPCTSTR Version;
|
|
LPCTSTR InternalVersion;
|
|
LPCTSTR BuildDate;
|
|
LPCTSTR CallConv;
|
|
|
|
} IJLibVersion;
|
|
|
|
|
|
/*D*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: IJLIOTYPE
|
|
//
|
|
// Purpose: Possible types of data read/write/other operations to be
|
|
// performed by the functions IJL_Read and IJL_Write.
|
|
//
|
|
// See the Developer's Guide for details on appropriate usage.
|
|
//
|
|
// Fields:
|
|
//
|
|
// IJL_JFILE_XXXXXXX Indicates JPEG data in a stdio file.
|
|
//
|
|
// IJL_JBUFF_XXXXXXX Indicates JPEG data in an addressable buffer.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*D*/
|
|
|
|
typedef enum
|
|
{
|
|
IJL_SETUP = -1,
|
|
|
|
|
|
// Read JPEG parameters (i.e., height, width, channels,
|
|
// sampling, etc.) from a JPEG bit stream.
|
|
IJL_JFILE_READPARAMS = 0,
|
|
IJL_JBUFF_READPARAMS = 1,
|
|
|
|
// Read a JPEG Interchange Format image.
|
|
IJL_JFILE_READWHOLEIMAGE = 2,
|
|
IJL_JBUFF_READWHOLEIMAGE = 3,
|
|
|
|
// Read JPEG tables from a JPEG Abbreviated Format bit stream.
|
|
IJL_JFILE_READHEADER = 4,
|
|
IJL_JBUFF_READHEADER = 5,
|
|
|
|
// Read image info from a JPEG Abbreviated Format bit stream.
|
|
IJL_JFILE_READENTROPY = 6,
|
|
IJL_JBUFF_READENTROPY = 7,
|
|
|
|
// Write an entire JFIF bit stream.
|
|
IJL_JFILE_WRITEWHOLEIMAGE = 8,
|
|
IJL_JBUFF_WRITEWHOLEIMAGE = 9,
|
|
|
|
// Write a JPEG Abbreviated Format bit stream.
|
|
IJL_JFILE_WRITEHEADER = 10,
|
|
IJL_JBUFF_WRITEHEADER = 11,
|
|
|
|
// Write image info to a JPEG Abbreviated Format bit stream.
|
|
IJL_JFILE_WRITEENTROPY = 12,
|
|
IJL_JBUFF_WRITEENTROPY = 13,
|
|
|
|
|
|
// Scaled Decoding Options:
|
|
|
|
// Reads a JPEG image scaled to 1/2 size.
|
|
IJL_JFILE_READONEHALF = 14,
|
|
IJL_JBUFF_READONEHALF = 15,
|
|
|
|
// Reads a JPEG image scaled to 1/4 size.
|
|
IJL_JFILE_READONEQUARTER = 16,
|
|
IJL_JBUFF_READONEQUARTER = 17,
|
|
|
|
// Reads a JPEG image scaled to 1/8 size.
|
|
IJL_JFILE_READONEEIGHTH = 18,
|
|
IJL_JBUFF_READONEEIGHTH = 19,
|
|
|
|
// Reads an embedded thumbnail from a JFIF bit stream.
|
|
IJL_JFILE_READTHUMBNAIL = 20,
|
|
IJL_JBUFF_READTHUMBNAIL = 21
|
|
|
|
} IJLIOTYPE;
|
|
|
|
|
|
/*D*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: IJL_COLOR
|
|
//
|
|
// Purpose: Possible color space formats.
|
|
//
|
|
// Note these formats do *not* necessarily denote
|
|
// the number of channels in the color space.
|
|
// There exists separate "channel" fields in the
|
|
// JPEG_CORE_PROPERTIES data structure specifically
|
|
// for indicating the number of channels in the
|
|
// JPEG and/or DIB color spaces.
|
|
//
|
|
// See the Developer's Guide for details on appropriate usage.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*D*/
|
|
|
|
typedef enum
|
|
{
|
|
IJL_RGB = 1, // Red-Green-Blue color space.
|
|
IJL_BGR = 2, // Reversed channel ordering from IJL_RGB.
|
|
IJL_YCBCR = 3, // Luminance-Chrominance color space as defined
|
|
// by CCIR Recommendation 601.
|
|
IJL_G = 4, // Grayscale color space.
|
|
IJL_RGBA_FPX = 5, // FlashPix RGB 4 channel color space that
|
|
// has pre-multiplied opacity.
|
|
IJL_YCBCRA_FPX = 6 // FlashPix YCbCr 4 channel color space that
|
|
// has pre-multiplied opacity.
|
|
|
|
// IJL_OTHER // Some other color space not defined by the IJL.
|
|
// (This means no color space conversion will
|
|
// be done by the IJL.)
|
|
|
|
} IJL_COLOR;
|
|
|
|
|
|
/*D*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: IJL_JPGSUBSAMPLING
|
|
//
|
|
// Purpose: Possible subsampling formats used in the JPEG.
|
|
//
|
|
// See the Developer's Guide for details on appropriate usage.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*D*/
|
|
|
|
typedef enum
|
|
{
|
|
IJL_411 = 1, // Valid on a JPEG w/ 3 channels.
|
|
IJL_422 = 2, // Valid on a JPEG w/ 3 channels.
|
|
|
|
IJL_4114 = 3, // Valid on a JPEG w/ 4 channels.
|
|
IJL_4224 = 4, // Valid on a JPEG w/ 4 channels.
|
|
|
|
// IJL_NONE = Corresponds to "No Subsampling".
|
|
// Valid on a JPEG w/ any number of channels.
|
|
|
|
// IJL_OTHER = Valid entry, but only used internally to the IJL.
|
|
|
|
} IJL_JPGSUBSAMPLING;
|
|
|
|
|
|
/*D*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: IJL_DIBSUBSAMPLING
|
|
//
|
|
// Purpose: Possible subsampling formats used in the DIB.
|
|
//
|
|
// See the Developer's Guide for details on appropriate usage.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*D*/
|
|
|
|
typedef enum
|
|
{
|
|
// IJL_NONE = Corresponds to "No Subsampling".
|
|
|
|
} IJL_DIBSUBSAMPLING;
|
|
|
|
|
|
/*D*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: HUFFMAN_TABLE
|
|
//
|
|
// Purpose: Stores Huffman table information in a fast-to-use format.
|
|
//
|
|
// Context: Used by Huffman encoder/decoder to access Huffman table
|
|
// data. Raw Huffman tables are formatted to fit this
|
|
// structure prior to use.
|
|
//
|
|
// Fields:
|
|
// huff_class 0 == DC Huffman or lossless table, 1 == AC table.
|
|
// ident Huffman table identifier, 0-3 valid (Extended Baseline).
|
|
// huffelem Huffman elements for codes <= 8 bits long;
|
|
// contains both zero run-length and symbol length in bits.
|
|
// huffval Huffman values for codes 9-16 bits in length.
|
|
// mincode Smallest Huffman code of length n.
|
|
// maxcode Largest Huffman code of length n.
|
|
// valptr Starting index into huffval[] for symbols of length k.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*D*/
|
|
|
|
typedef struct _HUFFMAN_TABLE
|
|
{
|
|
int huff_class;
|
|
int ident;
|
|
unsigned int huffelem[256];
|
|
unsigned short huffval[256];
|
|
unsigned short mincode[17];
|
|
unsigned short maxcode[18];
|
|
unsigned short valptr[17];
|
|
|
|
} HUFFMAN_TABLE;
|
|
|
|
|
|
/*D*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: JPEGHuffTable
|
|
//
|
|
// Purpose: Stores pointers to JPEG-binary spec compliant
|
|
// Huffman table information.
|
|
//
|
|
// Context: Used by interface and table methods to specify encoder
|
|
// tables to generate and store JPEG images.
|
|
//
|
|
// Fields:
|
|
// bits Points to number of codes of length i (<=16 supported).
|
|
// vals Value associated with each Huffman code.
|
|
// hclass 0 == DC table, 1 == AC table.
|
|
// ident Specifies the identifier for this table.
|
|
// 0-3 for extended JPEG compliance.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*D*/
|
|
|
|
typedef struct
|
|
{
|
|
unsigned char* bits;
|
|
unsigned char* vals;
|
|
unsigned char hclass;
|
|
unsigned char ident;
|
|
|
|
} JPEGHuffTable;
|
|
|
|
|
|
/*D*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: QUANT_TABLE
|
|
//
|
|
// Purpose: Stores quantization table information in a
|
|
// fast-to-use format.
|
|
//
|
|
// Context: Used by quantizer/dequantizer to store formatted
|
|
// quantization tables.
|
|
//
|
|
// Fields:
|
|
// precision 0 => elements contains 8-bit elements,
|
|
// 1 => elements contains 16-bit elements.
|
|
// ident Table identifier (0-3).
|
|
// elements Pointer to 64 table elements + 16 extra elements to catch
|
|
// input data errors that may cause malfunction of the
|
|
// Huffman decoder.
|
|
// elarray Space for elements (see above) plus 8 bytes to align
|
|
// to a quadword boundary.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*D*/
|
|
|
|
typedef struct _QUANT_TABLE
|
|
{
|
|
int precision;
|
|
int ident;
|
|
short* elements;
|
|
short elarray [84];
|
|
|
|
} QUANT_TABLE;
|
|
|
|
|
|
/*D*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: JPEGQuantTable
|
|
//
|
|
// Purpose: Stores pointers to JPEG binary spec compliant
|
|
// quantization table information.
|
|
//
|
|
// Context: Used by interface and table methods to specify encoder
|
|
// tables to generate and store JPEG images.
|
|
//
|
|
// Fields:
|
|
// quantizer Zig-zag order elements specifying quantization factors.
|
|
// ident Specifies identifier for this table.
|
|
// 0-3 valid for Extended Baseline JPEG compliance.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*D*/
|
|
|
|
typedef struct
|
|
{
|
|
unsigned char* quantizer;
|
|
unsigned char ident;
|
|
|
|
} JPEGQuantTable;
|
|
|
|
|
|
/*D*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: FRAME_COMPONENT
|
|
//
|
|
// Purpose: One frame-component structure is allocated per component
|
|
// in a frame.
|
|
//
|
|
// Context: Used by Huffman decoder to manage components.
|
|
//
|
|
// Fields:
|
|
// ident Component identifier. The tables use this ident to
|
|
// determine the correct table for each component.
|
|
// hsampling Horizontal subsampling factor for this component,
|
|
// 1-4 are legal.
|
|
// vsampling Vertical subsampling factor for this component,
|
|
// 1-4 are legal.
|
|
// quant_sel Quantization table selector. The quantization table
|
|
// used by this component is determined via this selector.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*D*/
|
|
|
|
typedef struct _FRAME_COMPONENT
|
|
{
|
|
int ident;
|
|
int hsampling;
|
|
int vsampling;
|
|
int quant_sel;
|
|
|
|
} FRAME_COMPONENT;
|
|
|
|
|
|
/*D*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: FRAME
|
|
//
|
|
// Purpose: Stores frame-specific data.
|
|
//
|
|
// Context: One Frame structure per image.
|
|
//
|
|
// Fields:
|
|
// precision Sample precision in bits.
|
|
// width Width of the source image in pixels.
|
|
// height Height of the source image in pixels.
|
|
// MCUheight Height of a frame MCU.
|
|
// MCUwidth Width of a frame MCU.
|
|
// max_hsampling Max horiz sampling ratio of any component in the frame.
|
|
// max_vsampling Max vert sampling ratio of any component in the frame.
|
|
// ncomps Number of components/channels in the frame.
|
|
// horMCU Number of horizontal MCUs in the frame.
|
|
// totalMCU Total number of MCUs in the frame.
|
|
// comps Array of 'ncomps' component descriptors.
|
|
// restart_interv Indicates number of MCUs after which to restart the
|
|
// entropy parameters.
|
|
// SeenAllDCScans Used when decoding Multiscan images to determine if
|
|
// all channels of an image have been decoded.
|
|
// SeenAllACScans (See SeenAllDCScans)
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*D*/
|
|
|
|
typedef struct _FRAME
|
|
{
|
|
int precision;
|
|
int width;
|
|
int height;
|
|
int MCUheight;
|
|
int MCUwidth;
|
|
int max_hsampling;
|
|
int max_vsampling;
|
|
int ncomps;
|
|
int horMCU;
|
|
long totalMCU;
|
|
FRAME_COMPONENT* comps;
|
|
int restart_interv;
|
|
int SeenAllDCScans;
|
|
int SeenAllACScans;
|
|
|
|
} FRAME;
|
|
|
|
|
|
/*D*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: SCAN_COMPONENT
|
|
//
|
|
// Purpose: One scan-component structure is allocated per component
|
|
// of each scan in a frame.
|
|
//
|
|
// Context: Used by Huffman decoder to manage components within scans.
|
|
//
|
|
// Fields:
|
|
// comp Component number, index to the comps member of FRAME.
|
|
// hsampling Horizontal sampling factor.
|
|
// vsampling Vertical sampling factor.
|
|
// dc_table DC Huffman table pointer for this scan.
|
|
// ac_table AC Huffman table pointer for this scan.
|
|
// quant_table Quantization table pointer for this scan.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*D*/
|
|
|
|
typedef struct
|
|
{
|
|
int comp;
|
|
int hsampling;
|
|
int vsampling;
|
|
HUFFMAN_TABLE* dc_table;
|
|
HUFFMAN_TABLE* ac_table;
|
|
QUANT_TABLE* quant_table;
|
|
|
|
} SCAN_COMPONENT;
|
|
|
|
|
|
/*D*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: SCAN
|
|
//
|
|
// Purpose: One SCAN structure is allocated per scan in a frame.
|
|
//
|
|
// Context: Used by Huffman decoder to manage scans.
|
|
//
|
|
// Fields:
|
|
// ncomps Number of image components in a scan, 1-4 legal.
|
|
// gray_scale If TRUE, decode only the Y channel.
|
|
// start_spec Start coefficient of spectral or predictor selector.
|
|
// end_spec End coefficient of spectral selector.
|
|
// approx_high High bit position in successive approximation
|
|
// Progressive coding.
|
|
// approx_low Low bit position in successive approximation
|
|
// Progressive coding.
|
|
// restart_interv Restart interval, 0 if disabled.
|
|
// curxMCU Next horizontal MCU index to be processed after
|
|
// an interrupted SCAN.
|
|
// curyMCU Next vertical MCU index to be processed after
|
|
// an interrupted SCAN.
|
|
// dc_diff Array of DC predictor values for DPCM modes.
|
|
// comps Array of ncomps SCAN_COMPONENT component identifiers.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*D*/
|
|
|
|
typedef struct _SCAN
|
|
{
|
|
int ncomps;
|
|
int gray_scale;
|
|
int start_spec;
|
|
int end_spec;
|
|
int approx_high;
|
|
int approx_low;
|
|
UINT restart_interv;
|
|
DWORD curxMCU;
|
|
DWORD curyMCU;
|
|
int dc_diff[4];
|
|
SCAN_COMPONENT* comps;
|
|
|
|
} SCAN;
|
|
|
|
|
|
/*D*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: DCTTYPE
|
|
//
|
|
// Purpose: Possible algorithms to be used to perform the discrete
|
|
// cosine transform (DCT).
|
|
//
|
|
// Fields:
|
|
// IJL_AAN The AAN (Arai, Agui, and Nakajima) algorithm from
|
|
// Trans. IEICE, vol. E 71(11), 1095-1097, Nov. 1988.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*D*/
|
|
|
|
typedef enum
|
|
{
|
|
IJL_AAN = 0
|
|
|
|
} DCTTYPE;
|
|
|
|
|
|
/*D*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: PROCESSOR_TYPE
|
|
//
|
|
// Purpose: Possible types of processors.
|
|
// Note that the enums are defined in ascending order
|
|
// depending upon their various IA32 instruction support.
|
|
//
|
|
// Fields:
|
|
//
|
|
// IJL_OTHER_PROC
|
|
// Does not support the CPUID instruction and
|
|
// assumes no Pentium(R) processor instructions.
|
|
//
|
|
// IJL_PENTIUM_PROC
|
|
// Corresponds to an Intel(R) Pentium(R) processor
|
|
// (or a 100% compatible) that supports the
|
|
// Pentium(R) processor instructions.
|
|
//
|
|
// IJL_PENTIUM_PRO_PROC
|
|
// Corresponds to an Intel(R) Pentium(R) Pro processor
|
|
// (or a 100% compatible) that supports the
|
|
// Pentium(R) Pro processor instructions.
|
|
//
|
|
// IJL_PENTIUM_PROC_MMX_TECH
|
|
// Corresponds to an Intel(R) Pentium(R) processor
|
|
// with MMX(TM) technology (or a 100% compatible)
|
|
// that supports the MMX(TM) instructions.
|
|
//
|
|
// IJL_PENTIUM_II_PROC
|
|
// Corresponds to an Intel(R) Pentium(R) II processor
|
|
// (or a 100% compatible) that supports both the
|
|
// Pentium(R) Pro processor instructions and the
|
|
// MMX(TM) instructions.
|
|
//
|
|
// Any additional processor types that support a superset
|
|
// of both the Pentium(R) Pro processor instructions and the
|
|
// MMX(TM) instructions should be given an enum value greater
|
|
// than IJL_PENTIUM_II_PROC.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*D*/
|
|
|
|
typedef enum
|
|
{
|
|
IJL_OTHER_PROC = 0,
|
|
IJL_PENTIUM_PROC = 1,
|
|
IJL_PENTIUM_PRO_PROC = 2,
|
|
IJL_PENTIUM_PROC_MMX_TECH = 3,
|
|
IJL_PENTIUM_II_PROC = 4
|
|
|
|
} PROCESSOR_TYPE;
|
|
|
|
|
|
/*D*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: ENTROPYSTRUCT
|
|
//
|
|
// Purpose: Stores the decoder state information necessary to "jump"
|
|
// to a particular MCU row in a compressed entropy stream.
|
|
//
|
|
// Context: Used to persist the decoder state within Decode_Scan when
|
|
// decoding using ROIs.
|
|
//
|
|
// Fields:
|
|
// offset Offset (in bytes) into the entropy stream
|
|
// from the beginning.
|
|
// dcval1 DC val at the beginning of the MCU row
|
|
// for component 1.
|
|
// dcval2 DC val at the beginning of the MCU row
|
|
// for component 2.
|
|
// dcval3 DC val at the beginning of the MCU row
|
|
// for component 3.
|
|
// dcval4 DC val at the beginning of the MCU row
|
|
// for component 4.
|
|
// bit_buffer_64 64-bit Huffman bit buffer. Stores current
|
|
// bit buffer at the start of a MCU row.
|
|
// Also used as a 32-bit buffer on 32-bit
|
|
// architectures.
|
|
// bitbuf_bits_valid Number of valid bits in the above bit buffer.
|
|
// unread_marker Have any markers been decoded but not
|
|
// processed at the beginning of a MCU row?
|
|
// This entry holds the unprocessed marker, or
|
|
// 0 if none.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*D*/
|
|
|
|
typedef struct
|
|
{
|
|
DWORD offset;
|
|
int dcval1;
|
|
int dcval2;
|
|
int dcval3;
|
|
int dcval4;
|
|
UINT64 bit_buffer_64;
|
|
int bitbuf_bits_valid;
|
|
BYTE unread_marker;
|
|
|
|
} ENTROPYSTRUCT;
|
|
|
|
|
|
/*D*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: STATE
|
|
//
|
|
// Purpose: Stores the active state of the IJL.
|
|
//
|
|
// Context: Used by all low-level routines to store pseudo-global or
|
|
// state variables.
|
|
//
|
|
// Fields:
|
|
// bit_buffer_64 64-bit bitbuffer utilized by Huffman
|
|
// encoder/decoder algorithms utilizing routines
|
|
// designed for MMX(TM) technology.
|
|
// bit_buffer_32 32-bit bitbuffer for all other Huffman
|
|
// encoder/decoder algorithms.
|
|
// bitbuf_bits_valid Number of bits in the above two fields that
|
|
// are valid.
|
|
//
|
|
// cur_entropy_ptr Current position (absolute address) in
|
|
// the entropy buffer.
|
|
// start_entropy_ptr Starting position (absolute address) of
|
|
// the entropy buffer.
|
|
// end_entropy_ptr Ending position (absolute address) of
|
|
// the entropy buffer.
|
|
// entropy_bytes_processed Number of bytes actually processed
|
|
// (passed over) in the entropy buffer.
|
|
// entropy_buf_maxsize Max size of the entropy buffer.
|
|
// entropy_bytes_left Number of bytes left in the entropy buffer.
|
|
// Prog_EndOfBlock_Run Progressive block run counter.
|
|
//
|
|
// DIB_ptr Temporary offset into the input/output DIB.
|
|
//
|
|
// unread_marker If a marker has been read but not processed,
|
|
// stick it in this field.
|
|
// processor_type (0, 1, or 2) == current processor does not
|
|
// support MMX(TM) instructions.
|
|
// (3 or 4) == current processor does
|
|
// support MMX(TM) instructions.
|
|
// cur_scan_comp On which component of the scan are we working?
|
|
// file Process file handle, or
|
|
// 0x00000000 if no file is defined.
|
|
// JPGBuffer Entropy buffer (~4K).
|
|
//
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*D*/
|
|
|
|
typedef struct _STATE
|
|
{
|
|
// Bit buffer.
|
|
UINT64 bit_buffer_64;
|
|
DWORD bit_buffer_32;
|
|
int bitbuf_bits_valid;
|
|
|
|
// Entropy.
|
|
BYTE* cur_entropy_ptr;
|
|
BYTE* start_entropy_ptr;
|
|
BYTE* end_entropy_ptr;
|
|
long entropy_bytes_processed;
|
|
long entropy_buf_maxsize;
|
|
int entropy_bytes_left;
|
|
int Prog_EndOfBlock_Run;
|
|
|
|
// Input or output DIB.
|
|
BYTE* DIB_ptr;
|
|
|
|
// Control.
|
|
BYTE unread_marker;
|
|
PROCESSOR_TYPE processor_type;
|
|
int cur_scan_comp;
|
|
HANDLE file;
|
|
BYTE JPGBuffer [JBUFSIZE];
|
|
|
|
} STATE;
|
|
|
|
|
|
/*D*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: FAST_MCU_PROCESSING_TYPE
|
|
//
|
|
// Purpose: Advanced Control Option. Do NOT modify.
|
|
// WARNING: Used for internal reference only.
|
|
//
|
|
// Fields:
|
|
//
|
|
// IJL_(sampling)_(JPEG color space)_(sampling)_(DIB color space)
|
|
// Decode is read left to right w/ upsampling.
|
|
// Encode is read right to left w/ subsampling.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*D*/
|
|
|
|
typedef enum
|
|
{
|
|
IJL_NO_CC_OR_US = 0,
|
|
|
|
IJL_111_YCBCR_111_RGB = 1,
|
|
IJL_111_YCBCR_111_BGR = 2,
|
|
|
|
IJL_411_YCBCR_111_RGB = 3,
|
|
IJL_411_YCBCR_111_BGR = 4,
|
|
|
|
IJL_422_YCBCR_111_RGB = 5,
|
|
IJL_422_YCBCR_111_BGR = 6,
|
|
|
|
IJL_111_YCBCR_1111_RGBA_FPX = 7,
|
|
IJL_411_YCBCR_1111_RGBA_FPX = 8,
|
|
IJL_422_YCBCR_1111_RGBA_FPX = 9,
|
|
|
|
IJL_1111_YCBCRA_FPX_1111_RGBA_FPX = 10,
|
|
IJL_4114_YCBCRA_FPX_1111_RGBA_FPX = 11,
|
|
IJL_4224_YCBCRA_FPX_1111_RGBA_FPX = 12,
|
|
|
|
IJL_111_RGB_1111_RGBA_FPX = 13,
|
|
|
|
IJL_1111_RGBA_FPX_1111_RGBA_FPX = 14
|
|
|
|
} FAST_MCU_PROCESSING_TYPE;
|
|
|
|
|
|
/*D*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: JPEG_PROPERTIES
|
|
//
|
|
// Purpose: Stores low-level and control information. It is used by
|
|
// both the encoder and decoder. An advanced external user
|
|
// may access this structure to expand the interface
|
|
// capability.
|
|
//
|
|
// See the Developer's Guide for an expanded description
|
|
// of this structure and its use.
|
|
//
|
|
// Context: Used by all interface methods and most IJL routines.
|
|
//
|
|
// Fields:
|
|
//
|
|
// iotype IN: Specifies type of data operation
|
|
// (read/write/other) to be
|
|
// performed by IJL_Read or IJL_Write.
|
|
// roi IN: Rectangle-Of-Interest to read from, or
|
|
// write to, in pixels.
|
|
// dcttype IN: DCT alogrithm to be used.
|
|
// fast_processing OUT: Supported fast pre/post-processing path.
|
|
// This is set by the IJL.
|
|
// interrupt IN: Signals an interrupt has been requested.
|
|
//
|
|
// DIBBytes IN: Pointer to buffer of uncompressed data.
|
|
// DIBWidth IN: Width of uncompressed data.
|
|
// DIBHeight IN: Height of uncompressed data.
|
|
// DIBPadBytes IN: Padding (in bytes) at end of each
|
|
// row in the uncompressed data.
|
|
// DIBChannels IN: Number of components in the
|
|
// uncompressed data.
|
|
// DIBColor IN: Color space of uncompressed data.
|
|
// DIBSubsampling IN: Required to be IJL_NONE.
|
|
// DIBLineBytes OUT: Number of bytes in an output DIB line
|
|
// including padding.
|
|
//
|
|
// JPGFile IN: Pointer to file based JPEG.
|
|
// JPGBytes IN: Pointer to buffer based JPEG.
|
|
// JPGSizeBytes IN: Max buffer size. Used with JPGBytes.
|
|
// OUT: Number of compressed bytes written.
|
|
// JPGWidth IN: Width of JPEG image.
|
|
// OUT: After reading (except READHEADER).
|
|
// JPGHeight IN: Height of JPEG image.
|
|
// OUT: After reading (except READHEADER).
|
|
// JPGChannels IN: Number of components in JPEG image.
|
|
// OUT: After reading (except READHEADER).
|
|
// JPGColor IN: Color space of JPEG image.
|
|
// JPGSubsampling IN: Subsampling of JPEG image.
|
|
// OUT: After reading (except READHEADER).
|
|
// JPGThumbWidth OUT: JFIF embedded thumbnail width [0-255].
|
|
// JPGThumbHeight OUT: JFIF embedded thumbnail height [0-255].
|
|
//
|
|
// cconversion_reqd OUT: If color conversion done on decode, TRUE.
|
|
// upsampling_reqd OUT: If upsampling done on decode, TRUE.
|
|
// jquality IN: [0-100] where highest quality is 100.
|
|
// jinterleaveType IN/OUT: 0 => MCU interleaved file, and
|
|
// 1 => 1 scan per component.
|
|
// numxMCUs OUT: Number of MCUs in the x direction.
|
|
// numyMCUs OUT: Number of MCUs in the y direction.
|
|
//
|
|
// nqtables IN/OUT: Number of quantization tables.
|
|
// maxquantindex IN/OUT: Maximum index of quantization tables.
|
|
// nhuffActables IN/OUT: Number of AC Huffman tables.
|
|
// nhuffDctables IN/OUT: Number of DC Huffman tables.
|
|
// maxhuffindex IN/OUT: Maximum index of Huffman tables.
|
|
// jFmtQuant IN/OUT: Formatted quantization table info.
|
|
// jFmtAcHuffman IN/OUT: Formatted AC Huffman table info.
|
|
// jFmtDcHuffman IN/OUT: Formatted DC Huffman table info.
|
|
//
|
|
// jEncFmtQuant IN/OUT: Pointer to one of the above, or
|
|
// to externally persisted table.
|
|
// jEncFmtAcHuffman IN/OUT: Pointer to one of the above, or
|
|
// to externally persisted table.
|
|
// jEncFmtDcHuffman IN/OUT: Pointer to one of the above, or
|
|
// to externally persisted table.
|
|
//
|
|
// use_default_qtables IN: Set to default quantization tables.
|
|
// Clear to supply your own.
|
|
// use_default_htables IN: Set to default Huffman tables.
|
|
// Clear to supply your own.
|
|
// rawquanttables IN: Up to 4 sets of quantization tables.
|
|
// rawhufftables IN: Alternating pairs (DC/AC) of up to 4
|
|
// sets of raw Huffman tables.
|
|
// HuffIdentifierAC IN: Indicates what channel the user-
|
|
// supplied Huffman AC tables apply to.
|
|
// HuffIdentifierDC IN: Indicates what channel the user-
|
|
// supplied Huffman DC tables apply to.
|
|
//
|
|
// jframe OUT: Structure with frame-specific info.
|
|
// needframe OUT: TRUE when a frame has been detected.
|
|
//
|
|
// jscan Persistence for current scan pointer when
|
|
// interrupted.
|
|
//
|
|
// state OUT: Contains info on the state of the IJL.
|
|
// SawAdobeMarker OUT: Decoder saw an APP14 marker somewhere.
|
|
// AdobeXform OUT: If SawAdobeMarker TRUE, this indicates
|
|
// the JPEG color space given by that marker.
|
|
//
|
|
// rowoffsets Persistence for the decoder MCU row origins
|
|
// when decoding by ROI. Offsets (in bytes
|
|
// from the beginning of the entropy data)
|
|
// to the start of each of the decoded rows.
|
|
// Fill the offsets with -1 if they have not
|
|
// been initalized and NULL could be the
|
|
// offset to the first row.
|
|
//
|
|
// MCUBuf OUT: Quadword aligned internal buffer.
|
|
// Big enough for the largest MCU
|
|
// (10 blocks) with extra room for
|
|
// additional operations.
|
|
// tMCUBuf OUT: Version of above, without alignment.
|
|
//
|
|
// processor_type OUT: Determines type of processor found
|
|
// during initialization.
|
|
//
|
|
// ignoreDCTs IN: Assert to bypass DCTs when processing
|
|
// data. Required for conformance
|
|
// testing.
|
|
//
|
|
// progressive_found OUT: 1 when progressive image detected.
|
|
// coef_buffer IN: Pointer to a larger buffer containing
|
|
// frequency coefficients when they
|
|
// cannot be decoded dynamically
|
|
// (i.e., as in progressive decoding).
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*D*/
|
|
|
|
typedef struct
|
|
{
|
|
// Compression/Decompression control.
|
|
IJLIOTYPE iotype; // default = IJL_SETUP
|
|
RECT roi; // default = 0
|
|
DCTTYPE dcttype; // default = IJL_AAN
|
|
FAST_MCU_PROCESSING_TYPE fast_processing; // default = IJL_NO_CC_OR_US
|
|
DWORD interrupt; // default = FALSE
|
|
|
|
// DIB specific I/O data specifiers.
|
|
BYTE* DIBBytes; // default = NULL
|
|
DWORD DIBWidth; // default = 0
|
|
int DIBHeight; // default = 0
|
|
DWORD DIBPadBytes; // default = 0
|
|
DWORD DIBChannels; // default = 3
|
|
IJL_COLOR DIBColor; // default = IJL_BGR
|
|
IJL_DIBSUBSAMPLING DIBSubsampling; // default = IJL_NONE
|
|
int DIBLineBytes; // default = 0
|
|
|
|
// JPEG specific I/O data specifiers.
|
|
LPTSTR JPGFile; // default = NULL
|
|
BYTE* JPGBytes; // default = NULL
|
|
DWORD JPGSizeBytes; // default = 0
|
|
DWORD JPGWidth; // default = 0
|
|
DWORD JPGHeight; // default = 0
|
|
DWORD JPGChannels; // default = 3
|
|
IJL_COLOR JPGColor; // default = IJL_YCBCR
|
|
IJL_JPGSUBSAMPLING JPGSubsampling; // default = IJL_411
|
|
DWORD JPGThumbWidth; // default = 0
|
|
DWORD JPGThumbHeight; // default = 0
|
|
|
|
// JPEG conversion properties.
|
|
DWORD cconversion_reqd; // default = TRUE
|
|
DWORD upsampling_reqd; // default = TRUE
|
|
DWORD jquality; // default = 75
|
|
DWORD jinterleaveType; // default = 0
|
|
DWORD numxMCUs; // default = 0
|
|
DWORD numyMCUs; // default = 0
|
|
|
|
// Tables.
|
|
DWORD nqtables;
|
|
DWORD maxquantindex;
|
|
DWORD nhuffActables;
|
|
DWORD nhuffDctables;
|
|
DWORD maxhuffindex;
|
|
|
|
QUANT_TABLE jFmtQuant[4];
|
|
HUFFMAN_TABLE jFmtAcHuffman[4];
|
|
HUFFMAN_TABLE jFmtDcHuffman[4];
|
|
|
|
short* jEncFmtQuant[4];
|
|
HUFFMAN_TABLE* jEncFmtAcHuffman[4];
|
|
HUFFMAN_TABLE* jEncFmtDcHuffman[4];
|
|
|
|
// Allow user-defined tables.
|
|
DWORD use_default_qtables;
|
|
DWORD use_default_htables;
|
|
|
|
JPEGQuantTable rawquanttables[4];
|
|
JPEGHuffTable rawhufftables[8];
|
|
BYTE HuffIdentifierAC[4];
|
|
BYTE HuffIdentifierDC[4];
|
|
|
|
// Frame specific members.
|
|
FRAME jframe;
|
|
int needframe;
|
|
|
|
// SCAN persistent members.
|
|
SCAN* jscan;
|
|
|
|
// State members.
|
|
STATE state;
|
|
DWORD SawAdobeMarker;
|
|
DWORD AdobeXform;
|
|
|
|
// ROI decoder members.
|
|
ENTROPYSTRUCT* rowoffsets;
|
|
|
|
// Intermediate buffers.
|
|
BYTE* MCUBuf;
|
|
BYTE tMCUBuf[720*2]; // ???
|
|
|
|
// Processor detected.
|
|
PROCESSOR_TYPE processor_type;
|
|
|
|
// Test specific members.
|
|
DWORD ignoreDCTs;
|
|
|
|
// Progressive mode members.
|
|
int progressive_found;
|
|
short* coef_buffer;
|
|
|
|
} JPEG_PROPERTIES;
|
|
|
|
|
|
/*D*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: JPEG_CORE_PROPERTIES
|
|
//
|
|
// Purpose: This is the primary data structure between the IJL and
|
|
// the external user. It stores JPEG state information
|
|
// and controls the IJL. It is user-modifiable.
|
|
//
|
|
// See the Developer's Guide for details on appropriate usage.
|
|
//
|
|
// Context: Used by all low-level IJL routines to store
|
|
// pseudo-global information.
|
|
//
|
|
// Fields:
|
|
//
|
|
// UseJPEGPROPERTIES Set this flag != 0 if you wish to override
|
|
// the JPEG_CORE_PROPERTIES "IN" parameters with
|
|
// the JPEG_PROPERTIES parameters.
|
|
//
|
|
// DIBBytes IN: Pointer to buffer of uncompressed data.
|
|
// DIBWidth IN: Width of uncompressed data.
|
|
// DIBHeight IN: Height of uncompressed data.
|
|
// DIBPadBytes IN: Padding (in bytes) at end of each
|
|
// row in the uncompressed data.
|
|
// DIBChannels IN: Number of components in the
|
|
// uncompressed data.
|
|
// DIBColor IN: Color space of uncompressed data.
|
|
// DIBSubsampling IN: Required to be IJL_NONE.
|
|
//
|
|
// JPGFile IN: Pointer to file based JPEG.
|
|
// JPGBytes IN: Pointer to buffer based JPEG.
|
|
// JPGSizeBytes IN: Max buffer size. Used with JPGBytes.
|
|
// OUT: Number of compressed bytes written.
|
|
// JPGWidth IN: Width of JPEG image.
|
|
// OUT: After reading (except READHEADER).
|
|
// JPGHeight IN: Height of JPEG image.
|
|
// OUT: After reading (except READHEADER).
|
|
// JPGChannels IN: Number of components in JPEG image.
|
|
// OUT: After reading (except READHEADER).
|
|
// JPGColor IN: Color space of JPEG image.
|
|
// JPGSubsampling IN: Subsampling of JPEG image.
|
|
// OUT: After reading (except READHEADER).
|
|
// JPGThumbWidth OUT: JFIF embedded thumbnail width [0-255].
|
|
// JPGThumbHeight OUT: JFIF embedded thumbnail height [0-255].
|
|
//
|
|
// cconversion_reqd OUT: If color conversion done on decode, TRUE.
|
|
// upsampling_reqd OUT: If upsampling done on decode, TRUE.
|
|
// jquality IN: [0-100] where highest quality is 100.
|
|
//
|
|
// jprops "Low-Level" IJL data structure.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*D*/
|
|
|
|
typedef struct _JPEG_CORE_PROPERTIES
|
|
{
|
|
DWORD UseJPEGPROPERTIES; // default = 0
|
|
|
|
// DIB specific I/O data specifiers.
|
|
BYTE* DIBBytes; // default = NULL
|
|
DWORD DIBWidth; // default = 0
|
|
int DIBHeight; // default = 0
|
|
DWORD DIBPadBytes; // default = 0
|
|
DWORD DIBChannels; // default = 3
|
|
IJL_COLOR DIBColor; // default = IJL_BGR
|
|
IJL_DIBSUBSAMPLING DIBSubsampling; // default = IJL_NONE
|
|
|
|
// JPEG specific I/O data specifiers.
|
|
LPTSTR JPGFile; // default = NULL
|
|
BYTE* JPGBytes; // default = NULL
|
|
DWORD JPGSizeBytes; // default = 0
|
|
DWORD JPGWidth; // default = 0
|
|
DWORD JPGHeight; // default = 0
|
|
DWORD JPGChannels; // default = 3
|
|
IJL_COLOR JPGColor; // default = IJL_YCBCR
|
|
IJL_JPGSUBSAMPLING JPGSubsampling; // default = IJL_411
|
|
DWORD JPGThumbWidth; // default = 0
|
|
DWORD JPGThumbHeight; // default = 0
|
|
|
|
// JPEG conversion properties.
|
|
DWORD cconversion_reqd; // default = TRUE
|
|
DWORD upsampling_reqd; // default = TRUE
|
|
DWORD jquality; // default = 75
|
|
|
|
// Low-level properties.
|
|
JPEG_PROPERTIES jprops;
|
|
|
|
} JPEG_CORE_PROPERTIES;
|
|
|
|
|
|
/*D*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: IJLERR
|
|
//
|
|
// Purpose: Listing of possible "error" codes returned by the IJL.
|
|
//
|
|
// See the Developer's Guide for details on appropriate usage.
|
|
//
|
|
// Context: Used for error checking.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*D*/
|
|
|
|
typedef enum
|
|
{
|
|
// The following "error" values indicate an "OK" condition.
|
|
IJL_OK = 0,
|
|
IJL_INTERRUPT_OK = 1,
|
|
IJL_ROI_OK = 2,
|
|
|
|
// The following "error" values indicate an error has occurred.
|
|
IJL_EXCEPTION_DETECTED = -1,
|
|
IJL_INVALID_ENCODER = -2,
|
|
IJL_UNSUPPORTED_SUBSAMPLING = -3,
|
|
IJL_UNSUPPORTED_BYTES_PER_PIXEL = -4,
|
|
IJL_MEMORY_ERROR = -5,
|
|
IJL_BAD_HUFFMAN_TABLE = -6,
|
|
IJL_BAD_QUANT_TABLE = -7,
|
|
IJL_INVALID_JPEG_PROPERTIES = -8,
|
|
IJL_ERR_FILECLOSE = -9,
|
|
IJL_INVALID_FILENAME = -10,
|
|
IJL_ERROR_EOF = -11,
|
|
IJL_PROG_NOT_SUPPORTED = -12,
|
|
IJL_ERR_NOT_JPEG = -13,
|
|
IJL_ERR_COMP = -14,
|
|
IJL_ERR_SOF = -15,
|
|
IJL_ERR_DNL = -16,
|
|
IJL_ERR_NO_HUF = -17,
|
|
IJL_ERR_NO_QUAN = -18,
|
|
IJL_ERR_NO_FRAME = -19,
|
|
IJL_ERR_MULT_FRAME = -20,
|
|
IJL_ERR_DATA = -21,
|
|
IJL_ERR_NO_IMAGE = -22,
|
|
IJL_FILE_ERROR = -23,
|
|
IJL_INTERNAL_ERROR = -24,
|
|
IJL_BAD_RST_MARKER = -25,
|
|
IJL_THUMBNAIL_DIB_TOO_SMALL = -26,
|
|
IJL_THUMBNAIL_DIB_WRONG_COLOR = -27,
|
|
IJL_RESERVED = -99
|
|
|
|
} IJLERR;
|
|
|
|
|
|
|
|
|
|
/* /////////////////////////////////////////////////////////////////////////
|
|
// Function Prototypes (API Calls) //
|
|
///////////////////////////////////////////////////////////////////////// */
|
|
|
|
|
|
/*F*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: ijlInit
|
|
//
|
|
// Purpose: Used to initalize the IJL.
|
|
//
|
|
// See the Developer's Guide for details on appropriate usage.
|
|
//
|
|
// Context: Always call this before anything else.
|
|
// Also, only call this with a new jcprops structure, or
|
|
// after calling IJL_Free. Otherwise, dynamically
|
|
// allocated memory may be leaked.
|
|
//
|
|
// Returns: Any IJLERR value. IJL_OK indicates success.
|
|
//
|
|
// Parameters:
|
|
// jcprops Pointer to an externally allocated
|
|
// JPEG_CORE_PROPERTIES structure.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*F*/
|
|
|
|
IJLAPI(IJLERR, ijlInit, ( JPEG_CORE_PROPERTIES* jcprops ));
|
|
|
|
|
|
/*F*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: ijlFree
|
|
//
|
|
// Purpose: Used to properly close down the IJL.
|
|
//
|
|
// See the Developer's Guide for details on appropriate usage.
|
|
//
|
|
// Context: Always call this when done using the IJL to perform
|
|
// clean-up of dynamically allocated memory.
|
|
// Note, IJL_Init will have to be called to use the
|
|
// IJL again.
|
|
//
|
|
// Returns: Any IJLERR value. IJL_OK indicates success.
|
|
//
|
|
// Parameters:
|
|
// jcprops Pointer to an externally allocated
|
|
// JPEG_CORE_PROPERTIES structure.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*F*/
|
|
|
|
IJLAPI(IJLERR, ijlFree, ( JPEG_CORE_PROPERTIES* jcprops ));
|
|
|
|
|
|
/*F*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: IJL_Read
|
|
//
|
|
// Purpose: Used to read JPEG data (entropy, or header, or both) into
|
|
// a user-supplied buffer (to hold the image data) and/or
|
|
// into the JPEG_CORE_PROPERTIES structure (to hold the
|
|
// header info).
|
|
//
|
|
// Context: See the Developer's Guide for a detailed description
|
|
// on the use of this function. The jcprops main data
|
|
// members are checked for consistency.
|
|
//
|
|
// Returns: Any IJLERR value. IJL_OK indicates success.
|
|
//
|
|
// Parameters:
|
|
// jcprops Pointer to an externally allocated
|
|
// JPEG_CORE_PROPERTIES structure.
|
|
// iotype Specifies what type of read operation to perform.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*F*/
|
|
|
|
IJLAPI(IJLERR, ijlRead, ( JPEG_CORE_PROPERTIES* jcprops, IJLIOTYPE iotype ));
|
|
|
|
|
|
/*F*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: ijlWrite
|
|
//
|
|
// Purpose: Used to write JPEG data (entropy, or header, or both) into
|
|
// a user-supplied buffer (to hold the image data) and/or
|
|
// into the JPEG_CORE_PROPERTIES structure (to hold the
|
|
// header info).
|
|
//
|
|
// Context: See the Developer's Guide for a detailed description
|
|
// on the use of this function. The jcprops main data
|
|
// members are checked for consistency.
|
|
//
|
|
// Returns: Any IJLERR value. IJL_OK indicates success.
|
|
//
|
|
// Parameters:
|
|
// jcprops Pointer to an externally allocated
|
|
// JPEG_CORE_PROPERTIES structure.
|
|
// iotype Specifies what type of write operation to perform.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*F*/
|
|
|
|
IJLAPI(IJLERR, ijlWrite, ( JPEG_CORE_PROPERTIES* jcprops, IJLIOTYPE iotype ));
|
|
|
|
|
|
/*F*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: ijlGetLibVersion
|
|
//
|
|
// Purpose: To identify the version number of the IJL.
|
|
//
|
|
// Context: Call to get the IJL version number.
|
|
//
|
|
// Returns: pointer to IJLibVersion struct
|
|
//
|
|
// Parameters: none
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*F*/
|
|
|
|
IJLAPI(const IJLibVersion*, ijlGetLibVersion, (void));
|
|
|
|
|
|
/*F*
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Name: ijlErrorStr
|
|
//
|
|
// Purpose: Gets the string to describe error code.
|
|
//
|
|
// Context: Is called to get descriptive string on arbitrary IJLERR code.
|
|
//
|
|
// Returns: pointer to string
|
|
//
|
|
// Parameters: IJLERR - IJL error code
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
*F*/
|
|
|
|
//IJLAPI(const LPCTSTR, ijlErrorStr, (IJLERR code));
|
|
|
|
|
|
|
|
|
|
#if defined( __cplusplus )
|
|
}
|
|
#endif
|
|
|
|
#endif // __IJL_H__
|