mirror of
https://github.com/vale981/tdesktop
synced 2025-03-06 18:21:42 -05:00
openal updated in Windows
This commit is contained in:
parent
16aafe28d5
commit
c40758f30d
3 changed files with 42 additions and 39 deletions
|
@ -21,6 +21,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
#include <AL/al.h>
|
||||
#include <AL/alc.h>
|
||||
|
||||
#define AL_ALEXT_PROTOTYPES
|
||||
#include <AL/alext.h>
|
||||
|
||||
extern "C" {
|
||||
|
||||
#include <libavcodec/avcodec.h>
|
||||
|
@ -197,7 +200,7 @@ void audioInit() {
|
|||
if (!_checkALError()) return audioFinish();
|
||||
|
||||
player = new AudioPlayer();
|
||||
alcSuspendContext(audioContext);
|
||||
alcDevicePauseSOFT(audioDevice);
|
||||
|
||||
av_register_all();
|
||||
avcodec_register_all();
|
||||
|
@ -209,7 +212,7 @@ void audioInit() {
|
|||
void audioPlayNotify() {
|
||||
if (!audioPlayer()) return;
|
||||
|
||||
audioPlayer()->processContext();
|
||||
audioPlayer()->resumeDevice();
|
||||
alSourcePlay(notifySource);
|
||||
emit audioPlayer()->faderOnTimer();
|
||||
}
|
||||
|
@ -373,7 +376,7 @@ void AudioPlayer::pauseresume() {
|
|||
updateCurrentStarted();
|
||||
}
|
||||
_data[_current].state = AudioPlayerResuming;
|
||||
processContext();
|
||||
resumeDevice();
|
||||
alSourcePlay(_data[_current].source);
|
||||
break;
|
||||
case AudioPlayerStarting:
|
||||
|
@ -403,8 +406,8 @@ void AudioPlayer::clearStoppedAtStart(AudioData *audio) {
|
|||
}
|
||||
}
|
||||
|
||||
void AudioPlayer::processContext() {
|
||||
_fader->processContext();
|
||||
void AudioPlayer::resumeDevice() {
|
||||
_fader->resumeDevice();
|
||||
}
|
||||
|
||||
AudioCapture::AudioCapture() : _capture(new AudioCaptureInner(&_captureThread)) {
|
||||
|
@ -450,17 +453,17 @@ AudioCapture *audioCapture() {
|
|||
return capture;
|
||||
}
|
||||
|
||||
AudioPlayerFader::AudioPlayerFader(QThread *thread) : _timer(this), _suspendFlag(false), _suspended(true) {
|
||||
AudioPlayerFader::AudioPlayerFader(QThread *thread) : _timer(this), _pauseFlag(false), _paused(true) {
|
||||
moveToThread(thread);
|
||||
_timer.moveToThread(thread);
|
||||
_suspendTimer.moveToThread(thread);
|
||||
_pauseTimer.moveToThread(thread);
|
||||
|
||||
_timer.setSingleShot(true);
|
||||
connect(&_timer, SIGNAL(timeout()), this, SLOT(onTimer()));
|
||||
|
||||
_suspendTimer.setSingleShot(true);
|
||||
connect(&_suspendTimer, SIGNAL(timeout()), this, SLOT(onSuspendTimer()));
|
||||
connect(this, SIGNAL(stopSuspend()), this, SLOT(onSuspendTimerStop()), Qt::QueuedConnection);
|
||||
_pauseTimer.setSingleShot(true);
|
||||
connect(&_pauseTimer, SIGNAL(timeout()), this, SLOT(onPauseTimer()));
|
||||
connect(this, SIGNAL(stopPauseDevice()), this, SLOT(onPauseTimerStop()), Qt::QueuedConnection);
|
||||
}
|
||||
|
||||
void AudioPlayerFader::onInit() {
|
||||
|
@ -556,36 +559,36 @@ void AudioPlayerFader::onTimer() {
|
|||
}
|
||||
if (hasFading) {
|
||||
_timer.start(AudioFadeTimeout);
|
||||
processContext();
|
||||
resumeDevice();
|
||||
} else if (hasPlaying) {
|
||||
_timer.start(AudioCheckPositionTimeout);
|
||||
processContext();
|
||||
resumeDevice();
|
||||
} else {
|
||||
QMutexLocker lock(&_suspendMutex);
|
||||
_suspendFlag = true;
|
||||
_suspendTimer.start(AudioSuspendTimeout);
|
||||
QMutexLocker lock(&_pauseMutex);
|
||||
_pauseFlag = true;
|
||||
_pauseTimer.start(AudioPauseDeviceTimeout);
|
||||
}
|
||||
}
|
||||
|
||||
void AudioPlayerFader::onSuspendTimer() {
|
||||
QMutexLocker lock(&_suspendMutex);
|
||||
if (_suspendFlag) {
|
||||
_suspended = true;
|
||||
alcSuspendContext(audioContext);
|
||||
void AudioPlayerFader::onPauseTimer() {
|
||||
QMutexLocker lock(&_pauseMutex);
|
||||
if (_pauseFlag) {
|
||||
_paused = true;
|
||||
alcDevicePauseSOFT(audioDevice);
|
||||
}
|
||||
}
|
||||
|
||||
void AudioPlayerFader::onSuspendTimerStop() {
|
||||
if (_suspendTimer.isActive()) _suspendTimer.stop();
|
||||
void AudioPlayerFader::onPauseTimerStop() {
|
||||
if (_pauseTimer.isActive()) _pauseTimer.stop();
|
||||
}
|
||||
|
||||
void AudioPlayerFader::processContext() {
|
||||
QMutexLocker lock(&_suspendMutex);
|
||||
_suspendFlag = false;
|
||||
emit stopSuspend();
|
||||
if (_suspended) {
|
||||
_suspended = false;
|
||||
alcProcessContext(audioContext);
|
||||
void AudioPlayerFader::resumeDevice() {
|
||||
QMutexLocker lock(&_pauseMutex);
|
||||
_pauseFlag = false;
|
||||
emit stopPauseDevice();
|
||||
if (_paused) {
|
||||
_paused = false;
|
||||
alcDeviceResumeSOFT(audioDevice);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1111,7 +1114,7 @@ void AudioPlayerLoaders::onLoad(AudioData *audio) {
|
|||
alGetSourcei(m.source, AL_SOURCE_STATE, &state);
|
||||
if (_checkALError()) {
|
||||
if (state != AL_PLAYING) {
|
||||
voice->processContext();
|
||||
voice->resumeDevice();
|
||||
alSourcePlay(m.source);
|
||||
emit needToCheck();
|
||||
}
|
||||
|
|
|
@ -50,7 +50,7 @@ public:
|
|||
|
||||
void currentState(AudioData **audio, AudioPlayerState *state = 0, int64 *position = 0, int64 *duration = 0, int32 *frequency = 0);
|
||||
void clearStoppedAtStart(AudioData *audio);
|
||||
void processContext();
|
||||
void resumeDevice();
|
||||
|
||||
~AudioPlayer();
|
||||
|
||||
|
@ -150,7 +150,7 @@ class AudioPlayerFader : public QObject {
|
|||
public:
|
||||
|
||||
AudioPlayerFader(QThread *thread);
|
||||
void processContext();
|
||||
void resumeDevice();
|
||||
|
||||
signals:
|
||||
|
||||
|
@ -159,20 +159,20 @@ signals:
|
|||
void audioStopped(AudioData *audio);
|
||||
void needToPreload(AudioData *audio);
|
||||
|
||||
void stopSuspend();
|
||||
void stopPauseDevice();
|
||||
|
||||
public slots:
|
||||
|
||||
void onInit();
|
||||
void onTimer();
|
||||
void onSuspendTimer();
|
||||
void onSuspendTimerStop();
|
||||
void onPauseTimer();
|
||||
void onPauseTimerStop();
|
||||
|
||||
private:
|
||||
|
||||
QTimer _timer, _suspendTimer;
|
||||
QMutex _suspendMutex;
|
||||
bool _suspendFlag, _suspended;
|
||||
QTimer _timer, _pauseTimer;
|
||||
QMutex _pauseMutex;
|
||||
bool _pauseFlag, _paused;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -97,7 +97,7 @@ enum {
|
|||
AudioVoiceMsgChannels = 2, // stereo
|
||||
AudioVoiceMsgBufferSize = 1024 * 1024, // 1 Mb buffers
|
||||
AudioVoiceMsgInMemory = 1024 * 1024, // 1 Mb audio is hold in memory and auto loaded
|
||||
AudioSuspendTimeout = 3000, // suspend in 3 secs after playing is over
|
||||
AudioPauseDeviceTimeout = 3000, // pause in 3 secs after playing is over
|
||||
|
||||
StickerInMemory = 256 * 1024, // 128 Kb stickers hold in memory, auto loaded and displayed inline
|
||||
StickerMaxSize = 2048, // 2048x2048 is a max image size for sticker
|
||||
|
|
Loading…
Add table
Reference in a new issue