| /* | |
| * Copyright 2017 Google Inc. | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #ifndef SkJpegPriv_DEFINED | |
| #define SkJpegPriv_DEFINED | |
| #include "SkStream.h" | |
| #include "SkTArray.h" | |
| #include <setjmp.h> | |
| // stdio is needed for jpeglib | |
| #include <stdio.h> | |
| extern "C" { | |
| #include "jpeglib.h" | |
| #include "jerror.h" | |
| } | |
| static constexpr uint32_t kICCMarker = JPEG_APP0 + 2; | |
| static constexpr uint32_t kICCMarkerHeaderSize = 14; | |
| static constexpr uint8_t kICCSig[] = { | |
| 'I', 'C', 'C', '_', 'P', 'R', 'O', 'F', 'I', 'L', 'E', '\0', | |
| }; | |
| /* | |
| * Error handling struct | |
| */ | |
| struct skjpeg_error_mgr : jpeg_error_mgr { | |
| class AutoPushJmpBuf { | |
| public: | |
| AutoPushJmpBuf(skjpeg_error_mgr* mgr) : fMgr(mgr) { | |
| fMgr->fJmpBufStack.push_back(&fJmpBuf); | |
| } | |
| ~AutoPushJmpBuf() { | |
| SkASSERT(fMgr->fJmpBufStack.back() == &fJmpBuf); | |
| fMgr->fJmpBufStack.pop_back(); | |
| } | |
| operator jmp_buf&() { return fJmpBuf; } | |
| private: | |
| skjpeg_error_mgr* const fMgr; | |
| jmp_buf fJmpBuf; | |
| }; | |
| SkSTArray<4, jmp_buf*> fJmpBufStack; | |
| }; | |
| #endif |