• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /*
3  * Copyright 2010 The Android Open Source Project
4  *
5  * Use of this source code is governed by a BSD-style license that can be
6  * found in the LICENSE file.
7  */
8 
9 
10 #ifndef SkJpegUtility_DEFINED
11 #define SkJpegUtility_DEFINED
12 
13 #include "SkImageDecoder.h"
14 #include "SkStream.h"
15 
16 extern "C" {
17     #include "jpeglib.h"
18     #include "jerror.h"
19 }
20 
21 #include <setjmp.h>
22 
23 /* Our error-handling struct.
24  *
25 */
26 struct skjpeg_error_mgr : jpeg_error_mgr {
27     jmp_buf fJmpBuf;
28 };
29 
30 
31 void skjpeg_error_exit(j_common_ptr cinfo);
32 
33 ///////////////////////////////////////////////////////////////////////////
34 /* Our source struct for directing jpeg to our stream object.
35 */
36 struct skjpeg_source_mgr : jpeg_source_mgr {
37     skjpeg_source_mgr(SkStream* stream, SkImageDecoder* decoder);
38     ~skjpeg_source_mgr();
39 
40     // fStream is ref'ed and unref'ed
41     SkStream*       fStream;
42     // Unowned pointer to the decoder, used to check if the decoding process
43     // has been cancelled.
44     SkImageDecoder* fDecoder;
45     enum {
46         kBufferSize = 1024
47     };
48     char    fBuffer[kBufferSize];
49 };
50 
51 /////////////////////////////////////////////////////////////////////////////
52 /* Our destination struct for directing decompressed pixels to our stream
53  * object.
54  */
55 struct skjpeg_destination_mgr : jpeg_destination_mgr {
56     skjpeg_destination_mgr(SkWStream* stream);
57 
58     SkWStream*  fStream;
59 
60     enum {
61         kBufferSize = 1024
62     };
63     uint8_t fBuffer[kBufferSize];
64 };
65 
66 #endif
67