summaryrefslogtreecommitdiffstats
path: root/src/multimedia/platform/darwin/camera/avfcameraservice.mm
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia/platform/darwin/camera/avfcameraservice.mm')
-rw-r--r--src/multimedia/platform/darwin/camera/avfcameraservice.mm28
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)