diff options
author | 2016-10-17 13:19:02 -0700 | |
---|---|---|
committer | 2016-10-17 13:19:02 -0700 | |
commit | a73d76af31d8ad04716fb611d7987dfd1762f5e9 (patch) | |
tree | 0d5608a6f72d7c802d608b684882fb0d83f46c87 /tools | |
parent | ea4567c1b080361b43eb0f52bb63e33f858baf94 (diff) |
skp_parser
compiles with GN.
NOTRY=true
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2281733003
Review-Url: https://codereview.chromium.org/2281733003
Diffstat (limited to 'tools')
-rw-r--r-- | tools/debugger/SkDrawCommand.cpp | 8 | ||||
-rw-r--r-- | tools/debugger/SkDrawCommand.h | 4 | ||||
-rw-r--r-- | tools/skiaserve/Request.cpp | 2 | ||||
-rw-r--r-- | tools/skp_parser.cpp | 59 |
4 files changed, 66 insertions, 7 deletions
diff --git a/tools/debugger/SkDrawCommand.cpp b/tools/debugger/SkDrawCommand.cpp index 156ca4f74d..3c2f051cfe 100644 --- a/tools/debugger/SkDrawCommand.cpp +++ b/tools/debugger/SkDrawCommand.cpp @@ -7,6 +7,8 @@ #include "SkDrawCommand.h" +#include "png.h" + #include "SkBlurMaskFilter.h" #include "SkColorFilter.h" #include "SkDashPathEffect.h" @@ -661,7 +663,7 @@ static void write_png_callback(png_structp png_ptr, png_bytep data, png_size_t l out->write(data, length); } -void SkDrawCommand::WritePNG(const png_bytep rgba, png_uint_32 width, png_uint_32 height, +void SkDrawCommand::WritePNG(const uint8_t* rgba, unsigned width, unsigned height, SkWStream& out, bool isOpaque) { png_structp png = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); SkASSERT(png != nullptr); @@ -678,7 +680,7 @@ void SkDrawCommand::WritePNG(const png_bytep rgba, png_uint_32 width, png_uint_3 png_bytepp rows = (png_bytepp) sk_malloc_throw(height * sizeof(png_byte*)); png_bytep pixels = (png_bytep) sk_malloc_throw(width * height * 4); for (png_size_t y = 0; y < height; ++y) { - const png_bytep src = rgba + y * width * 4; + const uint8_t* src = rgba + y * width * 4; rows[y] = pixels + y * width * 4; for (png_size_t x = 0; x < width; ++x) { rows[y][x * 4] = src[x * 4]; @@ -714,7 +716,7 @@ bool SkDrawCommand::flatten(const SkImage& image, Json::Value* target, sk_sp<SkData> encodedBitmap = sk_tools::encode_bitmap_for_png(bm); SkDynamicMemoryWStream out; - SkDrawCommand::WritePNG((const png_bytep) encodedBitmap->bytes(), image.width(), image.height(), + SkDrawCommand::WritePNG(encodedBitmap->bytes(), image.width(), image.height(), out, false); sk_sp<SkData> encoded = out.detachAsData(); Json::Value jsonData; diff --git a/tools/debugger/SkDrawCommand.h b/tools/debugger/SkDrawCommand.h index 2739f73f74..8d309606f3 100644 --- a/tools/debugger/SkDrawCommand.h +++ b/tools/debugger/SkDrawCommand.h @@ -8,8 +8,6 @@ #ifndef SKDRAWCOMMAND_H_ #define SKDRAWCOMMAND_H_ -#include "png.h" - #include "SkCanvas.h" #include "SkTLazy.h" #include "SkPath.h" @@ -65,7 +63,7 @@ public: static const int kOpTypeCount = kLast_OpType + 1; - static void WritePNG(const png_bytep rgba, png_uint_32 width, png_uint_32 height, + static void WritePNG(const uint8_t* rgba, unsigned width, unsigned height, SkWStream& out, bool isOpaque); SkDrawCommand(OpType opType); diff --git a/tools/skiaserve/Request.cpp b/tools/skiaserve/Request.cpp index d27f2c0792..eb1ccce039 100644 --- a/tools/skiaserve/Request.cpp +++ b/tools/skiaserve/Request.cpp @@ -63,7 +63,7 @@ sk_sp<SkData> Request::writeCanvasToPng(SkCanvas* canvas) { // write to an opaque png (black background) SkDynamicMemoryWStream buffer; - SkDrawCommand::WritePNG((const png_bytep) encodedBitmap->bytes(), bmp->width(), bmp->height(), + SkDrawCommand::WritePNG(encodedBitmap->bytes(), bmp->width(), bmp->height(), buffer, true); return buffer.detachAsData(); } diff --git a/tools/skp_parser.cpp b/tools/skp_parser.cpp new file mode 100644 index 0000000000..d242524566 --- /dev/null +++ b/tools/skp_parser.cpp @@ -0,0 +1,59 @@ +/* + * 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 <iostream> + +#include "SkDebugCanvas.h" +#include "SkNullCanvas.h" +#include "SkStream.h" + +#ifdef SK_BUILD_FOR_WIN +#include <fcntl.h> +#include <io.h> +#endif + +int main(int argc, char** argv) { + if (argc < 2) { + SkDebugf("Usage:\n %s SKP_FILE [DATA_URL]\n", argv[0]); + return 1; + } + SkFILEStream input(argv[1]); + if (!input.isValid()) { + SkDebugf("Bad file: '%s'\n", argv[1]); + return 2; + } + sk_sp<SkPicture> pic = SkPicture::MakeFromStream(&input); + if (!pic) { + SkDebugf("Bad skp: '%s'\n", argv[1]); + return 3; + } + SkISize size = pic->cullRect().roundOut().size(); + SkDebugCanvas debugCanvas(size.width(), size.height()); + pic->playback(&debugCanvas); + sk_sp<SkCanvas> nullCanvas(SkCreateNullCanvas()); + UrlDataManager dataManager(SkString("data")); + Json::Value json = debugCanvas.toJSON( + dataManager, debugCanvas.getSize(), nullCanvas.get()); + if (argc > 2) { + if (UrlDataManager::UrlData* data = + dataManager.getDataFromUrl(SkString(argv[2]))) { + SkData* skdata = data->fData.get(); + SkASSERT(skdata); + #ifdef SK_BUILD_FOR_WIN + fflush(stdout); + (void)_setmode(_fileno(stdout), _O_BINARY); + #endif + fwrite(skdata->data(), skdata->size(), 1, stdout); + } else { + SkDebugf("Bad data url.\n"); + return 4; + } + } else { + Json::StyledStreamWriter(" ").write(std::cout, json); + } + return 0; +} |