MCPcopy Create free account
hub / github.com/creatale/node-dv / DCT

Function DCT

deps/opencv/modules/core/src/dxt.cpp:2076–2116  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2074 http://www.ece.utexas.edu/~bevans/courses/ee381k/lectures/09_DCT/lecture9/:
2075*/
2076template<typename T> static void
2077DCT( const T* src, int src_step, T* dft_src, T* dft_dst, T* dst, int dst_step,
2078 int n, int nf, int* factors, const int* itab, const Complex<T>* dft_wave,
2079 const Complex<T>* dct_wave, const void* spec, Complex<T>* buf )
2080{
2081 static const T sin_45 = (T)0.70710678118654752440084436210485;
2082 int j, n2 = n >> 1;
2083
2084 src_step /= sizeof(src[0]);
2085 dst_step /= sizeof(dst[0]);
2086 T* dst1 = dst + (n-1)*dst_step;
2087
2088 if( n == 1 )
2089 {
2090 dst[0] = src[0];
2091 return;
2092 }
2093
2094 for( j = 0; j < n2; j++, src += src_step*2 )
2095 {
2096 dft_src[j] = src[0];
2097 dft_src[n-j-1] = src[src_step];
2098 }
2099
2100 RealDFT( dft_src, dft_dst, n, nf, factors,
2101 itab, dft_wave, n, spec, buf, 0, 1.0 );
2102 src = dft_dst;
2103
2104 dst[0] = (T)(src[0]*dct_wave->re*sin_45);
2105 dst += dst_step;
2106 for( j = 1, dct_wave++; j < n2; j++, dct_wave++,
2107 dst += dst_step, dst1 -= dst_step )
2108 {
2109 T t0 = dct_wave->re*src[j*2-1] - dct_wave->im*src[j*2];
2110 T t1 = -dct_wave->im*src[j*2-1] - dct_wave->re*src[j*2];
2111 dst[0] = t0;
2112 dst1[0] = t1;
2113 }
2114
2115 dst[0] = src[n-1]*dct_wave->re;
2116}
2117
2118
2119template<typename T> static void

Callers 2

DCT_32fFunction · 0.85
DCT_64fFunction · 0.85

Calls 1

RealDFTFunction · 0.85

Tested by

no test coverage detected