]> git.sesse.net Git - nageru/blobdiff - nageru/pbo_frame_allocator.cpp
Fix some memory leaks in the VA-API upload code (also make it more RAII-ish to be...
[nageru] / nageru / pbo_frame_allocator.cpp
index 54182a83a899fa3ca9994974a76316c90e812d4d..7fb06f849b1bff09c78be68ad9b388ff1cd8c7e9 100644 (file)
@@ -370,6 +370,21 @@ void PBOFrameAllocator::release_frame(Frame frame)
        }
 #endif
 
+       {
+               // In case we never got to upload the frame to MJPEGEncoder.
+               Userdata *userdata = (Userdata *)frame.userdata;
+               MJPEGEncoder::VAResources resources __attribute__((unused)) = move(userdata->va_resources);
+               MJPEGEncoder::ReleaseVAResources release = move(userdata->va_resources_release);
+
+               if (frame.data_copy != nullptr && userdata->data_copy_current_src == Userdata::FROM_VA_API) {
+                       VADisplay va_dpy = mjpeg_encoder->va_dpy->va_dpy;
+                       VAStatus va_status = vaUnmapBuffer(va_dpy, resources.image.buf);
+                       CHECK_VASTATUS(va_status, "vaUnmapBuffer");
+
+                       frame.data_copy = nullptr;
+               }
+       }
+
        lock_guard<mutex> lock(freelist_mutex);
        freelist.push(frame);
        //--sumsum;