Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(86)

Unified Diff: webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.cc

Issue 1868143002: Convert CNG into C++ and remove it from AudioDecoder (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Converted WebRtcCng to C++ Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698