ADTF File Library
Loading...
Searching...
No Matches
demultiplexer.h
Go to the documentation of this file.
1
16
17#pragma once
18
19#include <string>
20#include <functional>
21#include <map>
22
23#include <adtf_file/reader.h>
24#include "processor.h"
25
27
33namespace adtfdat_processing
34{
35
41{
42public:
49 Demultiplexer(std::shared_ptr<adtf_file::Reader> reader, const ProcessorFactories& processor_factories);
50
58 void setTimeRange(const std::optional<std::chrono::nanoseconds>& time_start,
59 const std::optional<std::chrono::nanoseconds>& time_end);
60
68 void addProcessor(const std::string& stream_name,
69 const std::string& processor_id,
70 const std::string& destination_url,
71 const adtf_file::Configuration& configuration);
72
81 void addProcessor(const std::string& stream_name,
82 const std::string& substream_name,
83 const std::string& processor_id,
84 const std::string& destination_url,
85 const adtf_file::Configuration& configuration);
86
93 void process(const std::function<bool(double)>& progress_handler = {});
94
95private:
96 std::shared_ptr<adtf_file::Reader> _reader;
97 ProcessorFactories _processor_factories;
98 std::optional<std::chrono::nanoseconds> _time_start;
99 std::optional<std::chrono::nanoseconds> _time_end;
100
101 using SubstreamsInType = std::unordered_map<std::string, adtf_file::adtf3::SubstreamProperties>;
102
103 struct SubstreamProcessor
104 {
105 std::string processor_id;
106 adtf_file::Configuration processor_configuration;
107 std::string destination_url;
108 std::shared_ptr<Processor> processor;
109
110 void open_or_change(const ProcessorFactories& processor_factories, const std::string& stream_name, const adtf_file::FileItem& item);
111 private:
112 void open(const ProcessorFactories& processor_factories, const adtf_file::Stream& stream);
113 };
114
115 std::unordered_map<uint16_t, std::unordered_map<std::string, SubstreamProcessor>> _processors;
116
117 struct InputStream
118 {
119 std::string name;
120 bool use_substream_id;
121 std::shared_ptr<const adtf_file::StreamType> initial_type;
122 std::unordered_map<uint32_t, std::shared_ptr<Processor>> processors;
123 };
124 std::unordered_map<uint16_t, InputStream> _input_streams;
125
126 void remapProcessors(InputStream& input_stream, const adtf_file::FileItem& item);
127};
128}
class to create or read a file item. This file item is either a sample, streamtype or trigger.
Definition reader.h:172
class to create and describe a stream within a adtf_file::Reader. Each stream has an identifier strea...
Definition reader.h:150
void process(const std::function< bool(double)> &progress_handler={})
void addProcessor(const std::string &stream_name, const std::string &substream_name, const std::string &processor_id, const std::string &destination_url, const adtf_file::Configuration &configuration)
void setTimeRange(const std::optional< std::chrono::nanoseconds > &time_start, const std::optional< std::chrono::nanoseconds > &time_end)
Demultiplexer(std::shared_ptr< adtf_file::Reader > reader, const ProcessorFactories &processor_factories)
void addProcessor(const std::string &stream_name, const std::string &processor_id, const std::string &destination_url, const adtf_file::Configuration &configuration)
Definition processor.h:128
std::unordered_map< std::string, PropertyValue > Configuration
Configuration class as set of key - property value pairs This configuration is used to adjust the rea...
Definition configuration.h:132
namespace for ADTF DAT Processing library.
Definition ddl_helpers.h:38