180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* 380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2010 The Android Open Source Project 480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be 680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file. 780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifndef SkJpegUtility_DEFINED 1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#define SkJpegUtility_DEFINED 1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkImageDecoder.h" 1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkStream.h" 1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruextern "C" { 1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru #include "jpeglib.h" 1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru #include "jerror.h" 1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include <setjmp.h> 2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* Our error-handling struct. 2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru*/ 2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustruct skjpeg_error_mgr : jpeg_error_mgr { 2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru jmp_buf fJmpBuf; 2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid skjpeg_error_exit(j_common_ptr cinfo); 3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/////////////////////////////////////////////////////////////////////////// 3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* Our source struct for directing jpeg to our stream object. 3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru*/ 3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustruct skjpeg_source_mgr : jpeg_source_mgr { 370cfa53d69f121ba65ae8466971f54c38081afe44Derek Sollenberger skjpeg_source_mgr(SkStream* stream, SkImageDecoder* decoder); 3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru ~skjpeg_source_mgr(); 3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 400cfa53d69f121ba65ae8466971f54c38081afe44Derek Sollenberger // fStream is ref'ed and unref'ed 410cfa53d69f121ba65ae8466971f54c38081afe44Derek Sollenberger SkStream* fStream; 420cfa53d69f121ba65ae8466971f54c38081afe44Derek Sollenberger // Unowned pointer to the decoder, used to check if the decoding process 430cfa53d69f121ba65ae8466971f54c38081afe44Derek Sollenberger // has been cancelled. 4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkImageDecoder* fDecoder; 4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru enum { 4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru kBufferSize = 1024 4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru }; 4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru char fBuffer[kBufferSize]; 4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru///////////////////////////////////////////////////////////////////////////// 5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* Our destination struct for directing decompressed pixels to our stream 5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * object. 5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustruct skjpeg_destination_mgr : jpeg_destination_mgr { 5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru skjpeg_destination_mgr(SkWStream* stream); 5780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkWStream* fStream; 5980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru enum { 6180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru kBufferSize = 1024 6280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru }; 6380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint8_t fBuffer[kBufferSize]; 6480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 6580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 6680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 67