3#include <Media/Libav.hpp>
6#include <libavutil/frame.h>
9#include <ossia/dataflow/float_to_sample.hpp>
20 : target_buffer_size{target_buffer_size}
26 virtual void add_frame(AVFrame& frame,
const std::span<ossia::float_vector> vec) = 0;
28 int target_buffer_size{};
35 const AVFrame& frame,
const std::span<ossia::float_vector>& vec)
noexcept
37 if(frame.nb_samples <= 0)
39 return std::min(
int(vec[0].size()), frame.nb_samples);
45 using AudioFrameEncoder::AudioFrameEncoder;
47 void add_frame(AVFrame& frame,
const std::span<ossia::float_vector> vec)
override
49 const int channels = vec.size();
50 const int frames = writable(frame, vec);
51 auto* ptr =
reinterpret_cast<int16_t*
>(frame.data[0]);
52 for(
int i = 0; i < frames; i++)
53 for(
int c = 0; c < channels; c++)
54 *ptr++ = ossia::float_to_sample<int16_t, 16>(vec[c][i]);
60 using AudioFrameEncoder::AudioFrameEncoder;
62 void add_frame(AVFrame& frame,
const std::span<ossia::float_vector> vec)
override
64 const int channels = vec.size();
65 const int frames = writable(frame, vec);
66 auto* ptr =
reinterpret_cast<int32_t*
>(frame.data[0]);
67 for(
int i = 0; i < frames; i++)
68 for(
int c = 0; c < channels; c++)
69 *ptr++ = ossia::float_to_sample<int32_t, 24>(vec[c][i]);
75 using AudioFrameEncoder::AudioFrameEncoder;
77 void add_frame(AVFrame& frame,
const std::span<ossia::float_vector> vec)
override
79 const int channels = vec.size();
80 const int frames = writable(frame, vec);
81 auto* ptr =
reinterpret_cast<int32_t*
>(frame.data[0]);
82 for(
int i = 0; i < frames; i++)
83 for(
int c = 0; c < channels; c++)
84 *ptr++ = ossia::float_to_sample<int32_t, 32>(vec[c][i]);
90 using AudioFrameEncoder::AudioFrameEncoder;
92 void add_frame(AVFrame& frame,
const std::span<ossia::float_vector> vec)
override
94 const int channels = vec.size();
95 const int frames = writable(frame, vec);
96 auto* ptr =
reinterpret_cast<float*
>(frame.data[0]);
97 for(
int i = 0; i < frames; i++)
98 for(
int c = 0; c < channels; c++)
105 using AudioFrameEncoder::AudioFrameEncoder;
107 void add_frame(AVFrame& frame,
const std::span<ossia::float_vector> vec)
override
109 const int channels = vec.size();
110 const int frames = writable(frame, vec);
111 auto* ptr =
reinterpret_cast<double*
>(frame.data[0]);
112 for(
int i = 0; i < frames; i++)
113 for(
int c = 0; c < channels; c++)
120 using AudioFrameEncoder::AudioFrameEncoder;
122 void add_frame(AVFrame& frame,
const std::span<ossia::float_vector> vec)
override
124 const int channels = vec.size();
125 const int frames = writable(frame, vec);
127 for(
int i = 0; i < channels; ++i)
129 uint8_t* dst = (i < AV_NUM_DATA_POINTERS) ? frame.data[i]
130 : frame.extended_data[i];
132 std::memcpy(dst, vec[i].data(), std::size_t(frames) *
sizeof(
float));
139 using AudioFrameEncoder::AudioFrameEncoder;
141 void add_frame(AVFrame& frame,
const std::span<ossia::float_vector> vec)
override
143 const int channels = vec.size();
144 const int frames = writable(frame, vec);
145 for(
int i = 0; i < channels; ++i)
147 auto* dst =
reinterpret_cast<int16_t*
>(
148 (i < AV_NUM_DATA_POINTERS) ? frame.data[i] : frame.extended_data[i]);
150 for(
int j = 0; j < frames; ++j)
151 dst[j] = ossia::float_to_sample<int16_t, 16>(vec[i][j]);
158 using AudioFrameEncoder::AudioFrameEncoder;
160 void add_frame(AVFrame& frame,
const std::span<ossia::float_vector> vec)
override
162 const int channels = vec.size();
163 const int frames = writable(frame, vec);
164 for(
int i = 0; i < channels; ++i)
166 auto* dst =
reinterpret_cast<int32_t*
>(
167 (i < AV_NUM_DATA_POINTERS) ? frame.data[i] : frame.extended_data[i]);
169 for(
int j = 0; j < frames; ++j)
170 dst[j] = ossia::float_to_sample<int32_t, 32>(vec[i][j]);
177 using AudioFrameEncoder::AudioFrameEncoder;
179 void add_frame(AVFrame& frame,
const std::span<ossia::float_vector> vec)
override
181 const int channels = vec.size();
182 const int frames = writable(frame, vec);
183 for(
int i = 0; i < channels; ++i)
185 auto* dst =
reinterpret_cast<double*
>(
186 (i < AV_NUM_DATA_POINTERS) ? frame.data[i] : frame.extended_data[i]);
188 for(
int j = 0; j < frames; ++j)
189 dst[j] =
static_cast<double>(vec[i][j]);
Binds the rendering pipeline to ossia processes.
Definition AssetTable.cpp:7
Definition AudioFrameEncoder.hpp:18
Definition AudioFrameEncoder.hpp:104
Definition AudioFrameEncoder.hpp:176
Definition AudioFrameEncoder.hpp:89
Definition AudioFrameEncoder.hpp:119
Definition AudioFrameEncoder.hpp:44
Definition AudioFrameEncoder.hpp:138
Definition AudioFrameEncoder.hpp:59
Definition AudioFrameEncoder.hpp:74
Definition AudioFrameEncoder.hpp:157