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