diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2020-03-18 11:54:43 +0100 |
---|---|---|
committer | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2020-03-18 11:54:44 +0100 |
commit | 8ef57db9729b714239ad507488e1c8a011a5163a (patch) | |
tree | b3a9ff7629762707c05221b34f9372437604608f /src | |
parent | 69837e6e04ae125186a8deaac59d82607fcd6d1a (diff) | |
parent | cd6a109f6068ea74270cb47736b3e2259e4ace84 (diff) |
Merge remote-tracking branch 'origin/5.14' into 5.15
Change-Id: Ia1bc95c071d29653a85e753964d15826ce3706f8
Diffstat (limited to 'src')
-rw-r--r-- | src/multimedia/audio/qsoundeffect_pulse_p.cpp | 17 | ||||
-rw-r--r-- | src/plugins/directshow/player/directshowioreader.cpp | 2 |
2 files changed, 18 insertions, 1 deletions
diff --git a/src/multimedia/audio/qsoundeffect_pulse_p.cpp b/src/multimedia/audio/qsoundeffect_pulse_p.cpp index 0855c1f67..51cdde026 100644 --- a/src/multimedia/audio/qsoundeffect_pulse_p.cpp +++ b/src/multimedia/audio/qsoundeffect_pulse_p.cpp @@ -528,6 +528,21 @@ qreal QSoundEffectPrivate::volume() const return m_volume; } +static void volume_stream_flush_callback(pa_stream *s, int success, void *userdata) +{ + Q_UNUSED(s); + QSoundEffectRef *ref = reinterpret_cast<QSoundEffectRef *>(userdata); + QSoundEffectPrivate *self = ref->soundEffect(); + ref->release(); + if (!self) + return; + + if (!success) + qWarning("QSoundEffect(pulseaudio): failed to drain"); + + QMetaObject::invokeMethod(self, "prepare", Qt::QueuedConnection); +} + void QSoundEffectPrivate::setVolume(qreal volume) { QMutexLocker locker(&m_volumeLock); @@ -537,6 +552,8 @@ void QSoundEffectPrivate::setVolume(qreal volume) m_volume = qBound(qreal(0), volume, qreal(1)); locker.unlock(); + if (!m_playing && m_pulseStream) + pa_stream_flush(m_pulseStream, volume_stream_flush_callback, m_ref->getRef()); emit volumeChanged(); } diff --git a/src/plugins/directshow/player/directshowioreader.cpp b/src/plugins/directshow/player/directshowioreader.cpp index ced10ea10..3318d57b5 100644 --- a/src/plugins/directshow/player/directshowioreader.cpp +++ b/src/plugins/directshow/player/directshowioreader.cpp @@ -155,7 +155,7 @@ HRESULT DirectShowIOReader::Request(IMediaSample *pSample, DWORD_PTR dwUser) return VFW_E_SAMPLE_TIME_NOT_SET; } LONGLONG position = startTime / 10000000; - LONG length = (endTime - startTime) / 10000000; + LONG length = qMin<qint64>((endTime - startTime) / 10000000, m_availableLength); auto request = new DirectShowSampleRequest(pSample, dwUser, position, length, buffer); |