From b8540d24188d6f657c28b842c0d32fa1e60af3c6 Mon Sep 17 00:00:00 2001 From: markster Date: Thu, 20 Mar 2003 16:58:45 +0000 Subject: [PATCH] Zap optimization git-svn-id: http://svn.digium.com/svn/asterisk/trunk@665 f38db490-d61c-443f-a65b-d21fe96a405b --- channels/chan_zap.c | 52 ++++++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/channels/chan_zap.c b/channels/chan_zap.c index 9139af0d7..5a259a016 100755 --- a/channels/chan_zap.c +++ b/channels/chan_zap.c @@ -935,33 +935,41 @@ int set_actual_gain(int fd, int chan, float rxgain, float txgain, int law) float lrxgain; int j,k; g.chan = chan; - /* caluculate linear value of tx gain */ - ltxgain = pow(10.0,txgain / 20.0); - /* caluculate linear value of rx gain */ - lrxgain = pow(10.0,rxgain / 20.0); - if (law == ZT_LAW_ALAW) { - for (j=0;j<256;j++) { - k = (int)(((float)AST_ALAW(j)) * lrxgain); - if (k > 32767) k = 32767; - if (k < -32767) k = -32767; - g.rxgain[j] = AST_LIN2A(k); - k = (int)(((float)AST_ALAW(j)) * ltxgain); - if (k > 32767) k = 32767; - if (k < -32767) k = -32767; - g.txgain[j] = AST_LIN2A(k); + if ((rxgain != 0.0) || (txgain != 0.0)) { + /* caluculate linear value of tx gain */ + ltxgain = pow(10.0,txgain / 20.0); + /* caluculate linear value of rx gain */ + lrxgain = pow(10.0,rxgain / 20.0); + if (law == ZT_LAW_ALAW) { + for (j=0;j<256;j++) { + k = (int)(((float)AST_ALAW(j)) * lrxgain); + if (k > 32767) k = 32767; + if (k < -32767) k = -32767; + g.rxgain[j] = AST_LIN2A(k); + k = (int)(((float)AST_ALAW(j)) * ltxgain); + if (k > 32767) k = 32767; + if (k < -32767) k = -32767; + g.txgain[j] = AST_LIN2A(k); + } + } else { + for (j=0;j<256;j++) { + k = (int)(((float)AST_MULAW(j)) * lrxgain); + if (k > 32767) k = 32767; + if (k < -32767) k = -32767; + g.rxgain[j] = AST_LIN2MU(k); + k = (int)(((float)AST_MULAW(j)) * ltxgain); + if (k > 32767) k = 32767; + if (k < -32767) k = -32767; + g.txgain[j] = AST_LIN2MU(k); + } } } else { for (j=0;j<256;j++) { - k = (int)(((float)AST_MULAW(j)) * lrxgain); - if (k > 32767) k = 32767; - if (k < -32767) k = -32767; - g.rxgain[j] = AST_LIN2MU(k); - k = (int)(((float)AST_MULAW(j)) * ltxgain); - if (k > 32767) k = 32767; - if (k < -32767) k = -32767; - g.txgain[j] = AST_LIN2MU(k); + g.rxgain[j] = j; + g.txgain[j] = j; } } + /* set 'em */ return(ioctl(fd,ZT_SETGAINS,&g)); }