MayaFlux 0.1.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
4namespace MayaFlux::Buffers {
5
6void BufferProcessor::process(std::shared_ptr<Buffer> buffer)
7{
8 if (!buffer->try_acquire_processing()) {
9 std::cerr << "Warning: Buffer already being processed, skipping processor" << std::endl;
10 return;
11 }
12
13 m_active_processing.fetch_add(1, std::memory_order_acquire);
14
15 try {
16 processing_function(buffer);
17 } catch (...) {
18 buffer->release_processing();
19 m_active_processing.fetch_sub(1, std::memory_order_release);
20 throw;
21 }
22
23 buffer->release_processing();
24 m_active_processing.fetch_sub(1, std::memory_order_release);
25}
26
27void BufferProcessor::process_non_owning(std::shared_ptr<Buffer> buffer)
28{
29 m_active_processing.fetch_add(1, std::memory_order_acquire);
30
31 try {
32 processing_function(buffer);
33 } catch (...) {
34 m_active_processing.fetch_sub(1, std::memory_order_release);
35 throw;
36 }
37
38 m_active_processing.fetch_sub(1, std::memory_order_release);
39}
40}
void process(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(std::shared_ptr< Buffer > buffer)=0
The core processing function that must be implemented by derived classes.
void process_non_owning(std::shared_ptr< Buffer > buffer)
Internal processing method for non-owning buffer contexts.