/*
|
* 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
|