~ubuntu-branches/ubuntu/trusty/lmms/trusty

« back to all changes in this revision

Viewing changes to plugins/ladspa_effect/swh/gsm/code.c

  • Committer: Charlie Smotherman
  • Date: 2012-12-05 22:08:38 UTC
  • mfrom: (33.1.7 lmms_0.4.13)
  • Revision ID: cjsmo@cableone.net-20121205220838-09pjfzew9m5023hr
* New  Upstream release.
  - Minor tweaking to ZynAddSubFX, CALF, SWH plugins  and Stefan Fendt's RC
    filters.
  - Added UI fixes: Magnentic effect of knobs and Piano-roll fixes
  - Updated German localization and copyright year
* debian/lmms-common.install:
  - added /usr/share/applications so the lmms.desktop file will correctly
    install (LP: #863366)
  - This should also fix the Software Center not displaying lmms in sound
    and video (LP: #824231)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
 
3
 * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
 
4
 * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
 
5
 */
 
6
 
 
7
/* $Header: /home/cvs/giga/ladspa-swh/gsm/code.c,v 1.2 2003/03/07 23:26:13 swh Exp $ */
 
8
 
 
9
#include        "config.h"
 
10
#include <string.h>
 
11
 
 
12
 
 
13
#ifdef  HAS_STDLIB_H
 
14
#include        <stdlib.h>
 
15
#else
 
16
#       include "proto.h"
 
17
        extern char     * memcpy P((char *, char *, int));
 
18
#endif
 
19
 
 
20
#include        "private.h"
 
21
#include        "gsm.h"
 
22
#include        "proto.h"
 
23
 
 
24
/* 
 
25
 *  4.2 FIXED POINT IMPLEMENTATION OF THE RPE-LTP CODER 
 
26
 */
 
27
 
 
28
void Gsm_Coder P8((S,s,LARc,Nc,bc,Mc,xmaxc,xMc),
 
29
 
 
30
        struct gsm_state        * S,
 
31
 
 
32
        word    * s,    /* [0..159] samples                     IN      */
 
33
 
 
34
/*
 
35
 * The RPE-LTD coder works on a frame by frame basis.  The length of
 
36
 * the frame is equal to 160 samples.  Some computations are done
 
37
 * once per frame to produce at the output of the coder the
 
38
 * LARc[1..8] parameters which are the coded LAR coefficients and 
 
39
 * also to realize the inverse filtering operation for the entire
 
40
 * frame (160 samples of signal d[0..159]).  These parts produce at
 
41
 * the output of the coder:
 
42
 */
 
43
 
 
44
        word    * LARc, /* [0..7] LAR coefficients              OUT     */
 
45
 
 
46
/*
 
47
 * Procedure 4.2.11 to 4.2.18 are to be executed four times per
 
48
 * frame.  That means once for each sub-segment RPE-LTP analysis of
 
49
 * 40 samples.  These parts produce at the output of the coder:
 
50
 */
 
51
 
 
52
        word    * Nc,   /* [0..3] LTP lag                       OUT     */
 
53
        word    * bc,   /* [0..3] coded LTP gain                OUT     */
 
54
        word    * Mc,   /* [0..3] RPE grid selection            OUT     */
 
55
        word    * xmaxc,/* [0..3] Coded maximum amplitude       OUT     */
 
56
        word    * xMc   /* [13*4] normalized RPE samples        OUT     */
 
57
)
 
58
{
 
59
        int     k;
 
60
        word    * dp  = S->dp0 + 120;   /* [ -120...-1 ] */
 
61
        word    * dpp = dp;             /* [ 0...39 ]    */
 
62
 
 
63
        static word e[50];
 
64
 
 
65
        word    so[160];
 
66
 
 
67
        Gsm_Preprocess                  (S, s, so);
 
68
        Gsm_LPC_Analysis                (S, so, LARc);
 
69
        Gsm_Short_Term_Analysis_Filter  (S, LARc, so);
 
70
 
 
71
        for (k = 0; k <= 3; k++, xMc += 13) {
 
72
 
 
73
                Gsm_Long_Term_Predictor ( S,
 
74
                                         so+k*40, /* d      [0..39] IN  */
 
75
                                         dp,      /* dp  [-120..-1] IN  */
 
76
                                        e + 5,    /* e      [0..39] OUT */
 
77
                                        dpp,      /* dpp    [0..39] OUT */
 
78
                                         Nc++,
 
79
                                         bc++);
 
80
 
 
81
                Gsm_RPE_Encoding        ( S,
 
82
                                        e + 5,  /* e      ][0..39][ IN/OUT */
 
83
                                          xmaxc++, Mc++, xMc );
 
84
                /*
 
85
                 * Gsm_Update_of_reconstructed_short_time_residual_signal
 
86
                 *                      ( dpp, e + 5, dp );
 
87
                 */
 
88
 
 
89
                { register int i;
 
90
                  register longword ltmp;
 
91
                  for (i = 0; i <= 39; i++)
 
92
                        dp[ i ] = GSM_ADD( e[5 + i], dpp[i] );
 
93
                }
 
94
                dp  += 40;
 
95
                dpp += 40;
 
96
 
 
97
        }
 
98
        (void)memcpy( (char *)S->dp0, (char *)(S->dp0 + 160),
 
99
                120 * sizeof(*S->dp0) );
 
100
}