blob: 8ba20929fb0f6c79591287991280eab339c5d804 [file] [log] [blame]
mtklein60c04752015-07-08 10:06:01 -07001/*
2 * Copyright 2015 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 "SkData.h"
9#include "SkForceLinking.h"
10#include "SkImageGenerator.h"
11#include "SkPicture.h"
12#include "SkPictureRecorder.h"
13#include "SkStream.h"
bungeman60e0fee2015-08-26 05:15:46 -070014
15#include <stdlib.h>
mtklein60c04752015-07-08 10:06:01 -070016#include <stdio.h>
17
18__SK_FORCE_IMAGE_DECODER_LINKING;
19
20#define ASSERTF(cond, fmt, ...) if (!(cond)) { fprintf(stderr, fmt"\n", __VA_ARGS__); exit(1); }
21
22static bool lazy_decode_bitmap(const void* src, size_t size, SkBitmap* dst) {
23 SkAutoTUnref<SkData> encoded(SkData::NewWithCopy(src, size));
reedd1146452015-09-25 06:56:57 -070024 return encoded && SkDEPRECATED_InstallDiscardablePixelRef(encoded, dst);
mtklein60c04752015-07-08 10:06:01 -070025}
26
27int main(int argc, char** argv) {
28 ASSERTF(argc == 3, "usage: %s nested.skp flat.skp", argv[0]);
29 const char *nestedPath = argv[1],
30 *flatPath = argv[2];
31
32 // Read nested.skp.
33 SkFILEStream stream(nestedPath);
34 ASSERTF(stream.isValid(), "Couldn't read %s.", nestedPath);
35 SkAutoTUnref<const SkPicture> nested(SkPicture::CreateFromStream(&stream, &lazy_decode_bitmap));
36 ASSERTF(nested, "Couldn't parse %s as a picture.", nestedPath);
37
38 // Play it back into a new picture using kPlaybackDrawPicture_RecordFlag.
39 SkPictureRecorder recorder;
40 uint32_t flags = SkPictureRecorder::kPlaybackDrawPicture_RecordFlag;
41 nested->playback(recorder.beginRecording(nested->cullRect(), nullptr, flags));
42 SkAutoTUnref<const SkPicture> flat(recorder.endRecordingAsPicture());
43
44 // Write out that flat.skp
45 SkFILEWStream wstream(flatPath);
46 ASSERTF(wstream.isValid(), "Could not open %s.", flatPath);
47 flat->serialize(&wstream);
48 wstream.flush();
49
50 return 0;
51}