Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(221)

Side by Side Diff: include/codec/SkCodec.h

Issue 930283002: Add SkCodec, including PNG implementation. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Check in prebuilt file directly Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « gyp/skia_lib.gyp ('k') | src/codec/SkCodec.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
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 #ifndef SkCodec_DEFINED
9 #define SkCodec_DEFINED
10
11 #include "SkImageGenerator.h"
12 #include "SkImageInfo.h"
13 #include "SkSize.h"
14 #include "SkTemplates.h"
15 #include "SkTypes.h"
16
17 class SkData;
18 class SkStream;
19
20 /**
21 * Abstraction layer directly on top of an image codec.
22 */
23 class SkCodec : public SkImageGenerator {
24 public:
25 /**
26 * If this stream represents an encoded image that we know how to decode,
27 * return an SkCodec that can decode it. Otherwise return NULL.
28 *
29 * If NULL is returned, the stream is deleted immediately. Otherwise, the
30 * SkCodec takes ownership of it, and will delete it when done with it.
31 */
32 static SkCodec* NewFromStream(SkStream*);
33
34 /**
35 * If this data represents an encoded image that we know how to decode,
36 * return an SkCodec that can decode it. Otherwise return NULL.
37 *
38 * Will take a ref if it returns a codec, else will not affect the data.
39 */
40 static SkCodec* NewFromData(SkData*);
41
42 /**
43 * Return a size that approximately supports the desired scale factor.
44 * The codec may not be able to scale efficiently to the exact scale
45 * factor requested, so return a size that approximates that scale.
46 *
47 * FIXME: Move to SkImageGenerator?
48 */
49 SkISize getScaledDimensions(float desiredScale) const;
50
51 protected:
52 SkCodec(const SkImageInfo&, SkStream*);
53
54 /**
55 * The SkAlphaType is a conservative answer. i.e. it is possible that it
56 * initially returns a non-opaque answer, but completing the decode
57 * reveals that the image is actually opaque.
58 */
59 bool onGetInfo(SkImageInfo* info) SK_OVERRIDE {
60 *info = fInfo;
61 return true;
62 }
63
64 // Helper for subclasses.
65 const SkImageInfo& getOriginalInfo() { return fInfo; }
66
67 virtual SkISize onGetScaledDimensions(float /* desiredScale */) const {
68 // By default, scaling is not supported.
69 return fInfo.dimensions();
70 }
71
72 /**
73 * If the stream was previously read, attempt to rewind.
74 * @returns:
75 * true
76 * - if the stream needed to be rewound, and the rewind
77 * succeeded.
78 * - if the stream did not need to be rewound.
79 * false
80 * - if the stream needed to be rewound, and rewind failed.
81 * Subclasses MUST call this function before reading the stream (e.g. in
82 * onGetPixels). If it returns false, onGetPixels should return
83 * kCouldNotRewind.
84 */
85 bool SK_WARN_UNUSED_RESULT rewindIfNeeded();
86
87 private:
88 const SkImageInfo fInfo;
89 SkAutoTDelete<SkStream> fStream;
90 bool fNeedsRewind;
91 };
92 #endif // SkCodec_DEFINED
OLDNEW
« no previous file with comments | « gyp/skia_lib.gyp ('k') | src/codec/SkCodec.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698