SkJpegPriv.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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. #ifndef SkJpegPriv_DEFINED
  8. #define SkJpegPriv_DEFINED
  9. #include "include/core/SkStream.h"
  10. #include "include/private/SkTArray.h"
  11. #include <setjmp.h>
  12. // stdio is needed for jpeglib
  13. #include <stdio.h>
  14. extern "C" {
  15. #include "jpeglib.h"
  16. #include "jerror.h"
  17. }
  18. static constexpr uint32_t kICCMarker = JPEG_APP0 + 2;
  19. static constexpr uint32_t kICCMarkerHeaderSize = 14;
  20. static constexpr uint8_t kICCSig[] = {
  21. 'I', 'C', 'C', '_', 'P', 'R', 'O', 'F', 'I', 'L', 'E', '\0',
  22. };
  23. /*
  24. * Error handling struct
  25. */
  26. struct skjpeg_error_mgr : jpeg_error_mgr {
  27. class AutoPushJmpBuf {
  28. public:
  29. AutoPushJmpBuf(skjpeg_error_mgr* mgr) : fMgr(mgr) {
  30. fMgr->fJmpBufStack.push_back(&fJmpBuf);
  31. }
  32. ~AutoPushJmpBuf() {
  33. SkASSERT(fMgr->fJmpBufStack.back() == &fJmpBuf);
  34. fMgr->fJmpBufStack.pop_back();
  35. }
  36. operator jmp_buf&() { return fJmpBuf; }
  37. private:
  38. skjpeg_error_mgr* const fMgr;
  39. jmp_buf fJmpBuf;
  40. };
  41. SkSTArray<4, jmp_buf*> fJmpBufStack;
  42. };
  43. #endif