Chromium Code Reviews| 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; |