~ubuntu-branches/ubuntu/wily/sflphone/wily

« back to all changes in this revision

Viewing changes to daemon/src/audio/audioloop.cpp

  • Committer: Package Import Robot
  • Author(s): Whoopie
  • Date: 2012-03-22 10:29:10 UTC
  • mfrom: (4.1.12 sid)
  • Revision ID: package-import@ubuntu.com-20120322102910-tb8hugi2su1tguwh
Tags: 1.0.2-1ubuntu1
* Apply some upstream patches to fix FTBFS (LP: #913018):
  - debian/patches/05_glib_includes.patch: fix glib includes.
  - debian/patches/06_use_XkbKeycodeToKeysym.patch: use 
    XkbKeycodeToKeysym instead of (deprecated) XKeycodeToKeysym.

Show diffs side-by-side

added added

removed removed

Lines of Context:
33
33
 */
34
34
 
35
35
#include "audioloop.h"
36
 
#include <math.h>
 
36
#include <cmath>
 
37
#include <numeric>
37
38
#include <cstring>
38
39
#include <cassert>
39
40
 
40
41
AudioLoop::AudioLoop() : buffer_(0),  size_(0), pos_(0), sampleRate_(0)
41
 
{
42
 
}
 
42
{}
43
43
 
44
44
AudioLoop::~AudioLoop()
45
45
{
54
54
    if (size_ == 0) {
55
55
        ERROR("AudioLoop: Error: Audio loop size is 0");
56
56
        return;
 
57
    } else if (pos >= size_) {
 
58
        ERROR("AudioLoop: Error: Invalid loop position %d", pos);
 
59
        return;
57
60
    }
58
61
 
59
 
    while (total_samples) {
 
62
    while (total_samples > 0) {
60
63
        size_t samples = total_samples;
61
64
 
62
65
        if (samples > (size_ - pos))
65
68
        // short->char conversion
66
69
        memcpy(output, buffer_ + pos, samples * sizeof(SFLDataFormat));
67
70
 
 
71
        // Scaling needed
68
72
        if (volume != 100) {
69
 
            double gain = volume * 0.01;
 
73
            const double gain = volume * 0.01;
70
74
 
71
 
            for (size_t i = 0; i < samples; i++) {
 
75
            for (size_t i = 0; i < samples; ++i, ++output)
72
76
                *output *= gain;
73
 
                output++;
74
 
            }
75
77
        } else
76
78
            output += samples; // this is the destination...
77
79