Zao SDK for Jetson / libzao-endpoint API リファレンス 1.1.0.0 (2023-08-17)
Loading...
Searching...
No Matches
PcmBufferWriter.hpp
1#ifndef ZAO_ENDPOINT_AUDIO_PCM_BUFFER_WRITER_HPP_
2#define ZAO_ENDPOINT_AUDIO_PCM_BUFFER_WRITER_HPP_
3
4#include <cstddef>
5#include <cstdint>
6#include <memory>
7
8#include "../TimestampInterface.hpp"
9
10namespace zao {
11namespace endpoint {
12namespace audio {
13
14class PcmBufferPoolInterface;
15
21class PcmBufferWriter final {
22 public:
27 PcmBufferWriter() noexcept {}
28
36 PcmBufferWriter(const std::weak_ptr<PcmBufferPoolInterface>& pool_weak,
37 std::int16_t* pointer, std::size_t writable_samples) noexcept
38 : pool_weak_(pool_weak),
39 pointer_(pointer),
40 writable_samples_(writable_samples) {}
41
47 PcmBufferWriter(PcmBufferWriter&& other) noexcept {
48 *this = std::move(other);
49 }
50
57 Cancel();
58 std::swap(pool_weak_, other.pool_weak_);
59 std::swap(pointer_, other.pointer_);
60 std::swap(writable_samples_, other.writable_samples_);
61 return *this;
62 }
63
64 // コピー構築禁止
65 PcmBufferWriter(const PcmBufferWriter&) = delete;
66
67 // コピー代入禁止
69
73 ~PcmBufferWriter() noexcept { Cancel(); }
74
81 bool IsValid() const noexcept { return !!pointer_; }
82
90 explicit operator bool() const noexcept { return IsValid(); }
91
97 std::int16_t* GetPointer() const noexcept { return pointer_; }
98
105 std::size_t GetWritableSamples() const noexcept { return writable_samples_; }
106
121 inline void Finalize(std::size_t written_samples,
122 TimestampInterface::Rep head_timestamp) noexcept;
123
130 void Cancel() noexcept { Finalize(0, 0); }
131
132 private:
133 std::weak_ptr<PcmBufferPoolInterface> pool_weak_;
134 std::int16_t* pointer_ = nullptr;
135 std::size_t writable_samples_ = 0;
136};
137
138} // namespace audio
139} // namespace endpoint
140} // namespace zao
141
142#include "PcmBufferPoolInterface.hpp"
143
145 std::size_t written_samples,
146 TimestampInterface::Rep head_timestamp) noexcept {
147 if (!pointer_) {
148 return;
149 }
150 if (auto pool = pool_weak_.lock()) {
151 pool->FinalizeWriter(*this, written_samples, head_timestamp);
152 }
153 pool_weak_.reset();
154 pointer_ = nullptr;
155 writable_samples_ = 0;
156}
157
158#endif // ZAO_ENDPOINT_AUDIO_PCM_BUFFER_WRITER_HPP_
std::uint64_t Rep
タイムスタンプの表現に用いる整数型
Definition TimestampInterface.hpp:17
PCMバッファのWriter実装
Definition PcmBufferWriter.hpp:21
void Finalize(std::size_t written_samples, TimestampInterface::Rep head_timestamp) noexcept
バッファへのデータ書き込み完了を通知する。
Definition PcmBufferWriter.hpp:144
void Cancel() noexcept
バッファへのデータ書き込みキャンセルを通知する。
Definition PcmBufferWriter.hpp:130
PcmBufferWriter(PcmBufferWriter &&other) noexcept
PcmBufferWriterオブジェクトをムーブ構築する。
Definition PcmBufferWriter.hpp:47
std::size_t GetWritableSamples() const noexcept
書き込める最大サンプル数を取得する。
Definition PcmBufferWriter.hpp:105
bool IsValid() const noexcept
有効なバッファを保持しているか否かを取得する。
Definition PcmBufferWriter.hpp:81
PcmBufferWriter(const std::weak_ptr< PcmBufferPoolInterface > &pool_weak, std::int16_t *pointer, std::size_t writable_samples) noexcept
PcmBufferWriterオブジェクトを構築する。
Definition PcmBufferWriter.hpp:36
PcmBufferWriter & operator=(PcmBufferWriter &&other) noexcept
PcmBufferWriterオブジェクトをムーブ代入する。
Definition PcmBufferWriter.hpp:56
std::int16_t * GetPointer() const noexcept
管理対象バッファの先頭ポインタを取得する
Definition PcmBufferWriter.hpp:97
~PcmBufferWriter() noexcept
PcmBufferWriterオブジェクトを破棄する。
Definition PcmBufferWriter.hpp:73
PcmBufferWriter() noexcept
PcmBufferWriterオブジェクトを管理対象無しでデフォルト構築する。
Definition PcmBufferWriter.hpp:27
Zao製品共通の名前空間
Definition FactoryInterface.hpp:11