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

Unified Diff: webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc

Issue 1725143003: Changed AudioEncoder::Encode to take an rtc::Buffer* instead of uint8_t* and a maximum size. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Added more fixes for override hiding in AudioEncoder implementations. Created 4 years, 10 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/opus/audio_encoder_opus.cc
diff --git a/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc
index 707d6c24884683ce00b5fb849ebd91f0406c1b51..1f68e154ce3671abf43101fe823773ef43107141 100644
--- a/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc
+++ b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc
@@ -130,36 +130,6 @@ int AudioEncoderOpus::GetTargetBitrate() const {
return config_.bitrate_bps;
}
-AudioEncoder::EncodedInfo AudioEncoderOpus::EncodeInternal(
- uint32_t rtp_timestamp,
- rtc::ArrayView<const int16_t> audio,
- size_t max_encoded_bytes,
- uint8_t* encoded) {
- if (input_buffer_.empty())
- first_timestamp_in_buffer_ = rtp_timestamp;
- RTC_DCHECK_EQ(SamplesPer10msFrame(), audio.size());
- input_buffer_.insert(input_buffer_.end(), audio.cbegin(), audio.cend());
- if (input_buffer_.size() <
- (Num10msFramesPerPacket() * SamplesPer10msFrame())) {
- return EncodedInfo();
- }
- RTC_CHECK_EQ(input_buffer_.size(),
- Num10msFramesPerPacket() * SamplesPer10msFrame());
- int status = WebRtcOpus_Encode(
- inst_, &input_buffer_[0],
- rtc::CheckedDivExact(input_buffer_.size(), config_.num_channels),
- rtc::saturated_cast<int16_t>(max_encoded_bytes), encoded);
- RTC_CHECK_GE(status, 0); // Fails only if fed invalid data.
- input_buffer_.clear();
- EncodedInfo info;
- info.encoded_bytes = static_cast<size_t>(status);
- info.encoded_timestamp = first_timestamp_in_buffer_;
- info.payload_type = config_.payload_type;
- info.send_even_if_empty = true; // Allows Opus to send empty packets.
- info.speech = (status > 0);
- return info;
-}
-
void AudioEncoderOpus::Reset() {
RTC_CHECK(RecreateEncoderInstance(config_));
}
@@ -212,6 +182,47 @@ void AudioEncoderOpus::SetTargetBitrate(int bits_per_second) {
RTC_CHECK_EQ(0, WebRtcOpus_SetBitRate(inst_, config_.bitrate_bps));
}
+AudioEncoder::EncodedInfo AudioEncoderOpus::EncodeInternal(
+ uint32_t rtp_timestamp,
+ rtc::ArrayView<const int16_t> audio,
+ rtc::Buffer* encoded) {
+
+ if (input_buffer_.empty())
+ first_timestamp_in_buffer_ = rtp_timestamp;
+
+ input_buffer_.insert(input_buffer_.end(), audio.cbegin(), audio.cend());
+ if (input_buffer_.size() <
+ (Num10msFramesPerPacket() * SamplesPer10msFrame())) {
+ return EncodedInfo();
+ }
+ RTC_CHECK_EQ(input_buffer_.size(),
+ Num10msFramesPerPacket() * SamplesPer10msFrame());
+
+ const size_t max_encoded_bytes = MaxEncodedBytes();
+ EncodedInfo info;
+ info.encoded_bytes =
+ encoded->AppendData(
+ max_encoded_bytes, [&] (rtc::ArrayView<uint8_t> encoded) {
+ int status = WebRtcOpus_Encode(
+ inst_, &input_buffer_[0],
+ rtc::CheckedDivExact(input_buffer_.size(),
+ config_.num_channels),
+ rtc::saturated_cast<int16_t>(max_encoded_bytes),
+ encoded.data());
+
+ RTC_CHECK_GE(status, 0); // Fails only if fed invalid data.
+
+ return static_cast<size_t>(status);
+ });
+ input_buffer_.clear();
+
+ info.encoded_timestamp = first_timestamp_in_buffer_;
+ info.payload_type = config_.payload_type;
+ info.send_even_if_empty = true; // Allows Opus to send empty packets.
+ info.speech = (info.encoded_bytes > 0);
+ return info;
+}
+
size_t AudioEncoderOpus::Num10msFramesPerPacket() const {
return static_cast<size_t>(rtc::CheckedDivExact(config_.frame_size_ms, 10));
}

Powered by Google App Engine
This is Rietveld 408576698