MayaFlux 0.2.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
BufferProcessor.cpp
Go to the documentation of this file.
1#include "BufferProcessor.hpp"
2#include "Buffer.hpp"
3
5
6namespace MayaFlux::Buffers {
7
8void BufferProcessor::process(const std::shared_ptr<Buffer>& buffer)
9{
10 if (!buffer->try_acquire_processing()) {
12 "Buffer is already being processed, skipping processor");
13 return;
14 }
15
16 m_active_processing.fetch_add(1, std::memory_order_acquire);
17
18 try {
19 processing_function(buffer);
20 } catch (...) {
21 buffer->release_processing();
22 m_active_processing.fetch_sub(1, std::memory_order_release);
23 throw;
24 }
25
26 buffer->release_processing();
27 m_active_processing.fetch_sub(1, std::memory_order_release);
28}
29
30void BufferProcessor::process_non_owning(const std::shared_ptr<Buffer>& buffer)
31{
32 m_active_processing.fetch_add(1, std::memory_order_acquire);
33
34 try {
35 processing_function(buffer);
36 } catch (...) {
37 m_active_processing.fetch_sub(1, std::memory_order_release);
38 throw;
39 }
40
41 m_active_processing.fetch_sub(1, std::memory_order_release);
42}
43}
#define MF_RT_ERROR(comp, ctx,...)
void process_non_owning(const std::shared_ptr< Buffer > &buffer)
Internal processing method for non-owning buffer contexts.
void process(const std::shared_ptr< Buffer > &buffer)
Applies a computational transformation to the data in the provided buffer.
std::atomic< size_t > m_active_processing
virtual void processing_function(const std::shared_ptr< Buffer > &buffer)=0
The core processing function that must be implemented by derived classes.
@ BufferProcessing
Buffer processing (Buffers::BufferManager, processing chains)
@ Buffers
Buffers, Managers, processors and processing chains.