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_codec.h"
14 
15 // stdio is needed for jpeglib
16 #include <stdio.h>
17 
18 extern "C" {
19     #include "jpeglib.h"
20 }
21 
22 class JpegDecoderMgr : SkNoncopyable {
23 public:
24 
25     /*
26      * Print a useful error message and return false
27      */
28     bool returnFalse(const char caller[]);
29 
30     /*
31      * Print a useful error message and return a decode failure
32      */
33     SkCodec::Result returnFailure(const char caller[], SkCodec::Result result);
34 
35     /*
36      * Create the decode manager
37      * Does not take ownership of stream
38      */
39     JpegDecoderMgr(SkStream* stream);
40 
41     /*
42      * Initialize decompress struct
43      * Initialize the source manager
44      */
45     void  init();
46 
47     /*
48      * Recommend a color type based on the encoded format
49      */
50     SkColorType getColorType();
51 
52     /*
53      * Free memory used by the decode manager
54      */
55     ~JpegDecoderMgr();
56 
57     /*
58      * Get the jump buffer in order to set an error return point
59      */
60     jmp_buf& getJmpBuf();
61 
62     /*
63      * Get function for the decompress info struct
64      */
65     jpeg_decompress_struct* dinfo();
66 
67 private:
68 
69     jpeg_decompress_struct fDInfo;
70     skjpeg_source_mgr      fSrcMgr;
71     skjpeg_error_mgr       fErrorMgr;
72     bool                   fInit;
73 };
74 
75 #endif
76