Roc Toolkit internal modules
Roc Toolkit: real-time audio streaming
pcm_encoder.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015 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_encoder.h
10 //! @brief PCM encoder.
11 
12 #ifndef ROC_AUDIO_PCM_ENCODER_H_
13 #define ROC_AUDIO_PCM_ENCODER_H_
14 
16 #include "roc_audio/pcm_mapper.h"
17 #include "roc_audio/sample_spec.h"
18 #include "roc_core/noncopyable.h"
19 
20 namespace roc {
21 namespace audio {
22 
23 //! PCM encoder.
24 class PcmEncoder : public IFrameEncoder, public core::NonCopyable<> {
25 public:
26  //! Construction function.
28  const PcmFormat& pcm_format,
29  const SampleSpec& sample_spec);
30 
31  //! Initialize.
32  PcmEncoder(const PcmFormat& pcm_format, const SampleSpec& sample_spec);
33 
34  //! Get encoded frame size in bytes for given number of samples per channel.
35  virtual size_t encoded_byte_count(size_t num_samples) const;
36 
37  //! Start encoding a new frame.
38  virtual void begin(void* frame, size_t frame_size);
39 
40  //! Encode samples.
41  virtual size_t write(const sample_t* samples, size_t n_samples);
42 
43  //! Finish encoding frame.
44  virtual void end();
45 
46 private:
47  PcmMapper pcm_mapper_;
48  const size_t n_chans_;
49 
50  void* frame_data_;
51  size_t frame_byte_size_;
52  size_t frame_bit_off_;
53 };
54 
55 } // namespace audio
56 } // namespace roc
57 
58 #endif // ROC_AUDIO_PCM_ENCODER_H_
Audio frame encoder interface.
virtual size_t write(const sample_t *samples, size_t n_samples)
Encode samples.
static IFrameEncoder * construct(core::IArena &arena, const PcmFormat &pcm_format, const SampleSpec &sample_spec)
Construction function.
virtual size_t encoded_byte_count(size_t num_samples) const
Get encoded frame size in bytes for given number of samples per channel.
PcmEncoder(const PcmFormat &pcm_format, const SampleSpec &sample_spec)
Initialize.
virtual void begin(void *frame, size_t frame_size)
Start encoding a new frame.
virtual void end()
Finish encoding frame.
PCM format mapper. Convert between PCM formats.
Definition: pcm_mapper.h:24
Sample specification. Describes sample rate and channels.
Definition: sample_spec.h:26
Memory arena interface.
Definition: iarena.h:23
Base class for non-copyable objects.
Definition: noncopyable.h:23
Audio frame encoder interface.
float sample_t
Audio sample.
Definition: sample.h:22
Root namespace.
Non-copyable object.
PCM format mapper.
Sample specifications.
PCM format description.
Definition: pcm_format.h:61