1 /* 2 * Copyright 2017 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 9 #ifndef SkJpegPriv_DEFINED 10 #define SkJpegPriv_DEFINED 11 12 #include "SkStream.h" 13 #include "SkTArray.h" 14 15 #include <setjmp.h> 16 // stdio is needed for jpeglib 17 #include <stdio.h> 18 19 extern "C" { 20 #include "jpeglib.h" 21 #include "jerror.h" 22 } 23 24 static constexpr uint32_t kICCMarker = JPEG_APP0 + 2; 25 static constexpr uint32_t kICCMarkerHeaderSize = 14; 26 static constexpr uint8_t kICCSig[] = { 27 'I', 'C', 'C', '_', 'P', 'R', 'O', 'F', 'I', 'L', 'E', '\0', 28 }; 29 30 /* 31 * Error handling struct 32 */ 33 struct skjpeg_error_mgr : jpeg_error_mgr { 34 class AutoPushJmpBuf { 35 public: 36 AutoPushJmpBuf(skjpeg_error_mgr* mgr) : fMgr(mgr) { 37 fMgr->fJmpBufStack.push_back(&fJmpBuf); 38 } 39 ~AutoPushJmpBuf() { 40 SkASSERT(fMgr->fJmpBufStack.back() == &fJmpBuf); 41 fMgr->fJmpBufStack.pop_back(); 42 } 43 operator jmp_buf&() { return fJmpBuf; } 44 45 private: 46 skjpeg_error_mgr* const fMgr; 47 jmp_buf fJmpBuf; 48 }; 49 50 SkSTArray<4, jmp_buf*> fJmpBufStack; 51 }; 52 53 #endif 54