8#include <qvideoframe.h>
9#include <qvideoframeformat.h>
11#include <QtCore/qcoreevent.h>
12#include <QtCore/qpointer.h>
16class QGraphicsVideoItemPrivate
19 QGraphicsVideoItemPrivate()
20 : rect(0.0, 0.0, 320, 240)
24 QGraphicsVideoItem *q_ptr =
nullptr;
26 QVideoSink *sink =
nullptr;
31 Qt::AspectRatioMode m_aspectRatioMode = Qt::KeepAspectRatio;
35 void _q_present(
const QVideoFrame &);
38void QGraphicsVideoItemPrivate::updateRects()
40 q_ptr->prepareGeometryChange();
43 if (nativeSize.isEmpty())
46 if (m_aspectRatioMode == Qt::KeepAspectRatio) {
47 QSizeF size = nativeSize;
48 size.scale(rect.size(), Qt::KeepAspectRatio);
50 boundingRect = QRectF(0, 0, size.width(), size.height());
51 boundingRect.moveCenter(rect.center());
55void QGraphicsVideoItemPrivate::_q_present(
const QVideoFrame &frame)
58 q_ptr->update(boundingRect);
60 if (frame.isValid()) {
61 const QSize &size = frame.surfaceFormat().viewport().size();
62 if (nativeSize != size) {
66 emit q_ptr->nativeSizeChanged(nativeSize);
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
91
92
93
94
95QGraphicsVideoItem::QGraphicsVideoItem(QGraphicsItem *parent)
96 : QGraphicsObject(parent)
97 , d_ptr(
new QGraphicsVideoItemPrivate)
100 d_ptr->sink =
new QVideoSink(
this);
102 connect(d_ptr->sink, SIGNAL(videoFrameChanged(QVideoFrame)),
103 this, SLOT(_q_present(QVideoFrame)));
107
108
109QGraphicsVideoItem::~QGraphicsVideoItem()
115
116
117
118
119
120
121
122
123
125QVideoSink *QGraphicsVideoItem::videoSink()
const
127 return d_func()->sink;
131
132
133
135Qt::AspectRatioMode QGraphicsVideoItem::aspectRatioMode()
const
137 return d_func()->m_aspectRatioMode;
140void QGraphicsVideoItem::setAspectRatioMode(Qt::AspectRatioMode mode)
142 Q_D(QGraphicsVideoItem);
143 if (d->m_aspectRatioMode == mode)
146 d->m_aspectRatioMode = mode;
151
152
153
154
155
156
158QPointF QGraphicsVideoItem::offset()
const
160 return d_func()->rect.topLeft();
163void QGraphicsVideoItem::setOffset(
const QPointF &offset)
165 Q_D(QGraphicsVideoItem);
167 d->rect.moveTo(offset);
172
173
174
175
176
177
179QSizeF QGraphicsVideoItem::size()
const
181 return d_func()->rect.size();
184void QGraphicsVideoItem::setSize(
const QSizeF &size)
186 Q_D(QGraphicsVideoItem);
188 d->rect.setSize(size.isValid() ? size : QSizeF(0, 0));
193
194
195
197QSizeF QGraphicsVideoItem::nativeSize()
const
199 return d_func()->nativeSize;
203
204
205QRectF QGraphicsVideoItem::boundingRect()
const
207 return d_func()->boundingRect;
211
212
213void QGraphicsVideoItem::paint(QPainter *painter,
const QStyleOptionGraphicsItem *option, QWidget *widget)
215 Q_D(QGraphicsVideoItem);
220 d->m_frame.paint(painter, d->rect, { Qt::transparent, d->m_aspectRatioMode });
224
225
226
227
228
230
231
232
234
235
236
237
238
240
241
242
243
244QVariant QGraphicsVideoItem::itemChange(GraphicsItemChange change,
const QVariant &value)
246 return QGraphicsItem::itemChange(change, value);
250
251
252void QGraphicsVideoItem::timerEvent(QTimerEvent *event)
254 QGraphicsObject::timerEvent(event);
259#include "moc_qgraphicsvideoitem.cpp"