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
17#include "roc_core/attributes.h"
18#include "roc_core/mutex.h"
19#include "roc_node/context.h"
20#include "roc_node/node.h"
24
25namespace roc {
26namespace node {
27
28//! Receiver decoder node.
30public:
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
65private:
66 virtual void schedule_task_processing(pipeline::PipelineLoop&,
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.
sndio::ISource & source()
Source for reading decoded frames.
ROC_ATTR_NODISCARD status::StatusCode write(address::Interface iface, const packet::PacketPtr &packet)
Write packet for decoding.
~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