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.mm63
1 files changed, 21 insertions, 42 deletions
diff --git a/src/multimedia/platform/darwin/camera/avfcameraservice.mm b/src/multimedia/platform/darwin/camera/avfcameraservice.mm
index 899dd4602..8ee350d02 100644
--- a/src/multimedia/platform/darwin/camera/avfcameraservice.mm
+++ b/src/multimedia/platform/darwin/camera/avfcameraservice.mm
@@ -48,13 +48,14 @@
#include "avfcameraimagecapture_p.h"
#include "avfmediaencoder_p.h"
#include <qmediadevices.h>
+#include <private/qplatformaudioinput_p.h>
+#include <qaudioinput.h>
QT_USE_NAMESPACE
AVFCameraService::AVFCameraService()
{
m_session = new AVFCameraSession(this);
- m_audioCaptureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
}
AVFCameraService::~AVFCameraService()
@@ -122,57 +123,35 @@ void AVFCameraService::setMediaEncoder(QPlatformMediaEncoder *encoder)
emit encoderChanged();
}
-bool AVFCameraService::isMuted() const
+void AVFCameraService::setAudioInput(QPlatformAudioInput *input)
{
- return m_muted;
-}
-
-void AVFCameraService::setMuted(bool muted)
-{
- if (m_muted != muted) {
- m_muted = muted;
- Q_EMIT mutedChanged(muted);
- }
-}
+ if (m_audioInput == input)
+ return;
+ if (m_audioInput)
+ m_audioInput->q->disconnect(this);
-qreal AVFCameraService::volume() const
-{
- return m_volume;
-}
+ m_audioInput = input;
-void AVFCameraService::setVolume(qreal volume)
-{
- if (m_volume != volume) {
- m_volume = volume;
- Q_EMIT volumeChanged(volume);
+ if (input) {
+ connect(m_audioInput->q, &QAudioInput::destroyed, this, &AVFCameraService::audioInputDestroyed);
+ connect(m_audioInput->q, &QAudioInput::deviceChanged, this, &AVFCameraService::audioInputChanged);
}
+ audioInputChanged();
}
-QAudioDevice AVFCameraService::audioInput() const
-{
- QByteArray id = [[m_audioCaptureDevice uniqueID] UTF8String];
- const QList<QAudioDevice> devices = QMediaDevices::audioInputs();
- for (auto d : devices)
- if (d.id() == id)
- return d;
- return QMediaDevices::defaultAudioInput();
-}
-
-bool AVFCameraService::setAudioInput(const QAudioDevice &id)
+void AVFCameraService::audioInputChanged()
{
- AVCaptureDevice *device = nullptr;
+ m_audioCaptureDevice = nullptr;
+ if (!m_audioInput)
+ return;
- if (!id.isNull()) {
- device = [AVCaptureDevice deviceWithUniqueID: [NSString stringWithUTF8String:id.id().constData()]];
+ QByteArray id = m_audioInput->device.id();
+ if (!id.isEmpty()) {
+ m_audioCaptureDevice = [AVCaptureDevice deviceWithUniqueID: [NSString stringWithUTF8String:id.constData()]];
} else {
- device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
- }
-
- if (device) {
- m_audioCaptureDevice = device;
- return true;
+ m_audioCaptureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
}
- return false;
+ m_session->updateAudioInput();
}
void AVFCameraService::setVideoPreview(QVideoSink *sink)