Files
AronaCore/core/audio/mixer/channel_node.h
Nanako e65c44899a 1. 优化内存池
2. 延迟补偿功能完成
3. 优化内存布局
2024-07-12 07:55:12 +08:00

63 lines
1.6 KiB
C++

#pragma once
#include <cstdint>
#include <string>
#include <vector>
#include "extern.h"
class mixer_track;
class channel_interface;
enum class channel_node_type {
unknown,
mixer,
null,
};
class channel_node {
public:
virtual ~channel_node() = default;
channel_node(channel_interface* in_owner, channel_node_type in_type) : owner(in_owner)
, type(in_type) {}
virtual const std::vector<sample_t*>& get_channel_headers() = 0;
virtual std::string get_name() = 0;
channel_interface* owner;
channel_node_type type;
};
class mixer_channel_node : public channel_node {
public:
mixer_channel_node(channel_interface* in_owner, mixer_track* in_track, uint32_t in_node_index);
const std::vector<sample_t*>& get_channel_headers() override { return channel_headers_; }
std::string get_name() override { return "MixerChannelNode"; }
[[nodiscard]] mixer_track* get_track() const { return track_; }
private:
mixer_track* track_;
std::vector<sample_t*> channel_headers_;
uint32_t node_index_;
};
class null_channel_node : public channel_node {
static null_channel_node* instance;
public:
null_channel_node() : channel_node(nullptr, channel_node_type::null) {}
static void init() { instance = new null_channel_node(); }
static void destroy() {
delete instance;
instance = nullptr;
}
static null_channel_node* get() { return instance; }
std::string get_name() override { return "NullChannelNode"; }
const std::vector<sample_t*>& get_channel_headers() override;
};