~ubuntu-branches/ubuntu/trusty/sflphone/trusty

« back to all changes in this revision

Viewing changes to daemon/libs/pjproject-2.1.0/third_party/speex/libspeex/testenc_wb.c

  • Committer: Package Import Robot
  • Author(s): Mark Purcell
  • Date: 2014-01-28 18:23:36 UTC
  • mfrom: (4.3.4 sid)
  • Revision ID: package-import@ubuntu.com-20140128182336-jrsv0k9u6cawc068
Tags: 1.3.0-1
* New upstream release 
  - Fixes "New Upstream Release" (Closes: #735846)
  - Fixes "Ringtone does not stop" (Closes: #727164)
  - Fixes "[sflphone-kde] crash on startup" (Closes: #718178)
  - Fixes "sflphone GUI crashes when call is hung up" (Closes: #736583)
* Build-Depends: ensure GnuTLS 2.6
  - libucommon-dev (>= 6.0.7-1.1), libccrtp-dev (>= 2.0.6-3)
  - Fixes "FTBFS Build-Depends libgnutls{26,28}-dev" (Closes: #722040)
* Fix "boost 1.49 is going away" unversioned Build-Depends: (Closes: #736746)
* Add Build-Depends: libsndfile-dev, nepomuk-core-dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifdef HAVE_CONFIG_H
 
2
#include "config.h"
 
3
#endif
 
4
 
 
5
#include <speex/speex.h>
 
6
#include <stdio.h>
 
7
#include <stdlib.h>
 
8
#include <speex/speex_callbacks.h>
 
9
 
 
10
#ifdef FIXED_DEBUG
 
11
extern long long spx_mips;
 
12
#endif
 
13
 
 
14
#define FRAME_SIZE 320
 
15
#include <math.h>
 
16
int main(int argc, char **argv)
 
17
{
 
18
   char *inFile, *outFile, *bitsFile;
 
19
   FILE *fin, *fout, *fbits=NULL;
 
20
   short in_short[FRAME_SIZE];
 
21
   short out_short[FRAME_SIZE];
 
22
   float sigpow,errpow,snr, seg_snr=0;
 
23
   int snr_frames = 0;
 
24
   char cbits[200];
 
25
   int nbBits;
 
26
   int i;
 
27
   void *st;
 
28
   void *dec;
 
29
   SpeexBits bits;
 
30
   spx_int32_t tmp;
 
31
   int bitCount=0;
 
32
   spx_int32_t skip_group_delay;
 
33
   SpeexCallback callback;
 
34
 
 
35
   sigpow = 0;
 
36
   errpow = 0;
 
37
 
 
38
   st = speex_encoder_init(speex_lib_get_mode(SPEEX_MODEID_WB));
 
39
   dec = speex_decoder_init(speex_lib_get_mode(SPEEX_MODEID_WB));
 
40
 
 
41
   callback.callback_id = SPEEX_INBAND_CHAR;
 
42
   callback.func = speex_std_char_handler;
 
43
   callback.data = stderr;
 
44
   speex_decoder_ctl(dec, SPEEX_SET_HANDLER, &callback);
 
45
 
 
46
   callback.callback_id = SPEEX_INBAND_MODE_REQUEST;
 
47
   callback.func = speex_std_mode_request_handler;
 
48
   callback.data = st;
 
49
   speex_decoder_ctl(dec, SPEEX_SET_HANDLER, &callback);
 
50
 
 
51
   tmp=1;
 
52
   speex_decoder_ctl(dec, SPEEX_SET_ENH, &tmp);
 
53
   tmp=0;
 
54
   speex_encoder_ctl(st, SPEEX_SET_VBR, &tmp);
 
55
   tmp=8;
 
56
   speex_encoder_ctl(st, SPEEX_SET_QUALITY, &tmp);
 
57
   tmp=3;
 
58
   speex_encoder_ctl(st, SPEEX_SET_COMPLEXITY, &tmp);
 
59
   /*tmp=3;
 
60
   speex_encoder_ctl(st, SPEEX_SET_HIGH_MODE, &tmp);
 
61
   tmp=6;
 
62
   speex_encoder_ctl(st, SPEEX_SET_LOW_MODE, &tmp);
 
63
*/
 
64
 
 
65
   speex_encoder_ctl(st, SPEEX_GET_LOOKAHEAD, &skip_group_delay);
 
66
   speex_decoder_ctl(dec, SPEEX_GET_LOOKAHEAD, &tmp);
 
67
   skip_group_delay += tmp;
 
68
 
 
69
 
 
70
   if (argc != 4 && argc != 3)
 
71
   {
 
72
      fprintf (stderr, "Usage: encode [in file] [out file] [bits file]\nargc = %d", argc);
 
73
      exit(1);
 
74
   }
 
75
   inFile = argv[1];
 
76
   fin = fopen(inFile, "rb");
 
77
   outFile = argv[2];
 
78
   fout = fopen(outFile, "wb+");
 
79
   if (argc==4)
 
80
   {
 
81
      bitsFile = argv[3];
 
82
      fbits = fopen(bitsFile, "wb");
 
83
   }
 
84
   speex_bits_init(&bits);
 
85
   while (!feof(fin))
 
86
   {
 
87
      fread(in_short, sizeof(short), FRAME_SIZE, fin);
 
88
      if (feof(fin))
 
89
         break;
 
90
      speex_bits_reset(&bits);
 
91
 
 
92
      speex_encode_int(st, in_short, &bits);
 
93
      nbBits = speex_bits_write(&bits, cbits, 200);
 
94
      bitCount+=bits.nbBits;
 
95
 
 
96
      if (argc==4)
 
97
         fwrite(cbits, 1, nbBits, fbits);
 
98
      speex_bits_rewind(&bits);
 
99
 
 
100
      speex_decode_int(dec, &bits, out_short);
 
101
      speex_bits_reset(&bits);
 
102
 
 
103
      fwrite(&out_short[skip_group_delay], sizeof(short), FRAME_SIZE-skip_group_delay, fout);
 
104
      skip_group_delay = 0;
 
105
   }
 
106
   fprintf (stderr, "Total encoded size: %d bits\n", bitCount);
 
107
   speex_encoder_destroy(st);
 
108
   speex_decoder_destroy(dec);
 
109
   speex_bits_destroy(&bits);
 
110
 
 
111
   rewind(fin);
 
112
   rewind(fout);
 
113
 
 
114
   while ( FRAME_SIZE == fread(in_short, sizeof(short), FRAME_SIZE, fin) 
 
115
           &&
 
116
           FRAME_SIZE ==  fread(out_short, sizeof(short), FRAME_SIZE,fout) )
 
117
   {
 
118
        float s=0, e=0;
 
119
        for (i=0;i<FRAME_SIZE;++i) {
 
120
            s += (float)in_short[i] * in_short[i];
 
121
            e += ((float)in_short[i]-out_short[i]) * ((float)in_short[i]-out_short[i]);
 
122
        }
 
123
        seg_snr += 10*log10((s+160)/(e+160));
 
124
        sigpow += s;
 
125
        errpow += e;
 
126
        snr_frames++;
 
127
   }
 
128
   fclose(fin);
 
129
   fclose(fout);
 
130
 
 
131
   snr = 10 * log10( sigpow / errpow );
 
132
   seg_snr /= snr_frames;
 
133
   fprintf(stderr,"SNR = %f\nsegmental SNR = %f\n",snr, seg_snr);
 
134
 
 
135
#ifdef FIXED_DEBUG
 
136
   printf ("Total: %f MIPS\n", (float)(1e-6*50*spx_mips/snr_frames));
 
137
#endif
 
138
   
 
139
   return 1;
 
140
}