Back to Discrete cosine transform
// Description: Discrete cosine transform
#ifndef PASTELGFX_COSINE_TRANSFORM_H
#define PASTELGFX_COSINE_TRANSFORM_H
#include "pastel/sys/range.h"
namespace Pastel
{
//! Computes a discrete cosine transform.
/*!
Preconditions:
isPowerOfTwo(input.size())
*/
template <
typename Real_ConstRange,
typename Real_Range>
void dct(
const Real_ConstRange& input,
const Real_Range& output);
//! Computes a discrete cosine transform.
/*!
This is a convenience function that calls:
dct(inputOutput, inputOutput)
See the documentation for that function.
*/
template <typename Real_Range>
void dct(const Real_Range& inputOutput);
PASTEL_RANGE_ALGORITHM(dct, Dct);
//! Computes an inverse discrete cosine transform.
/*!
Preconditions:
isPowerOfTwo(input.size())
*/
template <
typename Real_ConstRange,
typename Real_Range>
void inverseDct(
const Real_ConstRange& input,
const Real_Range& output);
//! Computes an inverse discrete cosine transform.
/*!
This is a convenience function that calls:
inverseDct(inputOutput, inputOutput.begin())
See the documentation for that function.
*/
template <typename Real_Range>
void inverseDct(const Real_Range& inputOutput);
PASTEL_RANGE_ALGORITHM(inverseDct, InverseDct);
//! Computes an orthogonal discrete cosine transform.
/*!
Preconditions:
isPowerOfTwo(input.size())
*/
template <
typename Real_ConstRange,
typename Real_Range>
void orthogonalDct(
const Real_ConstRange& input,
const Real_Range& output);
//! Computes an orthogonal discrete cosine transform.
/*!
This is a convenience function that calls:
orthogonalDct(inputOutput, inputOutput)
See the documentation for that function.
*/
template <typename Real_Range>
void orthogonalDct(const Real_Range& inputOutput);
PASTEL_RANGE_ALGORITHM(orthogonalDct, OrthogonalDct);
//! Computes an inverse orthogonal discrete cosine transform.
/*!
Preconditions:
isPowerOfTwo(input.size())
*/
template <
typename Real_ConstRange,
typename Real_Range>
void inverseOrthogonalDct(
const Real_ConstRange& input,
const Real_Range& output);
//! Computes an orthogonal discrete cosine transform.
/*!
This is a convenience function that calls:
inverseOrthogonalDct(inputOutput, inputOutput)
See the documentation for that function.
*/
template <typename Real_Range>
void inverseOrthogonalDct(
const Real_Range& inputOutput);
PASTEL_RANGE_ALGORITHM(inverseOrthogonalDct, InverseOrthogonalDct);
//! Computes a complex discrete cosine transform.
/*!
Preconditions:
isPowerOfTwo(input.size())
*/
template <
typename Complex_ConstRange,
typename Complex_Range>
void complexDct(
const Complex_ConstRange& input,
const Complex_Range& output);
//! Computes a complex discrete cosine transform.
/*!
This is a convenience function that calls:
complexDct(inputOutput, inputOutput)
See the documentation for that function.
*/
template <typename Real_Range>
void complexDct(const Real_Range& inputOutput);
PASTEL_RANGE_ALGORITHM(complexDct, ComplexDct);
//! Computes an inverse complex discrete cosine transform.
/*!
Preconditions:
isPowerOfTwo(input.size())
*/
template <
typename Complex_ConstRange,
typename Complex_Range>
void inverseComplexDct(
const Complex_ConstRange& input,
const Complex_Range& output);
//! Computes an inverse complex discrete cosine transform.
/*!
This is a convenience function that calls:
inverseComplexDct(inputOutput, inputOutput.begin())
See the documentation for that function.
*/
template <typename Real_Range>
void inverseComplexDct(const Real_Range& inputOutput);
PASTEL_RANGE_ALGORITHM(inverseComplexDct, InverseComplexDct);
//! Computes a unitary discrete cosine transform.
/*!
Preconditions:
isPowerOfTwo(input.size())
*/
template <
typename Complex_ConstRange,
typename Complex_Range>
void unitaryDct(
const Complex_ConstRange& input,
const Complex_Range& output);
//! Computes a unitary discrete cosine transform.
/*!
This is a convenience function that calls:
unitaryDct(inputOutput, inputOutput.begin())
See the documentation for that function.
*/
template <typename Real_Range>
void unitaryDct(const Real_Range& inputOutput);
PASTEL_RANGE_ALGORITHM(unitaryDct, UnitaryDct);
//! Computes an inverse unitary discrete cosine transform.
/*!
Preconditions:
isPowerOfTwo(input.size())
*/
template <
typename Complex_ConstRange,
typename Complex_Range>
void inverseUnitaryDct(
const Complex_ConstRange& input,
Complex_Range output);
//! Computes an inverse unitary discrete cosine transform.
/*!
This is a convenience function that calls:
inverseUnitaryDct(inputOutput, inputOutput.begin())
See the documentation for that function.
*/
template <typename Real_Range>
void inverseUnitaryDct(const Real_Range& inputOutput);
PASTEL_RANGE_ALGORITHM(inverseUnitaryDct, InverseUnitaryDct);
}
#include "pastel/gfx/transform/cosine_transform.hpp"
#endif