1e16b04aa6041efb6507546547737e9603fa1606emsarett/*
2e16b04aa6041efb6507546547737e9603fa1606emsarett * Copyright 2015 Google Inc.
3e16b04aa6041efb6507546547737e9603fa1606emsarett *
4e16b04aa6041efb6507546547737e9603fa1606emsarett * Use of this source code is governed by a BSD-style license that can be
5e16b04aa6041efb6507546547737e9603fa1606emsarett * found in the LICENSE file.
6e16b04aa6041efb6507546547737e9603fa1606emsarett */
7e16b04aa6041efb6507546547737e9603fa1606emsarett
8e16b04aa6041efb6507546547737e9603fa1606emsarett
9525e90ab92fed79ac11afbb6e13d56867157fa70mtklein#ifndef SkJpegUtility_codec_DEFINED
10525e90ab92fed79ac11afbb6e13d56867157fa70mtklein#define SkJpegUtility_codec_DEFINED
11e16b04aa6041efb6507546547737e9603fa1606emsarett
125df93de8ad968b4e25708964e558979375eeaa9eMatt Sarett#include "SkJpegPriv.h"
13e16b04aa6041efb6507546547737e9603fa1606emsarett#include "SkStream.h"
14e16b04aa6041efb6507546547737e9603fa1606emsarett
15e16b04aa6041efb6507546547737e9603fa1606emsarett#include <setjmp.h>
16e16b04aa6041efb6507546547737e9603fa1606emsarett// stdio is needed for jpeglib
17e16b04aa6041efb6507546547737e9603fa1606emsarett#include <stdio.h>
18e16b04aa6041efb6507546547737e9603fa1606emsarett
19e16b04aa6041efb6507546547737e9603fa1606emsarettextern "C" {
20e16b04aa6041efb6507546547737e9603fa1606emsarett    #include "jpeglib.h"
21e16b04aa6041efb6507546547737e9603fa1606emsarett    #include "jerror.h"
22e16b04aa6041efb6507546547737e9603fa1606emsarett}
23e16b04aa6041efb6507546547737e9603fa1606emsarett
24e16b04aa6041efb6507546547737e9603fa1606emsarett/*
25e16b04aa6041efb6507546547737e9603fa1606emsarett * Error handling function
26e16b04aa6041efb6507546547737e9603fa1606emsarett */
27e16b04aa6041efb6507546547737e9603fa1606emsarettvoid skjpeg_err_exit(j_common_ptr cinfo);
28e16b04aa6041efb6507546547737e9603fa1606emsarett
29e16b04aa6041efb6507546547737e9603fa1606emsarett/*
30e16b04aa6041efb6507546547737e9603fa1606emsarett * Source handling struct for that allows libjpeg to use our stream object
31e16b04aa6041efb6507546547737e9603fa1606emsarett */
32e16b04aa6041efb6507546547737e9603fa1606emsarettstruct skjpeg_source_mgr : jpeg_source_mgr {
33e16b04aa6041efb6507546547737e9603fa1606emsarett    skjpeg_source_mgr(SkStream* stream);
34e16b04aa6041efb6507546547737e9603fa1606emsarett
35e16b04aa6041efb6507546547737e9603fa1606emsarett    SkStream* fStream; // unowned
36e16b04aa6041efb6507546547737e9603fa1606emsarett    enum {
37e16b04aa6041efb6507546547737e9603fa1606emsarett        // TODO (msarett): Experiment with different buffer sizes.
38e16b04aa6041efb6507546547737e9603fa1606emsarett        // This size was chosen because it matches SkImageDecoder.
39e16b04aa6041efb6507546547737e9603fa1606emsarett        kBufferSize = 1024
40e16b04aa6041efb6507546547737e9603fa1606emsarett    };
41e16b04aa6041efb6507546547737e9603fa1606emsarett    uint8_t fBuffer[kBufferSize];
42e16b04aa6041efb6507546547737e9603fa1606emsarett};
43e16b04aa6041efb6507546547737e9603fa1606emsarett
44e16b04aa6041efb6507546547737e9603fa1606emsarett#endif
45