]> git.sesse.net Git - nageru/commitdiff
Fix some libjpeg leaks.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 21 Oct 2018 13:29:34 +0000 (15:29 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 21 Oct 2018 13:29:34 +0000 (15:29 +0200)
jpeg_destroyer.h [new file with mode: 0644]
jpeg_frame_view.cpp
vaapi_jpeg_decoder.cpp

diff --git a/jpeg_destroyer.h b/jpeg_destroyer.h
new file mode 100644 (file)
index 0000000..5fc5c95
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef _JPEG_DESTROYER_H
+#define _JPEG_DESTROYER_H 1
+
+#include <jpeglib.h>
+
+class JPEGDestroyer {
+public:
+       JPEGDestroyer(jpeg_decompress_struct *dinfo)
+               : dinfo(dinfo) {}
+
+       ~JPEGDestroyer() {
+               jpeg_destroy_decompress(dinfo);
+       }
+
+private:
+       jpeg_decompress_struct *dinfo;
+};
+
+#endif  // !defined(_JPEG_DESTROYER_H)
index b33b76b945a5ca25b8228e17124584ed9f3bc242..7870f1c090dd2cb2cfec6031c420689d2316c1be 100644 (file)
@@ -1,6 +1,7 @@
 #include "jpeg_frame_view.h"
 
 #include "defs.h"
+#include "jpeg_destroyer.h"
 #include "post_to_main_thread.h"
 #include "video_stream.h"
 #include "ycbcr_converter.h"
@@ -76,6 +77,7 @@ shared_ptr<Frame> decode_jpeg(const string &filename)
        jpeg_error_mgr jerr;
        dinfo.err = jpeg_std_error(&jerr);
        jpeg_create_decompress(&dinfo);
+       JPEGDestroyer destroy_dinfo(&dinfo);
 
        FILE *fp = fopen(filename.c_str(), "rb");
        if (fp == nullptr) {
@@ -146,7 +148,6 @@ shared_ptr<Frame> decode_jpeg(const string &filename)
        }
 
        (void)jpeg_finish_decompress(&dinfo);
-       jpeg_destroy_decompress(&dinfo);
        fclose(fp);
 
        return frame;
index e11c0318b40bde7e8e5a3a726f997a07ab5fb763..ae1febc041d355cf53deba1b0f1bc601c83799c4 100644 (file)
@@ -1,5 +1,6 @@
 #include "vaapi_jpeg_decoder.h"
 
+#include "jpeg_destroyer.h"
 #include "jpeg_frame.h"
 #include "memcpy_interleaved.h"
 
@@ -304,6 +305,7 @@ shared_ptr<Frame> decode_jpeg_vaapi(const string &filename)
        jpeg_error_mgr jerr;
        dinfo.err = jpeg_std_error(&jerr);
        jpeg_create_decompress(&dinfo);
+       JPEGDestroyer destroy_dinfo(&dinfo);
 
        FILE *fp = fopen(filename.c_str(), "rb");
        if (fp == nullptr) {