From c890fe36d3b12b505b43e288725961cd374e7f60 Mon Sep 17 00:00:00 2001 From: silas <s.developer@4-dc.de> Date: Tue, 27 Jul 2021 12:14:30 +0200 Subject: [PATCH] Added some cleanup code to AVQt::OpenGLRenderer::deinit() --- AVQt/output/OpenGLRenderer.cpp | 36 +++++++++++++++++--------- AVQt/output/private/OpenGLRenderer_p.h | 4 +-- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/AVQt/output/OpenGLRenderer.cpp b/AVQt/output/OpenGLRenderer.cpp index 7b540e4..d385ff3 100644 --- a/AVQt/output/OpenGLRenderer.cpp +++ b/AVQt/output/OpenGLRenderer.cpp @@ -111,7 +111,15 @@ namespace AVQt { } int OpenGLRenderer::deinit(IFrameSource *source) { - Q_UNUSED(source) + Q_D(AVQt::OpenGLRenderer); + stop(source); + + if (d->m_pQSVDerivedDeviceContext) { + av_buffer_unref(&d->m_pQSVDerivedFramesContext); + av_buffer_unref(&d->m_pQSVDerivedDeviceContext); + } + + delete d->m_clock; return 0; } @@ -142,7 +150,13 @@ namespace AVQt { if (d->m_running.compare_exchange_strong(shouldBeCurrent, false)) { hide(); - d->m_clock->stop(); + if (d->m_currentFrame) { + av_frame_free(&d->m_currentFrame); + } + + if (d->m_clock) { + d->m_clock->stop(); + } { QMutexLocker lock(&d->m_renderQueueMutex); @@ -162,18 +176,15 @@ namespace AVQt { d->m_vbo.destroy(); d->m_vao.destroy(); -// d->m_yTexture->destroy(); delete d->m_yTexture; - - -// d->m_uTexture->destroy(); delete d->m_uTexture; - - - -// d->m_yTexture->destroy(); delete d->m_vTexture; + if (d->m_EGLImages[0]) { + for (auto &EGLImage : d->m_EGLImages) { + eglDestroyImage(d->m_EGLDisplay, EGLImage); + } + } stopped(); return 0; @@ -907,8 +918,9 @@ namespace AVQt { return d->m_clock; } - GLint OpenGLRendererPrivate::project(GLdouble objx, GLdouble objy, GLdouble objz, const GLdouble model[16], const GLdouble proj[16], - const GLint viewport[4], GLdouble *winx, GLdouble *winy, GLdouble *winz) { + [[maybe_unused]] GLint + OpenGLRendererPrivate::project(GLdouble objx, GLdouble objy, GLdouble objz, const GLdouble model[16], const GLdouble proj[16], + const GLint viewport[4], GLdouble *winx, GLdouble *winy, GLdouble *winz) { GLdouble in[4], out[4]; in[0] = objx; diff --git a/AVQt/output/private/OpenGLRenderer_p.h b/AVQt/output/private/OpenGLRenderer_p.h index 3b4dec3..dfb8f86 100644 --- a/AVQt/output/private/OpenGLRenderer_p.h +++ b/AVQt/output/private/OpenGLRenderer_p.h @@ -45,7 +45,7 @@ namespace AVQt { private: explicit OpenGLRendererPrivate(OpenGLRenderer *q) : q_ptr(q) {}; - static GLint + [[maybe_unused]] static GLint project(GLdouble objx, GLdouble objy, GLdouble objz, const GLdouble model[16], const GLdouble[16], const GLint viewport[4], GLdouble *winx, GLdouble *winy, GLdouble *winz); @@ -87,8 +87,6 @@ namespace AVQt { VADisplay m_VADisplay{nullptr}; AVVAAPIDeviceContext *m_pVAContext{nullptr}; EGLDisplay m_EGLDisplay{nullptr}; - EGLSurface m_EGLSurface{nullptr}; - EGLContext m_EGLContext{nullptr}; EGLImage m_EGLImages[2]{}; GLuint m_textures[2]{}; -- GitLab