1 //======================================================================== 2 // 3 // DCTStream.h 4 // 5 // This file is licensed under the GPLv2 or later 6 // 7 // Copyright 2005 Jeff Muizelaar <jeff@infidigm.net> 8 // Copyright 2005 Martin Kretzschmar <martink@gnome.org> 9 // Copyright 2005-2007, 2009-2011, 2017, 2019, 2021 Albert Astals Cid <aacid@kde.org> 10 // Copyright 2010 Carlos Garcia Campos <carlosgc@gnome.org> 11 // Copyright 2011 Daiki Ueno <ueno@unixuser.org> 12 // Copyright 2013 Thomas Freitag <Thomas.Freitag@alfa.de> 13 // Copyright 2020 Lluís Batlle i Rossell <viric@viric.name> 14 // 15 //======================================================================== 16 17 #ifndef DCTSTREAM_H 18 #define DCTSTREAM_H 19 20 #include "poppler-config.h" 21 #include <cstdio> 22 #include <cstdlib> 23 #include <cstddef> 24 #include <csetjmp> 25 #ifdef HAVE_UNISTD_H 26 # include <unistd.h> 27 #endif 28 #include <cstring> 29 #include <cctype> 30 #include "goo/gmem.h" 31 #include "goo/gfile.h" 32 #include "Error.h" 33 #include "Object.h" 34 #include "Decrypt.h" 35 #include "Stream.h" 36 37 extern "C" { 38 #include <jpeglib.h> 39 #include <jerror.h> 40 } 41 42 struct str_src_mgr 43 { 44 struct jpeg_source_mgr pub; 45 JOCTET buffer; 46 Stream *str; 47 int index; 48 }; 49 50 struct str_error_mgr 51 { 52 struct jpeg_error_mgr pub; 53 jmp_buf setjmp_buffer; 54 int width; 55 int height; 56 }; 57 58 class DCTStream : public FilterStream 59 { 60 public: 61 DCTStream(Stream *strA, int colorXformA, Dict *dict, int recursion); 62 ~DCTStream() override; getKind()63 StreamKind getKind() const override { return strDCT; } 64 void reset() override; 65 int getChar() override; 66 int lookChar() override; 67 GooString *getPSFilter(int psLevel, const char *indent) override; 68 bool isBinary(bool last = true) const override; 69 70 private: 71 void init(); 72 hasGetChars()73 bool hasGetChars() override { return true; } 74 bool readLine(); 75 int getChars(int nChars, unsigned char *buffer) override; 76 77 int colorXform; 78 JSAMPLE *current; 79 JSAMPLE *limit; 80 struct jpeg_decompress_struct cinfo; 81 struct str_error_mgr err; 82 struct str_src_mgr src; 83 JSAMPARRAY row_buffer; 84 }; 85 86 #endif 87