Roc Toolkit internal modules
Roc Toolkit: real-time audio streaming
codec_map.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2019 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_fec/codec_map.h
10//! @brief FEC codec map.
11
12#ifndef ROC_FEC_CODEC_MAP_H_
13#define ROC_FEC_CODEC_MAP_H_
14
16#include "roc_core/iarena.h"
18#include "roc_core/singleton.h"
22
23namespace roc {
24namespace fec {
25
26//! FEC codec map.
27class CodecMap : public core::NonCopyable<> {
28public:
29 //! Get instance.
30 static CodecMap& instance() {
32 }
33
34 //! Check whether given FEC scheme is supported.
35 bool is_supported(packet::FecScheme scheme) const;
36
37 //! Get number of supported FEC schemes.
38 size_t num_schemes() const;
39
40 //! Get FEC scheme ID by index.
42
43 //! Create a new block encoder.
44 //!
45 //! @remarks
46 //! The codec type is determined by @p config.
47 //!
48 //! @returns
49 //! NULL if parameters are invalid or given codec support is not enabled.
51 core::BufferFactory<uint8_t>& buffer_factory,
52 core::IArena& arena) const;
53
54 //! Create a new block decoder.
55 //!
56 //! @remarks
57 //! The codec type is determined by @p config.
58 //!
59 //! @returns
60 //! NULL if parameters are invalid or given codec support is not enabled.
62 core::BufferFactory<uint8_t>& buffer_factory,
63 core::IArena& arena) const;
64
65private:
66 friend class core::Singleton<CodecMap>;
67
68 enum { MaxCodecs = 2 };
69
70 struct Codec {
71 packet::FecScheme scheme;
72
73 IBlockEncoder* (*encoder_ctor)(const CodecConfig& config,
74 core::BufferFactory<uint8_t>& buffer_factory,
75 core::IArena& arena);
76
77 IBlockDecoder* (*decoder_ctor)(const CodecConfig& config,
78 core::BufferFactory<uint8_t>& buffer_factory,
79 core::IArena& arena);
80 };
81
82 CodecMap();
83
84 void add_codec_(const Codec& codec);
85 const Codec* find_codec_(packet::FecScheme scheme) const;
86
87 size_t n_codecs_;
88 Codec codecs_[MaxCodecs];
89};
90
91} // namespace fec
92} // namespace roc
93
94#endif // ROC_FEC_CODEC_MAP_H_
Buffer factory.
Memory arena interface.
Definition: iarena.h:23
Base class for non-copyable objects.
Definition: noncopyable.h:23
static T & instance()
Get singleton instance.
Definition: singleton.h:29
FEC codec map.
Definition: codec_map.h:27
packet::FecScheme nth_scheme(size_t n) const
Get FEC scheme ID by index.
static CodecMap & instance()
Get instance.
Definition: codec_map.h:30
IBlockEncoder * new_encoder(const CodecConfig &config, core::BufferFactory< uint8_t > &buffer_factory, core::IArena &arena) const
Create a new block encoder.
size_t num_schemes() const
Get number of supported FEC schemes.
IBlockDecoder * new_decoder(const CodecConfig &config, core::BufferFactory< uint8_t > &buffer_factory, core::IArena &arena) const
Create a new block decoder.
bool is_supported(packet::FecScheme scheme) const
Check whether given FEC scheme is supported.
FEC block decoder interface.
FEC block encoder interface.
FEC codec parameters.
Memory arena interface.
FEC block decoder interface.
FEC block encoder interface.
FecScheme
FECFRAME scheme.
Definition: fec.h:23
Root namespace.
Non-copyable object.
Singleton.
FEC codec parameters.
Definition: codec_config.h:22