/*************************************************************** Copyright (c) 1994, Xerox Corporation. All rights reserved. Copyright protection claimed includes all forms and matters of copyrightable material and information now allowed by statutory or judicial law or hereafter granted, including without limitation, material generated from the software programs which are displayed on the screen such as icons, screen display looks, etc. ***************************************************************/ #ifndef _JPEG_PUB_INCLUDED_ #define _JPEG_PUB_INCLUDED_ #ifndef _TYPES_PUB_INCLUDED #include "types.pub" #endif #ifndef _IAERROR_PUB_INCLUDED_ #include "iaerror.pub" #endif #ifndef _JPEH_H_INCLUDED_ #include "jpeg.h" #endif IP_RCSINFO(jpeg_pub_RCSInfo, "$RCSfile: jpeg.pub,v $; $Revision: 1.0 $") /* $Date: 12 Jun 1996 05:47:44 $ */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ Int32 CDECL jcInit(compress_info_ptr cinfo, Int32 imageWidth, Int32 imageHeight, Int32 numComponents, Int32 quality, Int32 CDECL (*writeCallback) (compress_info_ptr cinfo, UInt8 *JPEGInternalBuffer, Int32 nBytes), void *userData, void CDECL (*jcSpecialOrders)(compress_info_ptr cinfo) ); /************************************************************************* This routine must be called at the start of the image compression process. It initializes all internal data structures and allocates a cinfo structure and working storage. Note that this routine will write header data in "JFIF" file format into the output file or memory buffer. cinfo Address of a pointer to a compression data structure. Storage will be allocated for this structure by jcInit. A pointer to the cinfo structure is returned to the calling process. imageWidth Number of pixels per image line. imageHeight Number of lines in the image. numComponents Number of input components or bands. This will be 1 for grayscale images and 3 for color images. The compressor expects color data to be interleaved bytes in the sequence RGBRGBRGB ........ quality A quality index ranging from 0 to 100. The usual value is 75. Higher values produce higher quality. Values below 50 will generally produce inferior results, but this is highly dependent on image content. Settings of 90 and above should be visually indistiguishable from the original. A setting of 100 will result in NO quantization, so that the only errors will be those due to arithmetic precision limitations. (There will also be very little compression at this setting). writeCallback A user-provided callback function. You must provide this function to write out data from the compressor. Your routine must move nBytes from the JPEGInternalBuffer to either a file or your own buffer. The value of nBytes can range from 1 to 4096. userData A pointer to some user data. This pointer is copied to the cinfo structure element cinfo.userData. It can be used for any purpose, but is most convenient for recording the output destination for the writeCallback to use. If your application has makes no use of this pointer, pass in a value of NULL. Return value: ia_successful on normal completion ***********************************************************************/ Int32 CDECL jcMCURow(compress_info_ptr cinfo, JSAMPIMAGE inbuf) ; /********************************************************************* This routine must be called once for each MCU row in the image. For each call the caller's buffer inBuf must contain the next full or partial MCU row of image data. cinfo Pointer to compression data structure. inbuf This is the source for the compressed data. Its value must change on every MCU row. The JSAMPIMAGE data type is a 2-D array of UInt8 pointers of the form UInt8 *inbuf[#color_components][nrows] Each of the pointers must be set by the caller to point to the source for the row being input. Return value: ia_successful on normal completion ***********************************************************************/ Int32 CDECL jcTerm(compress_info_ptr cinfo); /************************************************************************* This routine is called after the last call to jcMCURow, i.e. after all of the input data has been read and compressed. It frees all internally allocated memory. It does not free any of the caller's buffers or close any files. Note that this routine writes trailer data to the output file or buffer. Therefore, it must be called BEFORE output files are closed or the caller's output buffer is freed. cinfo Pointer to compression data structure. jcTerm frees the memory allocated for the cinfo structure. Therefore no use should be made of the cinfo pointer (for this image) after the call to jcTerm. Return value: ia_successful on normal completion ***********************************************************************/ Int32 CDECL jdInit(decompress_info_ptr dinfo, Int32 *imageWidth, Int32 *imageHeight, Int32 *numComponents, Int32 CDECL (*readCallback) (decompress_info_ptr dinfo, UInt8 *JPEGInternalBuffer, Int32 nBytes), void *userData, void CDECL (*jdSpecialOrders)(decompress_info_ptr dinfo) ); /************************************************************************* This routine must be called at the start of the image decompression process. It initializes all internal data structures and allocates working storage. Note that this routine will read header data from the input file or memory buffer. dinfo Address of a pointer to a decompression data structure. Storage will be allocated for this structure by jdInit. A pointer to the dinfo structure is returned to the calling process. imageWidth Pointer to number of pixels per image line (returned to calling program). imageHeight Pointer to number of lines in the image (returned to calling program). numComponents Pointer to number of input components or band (returned to calling program). This will be 1 for grayscale images and 3 for color images. The decompressor returns color data as interleaved bytes in the sequence: RGBRGBRGB ........ readCallback A user-provided callback function . You must provide this function to read in data to the decompressor. Your routine must move nBytes from either a file or your own buffer to the JPEGInternalBuffer. The size of nBytes can be from 1 to 4096. userData A pointer to some user data. This is copied to the dinfo structure element dinfo.userData. It can be used for any purpose, but is most convenient for recording the source address for readCallback to use. jdSpecialOrders Function pointer argument. This function will be called during the initialization process to allow any special initailization overrides to be performed. In the original Independent JPEG Group implementation, this was called the user interface d_ui_method_selection. If nothing non-standard is required, just say NULL. Return value: ia_successful on normal completion ***********************************************************************/ Int32 CDECL jdMCURow(decompress_info_ptr dinfo, JSAMPIMAGE outBuf) ; /************************************************************************* This routine must be called once for each MCU row in the image. For each call the caller's buffer outBuf will receive the next decompressed MCU row of image data. dinfo Pointer to decompression data structure. outBuf This is the final destination for the decompressed data. Its value must change on every MCU row. The JSAMPIMAGE data type is a 2-D array of UInt8 pointers of the form UInt8 *outbuf[#color_components][nrows] Each of the pointers must be set by the caller to point to the destination for the row being output. Return value: ia_successful on normal completion ***********************************************************************/ Int32 CDECL jdTerm(decompress_info_ptr dinfo); /************************************************************************* This routine is called after the last call to jdMCURow, i.e. after all of the output data has been decompressed and written. It frees all internally allocated memory. It does not free any of the caller's buffers or close files. Note that this routine will read trailer data from the input file or buffer. Therefore, it must be called BEFORE input files are closed or the caller's input buffer is freed. dinfo Pointer to decompression data structure. jdTerm frees the memory allocated for the dinfo structure. Therefore no use should be made of the dinfo pointer (for this image) after the call to jdTerm. Return value: ia_successful on normal completion ***********************************************************************/ Int32 CDECL jdQuery(decompress_info_ptr dinfo, Int32 CDECL (*readCallback) (decompress_info_ptr dinfo, UInt8 *JPEGInternalBuffer, Int32 nBytes), void *userData ); /****************************************************************** This routine is used for Querying the contents of a JFIF format compressed image file without actually doing any decompression. The fields of the dinfo structure are filled in, based on a reading of the image headers. If the compressed data is in an actual file, this routine expacts that file to be open. It does not rewind the file. Rewinding the file, if desired, is the caller's responsibility. dinfo Pointer to decompression data structure. jdTerm frees the memory allocated for the dinfo structure. Therefore no use should be made of the dinfo pointer (for this image) after the call to jdTerm. readCallback A user-provided callback function . You must provide this function to read in data to the decompressor. Your routine must move nBytes from either a file or your own buffer to the JPEGInternalBuffer. The size of nBytes can be from 1 to 4096. userData A pointer to some user data. This is copied to the dinfo structure element dinfo.userData. It can be used for any purpose, but is most convenient for recording the source address for readCallback to use. Return value: ia_successful on normal completion *******************************************************************/ /****************************************************************** Convenience Functions for Information and Data Access Several functions are defined for convenience in dealing with MCU sizes, allocating buffers and getting/setting compression parameters. They all take either a CompressInfo or DecompressInfo struct pointer as an argument. Note, however, that these functions work properly only when used AFTER the initialization call (jcInit or jdInit) has been made. ***********************************************************************/ Int32 CDECL jcGetImageLinesPerMCU(CompressInfo *cinfo) ; Int32 CDECL jdGetImageLinesPerMCU(DecompressInfo *dinfo) ; /****************************************************************** Returns the number of image lines in an MCU (minimum compression unit). (Typically 8 for grayscale images and 16 for color images, but don't count on it. Use this function !) ***********************************************************************/ Int32 CDECL jcGetMCURowsPerImage(CompressInfo *cinfo); Int32 CDECL jdGetMCURowsPerImage(DecompressInfo *dinfo); /****************************************************************** Returns the number of MCU rows in an image, with partial rows rounded up. For example, a 259 line color image would have 17 MCU rows, assuming a 16 line MCU. ***********************************************************************/ Int32 CDECL jcGetLinesToRead(CompressInfo *cinfo) ; /****************************************************************** Returns, for the current MCU row to be read, the number of image lines to read. This will be the image rows per MCU for all MCU rows except, possibly, the last. ***********************************************************************/ Int32 CDECL jdGetLinesToWrite(DecompressInfo *dinfo); /****************************************************************** Returns, for the current MCU row to be written, the number of image lines to write. This will be image rows per MCU for all MCU rows except, possibly, the last. ***********************************************************************/ JSAMPIMAGE CDECL jcAllocMCURowInputBuffer(CompressInfo *cinfo, Bool allocLineMem); JSAMPIMAGE CDECL jdAllocMCURowOutputBuffer(DecompressInfo *dinfo, Bool allocLineMem); /****************************************************************** Allocates a buffer suitable for reading in or writing out an MCU row of image data, properly accounting for image type and size. Returns a pointer to the allocated memory in buf. ***********************************************************************/ const char * CDECL jerrorString( Int32 errcode); /****************************************************************** Returns a text string with descriptive information about the error condition indicated by error code. These are the set of JERR_xxx codes listed in jpeg.h ***********************************************************************/ void * CDECL jalloc ( compress_info_ptr cinfo, size_t sizeofobject ); /****************************************************************** Allocates a block of memory of size sizeofobject bytes. Maintains a linked list of alll memory allocated using this routine. ALL JPEG memory is allocated with this function, allowing memory freeing to be accomplished in all variations by a single routine (free_all). On an out_of_memory error, the function returns via the error exit routines which execute a longjmp. ***********************************************************************/ Int32 CDECL jfree ( compress_info_ptr cinfo , void *ptr); /******************************************************************** Frees a block of memory allocated by jalloc. ********************************************************************/ Int32 CDECL jfree_all ( compress_info_ptr cinfo ); /******************************************************************** Frees all memory allocated by jalloc since the last call to jmem_init(). ********************************************************************/ #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* _JPEG_PUB_INCLUDED_ */