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; |