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

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: Implicit conversion to ArrayView in TestSidErroneous 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 04b635d8ca59b7a71b101234297d41dfe4da1513..09c25d9616c4d5fa805f184ff973a842f2c824d2 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;
@@ -65,9 +52,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;
@@ -170,8 +158,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_));
}
bool AudioEncoderCng::SetFec(bool enable) {
@@ -204,32 +193,27 @@ AudioEncoder::EncodedInfo AudioEncoderCng::EncodePassive(
bool force_sid = last_frame_active_;
bool output_produced = false;
const size_t samples_per_10ms_frame = SamplesPer10msFrame();
- const size_t bytes_to_encode = frames_to_encode * samples_per_10ms_frame;
AudioEncoder::EncodedInfo info;
- encoded->AppendData(bytes_to_encode, [&] (rtc::ArrayView<uint8_t> encoded) {
- for (size_t i = 0; i < frames_to_encode; ++i) {
- // It's important not to pass &info.encoded_bytes directly to
- // 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);
- if (encoded_bytes_tmp > 0) {
- RTC_CHECK(!output_produced);
- info.encoded_bytes = encoded_bytes_tmp;
- output_produced = true;
- force_sid = false;
- }
- }
-
- return info.encoded_bytes;
- });
+ for (size_t i = 0; i < frames_to_encode; ++i) {
+ // It's important not to pass &info.encoded_bytes directly to
+ // 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 =
+ cng_encoder_->Encode(
+ rtc::ArrayView<const int16_t>(
+ &speech_buffer_[i * samples_per_10ms_frame],
+ samples_per_10ms_frame),
+ force_sid, encoded);
+
+ if (encoded_bytes_tmp > 0) {
+ RTC_CHECK(!output_produced);
+ info.encoded_bytes = encoded_bytes_tmp;
+ output_produced = true;
+ force_sid = false;
+ }
+ }
info.encoded_timestamp = rtp_timestamps_.front();
info.payload_type = cng_payload_type_;
« no previous file with comments | « webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.h ('k') | webrtc/modules/audio_coding/codecs/cng/cng.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698