362 explicit QPlatformAudioEndpointBase(QAudioDevice,
const QAudioFormat &, QObject *parent);
363 ~QPlatformAudioEndpointBase() override;
366 QAudio::Error error()
const {
return m_error; }
367 virtual QAudio::State state()
const {
return m_inferredState; }
368 virtual void setError(QAudio::Error);
370 virtual bool isFormatSupported(
const QAudioFormat &format)
const;
371 QAudioFormat format()
const {
return m_format; }
373 virtual void setVolume(
float volume) { m_volume = volume; }
374 float volume()
const {
return m_volume; }
377 void stateChanged(QtAudio::State);
380 enum class EmitStateSignal : uint8_t
386 void updateStreamState(QAudio::State);
387 void updateStreamIdle(
bool idle, EmitStateSignal = EmitStateSignal::True);
389 const QAudioDevice m_audioDevice;
390 const QAudioFormat m_format;
395 QAudio::State m_streamState = QAudio::StoppedState;
396 QAudio::State m_inferredState = QAudio::StoppedState;
397 QAudio::Error m_error{};
398 bool m_streamIsIdle =
false;
400 float m_volume{ 1.f };
408 explicit QPlatformAudioSink(QAudioDevice,
const QAudioFormat &, QObject *parent);
409 ~QPlatformAudioSink() override;
411 virtual void start(QIODevice *device) = 0;
412 virtual QIODevice* start() = 0;
413 virtual void stop() = 0;
414 virtual void reset() = 0;
415 virtual void suspend() = 0;
416 virtual void resume() = 0;
417 virtual qsizetype bytesFree()
const = 0;
418 virtual void setBufferSize(qsizetype value) = 0;
419 virtual qsizetype bufferSize()
const = 0;
420 virtual void setHardwareBufferFrames(int32_t) { }
421 virtual int32_t hardwareBufferFrames() {
return -1; }
422 virtual qint64 processedUSecs()
const = 0;
424 using AudioCallback = QtMultimediaPrivate::AudioSinkCallback;
426 virtual void start(AudioCallback &&) { }
427 virtual bool hasCallbackAPI() {
return false; }
429 QElapsedTimer elapsedTime;
431 static QPlatformAudioSink *get(
const QAudioSink &);
433 using AudioEndpointRole = QtMultimediaPrivate::AudioEndpointRole;
434 virtual void setRole(AudioEndpointRole) { }
442 explicit QPlatformAudioSource(QAudioDevice,
const QAudioFormat &, QObject *parent);
443 ~QPlatformAudioSource() override;
445 virtual void start(QIODevice *device) = 0;
446 virtual QIODevice* start() = 0;
447 virtual void stop() = 0;
448 virtual void reset() = 0;
449 virtual void suspend() = 0;
450 virtual void resume() = 0;
451 virtual qsizetype bytesReady()
const = 0;
452 virtual void setBufferSize(qsizetype value) = 0;
453 virtual void setHardwareBufferFrames(int32_t) { }
454 virtual int32_t hardwareBufferFrames() {
return -1; }
455 virtual qsizetype bufferSize()
const = 0;
456 virtual qint64 processedUSecs()
const = 0;
458 using AudioCallback = QtMultimediaPrivate::AudioSourceCallback;
460 virtual void start(AudioCallback &&) { }
461 virtual bool hasCallbackAPI() {
return false; }
463 QElapsedTimer elapsedTime;
465 static QPlatformAudioSource *get(
const QAudioSource &);