blob: b9eb4cc1e8b5c43dbb4abe9cea36d1a1dd88e4df (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
// Copyright 2011-2021 The Mumble Developers. All rights reserved.
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file at the root of the
// Mumble source tree or at <https://www.mumble.info/LICENSE>.
#ifndef MUMBLE_MUMBLE_AUDIOOUTPUTSPEECH_H_
#define MUMBLE_MUMBLE_AUDIOOUTPUTSPEECH_H_
#include <celt.h>
#include <speex/speex.h>
#include <speex/speex_jitter.h>
#include <speex/speex_resampler.h>
#include <QtCore/QMutex>
#include "AudioOutputUser.h"
#include "Message.h"
class CELTCodec;
class OpusCodec;
class ClientUser;
struct OpusDecoder;
class AudioOutputSpeech : public AudioOutputUser {
private:
Q_OBJECT
Q_DISABLE_COPY(AudioOutputSpeech)
protected:
unsigned int iAudioBufferSize;
unsigned int iBufferOffset;
unsigned int iBufferFilled;
unsigned int iOutputSize;
unsigned int iLastConsume;
unsigned int iFrameSize;
unsigned int iFrameSizePerChannel;
unsigned int iSampleRate;
unsigned int iMixerFreq;
bool bLastAlive;
bool bHasTerminator;
float *fFadeIn;
float *fFadeOut;
float *fResamplerBuffer;
SpeexResamplerState *srs;
QMutex qmJitter;
JitterBuffer *jbJitter;
int iMissCount;
CELTCodec *cCodec;
CELTDecoder *cdDecoder;
OpusCodec *oCodec;
OpusDecoder *opusState;
SpeexBits sbBits;
void *dsSpeex;
QList< QByteArray > qlFrames;
public:
unsigned char ucFlags;
MessageHandler::UDPMessageType umtType;
int iMissedFrames;
ClientUser *p;
/// Fetch and decode frames from the jitter buffer. Called in mix().
///
/// @param frameCount Number of frames to decode. frame means a bundle of one sample from each channel.
virtual bool prepareSampleBuffer(unsigned int frameCount) Q_DECL_OVERRIDE;
void addFrameToBuffer(const QByteArray &, unsigned int iBaseSeq);
/// @param systemMaxBufferSize maximum number of samples the system audio play back may request each time
AudioOutputSpeech(ClientUser *, unsigned int freq, MessageHandler::UDPMessageType type,
unsigned int systemMaxBufferSize);
~AudioOutputSpeech() Q_DECL_OVERRIDE;
};
#endif // AUDIOOUTPUTSPEECH_H_
|