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
16extern "C" {
17    #include "jpeglib.h"
18    #include "jerror.h"
19}
20
21#include <setjmp.h>
22
23/* Our error-handling struct.
24 *
25*/
26struct skjpeg_error_mgr : jpeg_error_mgr {
27    jmp_buf fJmpBuf;
28};
29
30
31void skjpeg_error_exit(j_common_ptr cinfo);
32
33///////////////////////////////////////////////////////////////////////////
34/* Our source struct for directing jpeg to our stream object.
35*/
36struct 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 */
55struct 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