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

« back to all changes in this revision

Viewing changes to daemon/src/audio/codecs/ulaw.cpp

  • 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
1
/*
2
 
 *  Copyright (C) 2004-2012 Savoir-Faire Linux Inc.
 
2
 *  Copyright (C) 2004-2013 Savoir-Faire Linux Inc.
3
3
 *  Author:  Yan Morin <yan.morin@savoirfairelinux.com>
4
4
 *  Author:  Laurielle Lea <laurielle.lea@savoirfairelinux.com>
5
5
 *
41
41
        }
42
42
 
43
43
    private:
44
 
        int decode(SFLDataFormat *dst, unsigned char *src, size_t buf_size) {
 
44
        AudioCodec *
 
45
        clone()
 
46
        {
 
47
            return new Ulaw;
 
48
        }
 
49
 
 
50
        int decode(SFLAudioSample *dst, unsigned char *src, size_t buf_size) {
45
51
            for (unsigned char* end = src + buf_size; src < end; ++src, ++dst)
46
52
                *dst = ULawDecode(*src);
47
53
 
48
54
            return buf_size;
49
55
        }
50
56
 
51
 
        int encode(unsigned char *dst, SFLDataFormat *src, size_t buf_size) {
 
57
        int encode(unsigned char *dst, SFLAudioSample *src, size_t buf_size) {
52
58
            for (unsigned char * end = dst + buf_size; dst < end; ++src, ++dst)
53
59
                *dst = ULawEncode(*src);
54
60
 
55
61
            return buf_size;
56
62
        }
57
63
 
58
 
        SFLDataFormat ULawDecode(uint8 ulaw)
59
 
        {
 
64
        SFLAudioSample ULawDecode(uint8_t ulaw) {
60
65
            ulaw ^= 0xff;  // u-law has all bits inverted for transmission
61
66
            int linear = ulaw & 0x0f;
62
67
            linear <<= 3;
63
68
            linear |= 0x84;  // Set MSB (0x80) and a 'half' bit (0x04) to place PCM value in middle of range
64
69
 
65
 
            uint shift = ulaw >> 4;
 
70
            uint8_t shift = ulaw >> 4;
66
71
            shift &= 7;
67
72
            linear <<= shift;
68
73
            linear -= 0x84; // Subract uLaw bias
73
78
                return linear;
74
79
        }
75
80
 
76
 
        uint8 ULawEncode(SFLDataFormat pcm16)
77
 
        {
 
81
        uint8_t ULawEncode(SFLAudioSample pcm16) {
78
82
            int p = pcm16;
79
 
            uint u;  // u-law value we are forming
 
83
            uint8_t u;  // u-law value we are forming
80
84
 
81
85
            if (p < 0) {
82
86
                p = ~p;