diff options
author | Benny Prijono <bennylp@teluu.com> | 2006-02-10 15:57:08 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2006-02-10 15:57:08 +0000 |
commit | 8c7a3cbbf75a2611701925d28b956476d9035272 (patch) | |
tree | d7a01cb48206fe87cca36fc7ed3c5640aa634214 /pjmedia/src/pjmedia-codec/gsm/decode.c | |
parent | bb9a7993790bd9aac174bf8f08344dbb16ad7aa1 (diff) |
Added pjmedia-codec library
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@176 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia/src/pjmedia-codec/gsm/decode.c')
-rw-r--r-- | pjmedia/src/pjmedia-codec/gsm/decode.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/pjmedia/src/pjmedia-codec/gsm/decode.c b/pjmedia/src/pjmedia-codec/gsm/decode.c new file mode 100644 index 00000000..d51c54ac --- /dev/null +++ b/pjmedia/src/pjmedia-codec/gsm/decode.c @@ -0,0 +1,63 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/decode.c,v 1.1 1992/10/28 00:15:50 jutta Exp $ */ + +#include <stdio.h> + +#include "private.h" +#include "gsm.h" +#include "proto.h" + +/* + * 4.3 FIXED POINT IMPLEMENTATION OF THE RPE-LTP DECODER + */ + +static void Postprocessing P2((S,s), + struct gsm_state * S, + register word * s) +{ + register int k; + register word msr = S->msr; + register longword ltmp; /* for GSM_ADD */ + register word tmp; + + for (k = 160; k--; s++) { + tmp = GSM_MULT_R( msr, 28180 ); + msr = GSM_ADD(*s, tmp); /* Deemphasis */ + *s = GSM_ADD(msr, msr) & 0xFFF8; /* Truncation & Upscaling */ + } + S->msr = msr; +} + +void Gsm_Decoder P8((S,LARcr, Ncr,bcr,Mcr,xmaxcr,xMcr,s), + struct gsm_state * S, + + word * LARcr, /* [0..7] IN */ + + word * Ncr, /* [0..3] IN */ + word * bcr, /* [0..3] IN */ + word * Mcr, /* [0..3] IN */ + word * xmaxcr, /* [0..3] IN */ + word * xMcr, /* [0..13*4] IN */ + + word * s) /* [0..159] OUT */ +{ + int j, k; + word erp[40], wt[160]; + word * drp = S->dp0 + 120; + + for (j=0; j <= 3; j++, xmaxcr++, bcr++, Ncr++, Mcr++, xMcr += 13) { + + Gsm_RPE_Decoding( S, *xmaxcr, *Mcr, xMcr, erp ); + Gsm_Long_Term_Synthesis_Filtering( S, *Ncr, *bcr, erp, drp ); + + for (k = 0; k <= 39; k++) wt[ j * 40 + k ] = drp[ k ]; + } + + Gsm_Short_Term_Synthesis_Filter( S, LARcr, wt, s ); + Postprocessing(S, s); +} |