Roc Toolkit internal modules
Roc Toolkit: real-time audio streaming
Loading...
Searching...
No Matches
pcm_mapper.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2022 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_audio/pcm_mapper.h
10//! @brief PCM format mapper.
11
12#ifndef ROC_AUDIO_PCM_MAPPER_H_
13#define ROC_AUDIO_PCM_MAPPER_H_
14
17
18namespace roc {
19namespace audio {
20
21//! PCM format mapper.
22//! Convert between PCM formats.
23class PcmMapper : public core::NonCopyable<> {
24public:
25 //! Initialize.
26 explicit PcmMapper(const PcmFormat& input_fmt, const PcmFormat& output_fmt);
27
28 //! Get input format.
29 const PcmFormat& input_format() const;
30
31 //! Get output format.
32 const PcmFormat& output_format() const;
33
34 //! Get number of input samples per channel for given number of bytes.
35 size_t input_sample_count(size_t input_bytes) const;
36
37 //! Get number of input samples per channel for given number of bytes.
38 size_t output_sample_count(size_t output_bytes) const;
39
40 //! Get number of input bytes for given number of samples per channel.
41 size_t input_byte_count(size_t input_samples) const;
42
43 //! Get number of output bytes for given number of samples per channel.
44 size_t output_byte_count(size_t output_samples) const;
45
46 //! Get number of input bits for given number of samples per channel.
47 size_t input_bit_count(size_t input_samples) const;
48
49 //! Get number of output bits for given number of samples per channel.
50 size_t output_bit_count(size_t output_samples) const;
51
52 //! Map samples from input to output format.
53 //! @remarks
54 //! @p in_data is a pointer to input buffer
55 //! @p in_byte_size is size of input buffer in bytes
56 //! @p in_bit_off is an offset in input buffer in bits
57 //! @p out_data is a pointer to output buffer
58 //! @p out_byte_size is size of output buffer in bytes
59 //! @p out_bit_off is an offset in output buffer in bits
60 //! @p n_samples is number of input and output samples for all channels
61 //! @returns
62 //! number of samples actually mapped, which may be truncated if
63 //! input or output buffer is smaller than requested
64 //! @note
65 //! updates @p in_bit_off and @p out_bit_off
66 size_t map(const void* in_data,
67 size_t in_byte_size,
68 size_t& in_bit_off,
69 void* out_data,
70 size_t out_byte_size,
71 size_t& out_bit_off,
72 size_t n_samples);
73
74private:
75 const PcmFormat input_fmt_;
76 const PcmFormat output_fmt_;
77
78 const size_t input_sample_bits_;
79 const size_t output_sample_bits_;
80
81 void (*const map_func_)(const uint8_t* in_data,
82 size_t& in_bit_off,
83 uint8_t* out_data,
84 size_t& out_bit_off,
85 size_t n_samples);
86};
87
88} // namespace audio
89} // namespace roc
90
91#endif // ROC_AUDIO_PCM_MAPPER_H_
PCM format mapper. Convert between PCM formats.
Definition pcm_mapper.h:23
size_t output_sample_count(size_t output_bytes) const
Get number of input samples per channel for given number of bytes.
const PcmFormat & output_format() const
Get output format.
size_t map(const void *in_data, size_t in_byte_size, size_t &in_bit_off, void *out_data, size_t out_byte_size, size_t &out_bit_off, size_t n_samples)
Map samples from input to output format.
size_t output_bit_count(size_t output_samples) const
Get number of output bits for given number of samples per channel.
size_t input_sample_count(size_t input_bytes) const
Get number of input samples per channel for given number of bytes.
size_t input_bit_count(size_t input_samples) const
Get number of input bits for given number of samples per channel.
size_t input_byte_count(size_t input_samples) const
Get number of input bytes for given number of samples per channel.
PcmMapper(const PcmFormat &input_fmt, const PcmFormat &output_fmt)
Initialize.
size_t output_byte_count(size_t output_samples) const
Get number of output bytes for given number of samples per channel.
const PcmFormat & input_format() const
Get input format.
Base class for non-copyable objects.
Definition noncopyable.h:23
Root namespace.
Non-copyable object.
PCM format.
PCM format description.
Definition pcm_format.h:58