From 7f7ec206de39fde8dc490e9feb0f65322af1b989 Mon Sep 17 00:00:00 2001 From: msarett Date: Tue, 1 Mar 2016 12:12:27 -0800 Subject: Fix bug in SkGifCodec / Switch SkImageDec tests to use Codec SkImageDecoder is still used throughout tests, tools, gms etc. Deleting it from tests is an easy first step. Bonus is that we add tests of SkCodec. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1733863003 Review URL: https://codereview.chromium.org/1733863003 --- tests/CodecPriv.h | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 tests/CodecPriv.h (limited to 'tests/CodecPriv.h') diff --git a/tests/CodecPriv.h b/tests/CodecPriv.h new file mode 100644 index 0000000000..1123a41dc9 --- /dev/null +++ b/tests/CodecPriv.h @@ -0,0 +1,36 @@ +/* + * Copyright 2016 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "SkBitmap.h" +#include "SkCodec.h" +#include "SkData.h" + +inline bool decode_memory(const void* mem, size_t size, SkBitmap* bm) { + SkAutoTUnref data(SkData::NewWithoutCopy(mem, size)); + + SkAutoTDelete codec(SkCodec::NewFromData(data.get())); + if (!codec) { + return false; + } + + // Construct a color table for the decode if necessary + SkAutoTUnref colorTable(nullptr); + SkPMColor* colorPtr = nullptr; + int* colorCountPtr = nullptr; + int maxColors = 256; + if (kIndex_8_SkColorType == codec->getInfo().colorType()) { + SkPMColor colors[256]; + colorTable.reset(new SkColorTable(colors, maxColors)); + colorPtr = const_cast(colorTable->readColors()); + colorCountPtr = &maxColors; + } + + bm->allocPixels(codec->getInfo(), nullptr, colorTable.get()); + const SkCodec::Result result = codec->getPixels(codec->getInfo(), bm->getPixels(), + bm->rowBytes(), nullptr, colorPtr, colorCountPtr); + return result == SkCodec::kSuccess || result == SkCodec::kIncompleteInput; +} -- cgit v1.2.3