364 using NativePeriodFrames = QtMultimediaPrivate::NativePeriodFrames;
366 explicit QPlatformAudioEndpointBase(QAudioDevice,
const QAudioFormat &, QObject *parent);
367 ~QPlatformAudioEndpointBase() override;
370 QAudio::Error error()
const {
return m_error; }
371 virtual QAudio::State state()
const {
return m_inferredState; }
372 virtual void setError(QAudio::Error);
374 virtual bool isFormatSupported(
const QAudioFormat &format)
const;
375 QAudioFormat format()
const {
return m_format; }
377 virtual void setVolume(
float volume) { m_volume = volume; }
378 float volume()
const {
return m_volume; }
381 void stateChanged(QtAudio::State);
384 enum class EmitStateSignal : uint8_t
390 void updateStreamState(QAudio::State);
391 void updateStreamIdle(
bool idle, EmitStateSignal = EmitStateSignal::True);
393 const QAudioDevice m_audioDevice;
394 const QAudioFormat m_format;
399 QAudio::State m_streamState = QAudio::StoppedState;
400 QAudio::State m_inferredState = QAudio::StoppedState;
401 QAudio::Error m_error{};
402 bool m_streamIsIdle =
false;
404 float m_volume{ 1.f };
412 explicit QPlatformAudioSink(QAudioDevice,
const QAudioFormat &, QObject *parent);
413 ~QPlatformAudioSink() override;
415 virtual void start(QIODevice *device) = 0;
416 virtual QIODevice* start() = 0;
417 virtual void stop() = 0;
418 virtual void reset() = 0;
419 virtual void suspend() = 0;
420 virtual void resume() = 0;
421 virtual qsizetype bytesFree()
const = 0;
422 virtual void setBufferSize(qsizetype value) = 0;
423 virtual qsizetype bufferSize()
const = 0;
424 virtual void setNativePeriodFrames(std::optional<NativePeriodFrames>) { }
425 virtual std::optional<NativePeriodFrames> nativePeriodFrames() {
return std::nullopt; }
426 virtual qint64 processedUSecs()
const = 0;
428 using AudioCallback = QtMultimediaPrivate::AudioSinkCallback;
430 virtual void start(AudioCallback &&) { }
431 virtual bool hasCallbackAPI() {
return false; }
433 QElapsedTimer elapsedTime;
435 static QPlatformAudioSink *get(
const QAudioSink &);
437 using AudioEndpointRole = QtMultimediaPrivate::AudioEndpointRole;
438 virtual void setRole(AudioEndpointRole) { }
446 explicit QPlatformAudioSource(QAudioDevice,
const QAudioFormat &, QObject *parent);
447 ~QPlatformAudioSource() override;
449 virtual void start(QIODevice *device) = 0;
450 virtual QIODevice* start() = 0;
451 virtual void stop() = 0;
452 virtual void reset() = 0;
453 virtual void suspend() = 0;
454 virtual void resume() = 0;
455 virtual qsizetype bytesReady()
const = 0;
456 virtual void setBufferSize(qsizetype value) = 0;
457 virtual void setNativePeriodFrames(std::optional<NativePeriodFrames>) { }
458 virtual std::optional<NativePeriodFrames> nativePeriodFrames() {
return std::nullopt; }
459 virtual qsizetype bufferSize()
const = 0;
460 virtual qint64 processedUSecs()
const = 0;
462 using AudioCallback = QtMultimediaPrivate::AudioSourceCallback;
464 virtual void start(AudioCallback &&) { }
465 virtual bool hasCallbackAPI() {
return false; }
467 QElapsedTimer elapsedTime;
469 static QPlatformAudioSource *get(
const QAudioSource &);