diff options
Diffstat (limited to 'webrtc/modules/audio_coding/codecs/ilbc')
-rw-r--r-- | webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc | 29 | ||||
-rw-r--r-- | webrtc/modules/audio_coding/codecs/ilbc/interface/audio_encoder_ilbc.h | 12 |
2 files changed, 34 insertions, 7 deletions
diff --git a/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc b/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc index fad531f6bb..4fea44babd 100644 --- a/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc +++ b/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc @@ -13,6 +13,7 @@ #include <cstring> #include <limits> #include "webrtc/base/checks.h" +#include "webrtc/common_types.h" #include "webrtc/modules/audio_coding/codecs/ilbc/interface/ilbc.h" namespace webrtc { @@ -23,15 +24,20 @@ const int kSampleRateHz = 8000; } // namespace +bool AudioEncoderIlbc::Config::IsOk() const { + if (!(frame_size_ms == 20 || frame_size_ms == 30 || frame_size_ms == 40 || + frame_size_ms == 60)) + return false; + if (kSampleRateHz / 100 * (frame_size_ms / 10) > kMaxSamplesPerPacket) + return false; + return true; +} + AudioEncoderIlbc::AudioEncoderIlbc(const Config& config) : payload_type_(config.payload_type), num_10ms_frames_per_packet_(config.frame_size_ms / 10), num_10ms_frames_buffered_(0) { - CHECK(config.frame_size_ms == 20 || config.frame_size_ms == 30 || - config.frame_size_ms == 40 || config.frame_size_ms == 60) - << "Frame size must be 20, 30, 40, or 60 ms."; - DCHECK_LE(kSampleRateHz / 100 * num_10ms_frames_per_packet_, - kMaxSamplesPerPacket); + CHECK(config.IsOk()); CHECK_EQ(0, WebRtcIlbcfix_EncoderCreate(&encoder_)); const int encoder_frame_size_ms = config.frame_size_ms > 30 ? config.frame_size_ms / 2 @@ -112,4 +118,17 @@ size_t AudioEncoderIlbc::RequiredOutputSizeBytes() const { } } +namespace { +AudioEncoderIlbc::Config CreateConfig(const CodecInst& codec_inst) { + AudioEncoderIlbc::Config config; + config.frame_size_ms = codec_inst.pacsize / 8; + config.payload_type = codec_inst.pltype; + return config; +} +} // namespace + +AudioEncoderMutableIlbc::AudioEncoderMutableIlbc(const CodecInst& codec_inst) + : AudioEncoderMutableImpl<AudioEncoderIlbc>(CreateConfig(codec_inst)) { +} + } // namespace webrtc diff --git a/webrtc/modules/audio_coding/codecs/ilbc/interface/audio_encoder_ilbc.h b/webrtc/modules/audio_coding/codecs/ilbc/interface/audio_encoder_ilbc.h index 91d17b4f85..c172db1b8f 100644 --- a/webrtc/modules/audio_coding/codecs/ilbc/interface/audio_encoder_ilbc.h +++ b/webrtc/modules/audio_coding/codecs/ilbc/interface/audio_encoder_ilbc.h @@ -13,6 +13,7 @@ #include "webrtc/base/scoped_ptr.h" #include "webrtc/modules/audio_coding/codecs/audio_encoder.h" +#include "webrtc/modules/audio_coding/codecs/audio_encoder_mutable_impl.h" #include "webrtc/modules/audio_coding/codecs/ilbc/interface/ilbc.h" namespace webrtc { @@ -21,6 +22,7 @@ class AudioEncoderIlbc : public AudioEncoder { public: struct Config { Config() : payload_type(102), frame_size_ms(30) {} + bool IsOk() const; int payload_type; int frame_size_ms; // Valid values are 20, 30, 40, and 60 ms. @@ -36,8 +38,6 @@ class AudioEncoderIlbc : public AudioEncoder { size_t MaxEncodedBytes() const override; int Num10MsFramesInNextPacket() const override; int Max10MsFramesInAPacket() const override; - - protected: EncodedInfo EncodeInternal(uint32_t rtp_timestamp, const int16_t* audio, size_t max_encoded_bytes, @@ -55,5 +55,13 @@ class AudioEncoderIlbc : public AudioEncoder { IlbcEncoderInstance* encoder_; }; +struct CodecInst; + +class AudioEncoderMutableIlbc + : public AudioEncoderMutableImpl<AudioEncoderIlbc> { + public: + explicit AudioEncoderMutableIlbc(const CodecInst& codec_inst); +}; + } // namespace webrtc #endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_INTERFACE_AUDIO_ENCODER_ILBC_H_ |