diff options
Diffstat (limited to 'src/multimedia/wasm/qwasmaudiosource.cpp')
-rw-r--r-- | src/multimedia/wasm/qwasmaudiosource.cpp | 76 |
1 files changed, 22 insertions, 54 deletions
diff --git a/src/multimedia/wasm/qwasmaudiosource.cpp b/src/multimedia/wasm/qwasmaudiosource.cpp index 981eeefc0..81f222c4b 100644 --- a/src/multimedia/wasm/qwasmaudiosource.cpp +++ b/src/multimedia/wasm/qwasmaudiosource.cpp @@ -1,41 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2021 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #include "qwasmaudiosource_p.h" @@ -100,18 +64,21 @@ void QWasmAudioSource::writeBuffer() m_device->write(m_tmpData,bytes); } -QWasmAudioSource::QWasmAudioSource(const QByteArray &device) - : QPlatformAudioSource(), m_name(device) +QWasmAudioSource::QWasmAudioSource(const QByteArray &device , QObject *parent) + : QPlatformAudioSource(parent), + m_name(device), + m_timer(new QTimer(this)) { - aldata = new ALData(); - connect(&m_timer, &QTimer::timeout, this, [this](){ - Q_ASSERT(m_running); - if (m_pullMode) - writeBuffer(); - else - if (bytesReady() > 0) + if (device.contains("Emscripten")) { + aldata = new ALData(); + connect(m_timer, &QTimer::timeout, this, [this](){ + Q_ASSERT(m_running); + if (m_pullMode) + writeBuffer(); + else if (bytesReady() > 0) emit m_device->readyRead(); - }); + }); + } } void QWasmAudioSource::start(QIODevice *device) @@ -182,8 +149,10 @@ void QWasmAudioSource::start(bool mode) m_tmpData = new char[m_bufferSize]; else m_tmpData = nullptr; - m_timer.setInterval(m_format.durationForBytes(m_bufferSize) / 3'000); + m_timer->setInterval(m_format.durationForBytes(m_bufferSize) / 3000); + m_timer->start(); + alcGetError(aldata->device); // clear error state aldata->device = alcCaptureOpenDevice(m_name.data(), m_format.sampleRate(), format, m_format.framesForBytes(m_bufferSize)); @@ -201,7 +170,6 @@ void QWasmAudioSource::start(bool mode) } m_processed = 0; m_running = true; - m_timer.start(); } void QWasmAudioSource::stop() @@ -217,7 +185,7 @@ void QWasmAudioSource::stop() } if (!m_pullMode) m_device->deleteLater(); - m_timer.stop(); + m_timer->stop(); m_running = false; } @@ -251,7 +219,7 @@ void QWasmAudioSource::resume() alcCaptureStart(aldata->device); } -int QWasmAudioSource::bytesReady() const +qsizetype QWasmAudioSource::bytesReady() const { if (!m_running) return 0; @@ -260,14 +228,14 @@ int QWasmAudioSource::bytesReady() const return m_format.bytesForFrames(samples); } -void QWasmAudioSource::setBufferSize(int value) +void QWasmAudioSource::setBufferSize(qsizetype value) { if (!m_running) return; m_bufferSize = value; } -int QWasmAudioSource::bufferSize() const +qsizetype QWasmAudioSource::bufferSize() const { return m_bufferSize; } |