Skip to content
Snippets Groups Projects
Commit d6656d47 authored by Silas Della Contrada's avatar Silas Della Contrada
Browse files

Fixed some memory leaks

parent a6352480
No related branches found
No related tags found
No related merge requests found
......@@ -12,6 +12,9 @@ set(CMAKE_INCLUDE_CURRENT_DIR on)
#find_package(Qt6 COMPONENTS Core Gui Concurrent Widgets OpenGL OpenGLWidgets)
find_package(Qt5 COMPONENTS Core Gui Concurrent Widgets OpenGL)
#add_compile_options(-fsanitize=address)
#add_link_options(-fsanitize=address)
#if (${CMAKE_BUILD_TYPE} EQUAL "Release")
# -O3)
#endif ()
......
......@@ -262,7 +262,6 @@ namespace AVQt {
} else if (ret < 0) {
qFatal("%d: Error sending packet to VAAPI decoder: %s", ret, av_make_error_string(strBuf, strBufSize, ret));
}
av_packet_unref(packet);
av_packet_free(&packet);
lock.relock();
}
......@@ -300,8 +299,7 @@ namespace AVQt {
d->m_timebase.num,
d->m_timebase.den);
QTime time = QTime::currentTime();
cb->onFrame(this, cbFrame, static_cast<int64_t>(av_q2d(av_inv_q(d->m_framerate)) * 1000.0),
av_buffer_ref(d->m_pDeviceCtx));
cb->onFrame(this, cbFrame, static_cast<int64_t>(av_q2d(av_inv_q(d->m_framerate)) * 1000.0), d->m_pDeviceCtx);
qDebug() << "Video CB time:" << time.msecsTo(QTime::currentTime());
av_frame_free(&cbFrame);
// }));
......
......@@ -294,7 +294,7 @@ namespace AVQt {
for (const auto &cb: cbList) {
AVPacket *cbPacket = av_packet_clone(packet);
cb->onPacket(this, cbPacket, type);
av_packet_unref(cbPacket);
av_packet_free(&cbPacket);
}
if (elapsedTimer.hasExpired(500)) {
QByteArray aP, vP, sP, aR, vR, sR;
......@@ -316,10 +316,12 @@ namespace AVQt {
qDebug();
elapsedTimer.restart();
}
av_packet_unref(packet);
} else {
msleep(8);
}
}
av_packet_free(&packet);
}
Demuxer::Demuxer(Demuxer &&other) noexcept: d_ptr(other.d_ptr) {
......
......@@ -210,7 +210,6 @@ namespace AVQt {
Q_D(AVQt::OpenGLRenderer);
Q_UNUSED(source)
Q_UNUSED(duration)
Q_UNUSED(pDeviceCtx)
QMutexLocker onFrameLock{&d->m_onFrameMutex};
......@@ -219,6 +218,7 @@ namespace AVQt {
if (d->m_firstFrame.compare_exchange_strong(shouldBe, false)) {
d->m_pVAContext = static_cast<AVVAAPIDeviceContext *>(reinterpret_cast<AVHWDeviceContext *>(pDeviceCtx->data)->hwctx);
d->m_VADisplay = d->m_pVAContext->display;
av_buffer_unref(&pDeviceCtx);
}
QPair<AVFrame *, int64_t> newFrame;
......@@ -270,17 +270,17 @@ namespace AVQt {
EGL_NONE
};
d->m_EGLDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
// if (d->m_EGLDisplay == EGL_NO_DISPLAY) {
// qDebug("Could not get default EGL display, connecting to X-Server");
// Display *display = XOpenDisplay(nullptr);
// if (!display) {
// qFatal("Could not get X11 display");
// }
// d->m_EGLDisplay = eglGetDisplay(static_cast<EGLNativeDisplayType>(display));
if (d->m_EGLDisplay == EGL_NO_DISPLAY) {
qDebug("Could not get default EGL display, connecting to X-Server");
Display *display = XOpenDisplay(nullptr);
if (!display) {
qFatal("Could not get X11 display");
}
d->m_EGLDisplay = eglGetDisplay(static_cast<EGLNativeDisplayType>(display));
if (d->m_EGLDisplay == EGL_NO_DISPLAY) {
qFatal("Could not get EGL display: %s", eglErrorString(eglGetError()).c_str());
}
qFatal("Could not get EGL display: %s", eglErrorString(eglGetError()).c_str());
}
// }
if (!eglInitialize(d->m_EGLDisplay, nullptr, nullptr)) {
qFatal("eglInitialize");
}
......@@ -293,18 +293,18 @@ namespace AVQt {
if (!eglChooseConfig(d->m_EGLDisplay, visual_attr, &cfg, 1, &cfg_count) || (cfg_count < 1)) {
qFatal("eglChooseConfig: %s", eglErrorString(eglGetError()).c_str());
}
EGLint ctx_attr[] = {
EGL_CONTEXT_OPENGL_PROFILE_MASK,
EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT,
EGL_CONTEXT_MAJOR_VERSION, 3,
EGL_CONTEXT_MINOR_VERSION, 3,
EGL_CONTEXT_OPENGL_DEBUG, EGL_TRUE,
EGL_NONE
};
d->m_EGLContext = eglCreateContext(d->m_EGLDisplay, cfg, EGL_NO_CONTEXT, ctx_attr);
if (d->m_EGLContext == EGL_NO_CONTEXT) {
qFatal("eglCreateContext");
}
// EGLint ctx_attr[] = {
// EGL_CONTEXT_OPENGL_PROFILE_MASK,
// EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT,
// EGL_CONTEXT_MAJOR_VERSION, 3,
// EGL_CONTEXT_MINOR_VERSION, 3,
// EGL_CONTEXT_OPENGL_DEBUG, EGL_TRUE,
// EGL_NONE
// };
// d->m_EGLContext = eglCreateContext(d->m_EGLDisplay, cfg, EGL_NO_CONTEXT, ctx_attr);
// if (d->m_EGLContext == EGL_NO_CONTEXT) {
// qFatal("eglCreateContext");
// }
qDebug("EGL Version: %s", eglQueryString(d->m_EGLDisplay, EGL_VERSION));
......@@ -635,7 +635,7 @@ namespace AVQt {
#define LAYER i
#define PLANE 0
const EGLint *img_attr = new EGLint[]{
const EGLint img_attr[]{
EGL_LINUX_DRM_FOURCC_EXT, static_cast<EGLint>(prime.layers[LAYER].drm_format),
EGL_WIDTH, static_cast<EGLint>(prime.width / (i + 1)),
EGL_HEIGHT, static_cast<EGLint>(prime.height / (i + 1)),
......@@ -644,6 +644,7 @@ namespace AVQt {
EGL_DMA_BUF_PLANE0_PITCH_EXT, static_cast<EGLint>(prime.layers[LAYER].pitch[PLANE]),
EGL_NONE
};
// const EGLint *img_attr = new EGLint[]{
// EGL_WIDTH, vaImage.width,
// EGL_HEIGHT, vaImage.height,
......@@ -848,9 +849,10 @@ namespace AVQt {
QString overlay(position.toString("hh:mm:ss.zzz") + "/" + d->m_duration.toString("hh:mm:ss.zzz"));
QFontMetrics fm(roboto);
p.fillRect(fm.boundingRect(overlay).translated(static_cast<int>(20), static_cast<int>(20)).adjusted(-5, -5, 5, 5),
QColor(0xFF, 0xFF, 0xFF, 0x48));
p.drawText(fm.boundingRect(overlay).translated(static_cast<int>(20), static_cast<int>(20)), overlay);
QRect overlayRect = fm.boundingRect(overlay);
overlayRect.moveTopLeft({20, 20});
p.fillRect(overlayRect.adjusted(-5, 0, 5, 0), QColor(0xFF, 0xFF, 0xFF, 0x48));
p.drawText(overlayRect, overlay);
p.end();
qDebug() << "Paused:" << (d->m_paused.load() ? "true" : "false");
if (!d->m_paused.load()) {
......
......@@ -8,7 +8,8 @@ set(CMAKE_CXX_STANDARD 20)
find_package(Qt5 COMPONENTS Core Gui Widgets OpenGL Concurrent)
find_package(OpenAL)
#add_compile_options(-O4)
#add_compile_options(-fsanitize=address)
#add_link_options(-fsanitize=address)
add_executable(Player main.cpp)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment