blob: 908bf2cd4fc71d39d387055bb08766a060a2f066 [file] [log] [blame]
scroggo6f5e6192015-06-18 12:53:43 -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#ifndef SkWebpCodec_DEFINED
9#define SkWebpCodec_DEFINED
10
11#include "SkCodec.h"
msarettad8bcfe2016-03-07 07:09:03 -080012#include "SkColorSpace.h"
scroggo6f5e6192015-06-18 12:53:43 -070013#include "SkEncodedFormat.h"
14#include "SkImageInfo.h"
15#include "SkTypes.h"
16
17class SkStream;
18
scroggodb30be22015-12-08 18:54:13 -080019static const size_t WEBP_VP8_HEADER_SIZE = 30;
20
scroggo6f5e6192015-06-18 12:53:43 -070021class SkWebpCodec final : public SkCodec {
22public:
23 // Assumes IsWebp was called and returned true.
24 static SkCodec* NewFromStream(SkStream*);
scroggodb30be22015-12-08 18:54:13 -080025 static bool IsWebp(const void*, size_t);
scroggo6f5e6192015-06-18 12:53:43 -070026protected:
msarette6dd0042015-10-09 11:07:34 -070027 Result onGetPixels(const SkImageInfo&, void*, size_t, const Options&, SkPMColor*, int*, int*)
scroggo6f5e6192015-06-18 12:53:43 -070028 override;
29 SkEncodedFormat onGetEncodedFormat() const override { return kWEBP_SkEncodedFormat; }
30
scroggo6f5e6192015-06-18 12:53:43 -070031 SkISize onGetScaledDimensions(float desiredScale) const override;
scroggob636b452015-07-22 07:16:20 -070032
scroggoe7fc14b2015-10-02 13:14:46 -070033 bool onDimensionsSupported(const SkISize&) override;
34
scroggob636b452015-07-22 07:16:20 -070035 bool onGetValidSubset(SkIRect* /* desiredSubset */) const override;
scroggo6f5e6192015-06-18 12:53:43 -070036private:
msarettc30c4182016-04-20 11:53:35 -070037 SkWebpCodec(int width, int height, const SkEncodedInfo&, SkStream*);
scroggo6f5e6192015-06-18 12:53:43 -070038
39 typedef SkCodec INHERITED;
40};
41#endif // SkWebpCodec_DEFINED