~ubuntu-branches/ubuntu/saucy/sflphone/saucy

« back to all changes in this revision

Viewing changes to sflphone-common/src/audio/codecs/speexcodec_ub.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Francois Marier
  • Date: 2010-12-24 16:33:55 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20101224163355-tkvvikqxbrbav6up
Tags: 0.9.11-1
* New upstream release
* Add new build dependencies on libwebkit-dev and libyaml-dev

* Bump Standards-Version up to 3.9.1
* Bump debhelper compatibility to 8
* Patch another typo in the upstream code (lintian notice)

Show diffs side-by-side

added added

removed removed

Lines of Context:
32
32
#include "audiocodec.h"
33
33
#include <cstdio>
34
34
#include <speex/speex.h>
35
 
#include <speex/speex_preprocess.h>
36
35
 
37
36
class Speex : public AudioCodec
38
37
{
39
38
 
40
39
    public:
41
40
        Speex (int payload=0)
42
 
                : AudioCodec (payload, "speex"),
43
 
                _speexModePtr (NULL),
44
 
                _speex_dec_bits(),
45
 
                _speex_enc_bits(),
46
 
                _speex_dec_state(),
47
 
                _speex_enc_state(),
48
 
                _speex_frame_size(),
49
 
                _preprocess_state() {
 
41
            : AudioCodec (payload, "speex"),
 
42
              _speexModePtr (NULL),
 
43
              _speex_dec_bits(),
 
44
              _speex_enc_bits(),
 
45
              _speex_dec_state(),
 
46
              _speex_enc_state(),
 
47
              _speex_frame_size() {
50
48
            _clockRate = 32000;
51
49
            _frameSize = 640; // 20 ms at 32 kHz
52
50
            _channel = 1;
78
76
            speex_encoder_ctl (_speex_enc_state,SPEEX_SET_SAMPLING_RATE,&_clockRate);
79
77
 
80
78
            speex_decoder_ctl (_speex_dec_state, SPEEX_GET_FRAME_SIZE, &_speex_frame_size);
81
 
 
82
 
#ifdef HAVE_SPEEXDSP_LIB
83
 
 
84
 
            int enable = 1;
85
 
            int complex = 10;
86
 
            int attenuation = -10;
87
 
 
88
 
            speex_encoder_ctl (_speex_enc_state, SPEEX_SET_VAD, &enable);
89
 
            speex_encoder_ctl (_speex_enc_state, SPEEX_SET_DTX, &enable);
90
 
            // speex_encoder_ctl(_speex_enc_state, SPEEX_SET_VBR_QUALITY, &quality);
91
 
            speex_encoder_ctl (_speex_enc_state, SPEEX_SET_COMPLEXITY, &complex);
92
 
 
93
 
            // Init the decoder struct
94
 
            speex_decoder_ctl (_speex_dec_state, SPEEX_GET_FRAME_SIZE, &_frameSize);
95
 
 
96
 
            // Init the preprocess struct
97
 
            _preprocess_state = speex_preprocess_state_init (_frameSize,_clockRate);
98
 
            speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_DENOISE, &enable);
99
 
            speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &attenuation);
100
 
            speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_VAD, &enable);
101
 
            speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_AGC, &enable);
102
 
#endif
103
 
 
104
79
        }
105
80
 
106
81
        ~Speex() {
118
93
            speex_encoder_destroy (_speex_enc_state);
119
94
            _speex_enc_state = 0;
120
95
 
121
 
            speex_preprocess_state_destroy( _preprocess_state);
122
 
            _preprocess_state = NULL;
123
96
        }
124
97
 
125
98
        virtual int codecDecode (short *dst, unsigned char *src, unsigned int size) {
135
108
        virtual int codecEncode (unsigned char *dst, short *src, unsigned int size) {
136
109
            speex_bits_reset (&_speex_enc_bits);
137
110
 
138
 
#ifdef HAVE_SPEEXDSP_LIB
139
 
 
140
 
            speex_preprocess_run (_preprocess_state, src);
141
 
#endif
142
 
 
143
 
 
144
111
            speex_encode_int (_speex_enc_state, src, &_speex_enc_bits);
145
112
            speex_bits_nbytes (&_speex_enc_bits);
146
113
            int nbBytes = speex_bits_write (&_speex_enc_bits, (char*) dst, size);
155
122
        void *_speex_dec_state;
156
123
        void *_speex_enc_state;
157
124
        int _speex_frame_size;
158
 
        SpeexPreprocessState *_preprocess_state;
159
125
};
160
126
 
161
127
// the class factories