Index: webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.cc |
diff --git a/webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.cc b/webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.cc |
index 3b48131a754e7f33ce8ded0d5cb259e584d7ae93..c7b0e303eb9cbce3b191129853de8abb8a73950c 100644 |
--- a/webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.cc |
+++ b/webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.cc |
@@ -21,19 +21,6 @@ namespace { |
const int kMaxFrameSizeMs = 60; |
-std::unique_ptr<CNG_enc_inst, CngInstDeleter> CreateCngInst( |
- int sample_rate_hz, |
- int sid_frame_interval_ms, |
- int num_cng_coefficients) { |
- CNG_enc_inst* ci; |
- RTC_CHECK_EQ(0, WebRtcCng_CreateEnc(&ci)); |
- std::unique_ptr<CNG_enc_inst, CngInstDeleter> cng_inst(ci); |
- RTC_CHECK_EQ(0, |
- WebRtcCng_InitEnc(cng_inst.get(), sample_rate_hz, |
- sid_frame_interval_ms, num_cng_coefficients)); |
- return cng_inst; |
-} |
- |
} // namespace |
AudioEncoderCng::Config::Config() = default; |
@@ -75,9 +62,10 @@ AudioEncoderCng::AudioEncoderCng(Config&& config) |
sid_frame_interval_ms_(config.sid_frame_interval_ms), |
last_frame_active_(true), |
vad_(config.vad ? std::unique_ptr<Vad>(config.vad) |
- : CreateVad(config.vad_mode)) { |
- cng_inst_ = CreateCngInst(SampleRateHz(), sid_frame_interval_ms_, |
- num_cng_coefficients_); |
+ : CreateVad(config.vad_mode)), |
+ cng_encoder_(new ComfortNoiseEncoder(SampleRateHz(), |
+ sid_frame_interval_ms_, |
+ num_cng_coefficients_)) { |
} |
AudioEncoderCng::~AudioEncoderCng() = default; |
@@ -187,8 +175,9 @@ void AudioEncoderCng::Reset() { |
rtp_timestamps_.clear(); |
last_frame_active_ = true; |
vad_->Reset(); |
- cng_inst_ = CreateCngInst(SampleRateHz(), sid_frame_interval_ms_, |
- num_cng_coefficients_); |
+ cng_encoder_.reset( |
+ new ComfortNoiseEncoder(SampleRateHz(), sid_frame_interval_ms_, |
+ num_cng_coefficients_)); |
kwiberg-webrtc
2016/04/12 13:35:30
A small utility function in an anonymous namespace
ossu
2016/04/12 13:54:49
Actually, there's a Reset method in it right now,
|
} |
bool AudioEncoderCng::SetFec(bool enable) { |
@@ -230,13 +219,13 @@ AudioEncoder::EncodedInfo AudioEncoderCng::EncodePassive( |
// WebRtcCng_Encode(), since later loop iterations may return zero in |
// that value, in which case we don't want to overwrite any value from |
// an earlier iteration. |
- size_t encoded_bytes_tmp = 0; |
- RTC_CHECK_GE( |
- WebRtcCng_Encode(cng_inst_.get(), |
- &speech_buffer_[i * samples_per_10ms_frame], |
- samples_per_10ms_frame, encoded.data(), |
- &encoded_bytes_tmp, force_sid), |
- 0); |
+ int encoded_bytes_tmp = |
+ cng_encoder_->Encode( |
+ rtc::ArrayView<const int16_t>( |
+ &speech_buffer_[i * samples_per_10ms_frame], |
+ samples_per_10ms_frame), |
+ encoded, force_sid); |
+ RTC_CHECK_GE(encoded_bytes_tmp, 0); |
kwiberg-webrtc
2016/04/12 13:35:30
Use rtc::Optional<size_t> if you need to return an
ossu
2016/04/12 13:54:49
Yeah, Buffer is probably better. It's what we want
hlundin-webrtc
2016/04/13 07:05:23
I'm fine with using a Buffer as well. But bear in
kwiberg-webrtc
2016/04/14 09:42:47
Meaning its output length is a small constant? It
|
if (encoded_bytes_tmp > 0) { |
RTC_CHECK(!output_produced); |
info.encoded_bytes = encoded_bytes_tmp; |