From d5c9e996dff7169cd6bfbf5c6d1543fca512c1a5 Mon Sep 17 00:00:00 2001 From: "robertphillips@google.com" Date: Tue, 20 Mar 2012 14:51:47 +0000 Subject: [PATCH] Fix for CMYK jpeg decoding issue (69 - unable to read some jpeg files on android) http://codereview.appspot.com/5785054/ git-svn-id: http://skia.googlecode.com/svn/trunk@3438 2bbb7eff-a529-9590-31e7-b0007b416f81 --- gm/cmykjpeg.cpp | 69 +++++++++++++++++++++++++++++++++ gm/gm.cpp | 2 + gm/gm.h | 30 +++++++++------ gm/gmmain.cpp | 35 +++++++++++------ gm/resources/CMYK.jpg | Bin 0 -> 116536 bytes gyp/gmslides.gypi | 1 + gyp/images.gyp | 12 +----- gyp/libjpeg.gyp | 13 +++++++ samplecode/SampleApp.cpp | 54 ++++++++++++++++++-------- src/images/SkImageDecoder_Factory.cpp | 31 +++++++++++++++ src/images/SkImageDecoder_libbmp.cpp | 4 +- src/images/SkImageDecoder_libgif.cpp | 4 +- src/images/SkImageDecoder_libico.cpp | 5 +-- src/images/SkImageDecoder_libjpeg.cpp | 70 ++++++++++++++++++++++++++-------- src/images/SkImageDecoder_wbmp.cpp | 4 +- src/images/SkJpegUtility.cpp | 24 ------------ 16 files changed, 262 insertions(+), 96 deletions(-) create mode 100644 gm/cmykjpeg.cpp create mode 100644 gm/resources/CMYK.jpg diff --git a/gm/cmykjpeg.cpp b/gm/cmykjpeg.cpp new file mode 100644 index 0000000..67d2a60 --- /dev/null +++ b/gm/cmykjpeg.cpp @@ -0,0 +1,69 @@ +/* + * Copyright 2012 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "gm.h" +#include "SkCanvas.h" +#include "SkImageDecoder.h" +#include "SkStream.h" + +namespace skiagm { + +/** Draw a CMYK encoded jpeg - libjpeg doesn't support CMYK->RGB + conversion so this tests Skia's internal processing +*/ +class CMYKJpegGM : public GM { +public: + CMYKJpegGM() { + + // parameters to the "decode" call + bool dither = false; + SkBitmap::Config prefConfig = SkBitmap::kARGB_8888_Config; + + SkString filename(INHERITED::gResourcePath); + if (!filename.endsWith("/") && !filename.endsWith("\\")) { + filename.append("/"); + } + + filename.append("CMYK.jpg"); + + SkFILEStream stream(filename.c_str()); + SkImageDecoder* codec = SkImageDecoder::Factory(&stream); + if (codec) { + stream.rewind(); + codec->setDitherImage(dither); + codec->decode(&stream, &fBitmap, prefConfig, + SkImageDecoder::kDecodePixels_Mode); + } + } + +protected: + virtual SkString onShortName() { + return SkString("cmykjpeg"); + } + + virtual SkISize onISize() { + return make_isize(640, 480); + } + + virtual void onDraw(SkCanvas* canvas) { + + canvas->translate(20*SK_Scalar1, 20*SK_Scalar1); + canvas->drawBitmap(fBitmap, 0, 0); + } + +private: + SkBitmap fBitmap; + + typedef GM INHERITED; +}; + +////////////////////////////////////////////////////////////////////////////// + +static GM* MyFactory(void*) { return new CMYKJpegGM; } +static GMRegistry reg(MyFactory); + +} diff --git a/gm/gm.cpp b/gm/gm.cpp index f9c0e66..b6f21f8 100644 --- a/gm/gm.cpp +++ b/gm/gm.cpp @@ -8,6 +8,8 @@ #include "gm.h" using namespace skiagm; +SkString GM::gResourcePath; + GM::GM() { fBGColor = SK_ColorWHITE; } diff --git a/gm/gm.h b/gm/gm.h index b0de922..d75a1c1 100644 --- a/gm/gm.h +++ b/gm/gm.h @@ -18,18 +18,18 @@ #include "SkTRegistry.h" namespace skiagm { - - static inline SkISize make_isize(int w, int h) { - SkISize sz; - sz.set(w, h); - return sz; - } + + static inline SkISize make_isize(int w, int h) { + SkISize sz; + sz.set(w, h); + return sz; + } class GM { public: GM(); virtual ~GM(); - + enum Flags { kSkipPDF_Flag = 1 << 0, kSkipPicture_Flag = 1 << 1 @@ -39,7 +39,7 @@ namespace skiagm { void drawBackground(SkCanvas*); void drawContent(SkCanvas*); - SkISize getISize() { return this->onISize(); } + SkISize getISize() { return this->onISize(); } const char* shortName(); uint32_t getFlags() const { @@ -53,10 +53,16 @@ namespace skiagm { // GM's getISize bounds. void drawSizeBounds(SkCanvas*, SkColor); - protected: - virtual void onDraw(SkCanvas*) = 0; - virtual void onDrawBackground(SkCanvas*); - virtual SkISize onISize() = 0; + static void SetResourcePath(const char* resourcePath) { + gResourcePath = resourcePath; + } + + protected: + static SkString gResourcePath; + + virtual void onDraw(SkCanvas*) = 0; + virtual void onDrawBackground(SkCanvas*); + virtual SkISize onISize() = 0; virtual SkString onShortName() = 0; virtual uint32_t onGetFlags() const { return 0; } diff --git a/gm/gmmain.cpp b/gm/gmmain.cpp index 6f53ce8..61095e1 100644 --- a/gm/gmmain.cpp +++ b/gm/gmmain.cpp @@ -589,9 +589,9 @@ static ErrorBitfield test_picture_serialization(GM* gm, static void usage(const char * argv0) { SkDebugf( - "%s [-w writePath] [-r readPath] [-d diffPath] [--noreplay]\n" - " [--serialize] [--forceBWtext] [--nopdf] [--nodeferred]\n" - " [--match substring] [--notexturecache]" + "%s [-w writePath] [-r readPath] [-d diffPath] [-i resourcePath]\n" + " [--noreplay] [--serialize] [--forceBWtext] [--nopdf] \n" + " [--nodeferred] [--match substring] [--notexturecache]" #if SK_MESA " [--mesagl]" #endif @@ -601,6 +601,7 @@ static void usage(const char * argv0) { " readPath: directory to read reference images from;\n" " reports if any pixels mismatch between reference and new images\n"); SkDebugf(" diffPath: directory to write difference images in.\n"); + SkDebugf(" resourcePath: directory that stores image resources.\n"); SkDebugf(" --noreplay: do not exercise SkPicture replay.\n"); SkDebugf( " --serialize: exercise SkPicture serialization & deserialization.\n"); @@ -660,6 +661,7 @@ int main(int argc, char * const argv[]) { const char* writePath = NULL; // if non-null, where we write the originals const char* readPath = NULL; // if non-null, were we read from to compare const char* diffPath = NULL; // if non-null, where we write our diffs (from compare) + const char* resourcePath = NULL;// if non-null, where we read from for image resources SkTDArray fMatches; @@ -688,6 +690,11 @@ int main(int argc, char * const argv[]) { if (argv < stop && **argv) { diffPath = *argv; } + } else if (strcmp(*argv, "-i") == 0) { + argv++; + if (argv < stop && **argv) { + resourcePath = *argv; + } } else if (strcmp(*argv, "--forceBWtext") == 0) { gForceBWtext = true; } else if (strcmp(*argv, "--noreplay") == 0) { @@ -709,17 +716,19 @@ int main(int argc, char * const argv[]) { useMesa = true; #endif } else if (strcmp(*argv, "--notexturecache") == 0) { - disableTextureCache = true; + disableTextureCache = true; } else { - usage(commandName); - return -1; + usage(commandName); + return -1; } } if (argv != stop) { - usage(commandName); - return -1; + usage(commandName); + return -1; } + GM::SetResourcePath(resourcePath); + int maxW = -1; int maxH = -1; Iter iter; @@ -763,6 +772,10 @@ int main(int argc, char * const argv[]) { fprintf(stderr, "writing to %s\n", writePath); } + if (resourcePath) { + fprintf(stderr, "reading resources from %s\n", resourcePath); + } + // Accumulate success of all tests. int testsRun = 0; int testsPassed = 0; @@ -828,10 +841,10 @@ int main(int argc, char * const argv[]) { if (doDeferred && !testErrors && (kGPU_Backend == gRec[i].fBackend || - kRaster_Backend == gRec[i].fBackend)) { + kRaster_Backend == gRec[i].fBackend)) { testErrors |= test_deferred_drawing(gm, gRec[i], - forwardRenderedBitmap, - diffPath, gGrContext, rt.get()); + forwardRenderedBitmap, + diffPath, gGrContext, rt.get()); } if ((ERROR_NONE == testErrors) && doReplay && diff --git a/gm/resources/CMYK.jpg b/gm/resources/CMYK.jpg new file mode 100644 index 0000000000000000000000000000000000000000..04ed9859dd4dafafb9008d15f56662722c4e731f GIT binary patch literal 116536 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

