aboutsummaryrefslogtreecommitdiff
path: root/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc
diff options
context:
space:
mode:
Diffstat (limited to 'webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc')
-rw-r--r--webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc29
1 files changed, 24 insertions, 5 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