1/*
2 * Copyright 2012 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
8#include "LazyDecodeBitmap.h"
9#include "SkBitmap.h"
10#include "SkCanvas.h"
11#include "SkGraphics.h"
12#include "SkOSFile.h"
13#include "SkImageDecoder.h"
14#include "SkPicture.h"
15#include "SkStream.h"
16#include "SkString.h"
17#include "SkDumpCanvas.h"
18
19static SkPicture* inspect(const char path[]) {
20    SkFILEStream stream(path);
21    if (!stream.isValid()) {
22        printf("-- Can't open '%s'\n", path);
23        return NULL;
24    }
25
26    printf("Opening '%s'...\n", path);
27
28    {
29        int32_t header[3];
30        if (stream.read(header, sizeof(header)) != sizeof(header)) {
31            printf("-- Failed to read header (12 bytes)\n");
32            return NULL;
33        }
34        printf("version:%d width:%d height:%d\n", header[0], header[1], header[2]);
35    }
36
37    stream.rewind();
38    SkPicture* pic = SkPicture::CreateFromStream(&stream, &sk_tools::LazyDecodeBitmap);
39    if (NULL == pic) {
40        SkDebugf("Could not create SkPicture: %s\n", path);
41        return NULL;
42    }
43    printf("picture size:[%d %d]\n", pic->width(), pic->height());
44    return pic;
45}
46
47static void dumpOps(SkPicture* pic) {
48#ifdef SK_DEVELOPER
49    SkDebugfDumper dumper;
50    SkDumpCanvas canvas(&dumper);
51    canvas.drawPicture(pic);
52#else
53    printf("SK_DEVELOPER mode not enabled\n");
54#endif
55}
56
57int tool_main(int argc, char** argv);
58int tool_main(int argc, char** argv) {
59    SkAutoGraphics ag;
60    if (argc < 2) {
61        printf("Usage: pinspect [--dump-ops] filename [filename ...]\n");
62        return 1;
63    }
64
65    bool doDumpOps = false;
66
67    int index = 1;
68    if (!strcmp(argv[index], "--dump-ops")) {
69        index += 1;
70        doDumpOps = true;
71    }
72
73    for (; index < argc; ++index) {
74        SkAutoTUnref<SkPicture> pic(inspect(argv[index]));
75        if (doDumpOps) {
76            dumpOps(pic);
77        }
78        if (index < argc - 1) {
79            printf("\n");
80        }
81    }
82    return 0;
83}
84
85#if !defined SK_BUILD_FOR_IOS
86int main(int argc, char * const argv[]) {
87    return tool_main(argc, (char**) argv);
88}
89#endif
90