diff options
author | Karl Wiberg <kwiberg@webrtc.org> | 2015-05-07 12:35:12 +0200 |
---|---|---|
committer | Karl Wiberg <kwiberg@webrtc.org> | 2015-05-07 10:35:18 +0000 |
commit | dcccab3ebb623df74fbb1425da2cb9d9a42439fa (patch) | |
tree | b895b8c79cbd4186fc675e435848a1f7a8c1160d /webrtc/modules/audio_coding/codecs/pcm16b/audio_encoder_pcm16b.cc | |
parent | 81ea54eaac82b36b7208a02fd37a469d7d0bd9d0 (diff) | |
download | webrtc-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.cc | 27 |
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 |