Doxygen Source Code Documentation
idct.c File Reference
#include "config.h"
#include <stdlib.h>
#include <inttypes.h>
#include "mpeg2.h"
#include "mpeg2_internal.h"
#include "attributes.h"
Go to the source code of this file.
Defines | |
#define | W1 2841 |
#define | W2 2676 |
#define | W3 2408 |
#define | W5 1609 |
#define | W6 1108 |
#define | W7 565 |
#define | CLIP(i) ((clip_lut+384)[(i)]) |
#define | BUTTERFLY(t0, t1, W0, W1, d0, d1) |
Functions | |
void | idct_row (int16_t *const block) |
void | idct_col (int16_t *const block) |
void | mpeg2_idct_copy_c (int16_t *block, uint8_t *dest, const int stride) |
void | mpeg2_idct_add_c (const int last, int16_t *block, uint8_t *dest, const int stride) |
void | mpeg2_idct_init (uint32_t accel) |
Variables | |
void(* | mpeg2_idct_copy )(int16_t *block, uint8_t *dest, int stride) |
void(* | mpeg2_idct_add )(int last, int16_t *block, uint8_t *dest, int stride) |
uint8_t | clip_lut [1024] |
Define Documentation
|
Value: do { \ int tmp = W0 * (d0 + d1); \ t0 = tmp + (W1 - W0) * d1; \ t1 = tmp - (W1 + W0) * d0; \ } while (0) Definition at line 55 of file idct.c. Referenced by idct_col(), and idct_row(). |
|
Definition at line 46 of file idct.c. Referenced by mpeg2_idct_add_c(), mpeg2_idct_copy_c(), mri_warp3D_cubic(), mri_warp3D_linear(), mri_warp3D_NN(), and mri_warp3D_quintic(). |
|
Definition at line 33 of file idct.c. Referenced by idct_col(), and idct_row(). |
|
Definition at line 34 of file idct.c. Referenced by idct_col(), and idct_row(). |
|
Definition at line 35 of file idct.c. Referenced by idct_col(), and idct_row(). |
|
Definition at line 36 of file idct.c. Referenced by idct_col(), and idct_row(). |
|
Definition at line 37 of file idct.c. Referenced by idct_col(), and idct_row(). |
|
Definition at line 38 of file idct.c. Referenced by idct_col(), and idct_row(). |
Function Documentation
|
Definition at line 116 of file idct.c. References a2, BUTTERFLY, W1, W2, W3, W5, W6, and W7. Referenced by mpeg2_idct_add_c(), and mpeg2_idct_copy_c().
00117 { 00118 int d0, d1, d2, d3; 00119 int a0, a1, a2, a3, b0, b1, b2, b3; 00120 int t0, t1, t2, t3; 00121 00122 d0 = (block[8*0] << 11) + 65536; 00123 d1 = block[8*1]; 00124 d2 = block[8*2] << 11; 00125 d3 = block[8*3]; 00126 t0 = d0 + d2; 00127 t1 = d0 - d2; 00128 BUTTERFLY (t2, t3, W6, W2, d3, d1); 00129 a0 = t0 + t2; 00130 a1 = t1 + t3; 00131 a2 = t1 - t3; 00132 a3 = t0 - t2; 00133 00134 d0 = block[8*4]; 00135 d1 = block[8*5]; 00136 d2 = block[8*6]; 00137 d3 = block[8*7]; 00138 BUTTERFLY (t0, t1, W7, W1, d3, d0); 00139 BUTTERFLY (t2, t3, W3, W5, d1, d2); 00140 b0 = t0 + t2; 00141 b3 = t1 + t3; 00142 t0 = (t0 - t2) >> 8; 00143 t1 = (t1 - t3) >> 8; 00144 b1 = (t0 + t1) * 181; 00145 b2 = (t0 - t1) * 181; 00146 00147 block[8*0] = (a0 + b0) >> 17; 00148 block[8*1] = (a1 + b1) >> 17; 00149 block[8*2] = (a2 + b2) >> 17; 00150 block[8*3] = (a3 + b3) >> 17; 00151 block[8*4] = (a3 - b3) >> 17; 00152 block[8*5] = (a2 - b2) >> 17; 00153 block[8*6] = (a1 - b1) >> 17; 00154 block[8*7] = (a0 - b0) >> 17; 00155 } |
|
Definition at line 63 of file idct.c. References a2, BUTTERFLY, likely, uint32_t, W1, W2, W3, W5, W6, and W7. Referenced by mpeg2_idct_add_c(), and mpeg2_idct_copy_c().
00064 { 00065 int d0, d1, d2, d3; 00066 int a0, a1, a2, a3, b0, b1, b2, b3; 00067 int t0, t1, t2, t3; 00068 00069 /* shortcut */ 00070 if (likely (!(block[1] | ((int32_t *)block)[1] | ((int32_t *)block)[2] | 00071 ((int32_t *)block)[3]))) { 00072 uint32_t tmp = (uint16_t) (block[0] << 3); 00073 tmp |= tmp << 16; 00074 ((int32_t *)block)[0] = tmp; 00075 ((int32_t *)block)[1] = tmp; 00076 ((int32_t *)block)[2] = tmp; 00077 ((int32_t *)block)[3] = tmp; 00078 return; 00079 } 00080 00081 d0 = (block[0] << 11) + 128; 00082 d1 = block[1]; 00083 d2 = block[2] << 11; 00084 d3 = block[3]; 00085 t0 = d0 + d2; 00086 t1 = d0 - d2; 00087 BUTTERFLY (t2, t3, W6, W2, d3, d1); 00088 a0 = t0 + t2; 00089 a1 = t1 + t3; 00090 a2 = t1 - t3; 00091 a3 = t0 - t2; 00092 00093 d0 = block[4]; 00094 d1 = block[5]; 00095 d2 = block[6]; 00096 d3 = block[7]; 00097 BUTTERFLY (t0, t1, W7, W1, d3, d0); 00098 BUTTERFLY (t2, t3, W3, W5, d1, d2); 00099 b0 = t0 + t2; 00100 b3 = t1 + t3; 00101 t0 -= t2; 00102 t1 -= t3; 00103 b1 = ((t0 + t1) * 181) >> 8; 00104 b2 = ((t0 - t1) * 181) >> 8; 00105 00106 block[0] = (a0 + b0) >> 8; 00107 block[1] = (a1 + b1) >> 8; 00108 block[2] = (a2 + b2) >> 8; 00109 block[3] = (a3 + b3) >> 8; 00110 block[4] = (a3 - b3) >> 8; 00111 block[5] = (a2 - b2) >> 8; 00112 block[6] = (a1 - b1) >> 8; 00113 block[7] = (a0 - b0) >> 8; 00114 } |
|
Definition at line 184 of file idct.c. References CLIP, i, idct_col(), idct_row(), stride, and uint8_t. Referenced by mpeg2_idct_init().
00186 { 00187 int i; 00188 00189 if (last != 129 || (block[0] & 7) == 4) { 00190 for (i = 0; i < 8; i++) 00191 idct_row (block + 8 * i); 00192 for (i = 0; i < 8; i++) 00193 idct_col (block + i); 00194 do { 00195 dest[0] = CLIP (block[0] + dest[0]); 00196 dest[1] = CLIP (block[1] + dest[1]); 00197 dest[2] = CLIP (block[2] + dest[2]); 00198 dest[3] = CLIP (block[3] + dest[3]); 00199 dest[4] = CLIP (block[4] + dest[4]); 00200 dest[5] = CLIP (block[5] + dest[5]); 00201 dest[6] = CLIP (block[6] + dest[6]); 00202 dest[7] = CLIP (block[7] + dest[7]); 00203 00204 block[0] = 0; block[1] = 0; block[2] = 0; block[3] = 0; 00205 block[4] = 0; block[5] = 0; block[6] = 0; block[7] = 0; 00206 00207 dest += stride; 00208 block += 8; 00209 } while (--i); 00210 } else { 00211 int DC; 00212 00213 DC = (block[0] + 4) >> 3; 00214 block[0] = block[63] = 0; 00215 i = 8; 00216 do { 00217 dest[0] = CLIP (DC + dest[0]); 00218 dest[1] = CLIP (DC + dest[1]); 00219 dest[2] = CLIP (DC + dest[2]); 00220 dest[3] = CLIP (DC + dest[3]); 00221 dest[4] = CLIP (DC + dest[4]); 00222 dest[5] = CLIP (DC + dest[5]); 00223 dest[6] = CLIP (DC + dest[6]); 00224 dest[7] = CLIP (DC + dest[7]); 00225 dest += stride; 00226 } while (--i); 00227 } 00228 } |
|
Definition at line 157 of file idct.c. References CLIP, i, idct_col(), idct_row(), stride, and uint8_t. Referenced by mpeg2_idct_init().
00159 { 00160 int i; 00161 00162 for (i = 0; i < 8; i++) 00163 idct_row (block + 8 * i); 00164 for (i = 0; i < 8; i++) 00165 idct_col (block + i); 00166 do { 00167 dest[0] = CLIP (block[0]); 00168 dest[1] = CLIP (block[1]); 00169 dest[2] = CLIP (block[2]); 00170 dest[3] = CLIP (block[3]); 00171 dest[4] = CLIP (block[4]); 00172 dest[5] = CLIP (block[5]); 00173 dest[6] = CLIP (block[6]); 00174 dest[7] = CLIP (block[7]); 00175 00176 block[0] = 0; block[1] = 0; block[2] = 0; block[3] = 0; 00177 block[4] = 0; block[5] = 0; block[6] = 0; block[7] = 0; 00178 00179 dest += stride; 00180 block += 8; 00181 } while (--i); 00182 } |
|
Variable Documentation
|
Definition at line 45 of file idct.c. Referenced by mpeg2_idct_init(). |
|
Definition at line 42 of file idct.c. Referenced by mpeg2_idct_init(), and slice_non_intra_DCT(). |
|
Definition at line 41 of file idct.c. Referenced by mpeg2_idct_init(), and slice_intra_DCT(). |