aboutsummaryrefslogtreecommitdiff
path: root/webrtc/modules/audio_coding/codecs/pcm16b/audio_encoder_pcm16b.cc
diff options
context:
space:
mode:
authorKarl Wiberg <kwiberg@webrtc.org>2015-05-07 12:35:12 +0200
committerKarl Wiberg <kwiberg@webrtc.org>2015-05-07 10:35:18 +0000
commitdcccab3ebb623df74fbb1425da2cb9d9a42439fa (patch)
treeb895b8c79cbd4186fc675e435848a1f7a8c1160d /webrtc/modules/audio_coding/codecs/pcm16b/audio_encoder_pcm16b.cc
parent81ea54eaac82b36b7208a02fd37a469d7d0bd9d0 (diff)
downloadwebrtc-dcccab3ebb623df74fbb1425da2cb9d9a42439fa.tar.gz
New interface: AudioEncoderMutable
With implementations for all codecs. It has no users yet. This new interface is the same as AudioEncoder (in fact it is a subclass) but it allows changing some parameters after construction. COAUTHOR=henrik.lundin@webrtc.org BUG=4228 R=jmarusic@webrtc.org, minyue@webrtc.org Review URL: https://webrtc-codereview.appspot.com/51679004 Cr-Commit-Position: refs/heads/master@{#9149}
Diffstat (limited to 'webrtc/modules/audio_coding/codecs/pcm16b/audio_encoder_pcm16b.cc')
-rw-r--r--webrtc/modules/audio_coding/codecs/pcm16b/audio_encoder_pcm16b.cc27
1 files changed, 27 insertions, 0 deletions
diff --git a/webrtc/modules/audio_coding/codecs/pcm16b/audio_encoder_pcm16b.cc b/webrtc/modules/audio_coding/codecs/pcm16b/audio_encoder_pcm16b.cc
index f761922201..491fdfdb14 100644
--- a/webrtc/modules/audio_coding/codecs/pcm16b/audio_encoder_pcm16b.cc
+++ b/webrtc/modules/audio_coding/codecs/pcm16b/audio_encoder_pcm16b.cc
@@ -9,14 +9,41 @@
*/
#include "webrtc/modules/audio_coding/codecs/pcm16b/include/audio_encoder_pcm16b.h"
+
+#include "webrtc/base/checks.h"
+#include "webrtc/common_types.h"
#include "webrtc/modules/audio_coding/codecs/pcm16b/include/pcm16b.h"
namespace webrtc {
+bool AudioEncoderPcm16B::Config::IsOk() const {
+ if ((sample_rate_hz != 8000) && (sample_rate_hz != 16000) &&
+ (sample_rate_hz != 32000) && (sample_rate_hz != 48000))
+ return false;
+ return AudioEncoderPcm::Config::IsOk();
+}
+
int16_t AudioEncoderPcm16B::EncodeCall(const int16_t* audio,
size_t input_len,
uint8_t* encoded) {
return WebRtcPcm16b_Encode(audio, static_cast<int16_t>(input_len), encoded);
}
+namespace {
+AudioEncoderPcm16B::Config CreateConfig(const CodecInst& codec_inst) {
+ AudioEncoderPcm16B::Config config;
+ config.num_channels = codec_inst.channels;
+ config.sample_rate_hz = codec_inst.plfreq;
+ config.frame_size_ms = rtc::CheckedDivExact(
+ codec_inst.pacsize, rtc::CheckedDivExact(config.sample_rate_hz, 1000));
+ config.payload_type = codec_inst.pltype;
+ return config;
+}
+} // namespace
+
+AudioEncoderMutablePcm16B::AudioEncoderMutablePcm16B(
+ const CodecInst& codec_inst)
+ : AudioEncoderMutableImpl<AudioEncoderPcm16B>(CreateConfig(codec_inst)) {
+}
+
} // namespace webrtc