QAlsaAudioOutput remove async callback.
The async callback mechanism in ALSA is prone to deadlock. There was already a timer fallback mechanism that appears to be sufficient. Task-number: QTBUG-39677 Change-Id: I44b59e6b16eea1c9c4eeb6967335ce4f468cf3c4 Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
This commit is contained in:
committed by
Yoann Lopes
parent
a391ad4763
commit
a63da4b593
@@ -63,7 +63,6 @@ QAlsaAudioOutput::QAlsaAudioOutput(const QByteArray &device)
|
|||||||
{
|
{
|
||||||
bytesAvailable = 0;
|
bytesAvailable = 0;
|
||||||
handle = 0;
|
handle = 0;
|
||||||
ahandler = 0;
|
|
||||||
access = SND_PCM_ACCESS_RW_INTERLEAVED;
|
access = SND_PCM_ACCESS_RW_INTERLEAVED;
|
||||||
pcmformat = SND_PCM_FORMAT_S16;
|
pcmformat = SND_PCM_FORMAT_S16;
|
||||||
buffer_frames = 0;
|
buffer_frames = 0;
|
||||||
@@ -118,17 +117,6 @@ QAudio::State QAlsaAudioOutput::state() const
|
|||||||
return deviceState;
|
return deviceState;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAlsaAudioOutput::async_callback(snd_async_handler_t *ahandler)
|
|
||||||
{
|
|
||||||
QAlsaAudioOutput* audioOut;
|
|
||||||
|
|
||||||
audioOut = static_cast<QAlsaAudioOutput*>
|
|
||||||
(snd_async_handler_get_callback_private(ahandler));
|
|
||||||
|
|
||||||
if (audioOut && (audioOut->deviceState == QAudio::ActiveState || audioOut->resuming))
|
|
||||||
audioOut->feedback();
|
|
||||||
}
|
|
||||||
|
|
||||||
int QAlsaAudioOutput::xrun_recovery(int err)
|
int QAlsaAudioOutput::xrun_recovery(int err)
|
||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
@@ -512,8 +500,7 @@ bool QAlsaAudioOutput::open()
|
|||||||
snd_pcm_prepare( handle );
|
snd_pcm_prepare( handle );
|
||||||
snd_pcm_start(handle);
|
snd_pcm_start(handle);
|
||||||
|
|
||||||
// Step 5: Setup callback and timer fallback
|
// Step 5: Setup timer
|
||||||
snd_async_add_pcm_handler(&ahandler, handle, async_callback, this);
|
|
||||||
bytesAvailable = bytesFree();
|
bytesAvailable = bytesFree();
|
||||||
|
|
||||||
// Step 6: Start audio processing
|
// Step 6: Start audio processing
|
||||||
@@ -715,21 +702,6 @@ void QAlsaAudioOutput::userFeed()
|
|||||||
deviceReady();
|
deviceReady();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAlsaAudioOutput::feedback()
|
|
||||||
{
|
|
||||||
updateAvailable();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void QAlsaAudioOutput::updateAvailable()
|
|
||||||
{
|
|
||||||
#ifdef DEBUG_AUDIO
|
|
||||||
QTime now(QTime::currentTime());
|
|
||||||
qDebug()<<now.second()<<"s "<<now.msec()<<"ms :updateAvailable()";
|
|
||||||
#endif
|
|
||||||
bytesAvailable = bytesFree();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool QAlsaAudioOutput::deviceReady()
|
bool QAlsaAudioOutput::deviceReady()
|
||||||
{
|
{
|
||||||
if(pullMode) {
|
if(pullMode) {
|
||||||
|
|||||||
@@ -107,8 +107,6 @@ public:
|
|||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void userFeed();
|
void userFeed();
|
||||||
void feedback();
|
|
||||||
void updateAvailable();
|
|
||||||
bool deviceReady();
|
bool deviceReady();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
@@ -126,7 +124,6 @@ private:
|
|||||||
unsigned int period_time;
|
unsigned int period_time;
|
||||||
snd_pcm_uframes_t buffer_frames;
|
snd_pcm_uframes_t buffer_frames;
|
||||||
snd_pcm_uframes_t period_frames;
|
snd_pcm_uframes_t period_frames;
|
||||||
static void async_callback(snd_async_handler_t *ahandler);
|
|
||||||
int xrun_recovery(int err);
|
int xrun_recovery(int err);
|
||||||
|
|
||||||
int setFormat();
|
int setFormat();
|
||||||
@@ -141,7 +138,6 @@ private:
|
|||||||
qint64 elapsedTimeOffset;
|
qint64 elapsedTimeOffset;
|
||||||
char* audioBuffer;
|
char* audioBuffer;
|
||||||
snd_pcm_t* handle;
|
snd_pcm_t* handle;
|
||||||
snd_async_handler_t* ahandler;
|
|
||||||
snd_pcm_access_t access;
|
snd_pcm_access_t access;
|
||||||
snd_pcm_format_t pcmformat;
|
snd_pcm_format_t pcmformat;
|
||||||
snd_timestamp_t* timestamp;
|
snd_timestamp_t* timestamp;
|
||||||
|
|||||||
Reference in New Issue
Block a user