6#include <private/qaudiohelpers_p.h>
17 , m_state(
QAudio::StoppedState)
19 , m_elapsedTimeOffset(0)
21 , m_volume(
qreal(1.0f))
25 , m_deviceInfo(deviceInfo)
40 if (!m_pullMode && m_audioSource)
57 if (!m_pullMode && m_audioSource)
96 snd_pcm_capture_pause(m_pcmHandle.get());
109 snd_pcm_capture_resume(m_pcmHandle.get());
122 return qMax(m_bytesAvailable, 0);
171void QQnxAudioSource::userFeed()
179bool QQnxAudioSource::deviceReady()
185 m_bytesAvailable = m_periodSize;
188 if (m_audioSource != 0) {
200bool QQnxAudioSource::open()
204 qWarning(
"QQnxAudioSource: open error, invalid format.");
206 qWarning(
"QQnxAudioSource: open error, invalid sample rate (%d).", m_format.
sampleRate());
219 snd_pcm_plugin_set_disable(m_pcmHandle.get(), PLUGIN_MMAP);
232 if ((errorCode = snd_pcm_plugin_params(m_pcmHandle.get(), &
params)) < 0) {
233 qWarning(
"QQnxAudioSource: open error, couldn't set channel params (0x%x)", -errorCode);
238 if ((errorCode = snd_pcm_plugin_prepare(m_pcmHandle.get(), SND_PCM_CHANNEL_CAPTURE)) < 0) {
239 qWarning(
"QQnxAudioSource: open error, couldn't prepare channel (0x%x)", -errorCode);
247 m_periodSize =
qMin(2048, setup->buf.block.frag_size);
249 m_elapsedTimeOffset = 0;
250 m_totalTimeValue = 0;
253 m_pcmNotifier =
new QSocketNotifier(snd_pcm_file_descriptor(m_pcmHandle.get(), SND_PCM_CHANNEL_CAPTURE),
260void QQnxAudioSource::close()
263#if SND_PCM_VERSION < SND_PROTOCOL_VERSION('P',3,0,2)
264 snd_pcm_plugin_flush(m_pcmHandle.get(), SND_PCM_CHANNEL_CAPTURE);
266 snd_pcm_plugin_drop(m_pcmHandle.get(), SND_PCM_CHANNEL_CAPTURE);
268 m_pcmHandle =
nullptr;
272 delete m_pcmNotifier;
276 if (!m_pullMode && m_audioSource) {
277 delete m_audioSource;
284 if (!m_pullMode && m_bytesAvailable == 0)
290 const int actualRead = snd_pcm_plugin_read(m_pcmHandle.get(), tempBuffer.data(), m_periodSize);
291 if (actualRead < 1) {
292 snd_pcm_channel_status_t status;
293 memset(&status, 0,
sizeof(status));
294 status.channel = SND_PCM_CHANNEL_CAPTURE;
295 if ((errorCode = snd_pcm_plugin_status(m_pcmHandle.get(), &status)) < 0) {
296 qWarning(
"QQnxAudioSource: read error, couldn't get plugin status (0x%x)", -errorCode);
302 if (status.status == SND_PCM_STATUS_READY
303 || status.status == SND_PCM_STATUS_OVERRUN) {
304 if ((errorCode = snd_pcm_plugin_prepare(m_pcmHandle.get(), SND_PCM_CHANNEL_CAPTURE)) < 0) {
305 qWarning(
"QQnxAudioSource: read error, couldn't prepare plugin (0x%x)", -errorCode);
318 m_bytesRead += actualRead;
321 m_audioSource->
write(tempBuffer.data(), actualRead);
326 m_bytesAvailable = 0;
333 if (m_state !=
state) {
338 if (m_error !=
error) {
345 : m_audioDevice(audio)
351 return m_audioDevice->read(
data,
len);
IOBluetoothDevice * device
The QAudioDevice class provides an information about audio devices and their functionality.
QByteArray id
\qmlproperty string QtMultimedia::audioDevice::id
\inmodule QtCore \reentrant
virtual bool open(QIODeviceBase::OpenMode mode)
Opens the device and sets its OpenMode to mode.
void readyRead()
This signal is emitted once every time new data is available for reading from the device's current re...
qint64 write(const char *data, qint64 len)
Writes at most maxSize bytes of data from data to the device.
virtual qint64 bytesAvailable() const
Returns the number of bytes that are available for reading.
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
qsizetype bytesReady() const override
QAudio::State state() const override
void setFormat(const QAudioFormat &) override
QAudio::Error error() const override
void setVolume(qreal) override
QIODevice * start() override
QQnxAudioSource(const QAudioDevice &deviceInfo, QObject *parent)
friend class InputPrivate
void setBufferSize(qsizetype) override
QAudioFormat format() const override
qsizetype bufferSize() const override
qreal volume() const override
qint64 processedUSecs() const override
void setEnabled(bool)
If enable is true, the notifier is enabled; otherwise the notifier is disabled.
void qMultiplySamples(qreal factor, const QAudioFormat &format, const void *src, void *dest, int len)
The QAudio namespace contains enums used by the audio classes.
State
\value ActiveState Audio data is being processed, this state is set after start() is called and while...
Error
\value NoError No errors have occurred \value OpenError An error occurred opening the audio device \v...
Combined button and popup list for selecting options.
std::optional< snd_pcm_channel_info_t > pcmChannelInfo(snd_pcm_t *handle, QAudioDevice::Mode mode)
std::optional< snd_pcm_channel_setup_t > pcmChannelSetup(snd_pcm_t *handle, QAudioDevice::Mode mode)
HandleUniquePtr openPcmDevice(const QByteArray &id, QAudioDevice::Mode mode)
snd_pcm_channel_params_t formatToChannelParams(const QAudioFormat &format, QAudioDevice::Mode mode, int fragmentSize)
DBusConnection const char DBusError * error
constexpr const T & qMin(const T &a, const T &b)
constexpr const T & qBound(const T &min, const T &val, const T &max)
constexpr const T & qMax(const T &a, const T &b)
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLint GLsizei GLsizei GLenum format
GLenum GLenum GLenum input
QFileInfo info(fileName)
[8]
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent