7#include <QtMultimedia/qaudiodevice.h>
8#include <QtMultimedia/qaudiooutput.h>
9#include <QtCore/qloggingcategory.h>
44 audioConvert(
std::move(audioconvert)),
45 audioResample(
std::move(audioresample)),
46 audioVolume(
std::move(volume)),
47 audioSink(
std::move(autoaudiosink))
50 gstAudioOutput.add(audioQueue, audioConvert, audioResample, audioVolume, audioSink);
51 qLinkGstElements(audioQueue, audioConvert, audioResample, audioVolume, audioSink);
53 gstAudioOutput.addGhostPad(audioQueue,
"sink");
56QGstElement QGstreamerAudioOutput::createGstElement()
58 const auto *customDeviceInfo =
61 if (customDeviceInfo) {
63 <<
"requesting custom audio sink element: " << customDeviceInfo->id;
72 <<
"Cannot create audio sink element:" << customDeviceInfo->id;
79 newSink.set(
"device",
id.constData());
82 qWarning() <<
"Cannot create pulsesink";
87 newSink.set(
"device",
id.constData());
90 qWarning() <<
"Cannot create alsasink";
94 if (deviceInfo && deviceInfo->gstDevice) {
100 qCWarning(qLcMediaAudioOutput) <<
"Invalid audio device:" << m_audioOutput.
id();
102 <<
"Failed to create a gst element for the audio device, using a default audio sink";
123 if (
info == m_audioOutput)
125 qCDebug(qLcMediaAudioOutput) <<
"setAudioOutput" <<
info.description() <<
info.isNull();
127 m_audioOutput =
info;
132 qUnlinkGstElements(audioVolume, audioSink);
133 gstAudioOutput.stopAndRemoveElements(audioSink);
134 audioSink = std::move(newSink);
135 gstAudioOutput.add(audioSink);
136 audioSink.syncStateWithParent();
137 qLinkGstElements(audioVolume, audioSink);
The QAudioDevice class provides an information about audio devices and their functionality.
QByteArray id
\qmlproperty string QtMultimedia::audioDevice::id
const QAudioDevicePrivate * handle() const
\qmltype AudioOutput \instantiates QAudioOutput
static QGstBin createFromPipelineDescription(const QByteArray &pipelineDescription, const char *name=nullptr, bool ghostUnlinkedPads=false)
static QGstElement createFromDevice(const QGstDeviceHandle &, const char *name=nullptr)
bool setStateSync(GstState state, std::chrono::nanoseconds timeout=std::chrono::seconds(1))
static QGstElement createFromFactory(const char *factory, const char *name=nullptr)
QGstPipeline getPipeline() const
void set(const char *property, const char *str)
void modifyPipelineWhileNotRunning(Functor &&fn)
void setAudioDevice(const QAudioDevice &) override
void setMuted(bool) override
void setVolume(float) override
Combined button and popup list for selecting options.
std::enable_if_t<(std::is_base_of_v< QGstElement, Ts > &&...), void qLinkGstElements)(const Ts &...ts)
QString errorMessageCannotFindElement(std::string_view element)
#define Q_LOGGING_CATEGORY(name,...)
#define qCWarning(category,...)
#define qCDebug(category,...)
#define QT_CONFIG(feature)