aboutsummaryrefslogtreecommitdiff
path: root/webrtc/modules/audio_coding/codecs/ilbc
diff options
context:
space:
mode:
Diffstat (limited to 'webrtc/modules/audio_coding/codecs/ilbc')
-rw-r--r--webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc29
-rw-r--r--webrtc/modules/audio_coding/codecs/ilbc/interface/audio_encoder_ilbc.h12
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_