28 #define FIX_1_082 17734 29 #define FIX_1_847 30274 30 #define FIX_1_414 23170 31 #define FIX_2_613 21407 // divided by two to fit the range 33 #define IDCTMUL(a, b) ((int)((a) * (unsigned)(b)) >> 16) 37 int tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8, tmp9, tmpA;
38 int tmpB, tmpC, tmpD, tmpE, tmpF, tmp10, tmp11, tmp12, tmp13, tmp14;
40 tmp0 = blk[5] - blk[3];
41 tmp1 = blk[5] + blk[3];
42 tmp2 = blk[1] - blk[7];
43 tmp3 = blk[1] + blk[7];
49 tmp9 = tmp7 * 4 - tmp8;
51 tmpB = tmp6 * 4 + tmpA;
52 tmpC = blk[2] + blk[6];
53 tmpD = blk[2] - blk[6];
54 tmpE = blk[0] - blk[4];
55 tmpF = blk[0] + blk[4];
63 blk[0] = tmp14 + tmp8;
64 blk[1] = tmp13 + tmp9;
65 blk[2] = tmp11 + tmpA;
66 blk[3] = tmp12 - tmpB;
67 blk[4] = tmp12 + tmpB;
68 blk[5] = tmp11 - tmpA;
69 blk[6] = tmp13 - tmp9;
70 blk[7] = tmp14 - tmp8;
75 int tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8, tmp9, tmpA;
76 int tmpB, tmpC, tmpD, tmpE, tmpF, tmp10, tmp11, tmp12, tmp13, tmp14;
78 tmp0 = blk[5 * 8] - blk[3 * 8];
79 tmp1 = blk[5 * 8] + blk[3 * 8];
80 tmp2 = blk[1 * 8] * 2 - (blk[7 * 8] >> 2);
81 tmp3 = blk[1 * 8] * 2 + (blk[7 * 8] >> 2);
86 tmp8 = (tmp3 + tmp1) >> 1;
87 tmp9 = tmp7 * 2 - tmp8;
89 tmpB = tmp6 * 2 + tmpA;
90 tmpC = blk[2 * 8] + (blk[6 * 8] >> 1) >> 1;
91 tmpD = blk[2 * 8] - (blk[6 * 8] >> 1);
92 tmpE = (blk[0 * 8] >> 1) - (blk[4 * 8] >> 1) + 0x2020;
93 tmpF = (blk[0 * 8] >> 1) + (blk[4 * 8] >> 1) + 0x2020;
101 blk[0 * 8] = (tmp14 + tmp8) >> 6;
102 blk[1 * 8] = (tmp13 + tmp9) >> 6;
103 blk[2 * 8] = (tmp11 + tmpA) >> 6;
104 blk[3 * 8] = (tmp12 - tmpB) >> 6;
105 blk[4 * 8] = (tmp12 + tmpB) >> 6;
106 blk[5 * 8] = (tmp11 - tmpA) >> 6;
107 blk[6 * 8] = (tmp13 - tmp9) >> 6;
108 blk[7 * 8] = (tmp14 - tmp8) >> 6;
115 for (i = 0; i < 8; i++)
117 for (i = 0; i < 8; i++)
120 for (i = 0; i < 8; i++) {
121 for (j = 0; j < 8; j++)
Macro definitions for various function/variable attributes.
HQ/HQA variant of AAN IDCT It differs from the standard AAN IDCT in precision and in the second stage...
The exact code depends on how similar the blocks are and how related they are to the block
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
void(* idct_put)(uint8_t *dst, int stride, int16_t *block)
static void idct_col(int16_t *blk)
static void hq_idct_put(uint8_t *dst, int stride, int16_t *block)
static void idct_row(int16_t *blk)
GLint GLenum GLboolean GLsizei stride
common internal and external API header
av_cold void ff_hqdsp_init(HQDSPContext *c)