57 Q_DISABLE_COPY(QQuickVideoOutput)
58 Q_PROPERTY(FillMode fillMode READ fillMode WRITE setFillMode NOTIFY fillModeChanged)
59 Q_PROPERTY(EndOfStreamPolicy endOfStreamPolicy READ endOfStreamPolicy WRITE setEndOfStreamPolicy
60 NOTIFY endOfStreamPolicyChanged REVISION(6, 9))
61 Q_PROPERTY(
int orientation READ orientation WRITE setOrientation NOTIFY orientationChanged)
62 Q_PROPERTY(
bool mirrored READ mirrored WRITE setMirrored NOTIFY mirroredChanged REVISION(6, 9))
63 Q_PROPERTY(QRectF sourceRect READ sourceRect NOTIFY sourceRectChanged)
64 Q_PROPERTY(QRectF contentRect READ contentRect NOTIFY contentRectChanged)
65 Q_PROPERTY(QVideoSink* videoSink READ videoSink CONSTANT)
66 Q_MOC_INCLUDE(qvideosink.h)
67 Q_MOC_INCLUDE(qvideoframe.h)
68 QML_NAMED_ELEMENT(VideoOutput)
74 Stretch = Qt::IgnoreAspectRatio,
75 PreserveAspectFit = Qt::KeepAspectRatio,
76 PreserveAspectCrop = Qt::KeepAspectRatioByExpanding
80 enum EndOfStreamPolicy
85 Q_ENUM(EndOfStreamPolicy)
87 QQuickVideoOutput(QQuickItem *parent = 0);
88 ~QQuickVideoOutput() override;
90 Q_INVOKABLE QVideoSink *videoSink()
const;
92 FillMode fillMode()
const;
93 void setFillMode(FillMode mode);
95 int orientation()
const;
96 void setOrientation(
int);
98 bool mirrored()
const;
99 void setMirrored(
bool);
101 QRectF sourceRect()
const;
102 QRectF contentRect()
const;
104 EndOfStreamPolicy endOfStreamPolicy()
const;
105 void setEndOfStreamPolicy(EndOfStreamPolicy policy);
107 Q_REVISION(6, 9) Q_INVOKABLE
void clearOutput();
110 void sourceChanged();
111 void fillModeChanged(QQuickVideoOutput::FillMode);
112 void orientationChanged();
113 void mirroredChanged();
114 void sourceRectChanged();
115 void contentRectChanged();
116 void endOfStreamPolicyChanged(QQuickVideoOutput::EndOfStreamPolicy);
119 QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *) override;
120 void itemChange(ItemChange change,
const ItemChangeData &changeData) override;
121 void geometryChange(
const QRectF &newGeometry,
const QRectF &oldGeometry) override;
122 void releaseResources() override;
125 QSize nativeSize()
const;
126 void updateGeometry();
127 QRectF adjustedViewport()
const;
129 void setFrame(
const QVideoFrame &frame);
131 void initRhiForSink();
132 void updateHdr(QSGVideoNode *videoNode);
135 void _q_newFrame(QSize);
136 void _q_updateGeometry();
137 void _q_invalidateSceneGraph();
138 void _q_sceneGraphInitialized();
139 void _q_afterFrameEnd();
144 bool m_geometryDirty =
true;
146 QRectF m_contentRect;
147 int m_orientation = 0;
148 bool m_mirrored =
false;
149 QtVideo::Rotation m_frameDisplayingRotation = QtVideo::Rotation::None;
150 Qt::AspectRatioMode m_aspectRatioMode = Qt::KeepAspectRatio;
152 QPointer<QQuickWindow> m_window;
153 QVideoSink *m_sink =
nullptr;
154 QVideoFrameFormat m_videoFormat;
156 QVideoFrameTexturePoolWPtr m_texturePool;
158 bool m_frameChanged =
false;
160 QRectF m_renderedRect;
161 QRectF m_sourceTextureRect;
163 EndOfStreamPolicy m_endOfStreamPolicy = ClearOutput;