From 5e85184e5e35367d2bbcd41970c0a4f7fde8c9c5 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Mon, 3 Dec 2018 23:42:10 +0100 Subject: [PATCH] Fix software decoding of JPEGs in Futatabi. --- futatabi/jpeg_frame_view.cpp | 13 +++---------- futatabi/jpeg_frame_view.h | 2 +- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/futatabi/jpeg_frame_view.cpp b/futatabi/jpeg_frame_view.cpp index 283ff67..9dc2ec2 100644 --- a/futatabi/jpeg_frame_view.cpp +++ b/futatabi/jpeg_frame_view.cpp @@ -82,11 +82,11 @@ atomic event_counter{0}; extern QGLWidget *global_share_widget; extern atomic should_quit; -shared_ptr decode_jpeg(const string &filename) +shared_ptr decode_jpeg(const string &jpeg) { shared_ptr 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 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(jpeg.data()), jpeg.size()); jpeg_read_header(&dinfo, true); if (dinfo.num_components != 3) { @@ -170,7 +164,6 @@ shared_ptr decode_jpeg(const string &filename) } (void)jpeg_finish_decompress(&dinfo); - fclose(fp); return frame; } diff --git a/futatabi/jpeg_frame_view.h b/futatabi/jpeg_frame_view.h index 38ffd41..3ecfa0d 100644 --- a/futatabi/jpeg_frame_view.h +++ b/futatabi/jpeg_frame_view.h @@ -20,7 +20,7 @@ enum CacheMissBehavior { RETURN_NULLPTR_IF_NOT_IN_CACHE }; -std::shared_ptr decode_jpeg(const std::string &filename); +std::shared_ptr decode_jpeg(const std::string &jpeg); std::shared_ptr decode_jpeg_with_cache(FrameOnDisk id, CacheMissBehavior cache_miss_behavior, FrameReader *frame_reader, bool *did_decode); class JPEGFrameView : public QGLWidget { -- 2.39.2