Revision control

Copy as Markdown

// Copyright (C) 2025 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
#ifndef QAAUDIOSTREAM_P_H
#define QAAUDIOSTREAM_P_H
//
// W A R N I N G
// -------------
//
// This file is not part of the Qt API. It exists purely as an
// implementation detail. This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//
#include <QtMultimedia/qaudioformat.h>
#include <aaudio/AAudio.h>
QT_BEGIN_NAMESPACE
namespace QtAAudio {
Q_DECLARE_LOGGING_CATEGORY(qLcAAudioStream)
struct StreamBuilder;
struct Stream
{
explicit Stream(StreamBuilder &builder);
~Stream();
Q_DISABLE_COPY_MOVE(Stream)
bool start();
void stop();
void pause();
void flush();
bool isOpen() const;
bool areStreamParametersRespected() const;
private:
void close();
aaudio_result_t waitForTargetState(aaudio_stream_state_t targetState);
template <typename Functor>
aaudio_result_t requestWithExpectedState(Functor &&request, aaudio_stream_state_t expected);
// stream members
AAudioStream *m_stream{ nullptr };
bool m_areStreamParametersRespected{ false };
};
struct StreamParameterSet
{
aaudio_sharing_mode_t sharingMode = AAUDIO_SHARING_MODE_SHARED;
aaudio_direction_t direction = AAUDIO_DIRECTION_OUTPUT;
aaudio_usage_t outputUsage = AAUDIO_USAGE_MEDIA;
aaudio_content_type_t outputContentType = AAUDIO_CONTENT_TYPE_MUSIC;
aaudio_input_preset_t inputPreset = AAUDIO_INPUT_PRESET_VOICE_RECOGNITION;
aaudio_performance_mode_t performanceMode = AAUDIO_PERFORMANCE_MODE_NONE;
};
struct StreamBuilder
{
friend Stream;
StreamBuilder(QAudioFormat format);
~StreamBuilder();
Q_DISABLE_COPY_MOVE(StreamBuilder)
QAudioFormat format;
AAudioStream_dataCallback callback;
AAudioStream_errorCallback errorCallback;
void *userData{ nullptr };
StreamParameterSet params;
int32_t deviceId{ AAUDIO_UNSPECIFIED };
int32_t bufferCapacity{ AAUDIO_UNSPECIFIED };
void setupBuilder();
private:
AAudioStreamBuilder *m_builder{ nullptr };
};
} // namespace QtAAudio
QT_END_NAMESPACE
#endif