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;
}
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) {
}
(void)jpeg_finish_decompress(&dinfo);
- fclose(fp);
return frame;
}
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 {