From 2903ba5ff3cc1aa8fa58aa3fc0f4de53840d97e1 Mon Sep 17 00:00:00 2001 From: ossu Date: Mon, 18 Apr 2016 06:14:33 -0700 Subject: [PATCH] Reland Remove the deprecated EncodeInternal interface from AudioEncoder Remove the deprecated EncodeInternal interface from AudioEncoder Also hid MaxEncodedBytes by making it private. It will get removed as soon as subclasses have had time to remove their overrides. BUG=webrtc:5591 Review URL: https://codereview.webrtc.org/1881003003 Cr-Commit-Position: refs/heads/master@{#12409} --- .../acm2/audio_coding_module_impl.cc | 8 --- .../audio_coding/codecs/audio_encoder.cc | 54 ++-------------- .../audio_coding/codecs/audio_encoder.h | 51 ++++----------- .../codecs/audio_encoder_unittest.cc | 64 ------------------- .../codecs/cng/audio_encoder_cng.cc | 7 -- .../codecs/cng/audio_encoder_cng.h | 1 - .../codecs/cng/audio_encoder_cng_unittest.cc | 7 +- .../codecs/g711/audio_encoder_pcm.cc | 6 +- .../codecs/g711/audio_encoder_pcm.h | 1 - .../codecs/g722/audio_encoder_g722.cc | 4 -- .../codecs/g722/audio_encoder_g722.h | 3 +- .../codecs/ilbc/audio_encoder_ilbc.cc | 4 -- .../codecs/ilbc/audio_encoder_ilbc.h | 1 - .../codecs/isac/audio_encoder_isac_t.h | 1 - .../codecs/isac/audio_encoder_isac_t_impl.h | 5 -- .../codecs/mock/mock_audio_encoder.cc | 22 ------- .../codecs/mock/mock_audio_encoder.h | 38 +---------- .../codecs/opus/audio_encoder_opus.cc | 22 +++---- .../codecs/opus/audio_encoder_opus.h | 4 +- .../codecs/red/audio_encoder_copy_red.cc | 4 -- .../codecs/red/audio_encoder_copy_red.h | 3 +- .../red/audio_encoder_copy_red_unittest.cc | 3 - webrtc/modules/modules.gyp | 1 - 23 files changed, 36 insertions(+), 278 deletions(-) delete mode 100644 webrtc/modules/audio_coding/codecs/audio_encoder_unittest.cc diff --git a/webrtc/modules/audio_coding/acm2/audio_coding_module_impl.cc b/webrtc/modules/audio_coding/acm2/audio_coding_module_impl.cc index 254c2f420b..f00b2432f2 100644 --- a/webrtc/modules/audio_coding/acm2/audio_coding_module_impl.cc +++ b/webrtc/modules/audio_coding/acm2/audio_coding_module_impl.cc @@ -104,7 +104,6 @@ void ConvertEncodedInfoToFragmentationHeader( class RawAudioEncoderWrapper final : public AudioEncoder { public: RawAudioEncoderWrapper(AudioEncoder* enc) : enc_(enc) {} - size_t MaxEncodedBytes() const override { return enc_->MaxEncodedBytes(); } int SampleRateHz() const override { return enc_->SampleRateHz(); } size_t NumChannels() const override { return enc_->NumChannels(); } int RtpTimestampRateHz() const override { return enc_->RtpTimestampRateHz(); } @@ -120,13 +119,6 @@ class RawAudioEncoderWrapper final : public AudioEncoder { rtc::Buffer* encoded) override { return enc_->Encode(rtp_timestamp, audio, encoded); } - EncodedInfo EncodeInternal(uint32_t rtp_timestamp, - rtc::ArrayView audio, - size_t max_encoded_bytes, - uint8_t* encoded) override { - return enc_->EncodeInternal(rtp_timestamp, audio, max_encoded_bytes, - encoded); - } void Reset() override { return enc_->Reset(); } bool SetFec(bool enable) override { return enc_->SetFec(enable); } bool SetDtx(bool enable) override { return enc_->SetDtx(enable); } diff --git a/webrtc/modules/audio_coding/codecs/audio_encoder.cc b/webrtc/modules/audio_coding/codecs/audio_encoder.cc index 6f793e2531..fa262c4644 100644 --- a/webrtc/modules/audio_coding/codecs/audio_encoder.cc +++ b/webrtc/modules/audio_coding/codecs/audio_encoder.cc @@ -37,55 +37,6 @@ AudioEncoder::EncodedInfo AudioEncoder::Encode( return info; } -AudioEncoder::EncodedInfo AudioEncoder::Encode( - uint32_t rtp_timestamp, - rtc::ArrayView audio, - size_t max_encoded_bytes, - uint8_t* encoded) { - return DEPRECATED_Encode(rtp_timestamp, audio, max_encoded_bytes, encoded); -} - -AudioEncoder::EncodedInfo AudioEncoder::DEPRECATED_Encode( - uint32_t rtp_timestamp, - rtc::ArrayView audio, - size_t max_encoded_bytes, - uint8_t* encoded) { - TRACE_EVENT0("webrtc", "AudioEncoder::Encode"); - RTC_CHECK_EQ(audio.size(), - static_cast(NumChannels() * SampleRateHz() / 100)); - EncodedInfo info = - EncodeInternal(rtp_timestamp, audio, max_encoded_bytes, encoded); - RTC_CHECK_LE(info.encoded_bytes, max_encoded_bytes); - return info; -} - -AudioEncoder::EncodedInfo AudioEncoder::EncodeImpl( - uint32_t rtp_timestamp, - rtc::ArrayView audio, - rtc::Buffer* encoded) -{ - EncodedInfo info; - encoded->AppendData(MaxEncodedBytes(), [&] (rtc::ArrayView encoded) { - info = EncodeInternal(rtp_timestamp, audio, - encoded.size(), encoded.data()); - return info.encoded_bytes; - }); - return info; -} - -AudioEncoder::EncodedInfo AudioEncoder::EncodeInternal( - uint32_t rtp_timestamp, - rtc::ArrayView audio, - size_t max_encoded_bytes, - uint8_t* encoded) -{ - rtc::Buffer temp_buffer; - EncodedInfo info = EncodeImpl(rtp_timestamp, audio, &temp_buffer); - RTC_DCHECK_LE(temp_buffer.size(), max_encoded_bytes); - std::memcpy(encoded, temp_buffer.data(), info.encoded_bytes); - return info; -} - bool AudioEncoder::SetFec(bool enable) { return !enable; } @@ -104,4 +55,9 @@ void AudioEncoder::SetProjectedPacketLossRate(double fraction) {} void AudioEncoder::SetTargetBitrate(int target_bps) {} +size_t AudioEncoder::MaxEncodedBytes() const { + RTC_CHECK(false); + return 0; +} + } // namespace webrtc diff --git a/webrtc/modules/audio_coding/codecs/audio_encoder.h b/webrtc/modules/audio_coding/codecs/audio_encoder.h index 3fdee259ce..58d9fff451 100644 --- a/webrtc/modules/audio_coding/codecs/audio_encoder.h +++ b/webrtc/modules/audio_coding/codecs/audio_encoder.h @@ -52,14 +52,6 @@ class AudioEncoder { virtual ~AudioEncoder() = default; - // Returns the maximum number of bytes that can be produced by the encoder - // at each Encode() call. The caller can use the return value to determine - // the size of the buffer that needs to be allocated. This value is allowed - // to depend on encoder parameters like bitrate, frame size etc., so if - // any of these change, the caller of Encode() is responsible for checking - // that the buffer is large enough by calling MaxEncodedBytes() again. - virtual size_t MaxEncodedBytes() const = 0; - // Returns the input sample rate in Hz and the number of input channels. // These are constants set at instantiation time. virtual int SampleRateHz() const = 0; @@ -95,33 +87,6 @@ class AudioEncoder { rtc::ArrayView audio, rtc::Buffer* encoded); - // Deprecated interface to Encode (remove eventually, bug 5591). May incur a - // copy. The encoder produces zero or more bytes of output in |encoded| and - // returns additional encoding information. The caller is responsible for - // making sure that |max_encoded_bytes| is not smaller than the number of - // bytes actually produced by the encoder. - RTC_DEPRECATED EncodedInfo Encode(uint32_t rtp_timestamp, - rtc::ArrayView audio, - size_t max_encoded_bytes, - uint8_t* encoded); - - EncodedInfo DEPRECATED_Encode(uint32_t rtp_timestamp, - rtc::ArrayView audio, - size_t max_encoded_bytes, - uint8_t* encoded); - - // Deprecated interface EncodeInternal (see bug 5591). May incur a copy. - // Subclasses implement this to perform the actual encoding. Called by - // Encode(). By default, this is implemented as a call to the newer - // EncodeImpl() that accepts an rtc::Buffer instead of a raw pointer. - // That version is protected, so see below. At least one of EncodeInternal - // or EncodeImpl _must_ be implemented by a subclass. - virtual EncodedInfo EncodeInternal( - uint32_t rtp_timestamp, - rtc::ArrayView audio, - size_t max_encoded_bytes, - uint8_t* encoded); - // Resets the encoder to its starting state, discarding any input that has // been fed to the encoder but not yet emitted in a packet. virtual void Reset() = 0; @@ -162,13 +127,19 @@ class AudioEncoder { protected: // Subclasses implement this to perform the actual encoding. Called by - // Encode(). For compatibility reasons, this is implemented by default as a - // call to the older interface EncodeInternal(). At least one of - // EncodeInternal or EncodeImpl _must_ be implemented by a - // subclass. Preferably this one. + // Encode(). virtual EncodedInfo EncodeImpl(uint32_t rtp_timestamp, rtc::ArrayView audio, - rtc::Buffer* encoded); + rtc::Buffer* encoded) = 0; + + private: + // This function is deprecated. It was used to return the maximum number of + // bytes that can be produced by the encoder at each Encode() call. Since the + // Encode interface was changed to use rtc::Buffer, this is no longer + // applicable. It is only kept in to avoid breaking subclasses that still have + // it implemented (with the override attribute). It will be removed as soon + // as these subclasses have been given a chance to change. + virtual size_t MaxEncodedBytes() const; }; } // namespace webrtc #endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_AUDIO_ENCODER_H_ diff --git a/webrtc/modules/audio_coding/codecs/audio_encoder_unittest.cc b/webrtc/modules/audio_coding/codecs/audio_encoder_unittest.cc deleted file mode 100644 index 71ffcde323..0000000000 --- a/webrtc/modules/audio_coding/codecs/audio_encoder_unittest.cc +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#include "testing/gtest/include/gtest/gtest.h" -#include "webrtc/modules/audio_coding/codecs/mock/mock_audio_encoder.h" - -using ::testing::_; -using ::testing::Invoke; -using ::testing::Return; - -namespace webrtc { - -TEST(AudioEncoderTest, EncodeInternalRedirectsOk) { - const size_t kPayloadSize = 16; - const uint8_t payload[kPayloadSize] = - {0xf, 0xe, 0xd, 0xc, 0xb, 0xa, 0x9, 0x8, - 0x7, 0x6, 0x5, 0x4, 0x3, 0x2, 0x1, 0x0}; - - MockAudioEncoderDeprecated old_impl; - MockAudioEncoder new_impl; - MockAudioEncoderBase* impls[] = { &old_impl, &new_impl }; - for (auto* impl : impls) { - EXPECT_CALL(*impl, Die()); - EXPECT_CALL(*impl, MaxEncodedBytes()) - .WillRepeatedly(Return(kPayloadSize * 2)); - EXPECT_CALL(*impl, NumChannels()).WillRepeatedly(Return(1)); - EXPECT_CALL(*impl, SampleRateHz()).WillRepeatedly(Return(8000)); - } - - EXPECT_CALL(old_impl, EncodeInternal(_, _, _, _)).WillOnce( - Invoke(MockAudioEncoderDeprecated::CopyEncoding(payload))); - - EXPECT_CALL(new_impl, EncodeImpl(_, _, _)).WillOnce( - Invoke(MockAudioEncoder::CopyEncoding(payload))); - - int16_t audio[80]; - uint8_t output_array[kPayloadSize * 2]; - rtc::Buffer output_buffer; - - AudioEncoder* old_encoder = &old_impl; - AudioEncoder* new_encoder = &new_impl; - auto old_info = old_encoder->Encode(0, audio, &output_buffer); - auto new_info = new_encoder->DEPRECATED_Encode(0, audio, - kPayloadSize * 2, - output_array); - - EXPECT_EQ(old_info.encoded_bytes, kPayloadSize); - EXPECT_EQ(new_info.encoded_bytes, kPayloadSize); - EXPECT_EQ(output_buffer.size(), kPayloadSize); - - for (size_t i = 0; i != kPayloadSize; ++i) { - EXPECT_EQ(output_buffer.data()[i], payload[i]); - EXPECT_EQ(output_array[i], payload[i]); - } -} - -} // namespace webrtc 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 2f80944be2..04b635d8ca 100644 --- a/webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.cc +++ b/webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.cc @@ -72,13 +72,6 @@ AudioEncoderCng::AudioEncoderCng(Config&& config) AudioEncoderCng::~AudioEncoderCng() = default; -size_t AudioEncoderCng::MaxEncodedBytes() const { - const size_t max_encoded_bytes_active = speech_encoder_->MaxEncodedBytes(); - const size_t max_encoded_bytes_passive = - rtc::CheckedDivExact(kMaxFrameSizeMs, 10) * SamplesPer10msFrame(); - return std::max(max_encoded_bytes_active, max_encoded_bytes_passive); -} - int AudioEncoderCng::SampleRateHz() const { return speech_encoder_->SampleRateHz(); } diff --git a/webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.h b/webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.h index 1384cd511e..b52665d9c0 100644 --- a/webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.h +++ b/webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.h @@ -52,7 +52,6 @@ class AudioEncoderCng final : public AudioEncoder { explicit AudioEncoderCng(Config&& config); ~AudioEncoderCng() override; - size_t MaxEncodedBytes() const override; int SampleRateHz() const override; size_t NumChannels() const override; int RtpTimestampRateHz() const override; diff --git a/webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng_unittest.cc b/webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng_unittest.cc index 8f30d783ae..8b80d2181d 100644 --- a/webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng_unittest.cc +++ b/webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng_unittest.cc @@ -25,7 +25,6 @@ using ::testing::Invoke; namespace webrtc { namespace { -static const size_t kMockMaxEncodedBytes = 1000; static const size_t kMaxNumSamples = 48 * 10 * 2; // 10 ms @ 48 kHz stereo. static const size_t kMockReturnEncodedBytes = 17; static const int kCngPayloadType = 18; @@ -74,8 +73,6 @@ class AudioEncoderCngTest : public ::testing::Test { // as long as it is smaller than 10. EXPECT_CALL(*mock_encoder_, Max10MsFramesInAPacket()) .WillOnce(Return(1u)); - EXPECT_CALL(*mock_encoder_, MaxEncodedBytes()) - .WillRepeatedly(Return(kMockMaxEncodedBytes)); } cng_.reset(new AudioEncoderCng(std::move(config))); } @@ -90,8 +87,8 @@ class AudioEncoderCngTest : public ::testing::Test { } // Expect |num_calls| calls to the encoder, all successful. The last call - // claims to have encoded |kMockMaxEncodedBytes| bytes, and all the preceding - // ones 0 bytes. + // claims to have encoded |kMockReturnEncodedBytes| bytes, and all the + // preceding ones 0 bytes. void ExpectEncodeCalls(size_t num_calls) { InSequence s; AudioEncoder::EncodedInfo info; diff --git a/webrtc/modules/audio_coding/codecs/g711/audio_encoder_pcm.cc b/webrtc/modules/audio_coding/codecs/g711/audio_encoder_pcm.cc index a24b1526fd..e4da8d7440 100644 --- a/webrtc/modules/audio_coding/codecs/g711/audio_encoder_pcm.cc +++ b/webrtc/modules/audio_coding/codecs/g711/audio_encoder_pcm.cc @@ -52,10 +52,6 @@ AudioEncoderPcm::AudioEncoderPcm(const Config& config, int sample_rate_hz) AudioEncoderPcm::~AudioEncoderPcm() = default; -size_t AudioEncoderPcm::MaxEncodedBytes() const { - return full_frame_samples_ * BytesPerSample(); -} - int AudioEncoderPcm::SampleRateHz() const { return sample_rate_hz_; } @@ -93,7 +89,7 @@ AudioEncoder::EncodedInfo AudioEncoderPcm::EncodeImpl( info.encoded_timestamp = first_timestamp_in_buffer_; info.payload_type = payload_type_; info.encoded_bytes = - encoded->AppendData(MaxEncodedBytes(), + encoded->AppendData(full_frame_samples_ * BytesPerSample(), [&] (rtc::ArrayView encoded) { return EncodeCall(&speech_buffer_[0], full_frame_samples_, diff --git a/webrtc/modules/audio_coding/codecs/g711/audio_encoder_pcm.h b/webrtc/modules/audio_coding/codecs/g711/audio_encoder_pcm.h index 6b3cebfb33..eb5ad02878 100644 --- a/webrtc/modules/audio_coding/codecs/g711/audio_encoder_pcm.h +++ b/webrtc/modules/audio_coding/codecs/g711/audio_encoder_pcm.h @@ -35,7 +35,6 @@ class AudioEncoderPcm : public AudioEncoder { ~AudioEncoderPcm() override; - size_t MaxEncodedBytes() const override; int SampleRateHz() const override; size_t NumChannels() const override; size_t Num10MsFramesInNextPacket() const override; diff --git a/webrtc/modules/audio_coding/codecs/g722/audio_encoder_g722.cc b/webrtc/modules/audio_coding/codecs/g722/audio_encoder_g722.cc index 9256518445..256013266d 100644 --- a/webrtc/modules/audio_coding/codecs/g722/audio_encoder_g722.cc +++ b/webrtc/modules/audio_coding/codecs/g722/audio_encoder_g722.cc @@ -60,10 +60,6 @@ AudioEncoderG722::AudioEncoderG722(const CodecInst& codec_inst) AudioEncoderG722::~AudioEncoderG722() = default; -size_t AudioEncoderG722::MaxEncodedBytes() const { - return SamplesPerChannel() / 2 * num_channels_; -} - int AudioEncoderG722::SampleRateHz() const { return kSampleRateHz; } diff --git a/webrtc/modules/audio_coding/codecs/g722/audio_encoder_g722.h b/webrtc/modules/audio_coding/codecs/g722/audio_encoder_g722.h index dec87b2b7a..b3f6965fff 100644 --- a/webrtc/modules/audio_coding/codecs/g722/audio_encoder_g722.h +++ b/webrtc/modules/audio_coding/codecs/g722/audio_encoder_g722.h @@ -35,7 +35,6 @@ class AudioEncoderG722 final : public AudioEncoder { explicit AudioEncoderG722(const CodecInst& codec_inst); ~AudioEncoderG722() override; - size_t MaxEncodedBytes() const override; int SampleRateHz() const override; size_t NumChannels() const override; int RtpTimestampRateHz() const override; @@ -44,7 +43,7 @@ class AudioEncoderG722 final : public AudioEncoder { int GetTargetBitrate() const override; void Reset() override; -protected: + protected: EncodedInfo EncodeImpl(uint32_t rtp_timestamp, rtc::ArrayView audio, rtc::Buffer* encoded) override; diff --git a/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc b/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc index c7d7411c45..45401a1280 100644 --- a/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc +++ b/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc @@ -56,10 +56,6 @@ AudioEncoderIlbc::~AudioEncoderIlbc() { RTC_CHECK_EQ(0, WebRtcIlbcfix_EncoderFree(encoder_)); } -size_t AudioEncoderIlbc::MaxEncodedBytes() const { - return RequiredOutputSizeBytes(); -} - int AudioEncoderIlbc::SampleRateHz() const { return kSampleRateHz; } diff --git a/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.h b/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.h index 27329bbc4e..63639860f4 100644 --- a/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.h +++ b/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.h @@ -34,7 +34,6 @@ class AudioEncoderIlbc final : public AudioEncoder { explicit AudioEncoderIlbc(const CodecInst& codec_inst); ~AudioEncoderIlbc() override; - size_t MaxEncodedBytes() const override; int SampleRateHz() const override; size_t NumChannels() const override; size_t Num10MsFramesInNextPacket() const override; diff --git a/webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t.h b/webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t.h index 0da8ed71d6..afe38d7940 100644 --- a/webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t.h +++ b/webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t.h @@ -56,7 +56,6 @@ class AudioEncoderIsacT final : public AudioEncoder { const rtc::scoped_refptr& bwinfo); ~AudioEncoderIsacT() override; - size_t MaxEncodedBytes() const override; int SampleRateHz() const override; size_t NumChannels() const override; size_t Num10MsFramesInNextPacket() const override; diff --git a/webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t_impl.h b/webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t_impl.h index 1debbeb903..1f95e5980e 100644 --- a/webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t_impl.h +++ b/webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t_impl.h @@ -79,11 +79,6 @@ AudioEncoderIsacT::~AudioEncoderIsacT() { RTC_CHECK_EQ(0, T::Free(isac_state_)); } -template -size_t AudioEncoderIsacT::MaxEncodedBytes() const { - return kSufficientEncodeBufferSizeBytes; -} - template int AudioEncoderIsacT::SampleRateHz() const { return T::EncSampRate(isac_state_); diff --git a/webrtc/modules/audio_coding/codecs/mock/mock_audio_encoder.cc b/webrtc/modules/audio_coding/codecs/mock/mock_audio_encoder.cc index 52849691ac..a674eba660 100644 --- a/webrtc/modules/audio_coding/codecs/mock/mock_audio_encoder.cc +++ b/webrtc/modules/audio_coding/codecs/mock/mock_audio_encoder.cc @@ -49,26 +49,4 @@ AudioEncoder::EncodedInfo MockAudioEncoder::CopyEncoding::operator()( return info_; } -MockAudioEncoderDeprecated::CopyEncoding::CopyEncoding( - AudioEncoder::EncodedInfo info, - rtc::ArrayView payload) - : info_(info), payload_(payload) { } - -MockAudioEncoderDeprecated::CopyEncoding::CopyEncoding( - rtc::ArrayView payload) - : payload_(payload) { - info_.encoded_bytes = payload_.size(); -} - -AudioEncoder::EncodedInfo MockAudioEncoderDeprecated::CopyEncoding::operator()( - uint32_t timestamp, - rtc::ArrayView audio, - size_t max_bytes_encoded, - uint8_t* encoded) { - RTC_CHECK(encoded); - RTC_CHECK_LE(info_.encoded_bytes, payload_.size()); - std::memcpy(encoded, payload_.data(), info_.encoded_bytes); - return info_; -} - } // namespace webrtc diff --git a/webrtc/modules/audio_coding/codecs/mock/mock_audio_encoder.h b/webrtc/modules/audio_coding/codecs/mock/mock_audio_encoder.h index 58a1e756f9..f898877c19 100644 --- a/webrtc/modules/audio_coding/codecs/mock/mock_audio_encoder.h +++ b/webrtc/modules/audio_coding/codecs/mock/mock_audio_encoder.h @@ -18,12 +18,11 @@ namespace webrtc { -class MockAudioEncoderBase : public AudioEncoder { +class MockAudioEncoder : public AudioEncoder { public: - ~MockAudioEncoderBase() override { Die(); } + ~MockAudioEncoder() override { Die(); } MOCK_METHOD0(Die, void()); MOCK_METHOD1(Mark, void(std::string desc)); - MOCK_CONST_METHOD0(MaxEncodedBytes, size_t()); MOCK_CONST_METHOD0(SampleRateHz, int()); MOCK_CONST_METHOD0(NumChannels, size_t()); MOCK_CONST_METHOD0(RtpTimestampRateHz, int()); @@ -39,10 +38,7 @@ class MockAudioEncoderBase : public AudioEncoder { MOCK_METHOD1(SetTargetBitrate, void(int target_bps)); MOCK_METHOD1(SetMaxBitrate, void(int max_bps)); MOCK_METHOD1(SetMaxPayloadSize, void(int max_payload_size_bytes)); -}; -class MockAudioEncoder final : public MockAudioEncoderBase { - public: // Note, we explicitly chose not to create a mock for the Encode method. MOCK_METHOD3(EncodeImpl, EncodedInfo(uint32_t timestamp, @@ -89,36 +85,6 @@ class MockAudioEncoder final : public MockAudioEncoderBase { AudioEncoder::EncodedInfo info_; rtc::ArrayView payload_; }; - -}; - -class MockAudioEncoderDeprecated final : public MockAudioEncoderBase { - public: - // Note, we explicitly chose not to create a mock for the Encode method. - MOCK_METHOD4(EncodeInternal, - EncodedInfo(uint32_t timestamp, - rtc::ArrayView audio, - size_t max_encoded_bytes, - uint8_t* encoded)); - - // A functor like MockAudioEncoder::CopyEncoding above, but which has the - // deprecated Encode signature. Currently only used in one test and should be - // removed once that backwards compatibility is. - class CopyEncoding { - public: - CopyEncoding(AudioEncoder::EncodedInfo info, - rtc::ArrayView payload); - - CopyEncoding(rtc::ArrayView payload); - - AudioEncoder::EncodedInfo operator()(uint32_t timestamp, - rtc::ArrayView audio, - size_t max_bytes_encoded, - uint8_t* encoded); - private: - AudioEncoder::EncodedInfo info_; - rtc::ArrayView payload_; - }; }; } // namespace webrtc 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 a599e291d4..799d122fe8 100644 --- a/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc +++ b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc @@ -100,16 +100,6 @@ AudioEncoderOpus::~AudioEncoderOpus() { RTC_CHECK_EQ(0, WebRtcOpus_EncoderFree(inst_)); } -size_t AudioEncoderOpus::MaxEncodedBytes() const { - // Calculate the number of bytes we expect the encoder to produce, - // then multiply by two to give a wide margin for error. - const size_t bytes_per_millisecond = - static_cast(config_.bitrate_bps / (1000 * 8) + 1); - const size_t approx_encoded_bytes = - Num10msFramesPerPacket() * 10 * bytes_per_millisecond; - return 2 * approx_encoded_bytes; -} - int AudioEncoderOpus::SampleRateHz() const { return kSampleRateHz; } @@ -198,7 +188,7 @@ AudioEncoder::EncodedInfo AudioEncoderOpus::EncodeImpl( RTC_CHECK_EQ(input_buffer_.size(), Num10msFramesPerPacket() * SamplesPer10msFrame()); - const size_t max_encoded_bytes = MaxEncodedBytes(); + const size_t max_encoded_bytes = SufficientOutputBufferSize(); EncodedInfo info; info.encoded_bytes = encoded->AppendData( @@ -231,6 +221,16 @@ size_t AudioEncoderOpus::SamplesPer10msFrame() const { return rtc::CheckedDivExact(kSampleRateHz, 100) * config_.num_channels; } +size_t AudioEncoderOpus::SufficientOutputBufferSize() const { + // Calculate the number of bytes we expect the encoder to produce, + // then multiply by two to give a wide margin for error. + const size_t bytes_per_millisecond = + static_cast(config_.bitrate_bps / (1000 * 8) + 1); + const size_t approx_encoded_bytes = + Num10msFramesPerPacket() * 10 * bytes_per_millisecond; + return 2 * approx_encoded_bytes; +} + // If the given config is OK, recreate the Opus encoder instance with those // settings, save the config, and return true. Otherwise, do nothing and return // false. diff --git a/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.h b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.h index 3f11af1f9e..8900659f48 100644 --- a/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.h +++ b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.h @@ -54,7 +54,6 @@ class AudioEncoderOpus final : public AudioEncoder { explicit AudioEncoderOpus(const CodecInst& codec_inst); ~AudioEncoderOpus() override; - size_t MaxEncodedBytes() const override; int SampleRateHz() const override; size_t NumChannels() const override; size_t Num10MsFramesInNextPacket() const override; @@ -79,7 +78,7 @@ class AudioEncoderOpus final : public AudioEncoder { ApplicationMode application() const { return config_.application; } bool dtx_enabled() const { return config_.dtx_enabled; } -protected: + protected: EncodedInfo EncodeImpl(uint32_t rtp_timestamp, rtc::ArrayView audio, rtc::Buffer* encoded) override; @@ -87,6 +86,7 @@ protected: private: size_t Num10msFramesPerPacket() const; size_t SamplesPer10msFrame() const; + size_t SufficientOutputBufferSize() const; bool RecreateEncoderInstance(const Config& config); Config config_; diff --git a/webrtc/modules/audio_coding/codecs/red/audio_encoder_copy_red.cc b/webrtc/modules/audio_coding/codecs/red/audio_encoder_copy_red.cc index b4e95d3b08..7c48c0c60e 100644 --- a/webrtc/modules/audio_coding/codecs/red/audio_encoder_copy_red.cc +++ b/webrtc/modules/audio_coding/codecs/red/audio_encoder_copy_red.cc @@ -30,10 +30,6 @@ AudioEncoderCopyRed::AudioEncoderCopyRed(Config&& config) AudioEncoderCopyRed::~AudioEncoderCopyRed() = default; -size_t AudioEncoderCopyRed::MaxEncodedBytes() const { - return 2 * speech_encoder_->MaxEncodedBytes(); -} - int AudioEncoderCopyRed::SampleRateHz() const { return speech_encoder_->SampleRateHz(); } diff --git a/webrtc/modules/audio_coding/codecs/red/audio_encoder_copy_red.h b/webrtc/modules/audio_coding/codecs/red/audio_encoder_copy_red.h index a67ae486bb..06d0fdeeca 100644 --- a/webrtc/modules/audio_coding/codecs/red/audio_encoder_copy_red.h +++ b/webrtc/modules/audio_coding/codecs/red/audio_encoder_copy_red.h @@ -37,7 +37,6 @@ class AudioEncoderCopyRed final : public AudioEncoder { ~AudioEncoderCopyRed() override; - size_t MaxEncodedBytes() const override; int SampleRateHz() const override; size_t NumChannels() const override; int RtpTimestampRateHz() const override; @@ -52,7 +51,7 @@ class AudioEncoderCopyRed final : public AudioEncoder { void SetProjectedPacketLossRate(double fraction) override; void SetTargetBitrate(int target_bps) override; -protected: + protected: EncodedInfo EncodeImpl(uint32_t rtp_timestamp, rtc::ArrayView audio, rtc::Buffer* encoded) override; diff --git a/webrtc/modules/audio_coding/codecs/red/audio_encoder_copy_red_unittest.cc b/webrtc/modules/audio_coding/codecs/red/audio_encoder_copy_red_unittest.cc index c73cb9f209..22b2ceb5f7 100644 --- a/webrtc/modules/audio_coding/codecs/red/audio_encoder_copy_red_unittest.cc +++ b/webrtc/modules/audio_coding/codecs/red/audio_encoder_copy_red_unittest.cc @@ -26,7 +26,6 @@ using ::testing::MockFunction; namespace webrtc { namespace { -static const size_t kMockMaxEncodedBytes = 1000; static const size_t kMaxNumSamples = 48 * 10 * 2; // 10 ms @ 48 kHz stereo. } @@ -46,8 +45,6 @@ class AudioEncoderCopyRedTest : public ::testing::Test { EXPECT_CALL(*mock_encoder_, NumChannels()).WillRepeatedly(Return(1U)); EXPECT_CALL(*mock_encoder_, SampleRateHz()) .WillRepeatedly(Return(sample_rate_hz_)); - EXPECT_CALL(*mock_encoder_, MaxEncodedBytes()) - .WillRepeatedly(Return(kMockMaxEncodedBytes)); } void TearDown() override { diff --git a/webrtc/modules/modules.gyp b/webrtc/modules/modules.gyp index fd9279e631..8ae5bbb2ed 100644 --- a/webrtc/modules/modules.gyp +++ b/webrtc/modules/modules.gyp @@ -167,7 +167,6 @@ '<(webrtc_root)/tools/tools.gyp:agc_test_utils', ], 'sources': [ - 'audio_coding/codecs/audio_encoder_unittest.cc', 'audio_coding/codecs/cng/audio_encoder_cng_unittest.cc', 'audio_coding/acm2/acm_receiver_unittest_oldapi.cc', 'audio_coding/acm2/audio_coding_module_unittest_oldapi.cc',