]> git.sesse.net Git - nageru/commitdiff
Fix software decoding of JPEGs in Futatabi.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 3 Dec 2018 22:42:10 +0000 (23:42 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 3 Dec 2018 22:42:10 +0000 (23:42 +0100)
futatabi/jpeg_frame_view.cpp
futatabi/jpeg_frame_view.h

index 283ff672f73d987473446e32c9fe59f5f06d9e8a..9dc2ec25125ce3880a3db8eabb95bafd7cd1824c 100644 (file)
@@ -82,11 +82,11 @@ atomic<size_t> event_counter{0};
 extern QGLWidget *global_share_widget;
 extern atomic<bool> should_quit;
 
-shared_ptr<Frame> decode_jpeg(const string &filename)
+shared_ptr<Frame> decode_jpeg(const string &jpeg)
 {
        shared_ptr<Frame> frame;
        if (vaapi_jpeg_decoding_usable) {
-               frame = decode_jpeg_vaapi(filename);
+               frame = decode_jpeg_vaapi(jpeg);
                if (frame != nullptr) {
                        return frame;
                }
@@ -101,13 +101,7 @@ shared_ptr<Frame> decode_jpeg(const string &filename)
        jpeg_create_decompress(&dinfo);
        JPEGDestroyer destroy_dinfo(&dinfo);
 
-       FILE *fp = fopen(filename.c_str(), "rb");
-       if (fp == nullptr) {
-               perror(filename.c_str());
-               exit(1);
-       }
-       jpeg_stdio_src(&dinfo, fp);
-
+       jpeg_mem_src(&dinfo, reinterpret_cast<const unsigned char *>(jpeg.data()), jpeg.size());
        jpeg_read_header(&dinfo, true);
 
        if (dinfo.num_components != 3) {
@@ -170,7 +164,6 @@ shared_ptr<Frame> decode_jpeg(const string &filename)
        }
 
        (void)jpeg_finish_decompress(&dinfo);
-       fclose(fp);
 
        return frame;
 }
index 38ffd412b61b5610cc68e8fa6e646e6901f68571..3ecfa0d2f4568254a4e41fa64798523860755c13 100644 (file)
@@ -20,7 +20,7 @@ enum CacheMissBehavior {
        RETURN_NULLPTR_IF_NOT_IN_CACHE
 };
 
-std::shared_ptr<Frame> decode_jpeg(const std::string &filename);
+std::shared_ptr<Frame> decode_jpeg(const std::string &jpeg);
 std::shared_ptr<Frame> decode_jpeg_with_cache(FrameOnDisk id, CacheMissBehavior cache_miss_behavior, FrameReader *frame_reader, bool *did_decode);
 
 class JPEGFrameView : public QGLWidget {