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 | |
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')
-rw-r--r-- | webrtc/modules/audio_coding/codecs/pcm16b/audio_encoder_pcm16b.cc | 27 | ||||
-rw-r--r-- | webrtc/modules/audio_coding/codecs/pcm16b/include/audio_encoder_pcm16b.h | 11 |
2 files changed, 38 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 diff --git a/webrtc/modules/audio_coding/codecs/pcm16b/include/audio_encoder_pcm16b.h b/webrtc/modules/audio_coding/codecs/pcm16b/include/audio_encoder_pcm16b.h index 99ecd249c1..f1e1c51da8 100644 --- a/webrtc/modules/audio_coding/codecs/pcm16b/include/audio_encoder_pcm16b.h +++ b/webrtc/modules/audio_coding/codecs/pcm16b/include/audio_encoder_pcm16b.h @@ -11,6 +11,8 @@ #ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_PCM16B_INCLUDE_AUDIO_ENCODER_PCM16B_H_ #define WEBRTC_MODULES_AUDIO_CODING_CODECS_PCM16B_INCLUDE_AUDIO_ENCODER_PCM16B_H_ +#include "webrtc/base/scoped_ptr.h" +#include "webrtc/modules/audio_coding/codecs/audio_encoder_mutable_impl.h" #include "webrtc/modules/audio_coding/codecs/g711/include/audio_encoder_pcm.h" namespace webrtc { @@ -20,6 +22,7 @@ class AudioEncoderPcm16B : public AudioEncoderPcm { struct Config : public AudioEncoderPcm::Config { public: Config() : AudioEncoderPcm::Config(107), sample_rate_hz(8000) {} + bool IsOk() const; int sample_rate_hz; }; @@ -33,5 +36,13 @@ class AudioEncoderPcm16B : public AudioEncoderPcm { uint8_t* encoded) override; }; +struct CodecInst; + +class AudioEncoderMutablePcm16B + : public AudioEncoderMutableImpl<AudioEncoderPcm16B> { + public: + explicit AudioEncoderMutablePcm16B(const CodecInst& codec_inst); +}; + } // namespace webrtc #endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_PCM16B_INCLUDE_AUDIO_ENCODER_PCM16B_H_ |