int QccFastDCTInitialize(QccFastDCT *transform);
int QccFastDCTCreate(QccFastDCT
*transform, int length);
void QccFastDCTFree(QccFastDCT *transform);
int QccFastDCTForwardTransform1D(const QccVector input_signal, QccVector
output_signal, int length, const QccFastDCT *transform);
int QccFastDCTInverseTransform1D(const
QccVector input_signal, QccVector output_signal, int length, const QccFastDCT
*transform);
int QccFastDCTForwardTransform2D(const QccMatrix input_block,
QccMatrix output_block, int num_rows, int num_cols, const QccFastDCT *transform_horizontal,
const QccFastDCT *transform_vertical);
int QccFastDCTInverseTransform2D(const
QccMatrix input_block, QccMatrix output_block, int num_rows, int num_cols,
const QccFastDCT *transform_horizontal, const QccFastDCT *transform_vertical);
The DCT transform, a QccFastDCT structure, must be initialized and created before use. Specifically, QccFastDCTInitialize() should be called before any use of a QccFastDCT structure. Then, QccFastDCTCreate() is called to setup the transform for the desired length.
QccFastDCTForwardTransform1D() and QccFastDCTInverseTransform1D() implement the forward and inverse transforms for a 1D signal. The specified signal length must match the length of the specified transform.
QccFastDCTForwardTransform2D() and QccFastDCTInverseTransform2D() implement the forward and inverse transforms for a 2D block. transform_horizontal is applied horizontally across the columns of the block; transform_vertical is applied vertically across the rows of the block. The size of the block must match the lengths of the transforms; specifically, num_rows must match the length of transform_vertical, and num_cols must match the length of transform_horizontal.
A. K. Jain, Fundamentals of Digital Image Processing. Englewood Cliffs, NJ: Prentice Hall, 1989.