405 using NativePeriodFrames = QtMultimediaPrivate::NativePeriodFrames;
407 explicit QPlatformAudioEndpointBase(QAudioDevice,
const QAudioFormat &, QObject *parent);
408 ~QPlatformAudioEndpointBase() override;
411 QAudio::Error error()
const {
return m_error; }
412 virtual QAudio::State state()
const {
return m_inferredState; }
413 virtual void setError(QAudio::Error);
415 virtual bool isFormatSupported(
const QAudioFormat &format)
const;
416 QAudioFormat format()
const {
return m_format; }
418 virtual void setVolume(
float volume) { m_volume = volume; }
419 float volume()
const {
return m_volume; }
422 void stateChanged(QtAudio::State);
425 enum class EmitStateSignal : uint8_t
431 void updateStreamState(QAudio::State);
432 void updateStreamIdle(
bool idle, EmitStateSignal = EmitStateSignal::True);
434 const QAudioDevice m_audioDevice;
435 const QAudioFormat m_format;
440 QAudio::State m_streamState = QAudio::StoppedState;
441 QAudio::State m_inferredState = QAudio::StoppedState;
442 QAudio::Error m_error{};
443 bool m_streamIsIdle =
false;
445 float m_volume{ 1.f };
453 explicit QPlatformAudioSink(QAudioDevice,
const QAudioFormat &, QObject *parent);
454 ~QPlatformAudioSink() override;
456 virtual void start(QIODevice *device) = 0;
457 virtual QIODevice* start() = 0;
458 virtual void stop() = 0;
459 virtual void reset() = 0;
460 virtual void suspend() = 0;
461 virtual void resume() = 0;
462 virtual qsizetype bytesFree()
const = 0;
463 virtual void setBufferSize(qsizetype value) = 0;
464 virtual qsizetype bufferSize()
const = 0;
465 virtual void setNativePeriodFrames(std::optional<NativePeriodFrames>) { }
466 virtual std::optional<NativePeriodFrames> nativePeriodFrames() {
return std::nullopt; }
467 virtual qint64 processedUSecs()
const = 0;
469 using AudioCallback = QtMultimediaPrivate::AudioSinkCallback;
471 virtual void start(AudioCallback &&) { }
472 virtual bool hasCallbackAPI() {
return false; }
474 QElapsedTimer elapsedTime;
476 static QPlatformAudioSink *get(
const QAudioSink &);
478 using AudioEndpointRole = QtMultimediaPrivate::AudioEndpointRole;
479 virtual void setRole(AudioEndpointRole) { }
487 explicit QPlatformAudioSource(QAudioDevice,
const QAudioFormat &, QObject *parent);
488 ~QPlatformAudioSource() override;
490 virtual void start(QIODevice *device) = 0;
491 virtual QIODevice* start() = 0;
492 virtual void stop() = 0;
493 virtual void reset() = 0;
494 virtual void suspend() = 0;
495 virtual void resume() = 0;
496 virtual qsizetype bytesReady()
const = 0;
497 virtual void setBufferSize(qsizetype value) = 0;
498 virtual void setNativePeriodFrames(std::optional<NativePeriodFrames>) { }
499 virtual std::optional<NativePeriodFrames> nativePeriodFrames() {
return std::nullopt; }
500 virtual qsizetype bufferSize()
const = 0;
501 virtual qint64 processedUSecs()
const = 0;
503 using AudioCallback = QtMultimediaPrivate::AudioSourceCallback;
505 virtual void start(AudioCallback &&) { }
506 virtual bool hasCallbackAPI() {
return false; }
508 QElapsedTimer elapsedTime;
510 static QPlatformAudioSource *get(
const QAudioSource &);