4#include <QtCore/qcoreapplication.h>
5#include <QtCore/qdebug.h>
6#include <QtCore/qmath.h>
7#include <QtMultimedia/private/qaudiohelpers_p.h>
28 return maybeAppSrc.error();
47 gstVolume(
std::move(volume)),
54 gstAppSrc = m_appSrc->
element();
59 gstVolume.
set(
"volume", m_volume);
67 gstPipeline.
add(gstAppSrc,
queue, audioconvert, gstVolume, gstOutput);
85 if (m_errorState ==
error)
99 if (m_deviceState ==
state)
102 m_deviceState =
state;
108 return m_deviceState;
127 m_audioSource =
nullptr;
157 return m_audioSource;
161static void padAdded(GstElement *element, GstPad *pad, gpointer
data)
163 GstElement *
other =
static_cast<GstElement *
>(
data);
166 qDebug(
"A new pad %s was created for %s\n",
name, gst_element_get_name(element));
168 qDebug(
"element %s will be linked to %s\n",
169 gst_element_get_name(element),
170 gst_element_get_name(
other));
171 gst_element_link(element,
other);
178 switch (GST_MESSAGE_TYPE (msg)) {
179 case GST_MESSAGE_EOS:
182 case GST_MESSAGE_ERROR: {
194bool QGStreamerAudioSink::open()
206 m_appSrc->
setup(m_audioSource, m_audioSource ? m_audioSource->
pos() : 0);
210 gstPipeline.
setState(GST_STATE_PLAYING);
215 m_bytesProcessed = 0;
220void QGStreamerAudioSink::close()
226 qWarning() <<
"failed to close the audio output stream";
228 if (!m_pullMode && m_audioSource)
229 delete m_audioSource;
230 m_audioSource =
nullptr;
266 m_bufferSize =
value;
268 gst_app_src_set_max_bytes(GST_APP_SRC(gstAppSrc.
element()),
value);
289 gstPipeline.
setState(GST_STATE_PLAYING);
291 setState(m_suspendedInState);
309 m_suspendedInState = m_deviceState;
313 gstPipeline.
setState(GST_STATE_PAUSED);
326 m_audioDevice = audio;
341 return m_audioDevice->write(
data,
len);
351 gstVolume.
set(
"volume", vol);
359void QGStreamerAudioSink::bytesProcessedByAppSrc(
int bytes)
361 m_bytesProcessed += bytes;
366void QGStreamerAudioSink::needData()
376#include "moc_qgstreameraudiosink_p.cpp"
IOBluetoothDevice * device
qint64 writeData(const char *data, qint64 len) override
Writes up to maxSize bytes from data to the device.
GStreamerOutputPrivate(QGStreamerAudioSink *audio)
qint64 readData(char *data, qint64 len) override
Reads up to maxSize bytes from the device into data, and returns the number of bytes read or -1 if an...
The QAudioDevice class provides an information about audio devices and their functionality.
void stateChanged(QAudio::State state)
void errorChanged(QAudio::Error error)
qint64 restart() noexcept
Restarts the timer and returns the number of milliseconds elapsed since the previous start.
static QMaybe< QPlatformAudioSink * > create(const QAudioDevice &device, QObject *parent)
void setFormat(const QAudioFormat &format) override
friend class GStreamerOutputPrivate
QIODevice * start() override
QAudioFormat format() const override
void setVolume(qreal volume) override
QAudio::State state() const override
bool processBusMessage(const QGstreamerMessage &message) override
qsizetype bufferSize() const override
qsizetype bytesFree() const override
qint64 processedUSecs() const override
qreal volume() const override
void setBufferSize(qsizetype value) override
QAudio::Error error() const override
void bytesProcessed(int bytes)
bool setup(QIODevice *stream=nullptr, qint64 offset=0)
void setAudioFormat(const QAudioFormat &f)
static QMaybe< QGstAppSource * > create(QObject *parent=nullptr)
QGstElement element() const
void write(const char *data, qsizetype size)
bool canAcceptMoreData() const
std::enable_if_t<(std::is_base_of_v< QGstElement, Ts > &&...), void add)(const Ts &...ts)
static QGstElement createFromDevice(const QGstDeviceHandle &, const char *name=nullptr)
GstElement * element() const
bool setStateSync(GstState state, std::chrono::nanoseconds timeout=std::chrono::seconds(1))
static QGstElement createFromFactory(const char *factory, const char *name=nullptr)
void set(const char *property, const char *str)
GstStateChangeReturn setState(GstState state)
void installMessageFilter(QGstreamerSyncMessageFilter *filter)
void removeMessageFilter(QGstreamerSyncMessageFilter *filter)
\inmodule QtCore \reentrant
virtual bool open(QIODeviceBase::OpenMode mode)
Opens the device and sets its OpenMode to mode.
virtual qint64 pos() const
For random-access devices, this function returns the position that data is written to or read from.
virtual bool atEnd() const
Returns true if the current read and write position is at the end of the device (i....
QObject * parent() const
Returns a pointer to the parent object.
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
Combined button and popup list for selecting options.
DBusConnection const char DBusError * error
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
std::enable_if_t<(std::is_base_of_v< QGstElement, Ts > &&...), void qLinkGstElements)(const Ts &...ts)
QString errorMessageCannotFindElement(std::string_view element)
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLuint GLsizei const GLchar * message
GLint GLsizei GLsizei GLenum format