u7? 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 T|IhkA9{9%t|D^|{e~setVisibleP(true); this->setClipToBounds(false); + skiagm::GM::SetResourcePath(resourcePath); + SkGMRegistyToSampleRegistry(); { const SkViewRegister* reg = SkViewRegister::Head(); @@ -702,22 +741,7 @@ SampleWindow::SampleWindow(void* hwnd, int argc, char** argv, DeviceManager* dev reg = reg->next(); } } - fCurrIndex = 0; - if (argc > 1) { - fCurrIndex = findByTitle(argv[1]); - if (fCurrIndex < 0) { - fprintf(stderr, "Unknown sample \"%s\"\n", argv[1]); - } - } else { - SkString title; - if (readTitleFromPrefs(&title)) { - fCurrIndex = findByTitle(title.c_str()); - } - } - if (fCurrIndex < 0) { - fCurrIndex = 0; - } this->loadView((*fSamples[fCurrIndex])()); fPDFData = NULL; diff --git a/src/images/SkImageDecoder_Factory.cpp b/src/images/SkImageDecoder_Factory.cpp index f3cb120..048ed21 100644 --- a/src/images/SkImageDecoder_Factory.cpp +++ b/src/images/SkImageDecoder_Factory.cpp @@ -12,6 +12,37 @@ #include "SkStream.h" #include "SkTRegistry.h" +//extern SkImageDecoder* sk_libbmp_dfactory(SkStream*); +//extern SkImageDecoder* sk_libgif_dfactory(SkStream*); +//extern SkImageDecoder* sk_libico_dfactory(SkStream*); +extern SkImageDecoder* sk_libjpeg_dfactory(SkStream*); +//extern SkImageDecoder* sk_libpng_dfactory(SkStream*); +//extern SkImageDecoder* sk_wbmp_dfactory(SkStream*); + +// To get the various image decoding classes to register themselves +// pre-main we need to ensure they are linked into the application. +// Ultimately we need to move to using DLLs rather than tightly +// coupling the factory with the file format classes. +void ForceLinking() +{ + SkImageDecoder* codec = NULL; + + // TODO: rather than force the linking here expose a + // "Sk*ImageDecoderCreate" function for each codec + // and let the app add these calls to force the linking. + // Besides decoupling the codecs from the factory this + // will also give the app the ability to circumvent the + // factory and explicitly create a decoder w/o reaching + // into Skia's guts + +// codec = sk_libbmp_dfactory(NULL); +// codec = sk_libgif_dfactory(NULL); +// codec = sk_libico_dfactory(NULL); + codec = sk_libjpeg_dfactory(NULL); +// codec = sk_libpng_dfactory(NULL); +// codec = sk_wbmp_dfactory(NULL); +} + typedef SkTRegistry DecodeReg; // N.B. You can't use "DecodeReg::gHead here" due to complex C++ diff --git a/src/images/SkImageDecoder_libbmp.cpp b/src/images/SkImageDecoder_libbmp.cpp index b5e49e8..8683e21 100644 --- a/src/images/SkImageDecoder_libbmp.cpp +++ b/src/images/SkImageDecoder_libbmp.cpp @@ -27,7 +27,7 @@ protected: virtual bool onDecode(SkStream* stream, SkBitmap* bm, Mode mode); }; -static SkImageDecoder* Factory(SkStream* stream) { +SkImageDecoder* sk_libbmp_dfactory(SkStream* stream) { static const char kBmpMagic[] = { 'B', 'M' }; size_t len = stream->getLength(); @@ -41,7 +41,7 @@ static SkImageDecoder* Factory(SkStream* stream) { return NULL; } -static SkTRegistry gReg(Factory); +static SkTRegistry gReg(sk_libbmp_dfactory); /////////////////////////////////////////////////////////////////////////////// diff --git a/src/images/SkImageDecoder_libgif.cpp b/src/images/SkImageDecoder_libgif.cpp index 7a451a0..3bc33c3 100644 --- a/src/images/SkImageDecoder_libgif.cpp +++ b/src/images/SkImageDecoder_libgif.cpp @@ -330,7 +330,7 @@ DONE: #include "SkTRegistry.h" -static SkImageDecoder* Factory(SkStream* stream) { +static SkImageDecoder* sk_libgif_dfactory(SkStream* stream) { char buf[GIF_STAMP_LEN]; if (stream->read(buf, GIF_STAMP_LEN) == GIF_STAMP_LEN) { if (memcmp(GIF_STAMP, buf, GIF_STAMP_LEN) == 0 || @@ -342,4 +342,4 @@ static SkImageDecoder* Factory(SkStream* stream) { return NULL; } -static SkTRegistry gReg(Factory); +static SkTRegistry gReg(sk_libgif_dfactory); diff --git a/src/images/SkImageDecoder_libico.cpp b/src/images/SkImageDecoder_libico.cpp index bb6bc95..226c84a 100644 --- a/src/images/SkImageDecoder_libico.cpp +++ b/src/images/SkImageDecoder_libico.cpp @@ -24,7 +24,6 @@ protected: virtual bool onDecode(SkStream* stream, SkBitmap* bm, Mode); }; -SkImageDecoder* SkCreateICOImageDecoder(); SkImageDecoder* SkCreateICOImageDecoder() { return new SkICOImageDecoder; } @@ -371,7 +370,7 @@ static void editPixelBit32(const int pixelNo, const unsigned char* buf, #include "SkTRegistry.h" -static SkImageDecoder* Factory(SkStream* stream) { +SkImageDecoder* sk_libico_dfactory(SkStream* stream) { // Check to see if the first four bytes are 0,0,1,0 // FIXME: Is that required and sufficient? SkAutoMalloc autoMal(4); @@ -386,5 +385,5 @@ static SkImageDecoder* Factory(SkStream* stream) { return SkNEW(SkICOImageDecoder); } -static SkTRegistry gReg(Factory); +static SkTRegistry gReg(sk_libico_dfactory); diff --git a/src/images/SkImageDecoder_libjpeg.cpp b/src/images/SkImageDecoder_libjpeg.cpp index 77d383a..5cb45a2 100644 --- a/src/images/SkImageDecoder_libjpeg.cpp +++ b/src/images/SkImageDecoder_libjpeg.cpp @@ -146,6 +146,29 @@ static bool return_false(const jpeg_decompress_struct& cinfo, return false; // must always return false } +// Convert a scanline of CMYK samples to RGBX in place. Note that this +// method moves the "scanline" pointer in its processing +static void convert_CMYK_to_RGB(uint8_t* scanline, unsigned int width) { + // At this point we've received CMYK pixels from libjpeg. We + // perform a crude conversion to RGB (based on the formulae + // from easyrgb.com): + // CMYK -> CMY + // C = ( C * (1 - K) + K ) // for each CMY component + // CMY -> RGB + // R = ( 1 - C ) * 255 // for each RGB component + // Unfortunately we are seeing inverted CMYK so all the original terms + // are 1-. This yields: + // CMYK -> CMY + // C = ( (1-C) * (1 - (1-K) + (1-K) ) -> C = 1 - C*K + // The conversion from CMY->RGB remains the same + for (unsigned int x = 0; x < width; ++x, scanline += 4) { + scanline[0] = SkMulDiv255Round(scanline[0], scanline[3]); + scanline[1] = SkMulDiv255Round(scanline[1], scanline[3]); + scanline[2] = SkMulDiv255Round(scanline[2], scanline[3]); + scanline[3] = 255; + } +} + bool SkJPEGImageDecoder::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) { #ifdef TIME_DECODE AutoTimeMillis atm("JPEG Decode"); @@ -156,7 +179,7 @@ bool SkJPEGImageDecoder::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) { jpeg_decompress_struct cinfo; skjpeg_error_mgr sk_err; - skjpeg_source_mgr sk_stream(stream, this); + skjpeg_source_mgr sk_stream(stream, this, false); cinfo.err = jpeg_std_error(&sk_err); sk_err.error_exit = skjpeg_error_exit; @@ -201,7 +224,14 @@ bool SkJPEGImageDecoder::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) { cinfo.do_block_smoothing = 0; /* default format is RGB */ - cinfo.out_color_space = JCS_RGB; + if (cinfo.jpeg_color_space == JCS_CMYK) { + // libjpeg cannot convert from CMYK to RGB - here we set up + // so libjpeg will give us CMYK samples back and we will + // later manually convert them to RGB + cinfo.out_color_space = JCS_CMYK; + } else { + cinfo.out_color_space = JCS_RGB; + } SkBitmap::Config config = this->getPrefConfig(k32Bit_SrcDepth, false); // only these make sense for jpegs @@ -213,9 +243,9 @@ bool SkJPEGImageDecoder::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) { #ifdef ANDROID_RGB cinfo.dither_mode = JDITHER_NONE; - if (config == SkBitmap::kARGB_8888_Config) { + if (SkBitmap::kARGB_8888_Config == config && JCS_CMYK != cinfo.out_color_space) { cinfo.out_color_space = JCS_RGBA_8888; - } else if (config == SkBitmap::kRGB_565_Config) { + } else if (SkBitmap::kRGB_565_Config == config && JCS_CMYK != cinfo.out_color_space) { cinfo.out_color_space = JCS_RGB_565; if (this->getDitherImage()) { cinfo.dither_mode = JDITHER_ORDERED; @@ -300,10 +330,13 @@ bool SkJPEGImageDecoder::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) { return true; } #endif - + // check for supported formats SkScaledBitmapSampler::SrcConfig sc; - if (3 == cinfo.out_color_components && JCS_RGB == cinfo.out_color_space) { + if (JCS_CMYK == cinfo.out_color_space) { + // In this case we will manually convert the CMYK values to RGB + sc = SkScaledBitmapSampler::kRGBX; + } else if (3 == cinfo.out_color_components && JCS_RGB == cinfo.out_color_space) { sc = SkScaledBitmapSampler::kRGB; #ifdef ANDROID_RGB } else if (JCS_RGBA_8888 == cinfo.out_color_space) { @@ -322,7 +355,7 @@ bool SkJPEGImageDecoder::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) { sampleSize); bm->setConfig(config, sampler.scaledWidth(), sampler.scaledHeight()); - // jpegs are always opauqe (i.e. have no per-pixel alpha) + // jpegs are always opaque (i.e. have no per-pixel alpha) bm->setIsOpaque(true); if (SkImageDecoder::kDecodeBounds_Mode == mode) { @@ -332,12 +365,13 @@ bool SkJPEGImageDecoder::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) { return return_false(cinfo, *bm, "allocPixelRef"); } - SkAutoLockPixels alp(*bm); + SkAutoLockPixels alp(*bm); if (!sampler.begin(bm, sc, this->getDitherImage())) { return return_false(cinfo, *bm, "sampler.begin"); } - uint8_t* srcRow = (uint8_t*)srcStorage.alloc(cinfo.output_width * 4); + // The CMYK work-around relies on 4 components per pixel here + uint8_t* srcRow = (uint8_t*)srcStorage.reset(cinfo.output_width * 4); // Possibly skip initial rows [sampler.srcY0] if (!skip_src_rows(&cinfo, srcRow, sampler.srcY0())) { @@ -354,7 +388,11 @@ bool SkJPEGImageDecoder::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) { if (this->shouldCancelDecode()) { return return_false(cinfo, *bm, "shouldCancelDecode"); } - + + if (JCS_CMYK == cinfo.out_color_space) { + convert_CMYK_to_RGB(srcRow, cinfo.output_width); + } + sampler.next(srcRow); if (bm->height() - 1 == y) { // we're done @@ -593,7 +631,7 @@ protected: jpeg_start_compress(&cinfo, TRUE); const int width = bm.width(); - uint8_t* oneRowP = (uint8_t*)oneRow.alloc(width * 3); + uint8_t* oneRowP = (uint8_t*)oneRow.reset(width * 3); const SkPMColor* colors = ctLocker.lockColors(bm); const void* srcRow = bm.getPixels(); @@ -618,7 +656,7 @@ protected: #include "SkTRegistry.h" -static SkImageDecoder* DFactory(SkStream* stream) { +SkImageDecoder* sk_libjpeg_dfactory(SkStream* stream) { static const char gHeader[] = { 0xFF, 0xD8, 0xFF }; static const size_t HEADER_SIZE = sizeof(gHeader); @@ -634,9 +672,11 @@ static SkImageDecoder* DFactory(SkStream* stream) { return SkNEW(SkJPEGImageDecoder); } -static SkImageEncoder* EFactory(SkImageEncoder::Type t) { +static SkImageEncoder* sk_libjpeg_efactory(SkImageEncoder::Type t) { return (SkImageEncoder::kJPEG_Type == t) ? SkNEW(SkJPEGImageEncoder) : NULL; } -static SkTRegistry gDReg(DFactory); -static SkTRegistry gEReg(EFactory); + +static SkTRegistry gDReg(sk_libjpeg_dfactory); +static SkTRegistry gEReg(sk_libjpeg_efactory); + diff --git a/src/images/SkImageDecoder_wbmp.cpp b/src/images/SkImageDecoder_wbmp.cpp index a7d910f..262cf54 100644 --- a/src/images/SkImageDecoder_wbmp.cpp +++ b/src/images/SkImageDecoder_wbmp.cpp @@ -151,7 +151,7 @@ bool SkWBMPImageDecoder::onDecode(SkStream* stream, SkBitmap* decodedBitmap, #include "SkTRegistry.h" -static SkImageDecoder* Factory(SkStream* stream) { +SkImageDecoder* sk_wbmp_dfactory(SkStream* stream) { wbmp_head head; if (head.init(stream)) { @@ -160,5 +160,5 @@ static SkImageDecoder* Factory(SkStream* stream) { return NULL; } -static SkTRegistry gReg(Factory); +static SkTRegistry gReg(sk_wbmp_dfactory); diff --git a/src/images/SkJpegUtility.cpp b/src/images/SkJpegUtility.cpp index aa5237f..e28c512 100644 --- a/src/images/SkJpegUtility.cpp +++ b/src/images/SkJpegUtility.cpp @@ -14,26 +14,9 @@ static void sk_init_source(j_decompress_ptr cinfo) { skjpeg_source_mgr* src = (skjpeg_source_mgr*)cinfo->src; src->next_input_byte = (const JOCTET*)src->fBuffer; src->bytes_in_buffer = 0; - src->current_offset = 0; src->fStream->rewind(); } -static boolean sk_seek_input_data(j_decompress_ptr cinfo, long byte_offset) { - skjpeg_source_mgr* src = (skjpeg_source_mgr*)cinfo->src; - - if (byte_offset > src->current_offset) { - (void)src->fStream->skip(byte_offset - src->current_offset); - } else { - src->fStream->rewind(); - (void)src->fStream->skip(byte_offset); - } - - src->current_offset = byte_offset; - src->next_input_byte = (const JOCTET*)src->fBuffer; - src->bytes_in_buffer = 0; - return TRUE; -} - static boolean sk_fill_input_buffer(j_decompress_ptr cinfo) { skjpeg_source_mgr* src = (skjpeg_source_mgr*)cinfo->src; if (src->fDecoder != NULL && src->fDecoder->shouldCancelDecode()) { @@ -46,7 +29,6 @@ static boolean sk_fill_input_buffer(j_decompress_ptr cinfo) { return FALSE; } - src->current_offset += bytes; src->next_input_byte = (const JOCTET*)src->fBuffer; src->bytes_in_buffer = bytes; return TRUE; @@ -64,7 +46,6 @@ static void sk_skip_input_data(j_decompress_ptr cinfo, long num_bytes) { cinfo->err->error_exit((j_common_ptr)cinfo); return; } - src->current_offset += bytes; bytesToSkip -= bytes; } src->next_input_byte = (const JOCTET*)src->fBuffer; @@ -96,9 +77,7 @@ static void sk_term_source(j_decompress_ptr /*cinfo*/) {} static void skmem_init_source(j_decompress_ptr cinfo) { skjpeg_source_mgr* src = (skjpeg_source_mgr*)cinfo->src; src->next_input_byte = (const JOCTET*)src->fMemoryBase; - src->start_input_byte = (const JOCTET*)src->fMemoryBase; src->bytes_in_buffer = src->fMemoryBaseSize; - src->current_offset = src->fMemoryBaseSize; } static boolean skmem_fill_input_buffer(j_decompress_ptr cinfo) { @@ -127,8 +106,6 @@ skjpeg_source_mgr::skjpeg_source_mgr(SkStream* stream, SkImageDecoder* decoder, bool ownStream) : fStream(stream) { fDecoder = decoder; const void* baseAddr = stream->getMemoryBase(); - size_t bufferSize = 4096; - size_t len; fMemoryBase = NULL; fUnrefStream = ownStream; fMemoryBaseSize = 0; @@ -138,7 +115,6 @@ skjpeg_source_mgr::skjpeg_source_mgr(SkStream* stream, SkImageDecoder* decoder, skip_input_data = sk_skip_input_data; resync_to_restart = sk_resync_to_restart; term_source = sk_term_source; - seek_input_data = sk_seek_input_data; // SkDebugf("**************** use memorybase %p %d\n", fMemoryBase, fMemoryBaseSize); } -- 2.7.4