MayaFlux 0.1.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ can_transfer()

bool MayaFlux::Buffers::BufferTokenDistributor::can_transfer ( const std::shared_ptr< Buffer > &  source,
ProcessingToken  src_token,
const std::shared_ptr< Buffer > &  target,
ProcessingToken  tgt_token 
)
staticprivate

Definition at line 192 of file BufferTokenDistributor.cpp.

197{
198 if (source == target && src_token == tgt_token) {
199 return false;
200 }
201
202 auto audio_src = std::dynamic_pointer_cast<AudioBuffer>(source);
203 auto audio_tgt = std::dynamic_pointer_cast<AudioBuffer>(target);
204 auto vk_src = std::dynamic_pointer_cast<VKBuffer>(source);
205 auto vk_tgt = std::dynamic_pointer_cast<VKBuffer>(target);
206
207 // Audio (SAMPLE_RATE, CPU) → VK (SAMPLE_RATE or FRAME_RATE, GPU)
208 if (audio_src && vk_tgt) {
209 if (has_sample_rate(src_token) && has_cpu(src_token)) {
210 if (has_gpu(tgt_token)) {
211 return true;
212 }
213 }
214 }
215
216 // VK (any rate, GPU) → Audio (SAMPLE_RATE, CPU)
217 if (vk_src && audio_tgt) {
218 if (has_gpu(src_token)) {
219 if (has_sample_rate(tgt_token) && has_cpu(tgt_token)) {
220 return true;
221 }
222 }
223 }
224
225 // Audio (SAMPLE_RATE, GPU) → Audio (SAMPLE_RATE, CPU)
226 if (audio_src && audio_tgt) {
227 if (has_sample_rate(src_token) && has_gpu(src_token)) {
228 if (has_sample_rate(tgt_token) && has_cpu(tgt_token)) {
229 return true;
230 }
231 }
232 }
233
234 // VK → VK (GPU to GPU, rate-dependent)
235 if (vk_src && vk_tgt) {
236 if (has_gpu(src_token) && has_gpu(tgt_token)) {
237 return true;
238 }
239 }
240
241 return false;
242}
static bool has_gpu(ProcessingToken token)
static bool has_cpu(ProcessingToken token)
static bool has_sample_rate(ProcessingToken token)

References has_cpu(), has_gpu(), and has_sample_rate().

Referenced by decide_transfer().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: