19 #include "videoitem.h"
20 #include "videosurface_p.h"
21 #include <QtQuick/QSGNode>
22 #include <QtQuick/QSGFlatColorMaterial>
23 #include "../../QGlib/Signal"
28 struct VideoItem::Private
30 QPointer<VideoSurface> surface;
35 VideoItem::VideoItem(QQuickItem *parent)
36 : QQuickItem(parent), d(new Private)
38 d->surfaceDirty =
true;
39 setFlag(QQuickItem::ItemHasContents,
true);
42 VideoItem::~VideoItem()
48 VideoSurface *VideoItem::surface()
const
50 return d->surface.data();
53 void VideoItem::setSurface(VideoSurface *surface)
56 d->surface.data()->d->items.remove(
this);
60 d->surfaceDirty =
true;
63 d->surface.data()->d->items.insert(
this);
67 QSGNode* VideoItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data)
71 QRectF r = boundingRect();
74 if (d->surfaceDirty) {
77 d->surfaceDirty =
false;
80 if (!d->surface || d->surface.data()->d->videoSink.isNull()) {
82 QSGFlatColorMaterial *material =
new QSGFlatColorMaterial;
83 material->setColor(Qt::black);
85 QSGGeometryNode *node =
new QSGGeometryNode;
86 node->setMaterial(material);
87 node->setFlag(QSGNode::OwnsMaterial);
88 node->setFlag(QSGNode::OwnsGeometry);
91 d->targetArea = QRectF();
96 if (r != d->targetArea) {
97 QSGGeometry *geometry =
new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), 4);
98 geometry->vertexDataAsPoint2D()[0].set(r.x(), r.y());
99 geometry->vertexDataAsPoint2D()[1].set(r.x(), r.height());
100 geometry->vertexDataAsPoint2D()[2].set(r.width(), r.y());
101 geometry->vertexDataAsPoint2D()[3].set(r.width(), r.height());
103 QSGGeometryNode *node =
static_cast<QSGGeometryNode*
>(newNode);
104 node->setGeometry(geometry);
109 newNode = (QSGNode*) QGlib::emit<void*>(d->surface.data()->d->videoSink,
110 "update-node", (
void*)oldNode,
111 r.x(), r.y(), r.width(), r.height());
Wrappers for GStreamer classes.