diff options
Diffstat (limited to 'src/multimedia/platform/darwin/camera/avfcameraservice.mm')
-rw-r--r-- | src/multimedia/platform/darwin/camera/avfcameraservice.mm | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/multimedia/platform/darwin/camera/avfcameraservice.mm b/src/multimedia/platform/darwin/camera/avfcameraservice.mm index b669eacc1..de73542bc 100644 --- a/src/multimedia/platform/darwin/camera/avfcameraservice.mm +++ b/src/multimedia/platform/darwin/camera/avfcameraservice.mm @@ -49,7 +49,9 @@ #include "avfmediaencoder_p.h" #include <qmediadevices.h> #include <private/qplatformaudioinput_p.h> +#include <private/qplatformaudiooutput_p.h> #include <qaudioinput.h> +#include <qaudiooutput.h> QT_USE_NAMESPACE @@ -120,6 +122,8 @@ void AVFCameraService::setMediaEncoder(QPlatformMediaEncoder *encoder) m_encoder = control; if (m_encoder) m_encoder->setCaptureSession(this); + + audioOutputChanged(); emit encoderChanged(); } @@ -139,6 +143,22 @@ void AVFCameraService::setAudioInput(QPlatformAudioInput *input) audioInputChanged(); } +void AVFCameraService::setAudioOutput(QPlatformAudioOutput *output) +{ + if (m_audioOutput == output) + return; + if (m_audioOutput) + m_audioOutput->q->disconnect(this); + + m_audioOutput = output; + + if (m_audioOutput) { + connect(m_audioOutput->q, &QAudioOutput::destroyed, this, &AVFCameraService::audioOutputDestroyed); + connect(m_audioOutput->q, &QAudioOutput::deviceChanged, this, &AVFCameraService::audioOutputChanged); + } + audioOutputChanged(); +} + void AVFCameraService::audioInputChanged() { m_audioCaptureDevice = nullptr; @@ -154,6 +174,14 @@ void AVFCameraService::audioInputChanged() m_session->updateAudioInput(); } +void AVFCameraService::audioOutputChanged() +{ + if (!m_audioOutput) + return; + if (m_encoder) + m_encoder->onAudioOutputChanged(); +} + void AVFCameraService::setVideoPreview(QVideoSink *sink) { if (m_session) |