9#include <QtCore/qloggingcategory.h>
18 QGstElement videoConvert(
"videoconvert",
"videoConvert");
32 gstVideoOutput(
"videoOutput"),
37 videoSink.set(
"sync",
true);
38 gstVideoOutput.add(videoQueue, videoConvert, videoSink);
39 if (!videoQueue.link(videoConvert, videoSink))
40 qCDebug(qLcMediaVideoOutput) <<
">>>>>> linking failed";
42 gstVideoOutput.addGhostPad(videoQueue,
"sink");
53 if (gstVideoSink == m_videoSink)
59 m_videoSink = gstVideoSink;
65 gstSink = m_videoSink->
gstSink();
70 gstSink.
set(
"sync",
true);
74 if (videoSink == gstSink)
79 gstVideoOutput.
remove(videoSink);
83 gstVideoOutput.
add(videoSink);
85 videoConvert.
link(videoSink);
86 GstEvent *
event = gst_event_new_reconfigure();
90 doLinkSubtitleStream();
94 qCDebug(qLcMediaVideoOutput) <<
"sinkChanged" << gstSink.
name();
96 GST_DEBUG_BIN_TO_DOT_FILE(gstPipeline.
bin(),
97 GstDebugGraphDetails( GST_DEBUG_GRAPH_SHOW_MEDIA_TYPE |
98 GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS | GST_DEBUG_GRAPH_SHOW_STATES),
105 gstPipeline = pipeline;
112 qCDebug(qLcMediaVideoOutput) <<
"link subtitle stream" <<
src.isNull();
113 if (
src == subtitleSrc)
118 doLinkSubtitleStream();
126 qCDebug(qLcMediaVideoOutput) <<
"unlink subtitle stream";
128 if (!subtitleSink.
isNull()) {
130 gstPipeline.
remove(subtitleSink);
139void QGstreamerVideoOutput::doLinkSubtitleStream()
141 if (!subtitleSink.
isNull()) {
142 gstPipeline.
remove(subtitleSink);
146 if (!m_videoSink || subtitleSrc.
isNull())
148 if (subtitleSink.
isNull()) {
150 gstPipeline.
add(subtitleSink);
152 if (!subtitleSrc.
link(subtitleSink))
153 qCDebug(qLcMediaVideoOutput) <<
"link subtitle stream failed";
160 videoQueue.
set(
"leaky", 2 );
161 videoQueue.
set(
"silent",
true);
162 videoQueue.
set(
"max-size-buffers",
uint(1));
163 videoQueue.
set(
"max-size-bytes",
uint(0));
169 if (!subtitleSink.
isNull()) {
170 auto pad = subtitleSink.
staticPad(
"sink");
171 auto *
event = gst_event_new_flush_start();
172 pad.sendEvent(
event);
173 event = gst_event_new_flush_stop(
false);
174 pad.sendEvent(
event);
180#include "moc_qgstreamervideooutput_p.cpp"
void remove(const QGstElement &element)
void add(const QGstElement &element)
GstElement * element() const
bool setStateSync(GstState state)
bool syncStateWithParent()
QGstPad staticPad(const char *name) const
bool link(const QGstElement &next)
const char * name() const
void set(const char *property, const char *str)
void setPipeline(const QGstPipeline &pipeline)
void linkSubtitleStream(QGstElement subtitleSrc)
void setVideoSink(QVideoSink *sink)
void unlinkSubtitleStream()
void setPipeline(QGstPipeline pipeline)
QGstElement subtitleSink() const
The QVideoSink class represents a generic sink for video data.
Combined button and popup list for selecting options.
QString errorMessageCannotFindElement(std::string_view element)
#define Q_LOGGING_CATEGORY(name,...)
#define qCDebug(category,...)
GLsizei GLenum GLboolean sink
unsigned long long quint64
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent