From b5d0d262d50169ed6df2c6d5c4c5f3fbd50c510c Mon Sep 17 00:00:00 2001 From: Tony Zlatinski Date: Wed, 5 Mar 2025 11:25:27 -0600 Subject: [PATCH] decode: fix memory leak in decoder simple sample --- .../test/vulkan-video-simple-dec/Main.cpp | 30 +++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/vk_video_decoder/test/vulkan-video-simple-dec/Main.cpp b/vk_video_decoder/test/vulkan-video-simple-dec/Main.cpp index f238f8c..80e6a37 100644 --- a/vk_video_decoder/test/vulkan-video-simple-dec/Main.cpp +++ b/vk_video_decoder/test/vulkan-video-simple-dec/Main.cpp @@ -36,9 +36,17 @@ static void DumpDecoderStreamInfo(VkSharedBaseObj& vulkanVid std::cout << std::endl; } -static std::vector frameDataQueue; -static uint32_t curFrameDataQueueIndex = 0; -bool GetNextFrame(VkSharedBaseObj& vulkanVideoDecoder) +static size_t init(std::vector& frameDataQueue, uint32_t& curFrameDataQueueIndex, + const uint32_t decoderQueueSize) +{ + curFrameDataQueueIndex = 0; + frameDataQueue.resize(decoderQueueSize); + return frameDataQueue.size(); +} + +static bool GetNextFrame(VkSharedBaseObj& vulkanVideoDecoder, + std::vector& frameDataQueue, + uint32_t& curFrameDataQueueIndex) { bool continueLoop = true; @@ -84,6 +92,13 @@ bool GetNextFrame(VkSharedBaseObj& vulkanVideoDecoder) return continueLoop; } +static void deinit(std::vector& frameDataQueue, + uint32_t& curFrameDataQueueIndex) +{ + frameDataQueue.clear(); + curFrameDataQueueIndex = 0; +} + int main(int argc, const char** argv) { std::cout << "Enter decoder test" << std::endl; @@ -151,14 +166,19 @@ int main(int argc, const char** argv) DumpDecoderStreamInfo(vulkanVideoDecoder); + std::vector frameDataQueue; + uint32_t curFrameDataQueueIndex = 0; + frameDataQueue.resize(decoderConfig.decoderQueueSize); + init(frameDataQueue, curFrameDataQueueIndex, decoderConfig.decoderQueueSize); + bool continueLoop = true; do { - continueLoop = GetNextFrame(vulkanVideoDecoder); + continueLoop = GetNextFrame(vulkanVideoDecoder, frameDataQueue, curFrameDataQueueIndex); } while (continueLoop); - /*******************************************************************************************/ + deinit(frameDataQueue, curFrameDataQueueIndex); std::cout << "Exit decoder test" << std::endl; }