Go to the source code of this file.
Defines | |
#define | AST_LIN2MU(a) (__ast_lin2mu[((unsigned short)(a)) >> 2]) |
#define | AST_MULAW(a) (__ast_mulaw[(a)]) |
#define | AST_ULAW_BIT_LOSS 3 |
#define | AST_ULAW_SIGN_BIT 0x80 |
#define | AST_ULAW_STEP (1 << AST_ULAW_BIT_LOSS) |
#define | AST_ULAW_TAB_SIZE (32768 / AST_ULAW_STEP + 1) |
Functions | |
void | ast_ulaw_init (void) |
Set up mu-law conversion table. | |
Variables | |
unsigned char | __ast_lin2mu [16384] |
converts signed linear to mulaw | |
short | __ast_mulaw [256] |
Definition in file ulaw.h.
#define AST_LIN2MU | ( | a | ) | (__ast_lin2mu[((unsigned short)(a)) >> 2]) |
Definition at line 49 of file ulaw.h.
Referenced by ast_ulaw_init(), fill_rxgain(), fill_txgain(), lintoulaw(), lintoulaw_framein(), load_module(), and make_tone_burst().
#define AST_MULAW | ( | a | ) | (__ast_mulaw[(a)]) |
Definition at line 85 of file ulaw.h.
Referenced by ast_dsp_process(), ast_ulaw_init(), calc_energy(), fill_rxgain(), fill_txgain(), load_module(), tdd_feed(), ulawtolin(), and ulawtolin_framein().
#define AST_ULAW_STEP (1 << AST_ULAW_BIT_LOSS) |
void ast_ulaw_init | ( | void | ) |
Set up mu-law conversion table.
To init the ulaw to slinear conversion stuff, this needs to be run.
Definition at line 171 of file ulaw.c.
References AST_LIN2MU, ast_log(), AST_MULAW, AST_ULAW_STEP, f, linear2ulaw(), LOG_NOTICE, and LOG_WARNING.
Referenced by load_module(), and main().
00172 { 00173 int i; 00174 00175 /* 00176 * Set up mu-law conversion table 00177 */ 00178 #ifndef G711_NEW_ALGORITHM 00179 for (i = 0;i < 256;i++) { 00180 short mu,e,f,y; 00181 static const short etab[]={0,132,396,924,1980,4092,8316,16764}; 00182 00183 mu = 255-i; 00184 e = (mu & 0x70)/16; 00185 f = mu & 0x0f; 00186 y = f * (1 << (e + 3)); 00187 y += etab[e]; 00188 if (mu & 0x80) y = -y; 00189 __ast_mulaw[i] = y; 00190 } 00191 /* set up the reverse (mu-law) conversion table */ 00192 for (i = -32768; i < 32768; i++) { 00193 __ast_lin2mu[((unsigned short)i) >> 2] = linear2ulaw(i); 00194 } 00195 #else 00196 00197 for (i = 0; i < 256; i++) { 00198 __ast_mulaw[i] = ulaw2linear(i); 00199 } 00200 /* set up the reverse (mu-law) conversion table */ 00201 for (i = 0; i <= 32768; i += AST_ULAW_STEP) { 00202 AST_LIN2MU_LOOKUP(i) = linear2ulaw(i, 0 /* half-cooked */); 00203 } 00204 #endif 00205 00206 #ifdef TEST_CODING_TABLES 00207 for (i = -32768; i < 32768; ++i) { 00208 #ifndef G711_NEW_ALGORITHM 00209 unsigned char e1 = linear2ulaw(i); 00210 #else 00211 unsigned char e1 = linear2ulaw(i, 1); 00212 #endif 00213 short d1 = ulaw2linear(e1); 00214 unsigned char e2 = AST_LIN2MU(i); 00215 short d2 = ulaw2linear(e2); 00216 short d3 = AST_MULAW(e1); 00217 00218 if (e1 != e2 || d1 != d3 || d2 != d3) { 00219 ast_log(LOG_WARNING, "u-Law coding tables test failed on %d: e1=%u, e2=%u, d1=%d, d2=%d\n", 00220 i, (unsigned)e1, (unsigned)e2, (int)d1, (int)d2); 00221 } 00222 } 00223 ast_log(LOG_NOTICE, "u-Law coding table test complete.\n"); 00224 #endif /* TEST_CODING_TABLES */ 00225 00226 #ifdef TEST_TANDEM_TRANSCODING 00227 /* tandem transcoding test */ 00228 for (i = -32768; i < 32768; ++i) { 00229 unsigned char e1 = AST_LIN2MU(i); 00230 short d1 = AST_MULAW(e1); 00231 unsigned char e2 = AST_LIN2MU(d1); 00232 short d2 = AST_MULAW(e2); 00233 unsigned char e3 = AST_LIN2MU(d2); 00234 short d3 = AST_MULAW(e3); 00235 00236 if (i < 0 && e1 == 0x7f && e2 == 0xff && e3 == 0xff) 00237 continue; /* known and normal negative 0 case */ 00238 00239 if (e1 != e2 || e2 != e3 || d1 != d2 || d2 != d3) { 00240 ast_log(LOG_WARNING, "u-Law tandem transcoding test failed on %d: e1=%u, e2=%u, d1=%d, d2=%d, d3=%d\n", 00241 i, (unsigned)e1, (unsigned)e2, (int)d1, (int)d2, (int)d3); 00242 } 00243 } 00244 ast_log(LOG_NOTICE, "u-Law tandem transcoding test complete.\n"); 00245 #endif /* TEST_TANDEM_TRANSCODING */ 00246 }
unsigned char __ast_lin2mu[16384] |
short __ast_mulaw[256] |