408 using NativePeriodFrames = QtMultimediaPrivate::NativePeriodFrames;
410 explicit QPlatformAudioEndpointBase(QAudioDevice,
const QAudioFormat &, QObject *parent);
411 ~QPlatformAudioEndpointBase() override;
414 QAudio::Error error()
const {
return m_error; }
415 virtual QAudio::State state()
const {
return m_inferredState; }
416 virtual void setError(QAudio::Error);
418 virtual bool isFormatSupported(
const QAudioFormat &format)
const;
419 QAudioFormat format()
const {
return m_format; }
421 virtual void setVolume(
float volume) { m_volume = volume; }
422 float volume()
const {
return m_volume; }
425 void stateChanged(QtAudio::State);
428 enum class EmitStateSignal : uint8_t
434 void updateStreamState(QAudio::State);
435 void updateStreamIdle(
bool idle, EmitStateSignal = EmitStateSignal::True);
437 const QAudioDevice m_audioDevice;
438 const QAudioFormat m_format;
443 QAudio::State m_streamState = QAudio::StoppedState;
444 QAudio::State m_inferredState = QAudio::StoppedState;
445 QAudio::Error m_error{};
446 bool m_streamIsIdle =
false;
448 float m_volume{ 1.f };
456 explicit QPlatformAudioSink(QAudioDevice,
const QAudioFormat &, QObject *parent);
457 ~QPlatformAudioSink() override;
459 virtual void start(QIODevice *device) = 0;
460 virtual QIODevice* start() = 0;
461 virtual void stop() = 0;
462 virtual void reset() = 0;
463 virtual void suspend() = 0;
464 virtual void resume() = 0;
465 virtual qsizetype bytesFree()
const = 0;
466 virtual void setBufferSize(qsizetype value) = 0;
467 virtual qsizetype bufferSize()
const = 0;
468 virtual void setNativePeriodFrames(std::optional<NativePeriodFrames>) { }
469 virtual std::optional<NativePeriodFrames> nativePeriodFrames() {
return std::nullopt; }
470 virtual qint64 processedUSecs()
const = 0;
472 using AudioCallback = QtMultimediaPrivate::AudioSinkCallback;
474 virtual void start(AudioCallback &&) { }
475 virtual bool hasCallbackAPI() {
return false; }
477 QElapsedTimer elapsedTime;
479 static QPlatformAudioSink *get(
const QAudioSink &);
481 using AudioEndpointRole = QtMultimediaPrivate::AudioEndpointRole;
482 virtual void setRole(AudioEndpointRole) { }
490 explicit QPlatformAudioSource(QAudioDevice,
const QAudioFormat &, QObject *parent);
491 ~QPlatformAudioSource() override;
493 virtual void start(QIODevice *device) = 0;
494 virtual QIODevice* start() = 0;
495 virtual void stop() = 0;
496 virtual void reset() = 0;
497 virtual void suspend() = 0;
498 virtual void resume() = 0;
499 virtual qsizetype bytesReady()
const = 0;
500 virtual void setBufferSize(qsizetype value) = 0;
501 virtual void setNativePeriodFrames(std::optional<NativePeriodFrames>) { }
502 virtual std::optional<NativePeriodFrames> nativePeriodFrames() {
return std::nullopt; }
503 virtual qsizetype bufferSize()
const = 0;
504 virtual qint64 processedUSecs()
const = 0;
506 using AudioCallback = QtMultimediaPrivate::AudioSourceCallback;
508 virtual void start(AudioCallback &&) { }
509 virtual bool hasCallbackAPI() {
return false; }
511 QElapsedTimer elapsedTime;
513 static QPlatformAudioSource *get(
const QAudioSource &);