From 968b646c650007524341ba55b3e76ceceead67c5 Mon Sep 17 00:00:00 2001 From: BykadorovR Date: Mon, 28 Oct 2019 13:51:44 +0300 Subject: [PATCH] Fixed memory leak in bitstream analyze stage --- docker/Dockerfile_cu10 | 3 ++- include/Parser.h | 2 +- src/Parser.cpp | 12 +++++++++++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/docker/Dockerfile_cu10 b/docker/Dockerfile_cu10 index c7dd3dd..21f79b3 100644 --- a/docker/Dockerfile_cu10 +++ b/docker/Dockerfile_cu10 @@ -37,7 +37,8 @@ RUN git clone --depth 1 -b release/4.2 --single-branch https://github.com/FFmpeg RUN pip3 install --no-cache-dir \ twine==1.13.0 \ awscli==1.16.194 \ - numpy==1.16.4 + numpy==1.16.4 \ + packaging # Install PyTorch RUN pip3 install --no-cache-dir \ diff --git a/include/Parser.h b/include/Parser.h index f63dd12..ae321a6 100644 --- a/include/Parser.h +++ b/include/Parser.h @@ -152,7 +152,7 @@ class Parser { Bitstream filter for converting mp4->h264 */ AVBitStreamFilterContext* bitstreamFilter; - std::shared_ptr NALu; + AVPacket* NALu; /* Instance of Logger class */ diff --git a/src/Parser.cpp b/src/Parser.cpp index 4b76f36..de06e9d 100644 --- a/src/Parser.cpp +++ b/src/Parser.cpp @@ -276,6 +276,10 @@ int Parser::Analyze(AVPacket* package) { frameNumValue = frame_num; POC = pic_order_cnt_lsb; } + + av_freep(&NALu->data); + av_packet_free_side_data(NALu); + av_free_packet(NALu); return errorBitstream; } @@ -310,7 +314,9 @@ int Parser::Init(ParserParameters& input, std::shared_ptr logger) { //Write file header sts = avformat_write_header(dumpContext, NULL); } - NALu = std::make_shared(); + NALu = new AVPacket(); + av_init_packet(NALu); + bitstreamFilter = av_bitstream_filter_init("h264_mp4toannexb"); lastFrame = std::make_pair(new AVPacket(), false); @@ -402,5 +408,9 @@ void Parser::Close() { } av_packet_unref(lastFrame.first); delete lastFrame.first; + + av_packet_unref(NALu); + delete NALu; + isClosed = true; }