diff --git a/AVQt/output/OpenGLRenderer.cpp b/AVQt/output/OpenGLRenderer.cpp index 7b540e411f387d0cdd684a124e42130c93293659..d385ff31ed4a8d434a8fc675383a712905ac27ab 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 3b4dec3b571ec45feab477631a3091e65789cdc4..dfb8f8679e8c6b7c55dd0f6324870b7bbd7ae7f0 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]{};