blob: 74f1a2104285f45349776e940ade2dad2eccca2c [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001
reed@android.com6f598152010-01-21 15:34:19 +00002/*
epoger@google.comec3ed6a2011-07-28 14:26:00 +00003 * Copyright 2010 The Android Open Source Project
reed@android.com6f598152010-01-21 15:34:19 +00004 *
epoger@google.comec3ed6a2011-07-28 14:26:00 +00005 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
reed@android.com6f598152010-01-21 15:34:19 +00007 */
8
epoger@google.comec3ed6a2011-07-28 14:26:00 +00009
reed@android.com6f598152010-01-21 15:34:19 +000010#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 {
djsollen@google.com57f49692011-02-23 20:46:31 +000037 skjpeg_source_mgr(SkStream* stream, SkImageDecoder* decoder, bool ownStream);
38 ~skjpeg_source_mgr();
reed@android.com6f598152010-01-21 15:34:19 +000039
40 SkStream* fStream;
djsollen@google.com57f49692011-02-23 20:46:31 +000041 void* fMemoryBase;
reed@android.com6f598152010-01-21 15:34:19 +000042 size_t fMemoryBaseSize;
djsollen@google.com57f49692011-02-23 20:46:31 +000043 bool fUnrefStream;
reed@android.com6f598152010-01-21 15:34:19 +000044 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