17df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com
27df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com/*
37df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com * Copyright 2010 The Android Open Source Project
47df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com *
57df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com * Use of this source code is governed by a BSD-style license that can be
67df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com * found in the LICENSE file.
77df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com */
87df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com
97df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com
107df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com#ifndef SkJpegUtility_DEFINED
117df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com#define SkJpegUtility_DEFINED
127df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com
137df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com#include "SkImageDecoder.h"
147df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com#include "SkStream.h"
157df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com
167df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.comextern "C" {
177df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com    #include "jpeglib.h"
187df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com    #include "jerror.h"
197df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com}
207df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com
217df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com#include <setjmp.h>
227df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com
237df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com/* Our error-handling struct.
247df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com *
257df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com*/
267df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.comstruct skjpeg_error_mgr : jpeg_error_mgr {
277df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com    jmp_buf fJmpBuf;
287df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com};
297df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com
307df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com
317df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.comvoid skjpeg_error_exit(j_common_ptr cinfo);
327df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com
337df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com///////////////////////////////////////////////////////////////////////////
347df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com/* Our source struct for directing jpeg to our stream object.
357df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com*/
367df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.comstruct skjpeg_source_mgr : jpeg_source_mgr {
374ecddbdf09fa5a08eb8ad57288f53dc040ede8b3scroggo@google.com    skjpeg_source_mgr(SkStream* stream, SkImageDecoder* decoder);
387df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com    ~skjpeg_source_mgr();
397df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com
404ecddbdf09fa5a08eb8ad57288f53dc040ede8b3scroggo@google.com    // fStream is ref'ed and unref'ed
414ecddbdf09fa5a08eb8ad57288f53dc040ede8b3scroggo@google.com    SkStream*       fStream;
424ecddbdf09fa5a08eb8ad57288f53dc040ede8b3scroggo@google.com    // Unowned pointer to the decoder, used to check if the decoding process
434ecddbdf09fa5a08eb8ad57288f53dc040ede8b3scroggo@google.com    // has been cancelled.
447df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com    SkImageDecoder* fDecoder;
457df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com    enum {
467df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com        kBufferSize = 1024
477df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com    };
487df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com    char    fBuffer[kBufferSize];
497df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com};
507df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com
517df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com/////////////////////////////////////////////////////////////////////////////
527df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com/* Our destination struct for directing decompressed pixels to our stream
537df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com * object.
547df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com */
557df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.comstruct skjpeg_destination_mgr : jpeg_destination_mgr {
567df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com    skjpeg_destination_mgr(SkWStream* stream);
577df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com
587df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com    SkWStream*  fStream;
597df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com
607df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com    enum {
617df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com        kBufferSize = 1024
627df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com    };
637df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com    uint8_t fBuffer[kBufferSize];
647df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com};
657df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com
667df632ab780d57e8bc7ac8f47beba1296c97345fdjsollen@google.com#endif
67