xref: /aosp_15_r20/external/skia/include/codec/SkAvifDecoder.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2023 Google LLC
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 #ifndef SkAvifDecoder_DEFINED
8 #define SkAvifDecoder_DEFINED
9 
10 #include "include/codec/SkCodec.h"
11 #include "include/core/SkRefCnt.h"
12 #include "include/private/base/SkAPI.h"
13 
14 class SkData;
15 class SkStream;
16 
17 #include <memory>
18 
19 namespace SkAvifDecoder {
20 
21 namespace LibAvif {
22 
23 /** Returns true if this data claims to be an AVIF image. */
24 SK_API bool IsAvif(const void*, size_t);
25 
26 /**
27  *  Attempts to decode the given bytes as an AVIF.
28  *
29  *  If the bytes are not an AVIF, returns nullptr.
30  *
31  *  DecodeContext is ignored
32  */
33 SK_API std::unique_ptr<SkCodec> Decode(std::unique_ptr<SkStream>,
34                                        SkCodec::Result*,
35                                        SkCodecs::DecodeContext = nullptr);
36 SK_API std::unique_ptr<SkCodec> Decode(sk_sp<SkData>,
37                                        SkCodec::Result*,
38                                        SkCodecs::DecodeContext = nullptr);
39 
Decoder()40 inline constexpr SkCodecs::Decoder Decoder() {
41     return { "avif", IsAvif, Decode };
42 }
43 
44 }  // namespace LibAvif
45 
46 // This function is in the root SkAvifDecoder namespace. It simply routes
47 // everything through the LibAvif namespace and exists for backwards
48 // compatibility.
Decoder()49 inline constexpr SkCodecs::Decoder Decoder() {
50     return { "avif", LibAvif::IsAvif, LibAvif::Decode };
51 }
52 
53 namespace CrabbyAvif {
54 
55 /** Returns true if this data claims to be an AVIF image. */
56 SK_API bool IsAvif(const void*, size_t);
57 
58 /**
59  *  Attempts to decode the given bytes as an AVIF.
60  *
61  *  If the bytes are not an AVIF, returns nullptr.
62  *
63  *  DecodeContext is ignored
64  */
65 SK_API std::unique_ptr<SkCodec> Decode(std::unique_ptr<SkStream>,
66                                        SkCodec::Result*,
67                                        SkCodecs::DecodeContext = nullptr);
68 SK_API std::unique_ptr<SkCodec> Decode(sk_sp<SkData>,
69                                        SkCodec::Result*,
70                                        SkCodecs::DecodeContext = nullptr);
71 
Decoder()72 inline constexpr SkCodecs::Decoder Decoder() {
73     return { "avif", IsAvif, Decode };
74 }
75 
76 }  // namespace CrabbyAvif
77 
78 }  // namespace SkAvifDecoder
79 
80 #endif  // SkAvifDecoder_DEFINED
81