Roc Toolkit internal modules
Roc Toolkit: real-time audio streaming
receiver_decoder.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2023 Roc Streaming authors
3  *
4  * This Source Code Form is subject to the terms of the Mozilla Public
5  * License, v. 2.0. If a copy of the MPL was not distributed with this
6  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
7  */
8 
9 //! @file roc_node/receiver_decoder.h
10 //! @brief Receiver decoder node.
11 
12 #ifndef ROC_NODE_RECEIVER_DECODER_H_
13 #define ROC_NODE_RECEIVER_DECODER_H_
14 
15 #include "roc_address/interface.h"
16 #include "roc_address/protocol.h"
17 #include "roc_core/attributes.h"
18 #include "roc_core/mutex.h"
19 #include "roc_node/context.h"
20 #include "roc_node/node.h"
23 #include "roc_status/status_code.h"
24 
25 namespace roc {
26 namespace node {
27 
28 //! Receiver decoder node.
30 public:
31  //! Initialize.
33 
34  //! Deinitialize.
36 
37  //! Check if successfully constructed.
38  bool is_valid();
39 
40  //! Activate interface.
42 
43  //! Callback for getting session metrics.
44  typedef void (*sess_metrics_func_t)(
45  const pipeline::ReceiverSessionMetrics& sess_metrics,
46  size_t sess_index,
47  void* sess_arg);
48 
49  //! Get metrics.
50  //! @remarks
51  //! Metrics for slot are written into @p slot_metrics.
52  //! Metrics for each session are passed to @p sess_metrics_func.
54  sess_metrics_func_t sess_metrics_func,
55  size_t* sess_metrics_size,
56  void* sess_metrics_arg);
57 
58  //! Write packet for decoding.
60  const packet::PacketPtr& packet);
61 
62  //! Source for reading decoded frames.
64 
65 private:
66  virtual void schedule_task_processing(pipeline::PipelineLoop&,
67  core::nanoseconds_t delay);
68  virtual void cancel_task_processing(pipeline::PipelineLoop&);
69 
70  core::Mutex mutex_;
71 
73 
74  pipeline::ReceiverLoop pipeline_;
77 
79 
80  bool valid_;
81 };
82 
83 } // namespace node
84 } // namespace roc
85 
86 #endif // ROC_NODE_RECEIVER_DECODER_H_
Compiler attributes.
#define ROC_ATTR_NODISCARD
Emit warning if function result is not checked.
Definition: attributes.h:31
Dynamic array.
Definition: array.h:39
Atomic integer. Provides sequential consistency. For a fine-grained memory order control,...
Definition: atomic.h:26
Mutex.
Definition: mutex.h:31
Process pending pipeline tasks on control thread.
Definition: control_loop.h:164
Node context.
Definition: context.h:44
Base class for nodes.
Definition: node.h:23
Context & context()
All nodes hold reference to context.
Receiver decoder node.
ReceiverDecoder(Context &context, const pipeline::ReceiverConfig &pipeline_config)
Initialize.
bool activate(address::Interface iface, address::Protocol proto)
Activate interface.
bool is_valid()
Check if successfully constructed.
ROC_ATTR_NODISCARD status::StatusCode write(address::Interface iface, const packet::PacketPtr &packet)
Write packet for decoding.
sndio::ISource & source()
Source for reading decoded frames.
~ReceiverDecoder()
Deinitialize.
void(* sess_metrics_func_t)(const pipeline::ReceiverSessionMetrics &sess_metrics, size_t sess_index, void *sess_arg)
Callback for getting session metrics.
bool get_metrics(pipeline::ReceiverSlotMetrics &slot_metrics, sess_metrics_func_t sess_metrics_func, size_t *sess_metrics_size, void *sess_metrics_arg)
Get metrics.
Pipeline task scheduler interface. PipelineLoop uses this interface to schedule asynchronous work....
Base class for task-based pipelines.
Receiver pipeline loop.
Definition: receiver_loop.h:47
struct SlotHandle * SlotHandle
Opaque slot handle.
Definition: receiver_loop.h:50
Source interface.
Definition: isource.h:23
Node context.
Interface ID.
Pipeline task scheduler interface.
Mutex.
Interface
Interface ID.
Definition: interface.h:19
@ Iface_Max
Number of interfaces.
Definition: interface.h:36
Protocol
Protocol ID.
Definition: protocol.h:19
int64_t nanoseconds_t
Nanoseconds.
Definition: time.h:58
Root namespace.
Base class for nodes.
Protocol ID.
Receiver pipeline loop.
Status codes.
StatusCode
Status code.
Definition: status_code.h:19
Receiver parameters.
Definition: config.h:238
Metrics of receiver session (connection from sender).
Definition: metrics.h:38
Metrics of receiver slot.
Definition: metrics.h:44