1 /*
2     SPDX-FileCopyrightText: 2016 Andreas Cord-Landwehr <cordlandwehr@kde.org>
3 
4     SPDX-License-Identifier: LGPL-2.1-or-later
5 */
6 
7 #include "qtmultimediacapturebackend.h"
8 
9 #include "libsound_debug.h"
10 
11 #include <QUrl>
12 
13 #include <KLocalizedString>
14 
QtMultimediaCaptureBackend(QObject * parent)15 QtMultimediaCaptureBackend::QtMultimediaCaptureBackend(QObject *parent)
16     : CaptureBackendInterface(parent)
17 {
18     QAudioEncoderSettings audioSettings;
19 
20     QStringList availableCodecs = m_recorder.supportedAudioCodecs();
21     if (availableCodecs.contains(QLatin1String("audio/x-vorbis"))) {
22         audioSettings.setCodec(QStringLiteral("audio/x-vorbis"));
23     } else if (availableCodecs.contains(QLatin1String("audio/vorbis"))) {
24         audioSettings.setCodec(QStringLiteral("audio/vorbis"));
25     } else {
26         qCWarning(LIBSOUND_LOG()) << "No vorbis codec was found for recordings";
27         audioSettings.setCodec(availableCodecs.first());
28     }
29     qCDebug(LIBSOUND_LOG()) << "recording codec set to" << audioSettings.codec();
30 
31     audioSettings.setQuality(QMultimedia::HighQuality);
32     m_recorder.setAudioSettings(audioSettings);
33 }
34 
captureState() const35 CaptureDeviceController::State QtMultimediaCaptureBackend::captureState() const
36 {
37     switch (m_recorder.state()) {
38         case QMediaRecorder::StoppedState:
39             return CaptureDeviceController::StoppedState;
40         case QMediaRecorder::RecordingState:
41             return CaptureDeviceController::RecordingState;
42         case QMediaRecorder::PausedState:
43             return CaptureDeviceController::PausedState;
44     }
45     Q_UNREACHABLE();
46     return CaptureDeviceController::StoppedState;
47 }
48 
startCapture(const QString & filePath)49 void QtMultimediaCaptureBackend::startCapture(const QString &filePath)
50 {
51     m_recorder.setOutputLocation(QUrl::fromLocalFile(filePath));
52     m_recorder.record();
53 }
54 
stopCapture()55 void QtMultimediaCaptureBackend::stopCapture()
56 {
57     m_recorder.stop();
58 }
59 
devices() const60 QStringList QtMultimediaCaptureBackend::devices() const
61 {
62     return m_recorder.audioInputs();
63 }
64 
setDevice(const QString & deviceIdentifier)65 void QtMultimediaCaptureBackend::setDevice(const QString &deviceIdentifier)
66 {
67     if (devices().contains(deviceIdentifier)) {
68         m_recorder.setAudioInput(deviceIdentifier);
69     } else {
70         qCDebug(LIBSOUND_LOG) << "Could not set unknown capture device:" << deviceIdentifier;
71     }
72 }
73