xref: /aosp_15_r20/external/skia/include/core/SkMallocPixelRef.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2008 The Android Open Source Project
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 SkMallocPixelRef_DEFINED
9 #define SkMallocPixelRef_DEFINED
10 
11 #include "include/core/SkRefCnt.h"
12 #include "include/core/SkTypes.h"
13 
14 #include <cstddef>
15 
16 class SkData;
17 class SkPixelRef;
18 struct SkImageInfo;
19 
20 /** We explicitly use the same allocator for our pixels that SkMask does,
21     so that we can freely assign memory allocated by one class to the other.
22 */
23 namespace SkMallocPixelRef {
24     /**
25      *  Return a new SkMallocPixelRef, automatically allocating storage for the
26      *  pixels. If rowBytes are 0, an optimal value will be chosen automatically.
27      *  If rowBytes is > 0, then it will be respected, or NULL will be returned
28      *  if rowBytes is invalid for the specified info.
29      *
30      *  All pixel bytes are zeroed.
31      *
32      *  Returns NULL on failure.
33      */
34     SK_API sk_sp<SkPixelRef> MakeAllocate(const SkImageInfo&, size_t rowBytes);
35 
36     /**
37      *  Return a new SkMallocPixelRef that will use the provided SkData and
38      *  rowBytes as pixel storage.  The SkData will be ref()ed and on
39      *  destruction of the PixelRef, the SkData will be unref()ed.
40      *
41      *  Returns NULL on failure.
42      */
43     SK_API sk_sp<SkPixelRef> MakeWithData(const SkImageInfo&, size_t rowBytes, sk_sp<SkData> data);
44 }  // namespace SkMallocPixelRef
45 #endif
46