1 /*
2  * in_jpeg.cpp -- read JPEG (JFIF and other) files with djpeg
3  * by pts@fazekas.hu at Sun Apr 14 14:50:30 CEST 2002
4  */
5 
6 #ifdef __GNUC__
7 #ifndef __clang__
8 #pragma implementation
9 #endif
10 #endif
11 
12 #include "image.hpp"
13 
14 #if USE_IN_JPEG
15 
16 #include "error.hpp"
17 #include "gensio.hpp"
18 #include "helpere.hpp"
19 #include <string.h> /* memchr() */
20 #include <stdio.h> /* printf() */
21 
in_jpeg_reader(Image::Loader::UFD * ufd,SimBuffer::Flat const &)22 static Image::Sampled *in_jpeg_reader(Image::Loader::UFD *ufd, SimBuffer::Flat const&) {
23   // Error::sev(Error::EERROR) << "Cannot load JPEG images yet." << (Error*)0;
24   HelperE helper("djpeg"); /* Run external process `djpeg' to convert JPEG -> PNM */
25   Encoder::writeFrom(*(Filter::PipeE*)&helper, *(Filter::UngetFILED*)ufd);
26   ((Filter::PipeE*)&helper)->vi_write(0,0); /* Signal EOF */
27   return helper.getImg();
28 }
29 
in_jpeg_checker(char buf[Image::Loader::MAGIC_LEN],char[Image::Loader::MAGIC_LEN],SimBuffer::Flat const & loadHints,Image::Loader::UFD *)30 static Image::Loader::reader_t in_jpeg_checker(char buf[Image::Loader::MAGIC_LEN], char [Image::Loader::MAGIC_LEN], SimBuffer::Flat const& loadHints, Image::Loader::UFD*) {
31   return (0==memcmp(buf, "\xff\xd8", 2)) && loadHints.findFirst((char const*)",asis,",6)==loadHints.getLength()
32          ? in_jpeg_reader : 0;
33 }
34 
35 #else
36 #define in_jpeg_checker (Image::Loader::checker_t)NULLP
37 #endif /* USE_IN_XPM */
38 
39 Image::Loader in_jpeg_loader = { "JPEG", in_jpeg_checker, 0 };
40