// Copyright (c) 2012-2017 VideoStitch SAS // Copyright (c) 2018 stitchEm #include "genericvideowidget.hpp" #include "libvideostitch-gui/utils/sourcewidgetlayoututil.hpp" #include GenericVideoWidget::GenericVideoWidget(QWidget *parent) : QOpenGLWidget(parent), ref_vs(0), placeHolderTex(QOpenGLTexture::TargetRectangle), name("source view") { clk.start(); connect(this, SIGNAL(gotFrame(mtime_t)), this, SLOT(update())); } GenericVideoWidget::~GenericVideoWidget() {} void GenericVideoWidget::clearTextures() { std::lock_guard lock(textureMutex); textures.clear(); } void GenericVideoWidget::setName(const std::string &n) { name = n; } void GenericVideoWidget::initializeGL() { initializeOpenGLFunctions(); const QColor clearColor(Qt::black); glClearColor(clearColor.redF(), clearColor.greenF(), clearColor.blueF(), clearColor.alphaF()); glDisable(GL_DEPTH_TEST); glDisable(GL_LIGHTING); glShadeModel(GL_FLAT); glEnable(GL_TEXTURE_2D); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); QImage logo(":/assets/images/home_grey"); placeHolderTex.setData(logo); } std::string GenericVideoWidget::getName() const { return name; } int GenericVideoWidget::getNumbTextures() { std::lock_guard lock(textureMutex); return int(textures.size()); } void GenericVideoWidget::resizeGL(int w, int h) { const qreal retinaScale = devicePixelRatio(); glViewport(0, 0, w * retinaScale, h * retinaScale); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0, w * retinaScale, h * retinaScale, 0, 0, 1); glMatrixMode(GL_MODELVIEW); update(); } void GenericVideoWidget::paintFrame(GLuint texture, float quadWidth, float quadHeight, float verticalMargin, float horizontalMargin) { glBindTexture(GL_TEXTURE_2D, texture); glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex2f(verticalMargin, horizontalMargin); glTexCoord2f(0, 1); glVertex2f(verticalMargin, quadHeight - horizontalMargin); glTexCoord2f(1, 1); glVertex2f(quadWidth - verticalMargin, quadHeight - horizontalMargin); glTexCoord2f(1, 0); glVertex2f(quadWidth - verticalMargin, horizontalMargin); glEnd(); glBindTexture(GL_TEXTURE_2D, 0); }