Babel
Epitech's C++ VoIP project
Opus.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <cstdint>
4 #include <opus/opus.h>
5 #include <mutex>
6 #include "ICodec.hpp"
7 
8 namespace Babel {
10  class Opus : public ICodec {
11  public:
12  Opus();
13  ~Opus() override;
14 
18  int encode(const std::int16_t *pcm, unsigned char *data) override;
19 
21  int encode(const float *pcm, unsigned char *data) override;
22 
27  int decode(const unsigned char *data, std::int16_t *pcm, std::int32_t dataSize) override;
28 
30  int decode(const unsigned char *data, float *pcm) override;
31 
33  [[nodiscard]] std::int32_t getBitrate() const override;
34 
36  void setBitrate(std::int32_t bitrate) override;
37 
39  [[nodiscard]] int getChannel() const override;
40 
42  void setChannel(int channel) override;
43 
45  [[nodiscard]] int getApplication() const override;
46 
51  void setApplication(int application) override;
52 
54  [[nodiscard]] int getFrameSize() const override;
55 
58  void setFrameSize(int frameSize) override;
59 
61  [[nodiscard]] bool isEncoderInitialized() const;
62 
64  [[nodiscard]] bool isDecoderInitialized() const;
65 
66  private:
67  OpusEncoder *_encoder;
70  OpusDecoder *_decoder;
71  opus_int32 _bitrate;
72  int _channel;
74  int _frameSize;
75  std::int32_t _dataSize;
76  std::mutex _mutex;
77  };
78 }
Babel::Opus::encode
int encode(const std::int16_t *pcm, unsigned char *data) override
dtor
Definition: Opus.cpp:77
Babel::ICodec
Definition: ICodec.hpp:9
Babel::Opus::_bitrate
opus_int32 _bitrate
Decoder and encoder bitrate (default 48000)
Definition: Opus.hpp:71
Babel::Opus::~Opus
~Opus() override
ctor
Definition: Opus.cpp:22
Babel::Opus::_mutex
std::mutex _mutex
Class mutex.
Definition: Opus.hpp:76
Babel::Opus::isEncoderInitialized
bool isEncoderInitialized() const
false if encoder failed to initialize
Definition: Opus.cpp:68
Babel::Opus::setBitrate
void setBitrate(std::int32_t bitrate) override
Sets the bitrate.
Definition: Opus.cpp:36
Babel::Opus::_frameSize
int _frameSize
Number of samples per channel in the input signal (default 960)
Definition: Opus.hpp:74
Babel::Opus::Opus
Opus()
Definition: Opus.cpp:4
Babel::Opus::setFrameSize
void setFrameSize(int frameSize) override
sets the number of samples per channel Possible values are 120/480/960 (default)/1920/2880
Definition: Opus.cpp:63
Babel::Opus::_decoderIsInitialized
bool _decoderIsInitialized
True if decoder state is allocated and initialized, false otherwise.
Definition: Opus.hpp:69
Babel::Opus::_application
int _application
Encoder application mode (default OPUS_APPLICATION_VOIP)
Definition: Opus.hpp:73
Babel::Opus::setApplication
void setApplication(int application) override
sets the Opus application mode Possible values are OPUS_APPLICATION_AUDIO (default) OPUS_APPLICATION_...
Definition: Opus.cpp:54
Babel::Opus::_encoderIsInitialized
bool _encoderIsInitialized
True if encoder state is allocated and initialized, false otherwise.
Definition: Opus.hpp:68
Babel::Opus::_dataSize
std::int32_t _dataSize
Max duration of the frame in samples (per channel) that can fit into the decoded_frame array.
Definition: Opus.hpp:75
Babel::Opus::decode
int decode(const unsigned char *data, std::int16_t *pcm, std::int32_t dataSize) override
Decodes exactly one frame of audio data.
Definition: Opus.cpp:103
Babel::Opus::getBitrate
std::int32_t getBitrate() const override
get the bitrate
Definition: Opus.cpp:32
Babel::Opus::_channel
int _channel
Decoder and encoder audio channels (default 2)
Definition: Opus.hpp:72
Babel::Opus
Class containing Opus encoder and decoder.
Definition: Opus.hpp:10
Babel::Opus::isDecoderInitialized
bool isDecoderInitialized() const
false if decoder failed to initialize
Definition: Opus.cpp:72
Babel
Definition: IAudioManager.hpp:13
Babel::Opus::_encoder
OpusEncoder * _encoder
Contains the encoder state.
Definition: Opus.hpp:67
ICodec.hpp
Babel::Opus::_decoder
OpusDecoder * _decoder
Contains the decoder state.
Definition: Opus.hpp:70
Babel::Opus::getApplication
int getApplication() const override
get the application type
Definition: Opus.cpp:50
Babel::Opus::getChannel
int getChannel() const override
get the channels
Definition: Opus.cpp:41
Babel::Opus::getFrameSize
int getFrameSize() const override
get the frame size
Definition: Opus.cpp:59
Babel::Opus::setChannel
void setChannel(int channel) override
sets the channel
Definition: Opus.cpp:45