libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
audiopayload.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>
16#include <promeki/audiodesc.h>
17#include <promeki/duration.h>
18#include <promeki/list.h>
19
20PROMEKI_NAMESPACE_BEGIN
21
63class AudioPayload : public MediaPayload {
64 PROMEKI_SHARED_ABSTRACT(AudioPayload)
65 public:
67 using Ptr = SharedPtr<AudioPayload, /*CopyOnWrite=*/true, AudioPayload>;
68
70 using PtrList = ::promeki::List<Ptr>;
71
73 AudioPayload() = default;
74
79 explicit AudioPayload(const AudioDesc &desc, size_t sampleCount = 0)
80 : _desc(desc), _sampleCount(sampleCount) {}
81
86 AudioPayload(const AudioDesc &desc, size_t sampleCount, const BufferView &data)
87 : MediaPayload(data), _desc(desc), _sampleCount(sampleCount) {}
88
90 const MediaPayloadKind &kind() const override { return MediaPayloadKind::Audio; }
91
93 const AudioDesc &desc() const { return _desc; }
94
96 AudioDesc &desc() { return _desc; }
97
99 void setDesc(const AudioDesc &d) { _desc = d; }
100
117 size_t sampleCount() const { return _sampleCount; }
118
120 void setSampleCount(size_t n) { _sampleCount = n; }
121
127 Duration duration() const override {
128 return Duration::fromSamples(static_cast<int64_t>(_sampleCount), _desc.sampleRate());
129 }
130
144 bool hasDuration() const override { return true; }
145
150 const Metadata &metadata() const override { return _desc.metadata(); }
151
153 Metadata &metadata() override { return _desc.metadata(); }
154
155 AudioPayload(const AudioPayload &) = default;
156 AudioPayload(AudioPayload &&) = default;
157 AudioPayload &operator=(const AudioPayload &) = default;
158 AudioPayload &operator=(AudioPayload &&) = default;
159
160 private:
161 AudioDesc _desc;
162 size_t _sampleCount = 0;
163};
164
165PROMEKI_NAMESPACE_END
166
167#endif // PROMEKI_ENABLE_CORE