1 line
2.9 KiB
C
1 line
2.9 KiB
C
/*
|
|
* jdct.h
|
|
*
|
|
* Copyright (C) 1994, Thomas G. Lane.
|
|
* This file is part of the Independent JPEG Group's software.
|
|
* For conditions of distribution and use, see the accompanying README file.
|
|
*
|
|
* This include file contains common declarations for the forward and
|
|
* inverse DCT modules. These declarations are private to the DCT managers
|
|
* (jcdctmgr.c, jddctmgr.c) and the individual DCT algorithms.
|
|
* The individual DCT algorithms are kept in separate files to ease
|
|
* machine-dependent tuning (e.g., assembly coding).
|
|
*/
|
|
|
|
|
|
/*
|
|
* A forward DCT routine is given a pointer to a work area of type int[];
|
|
* the DCT is to be performed in-place in that buffer. (May want to change
|
|
* this??)
|
|
* The DCT inputs are expected to be signed (range +-CENTERJSAMPLE).
|
|
* For now, quantization of the output coefficients is done by jcdctmgr.c.
|
|
*/
|
|
|
|
typedef JMETHOD(void, forward_dct_method_ptr, (int * data));
|
|
|
|
/*
|
|
* An inverse DCT routine is given a pointer to the input JBLOCK and a pointer
|
|
* to an output sample array. The output data is to be placed into the
|
|
* sample array starting at a specified column. (Any row offset needed will
|
|
* be applied to the array pointer before it is passed to the IDCT code.)
|
|
* Note that the number of samples emitted by the IDCT routine is
|
|
* DCT_scaled_size * DCT_scaled_size.
|
|
*/
|
|
|
|
/* typedef inverse_DCT_method_ptr is declared in jpegint.h */
|
|
|
|
|
|
/*
|
|
* Each IDCT routine is responsible for range-limiting its results and
|
|
* converting them to unsigned form (0..MAXJSAMPLE). The raw outputs could
|
|
* be quite far out of range if the input data is corrupt, so a bulletproof
|
|
* range-limiting step is required. We use a mask-and-table-lookup method
|
|
* to do the combined operations quickly. See the comments with
|
|
* prepare_range_limit_table (in jdmaster.c) for more info.
|
|
*/
|
|
|
|
#define IDCT_range_limit(cinfo) ((cinfo)->sample_range_limit + CENTERJSAMPLE)
|
|
|
|
#define RANGE_MASK (MAXJSAMPLE * 4 + 3) /* 2 bits wider than legal samples */
|
|
|
|
|
|
/* Short forms of external names for systems with brain-damaged linkers. */
|
|
|
|
#ifdef NEED_SHORT_EXTERNAL_NAMES
|
|
#define jpeg_fdct_llm jFDllm
|
|
#define jpeg_idct_llm jRDllm
|
|
#define jpeg_idct_4x4 jRD4x4
|
|
#define jpeg_idct_2x2 jRD2x2
|
|
#define jpeg_idct_1x1 jRD1x1
|
|
#endif /* NEED_SHORT_EXTERNAL_NAMES */
|
|
|
|
/* Extern declarations for the forward and inverse DCT routines. */
|
|
|
|
EXTERN void jpeg_fdct_llm JPP((int * data));
|
|
|
|
EXTERN void jpeg_idct_llm JPP((j_decompress_ptr cinfo, JCOEFPTR coef_block,
|
|
JSAMPARRAY output_buf, JDIMENSION output_col));
|
|
EXTERN void jpeg_idct_4x4 JPP((j_decompress_ptr cinfo, JCOEFPTR coef_block,
|
|
JSAMPARRAY output_buf, JDIMENSION output_col));
|
|
EXTERN void jpeg_idct_2x2 JPP((j_decompress_ptr cinfo, JCOEFPTR coef_block,
|
|
JSAMPARRAY output_buf, JDIMENSION output_col));
|
|
EXTERN void jpeg_idct_1x1 JPP((j_decompress_ptr cinfo, JCOEFPTR coef_block,
|
|
JSAMPARRAY output_buf, JDIMENSION output_col));
|