1 /* 2 * Copyright 2015 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef SkJpegDecoderMgr_DEFINED 9 #define SkJpegDecoderMgr_DEFINED 10 11 #include "SkCodec.h" 12 #include "SkCodecPriv.h" 13 #include "SkJpegUtility.h" 14 #include "SkSwizzler.h" 15 #include "SkTemplates.h" 16 17 // stdio is needed for jpeglib 18 #include <stdio.h> 19 20 extern "C" { 21 #include "jpeglib.h" 22 } 23 24 class JpegDecoderMgr : SkNoncopyable { 25 public: 26 27 /* 28 * Print a useful error message and return false 29 */ 30 bool returnFalse(const char caller[]); 31 32 /* 33 * Print a useful error message and return a decode failure 34 */ 35 SkCodec::Result returnFailure(const char caller[], SkCodec::Result result); 36 37 /* 38 * Create the decode manager 39 * Does not take ownership of stream 40 */ 41 JpegDecoderMgr(SkStream* stream); 42 43 /* 44 * Initialize decompress struct 45 * Initialize the source manager 46 */ 47 void init(); 48 49 /* 50 * Recommend a color type based on the encoded format 51 */ 52 SkColorType getColorType(); 53 54 /* 55 * Free memory used by the decode manager 56 */ 57 ~JpegDecoderMgr(); 58 59 /* 60 * Get the jump buffer in order to set an error return point 61 */ 62 jmp_buf& getJmpBuf(); 63 64 /* 65 * Get function for the decompress info struct 66 */ 67 jpeg_decompress_struct* dinfo(); 68 69 private: 70 71 jpeg_decompress_struct fDInfo; 72 skjpeg_source_mgr fSrcMgr; 73 skjpeg_error_mgr fErrorMgr; 74 bool fInit; 75 }; 76 77 #endif 78