63 lines
1.6 KiB
C++
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;
|
|
};
|