MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / ff_ref_fdct

Function ff_ref_fdct

libavcodec/dctref.c:59–87  ·  view source on GitHub ↗

* Transform 8x8 block of data with a double precision forward DCT * This is a reference implementation. * * @param block pointer to 8x8 block of data to transform */

Source from the content-addressed store, hash-verified

57 * @param block pointer to 8x8 block of data to transform
58 */
59void ff_ref_fdct(short *block)
60{
61 /* implement the equation: block = coefficients * block * coefficients' */
62
63 unsigned int i, j, k;
64 double out[8 * 8];
65
66 /* out = coefficients * block */
67 for (i = 0; i < 64; i += 8) {
68 for (j = 0; j < 8; ++j) {
69 double tmp = 0;
70 for (k = 0; k < 8; ++k) {
71 tmp += coefficients[i + k] * block[k * 8 + j];
72 }
73 out[i + j] = tmp * 8;
74 }
75 }
76
77 /* block = out * (coefficients') */
78 for (j = 0; j < 8; ++j) {
79 for (i = 0; i < 64; i += 8) {
80 double tmp = 0;
81 for (k = 0; k < 8; ++k) {
82 tmp += out[i + k] * coefficients[j * 8 + k];
83 }
84 block[i + j] = floor(tmp + 0.499999999999);
85 }
86 }
87}
88
89/**
90 * Transform 8x8 block of data with a double precision inverse DCT <br>

Callers 1

init_blockFunction · 0.85

Calls 1

floorFunction · 0.85

Tested by 1

init_blockFunction · 0.68