libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
bufferallocator.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_CORE
13#include <cstddef>
14#include <promeki/namespace.h>
15#include <promeki/sharedptr.h>
16#include <promeki/string.h>
17#include <promeki/buffer.h>
18
19PROMEKI_NAMESPACE_BEGIN
20
21#if PROMEKI_ENABLE_PROAV
22class ImageDesc;
23class AudioDesc;
24#endif
25
76class BufferAllocator {
77 public:
78 PROMEKI_SHARED_BASE(BufferAllocator)
79
80
81 using Ptr = SharedPtr<BufferAllocator, /*CopyOnWrite=*/false>;
82
83 BufferAllocator() = default;
84 virtual ~BufferAllocator() = default;
85
86 BufferAllocator(const BufferAllocator &) = delete;
87 BufferAllocator &operator=(const BufferAllocator &) = delete;
88
96 virtual String name() const = 0;
97
118#if PROMEKI_ENABLE_PROAV
119 virtual Buffer allocateVideoPlane(const ImageDesc &desc, int planeIndex) const = 0;
120
132 virtual Buffer allocateAudioChunk(const AudioDesc &desc, size_t samples) const = 0;
133#endif // PROMEKI_ENABLE_PROAV
134
144 virtual Buffer allocateBytes(size_t bytes, size_t align = 0) const = 0;
145
156 static Ptr defaultAllocator();
157};
158
172class DefaultBufferAllocator : public BufferAllocator {
173 public:
174 PROMEKI_SHARED_DERIVED(DefaultBufferAllocator)
175
176 DefaultBufferAllocator() = default;
177 ~DefaultBufferAllocator() override = default;
178
179 String name() const override;
180#if PROMEKI_ENABLE_PROAV
181 Buffer allocateVideoPlane(const ImageDesc &desc, int planeIndex) const override;
182 Buffer allocateAudioChunk(const AudioDesc &desc, size_t samples) const override;
183#endif
184 Buffer allocateBytes(size_t bytes, size_t align = 0) const override;
185};
186
187PROMEKI_NAMESPACE_END
188
189#endif // PROMEKI_ENABLE_CORE