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