blob: 9db5039d59616bb87fd59d0c5462dbfa3900756a [file] [log] [blame]
Matt Sarett9b848d52017-05-02 11:32:42 -04001/*
2 * Copyright 2017 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 "Resources.h"
9#include "Test.h"
10
11#include "SkBitmap.h"
12#include "SkJpegEncoder.h"
13#include "SkStream.h"
14
15DEF_TEST(Encode_Jpeg, r) {
16 SkBitmap bitmap;
17 bool success = GetResourceAsBitmap("mandrill_128.png", &bitmap);
18 if (!success) {
19 return;
20 }
21
22 SkPixmap src;
23 success = bitmap.peekPixels(&src);
24 REPORTER_ASSERT(r, success);
25 if (!success) {
26 return;
27 }
28
29 SkDynamicMemoryWStream dst0, dst1, dst2, dst3;
30 success = SkJpegEncoder::Encode(&dst0, src, SkJpegEncoder::Options());
31 REPORTER_ASSERT(r, success);
32
33 auto encoder1 = SkJpegEncoder::Make(&dst1, src, SkJpegEncoder::Options());
34 for (int i = 0; i < src.height(); i++) {
35 success = encoder1->encodeRows(1);
36 REPORTER_ASSERT(r, success);
37 }
38
39 auto encoder2 = SkJpegEncoder::Make(&dst2, src, SkJpegEncoder::Options());
40 for (int i = 0; i < src.height(); i+=3) {
41 success = encoder2->encodeRows(3);
42 REPORTER_ASSERT(r, success);
43 }
44
45 auto encoder3 = SkJpegEncoder::Make(&dst3, src, SkJpegEncoder::Options());
46 success = encoder3->encodeRows(200);
47 REPORTER_ASSERT(r, success);
48
49 sk_sp<SkData> data0 = dst0.detachAsData();
50 sk_sp<SkData> data1 = dst1.detachAsData();
51 sk_sp<SkData> data2 = dst2.detachAsData();
52 sk_sp<SkData> data3 = dst3.detachAsData();
53 REPORTER_ASSERT(r, data0->equals(data1.get()));
54 REPORTER_ASSERT(r, data0->equals(data2.get()));
55 REPORTER_ASSERT(r, data0->equals(data3.get()));
56}