diff options
Diffstat (limited to 'webrtc/modules/audio_coding/codecs')
63 files changed, 504 insertions, 458 deletions
diff --git a/webrtc/modules/audio_coding/codecs/audio_decoder.cc b/webrtc/modules/audio_coding/codecs/audio_decoder.cc index 08d101c5ae..d2984b97b0 100644 --- a/webrtc/modules/audio_coding/codecs/audio_decoder.cc +++ b/webrtc/modules/audio_coding/codecs/audio_decoder.cc @@ -13,12 +13,14 @@ #include <assert.h> #include "webrtc/base/checks.h" +#include "webrtc/base/trace_event.h" namespace webrtc { int AudioDecoder::Decode(const uint8_t* encoded, size_t encoded_len, int sample_rate_hz, size_t max_decoded_bytes, int16_t* decoded, SpeechType* speech_type) { + TRACE_EVENT0("webrtc", "AudioDecoder::Decode"); int duration = PacketDuration(encoded, encoded_len); if (duration >= 0 && duration * Channels() * sizeof(int16_t) > max_decoded_bytes) { @@ -31,6 +33,7 @@ int AudioDecoder::Decode(const uint8_t* encoded, size_t encoded_len, int AudioDecoder::DecodeRedundant(const uint8_t* encoded, size_t encoded_len, int sample_rate_hz, size_t max_decoded_bytes, int16_t* decoded, SpeechType* speech_type) { + TRACE_EVENT0("webrtc", "AudioDecoder::DecodeRedundant"); int duration = PacketDurationRedundant(encoded, encoded_len); if (duration >= 0 && duration * Channels() * sizeof(int16_t) > max_decoded_bytes) { @@ -40,12 +43,6 @@ int AudioDecoder::DecodeRedundant(const uint8_t* encoded, size_t encoded_len, speech_type); } -int AudioDecoder::DecodeInternal(const uint8_t* encoded, size_t encoded_len, - int sample_rate_hz, int16_t* decoded, - SpeechType* speech_type) { - return kNotImplemented; -} - int AudioDecoder::DecodeRedundantInternal(const uint8_t* encoded, size_t encoded_len, int sample_rate_hz, int16_t* decoded, diff --git a/webrtc/modules/audio_coding/codecs/audio_decoder.h b/webrtc/modules/audio_coding/codecs/audio_decoder.h index 6189be098d..81ac873183 100644 --- a/webrtc/modules/audio_coding/codecs/audio_decoder.h +++ b/webrtc/modules/audio_coding/codecs/audio_decoder.h @@ -14,7 +14,7 @@ #include <stdlib.h> // NULL #include "webrtc/base/constructormagic.h" -#include "webrtc/modules/audio_coding/codecs/cng/include/webrtc_cng.h" +#include "webrtc/modules/audio_coding/codecs/cng/webrtc_cng.h" #include "webrtc/typedefs.h" namespace webrtc { @@ -41,21 +41,21 @@ class AudioDecoder { // is set to kComfortNoise, otherwise it is kSpeech. The desired output // sample rate is provided in |sample_rate_hz|, which must be valid for the // codec at hand. - virtual int Decode(const uint8_t* encoded, - size_t encoded_len, - int sample_rate_hz, - size_t max_decoded_bytes, - int16_t* decoded, - SpeechType* speech_type); + int Decode(const uint8_t* encoded, + size_t encoded_len, + int sample_rate_hz, + size_t max_decoded_bytes, + int16_t* decoded, + SpeechType* speech_type); // Same as Decode(), but interfaces to the decoders redundant decode function. // The default implementation simply calls the regular Decode() method. - virtual int DecodeRedundant(const uint8_t* encoded, - size_t encoded_len, - int sample_rate_hz, - size_t max_decoded_bytes, - int16_t* decoded, - SpeechType* speech_type); + int DecodeRedundant(const uint8_t* encoded, + size_t encoded_len, + int sample_rate_hz, + size_t max_decoded_bytes, + int16_t* decoded, + SpeechType* speech_type); // Indicates if the decoder implements the DecodePlc method. virtual bool HasDecodePlc() const; @@ -107,7 +107,7 @@ class AudioDecoder { size_t encoded_len, int sample_rate_hz, int16_t* decoded, - SpeechType* speech_type); + SpeechType* speech_type) = 0; virtual int DecodeRedundantInternal(const uint8_t* encoded, size_t encoded_len, diff --git a/webrtc/modules/audio_coding/codecs/audio_encoder.cc b/webrtc/modules/audio_coding/codecs/audio_encoder.cc index 6d763005ac..e99fc30995 100644 --- a/webrtc/modules/audio_coding/codecs/audio_encoder.cc +++ b/webrtc/modules/audio_coding/codecs/audio_encoder.cc @@ -9,7 +9,9 @@ */ #include "webrtc/modules/audio_coding/codecs/audio_encoder.h" + #include "webrtc/base/checks.h" +#include "webrtc/base/trace_event.h" namespace webrtc { @@ -21,13 +23,14 @@ int AudioEncoder::RtpTimestampRateHz() const { return SampleRateHz(); } -AudioEncoder::EncodedInfo AudioEncoder::Encode(uint32_t rtp_timestamp, - const int16_t* audio, - size_t num_samples_per_channel, - size_t max_encoded_bytes, - uint8_t* encoded) { - RTC_CHECK_EQ(num_samples_per_channel, - static_cast<size_t>(SampleRateHz() / 100)); +AudioEncoder::EncodedInfo AudioEncoder::Encode( + uint32_t rtp_timestamp, + rtc::ArrayView<const int16_t> audio, + size_t max_encoded_bytes, + uint8_t* encoded) { + TRACE_EVENT0("webrtc", "AudioEncoder::Encode"); + RTC_CHECK_EQ(audio.size(), + static_cast<size_t>(NumChannels() * SampleRateHz() / 100)); EncodedInfo info = EncodeInternal(rtp_timestamp, audio, max_encoded_bytes, encoded); RTC_CHECK_LE(info.encoded_bytes, max_encoded_bytes); diff --git a/webrtc/modules/audio_coding/codecs/audio_encoder.h b/webrtc/modules/audio_coding/codecs/audio_encoder.h index cda9d86f2e..a46b0e86a7 100644 --- a/webrtc/modules/audio_coding/codecs/audio_encoder.h +++ b/webrtc/modules/audio_coding/codecs/audio_encoder.h @@ -14,6 +14,7 @@ #include <algorithm> #include <vector> +#include "webrtc/base/array_view.h" #include "webrtc/typedefs.h" namespace webrtc { @@ -60,7 +61,7 @@ class AudioEncoder { // 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; - virtual int NumChannels() const = 0; + virtual size_t NumChannels() const = 0; // Returns the rate at which the RTP timestamps are updated. The default // implementation returns SampleRateHz(). @@ -91,13 +92,12 @@ class AudioEncoder { // Encode() checks some preconditions, calls EncodeInternal() which does the // actual work, and then checks some postconditions. EncodedInfo Encode(uint32_t rtp_timestamp, - const int16_t* audio, - size_t num_samples_per_channel, + rtc::ArrayView<const int16_t> audio, size_t max_encoded_bytes, uint8_t* encoded); virtual EncodedInfo EncodeInternal(uint32_t rtp_timestamp, - const int16_t* audio, + rtc::ArrayView<const int16_t> audio, size_t max_encoded_bytes, uint8_t* encoded) = 0; @@ -125,7 +125,7 @@ class AudioEncoder { // Tells the encoder about the highest sample rate the decoder is expected to // use when decoding the bitstream. The encoder would typically use this // information to adjust the quality of the encoding. The default - // implementation just returns true. + // implementation does nothing. virtual void SetMaxPlaybackRate(int frequency_hz); // Tells the encoder what the projected packet loss rate is. The rate is in 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 121524633c..180166c40c 100644 --- a/webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.cc +++ b/webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.cc @@ -8,7 +8,7 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include "webrtc/modules/audio_coding/codecs/cng/include/audio_encoder_cng.h" +#include "webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.h" #include <algorithm> #include <limits> @@ -75,7 +75,7 @@ int AudioEncoderCng::SampleRateHz() const { return speech_encoder_->SampleRateHz(); } -int AudioEncoderCng::NumChannels() const { +size_t AudioEncoderCng::NumChannels() const { return 1; } @@ -97,7 +97,7 @@ int AudioEncoderCng::GetTargetBitrate() const { AudioEncoder::EncodedInfo AudioEncoderCng::EncodeInternal( uint32_t rtp_timestamp, - const int16_t* audio, + rtc::ArrayView<const int16_t> audio, size_t max_encoded_bytes, uint8_t* encoded) { RTC_CHECK_GE(max_encoded_bytes, @@ -106,9 +106,8 @@ AudioEncoder::EncodedInfo AudioEncoderCng::EncodeInternal( RTC_CHECK_EQ(speech_buffer_.size(), rtp_timestamps_.size() * samples_per_10ms_frame); rtp_timestamps_.push_back(rtp_timestamp); - for (size_t i = 0; i < samples_per_10ms_frame; ++i) { - speech_buffer_.push_back(audio[i]); - } + RTC_DCHECK_EQ(samples_per_10ms_frame, audio.size()); + speech_buffer_.insert(speech_buffer_.end(), audio.cbegin(), audio.cend()); const size_t frames_to_encode = speech_encoder_->Num10MsFramesInNextPacket(); if (rtp_timestamps_.size() < frames_to_encode) { return EncodedInfo(); @@ -242,9 +241,12 @@ AudioEncoder::EncodedInfo AudioEncoderCng::EncodeActive( const size_t samples_per_10ms_frame = SamplesPer10msFrame(); AudioEncoder::EncodedInfo info; for (size_t i = 0; i < frames_to_encode; ++i) { - info = speech_encoder_->Encode( - rtp_timestamps_.front(), &speech_buffer_[i * samples_per_10ms_frame], - samples_per_10ms_frame, max_encoded_bytes, encoded); + info = + speech_encoder_->Encode(rtp_timestamps_.front(), + rtc::ArrayView<const int16_t>( + &speech_buffer_[i * samples_per_10ms_frame], + samples_per_10ms_frame), + max_encoded_bytes, encoded); if (i + 1 == frames_to_encode) { RTC_CHECK_GT(info.encoded_bytes, 0u) << "Encoder didn't deliver data."; } else { diff --git a/webrtc/modules/audio_coding/codecs/cng/include/audio_encoder_cng.h b/webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.h index 3ca9eb60f3..87383e2ac5 100644 --- a/webrtc/modules/audio_coding/codecs/cng/include/audio_encoder_cng.h +++ b/webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.h @@ -8,15 +8,15 @@ * be found in the AUTHORS file in the root of the source tree. */ -#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_CNG_INCLUDE_AUDIO_ENCODER_CNG_H_ -#define WEBRTC_MODULES_AUDIO_CODING_CODECS_CNG_INCLUDE_AUDIO_ENCODER_CNG_H_ +#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_CNG_AUDIO_ENCODER_CNG_H_ +#define WEBRTC_MODULES_AUDIO_CODING_CODECS_CNG_AUDIO_ENCODER_CNG_H_ #include <vector> #include "webrtc/base/scoped_ptr.h" #include "webrtc/common_audio/vad/include/vad.h" #include "webrtc/modules/audio_coding/codecs/audio_encoder.h" -#include "webrtc/modules/audio_coding/codecs/cng/include/webrtc_cng.h" +#include "webrtc/modules/audio_coding/codecs/cng/webrtc_cng.h" namespace webrtc { @@ -32,7 +32,7 @@ class AudioEncoderCng final : public AudioEncoder { struct Config { bool IsOk() const; - int num_channels = 1; + size_t num_channels = 1; int payload_type = 13; // Caller keeps ownership of the AudioEncoder object. AudioEncoder* speech_encoder = nullptr; @@ -51,13 +51,13 @@ class AudioEncoderCng final : public AudioEncoder { size_t MaxEncodedBytes() const override; int SampleRateHz() const override; - int NumChannels() const override; + size_t NumChannels() const override; int RtpTimestampRateHz() const override; size_t Num10MsFramesInNextPacket() const override; size_t Max10MsFramesInAPacket() const override; int GetTargetBitrate() const override; EncodedInfo EncodeInternal(uint32_t rtp_timestamp, - const int16_t* audio, + rtc::ArrayView<const int16_t> audio, size_t max_encoded_bytes, uint8_t* encoded) override; void Reset() override; @@ -92,4 +92,4 @@ class AudioEncoderCng final : public AudioEncoder { } // namespace webrtc -#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_CNG_INCLUDE_AUDIO_ENCODER_CNG_H_ +#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_CNG_AUDIO_ENCODER_CNG_H_ 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 0b837a0f12..feb3ed1f0a 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 @@ -13,7 +13,7 @@ #include "testing/gtest/include/gtest/gtest.h" #include "webrtc/base/scoped_ptr.h" #include "webrtc/common_audio/vad/mock/mock_vad.h" -#include "webrtc/modules/audio_coding/codecs/cng/include/audio_encoder_cng.h" +#include "webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.h" #include "webrtc/modules/audio_coding/codecs/mock/mock_audio_encoder.h" using ::testing::Return; @@ -75,8 +75,10 @@ class AudioEncoderCngTest : public ::testing::Test { void Encode() { ASSERT_TRUE(cng_) << "Must call CreateCng() first."; - encoded_info_ = cng_->Encode(timestamp_, audio_, num_audio_samples_10ms_, - encoded_.size(), &encoded_[0]); + encoded_info_ = cng_->Encode( + timestamp_, + rtc::ArrayView<const int16_t>(audio_, num_audio_samples_10ms_), + encoded_.size(), &encoded_[0]); timestamp_ += static_cast<uint32_t>(num_audio_samples_10ms_); } diff --git a/webrtc/modules/audio_coding/codecs/cng/cng.gypi b/webrtc/modules/audio_coding/codecs/cng/cng.gypi index 78dc41a94f..c020f4740d 100644 --- a/webrtc/modules/audio_coding/codecs/cng/cng.gypi +++ b/webrtc/modules/audio_coding/codecs/cng/cng.gypi @@ -15,23 +15,13 @@ '<(webrtc_root)/common_audio/common_audio.gyp:common_audio', 'audio_encoder_interface', ], - 'include_dirs': [ - 'include', - '<(webrtc_root)', - ], - 'direct_dependent_settings': { - 'include_dirs': [ - 'include', - '<(webrtc_root)', - ], - }, 'sources': [ - 'include/audio_encoder_cng.h', - 'include/webrtc_cng.h', 'audio_encoder_cng.cc', - 'webrtc_cng.c', + 'audio_encoder_cng.h', 'cng_helpfuns.c', 'cng_helpfuns.h', + 'webrtc_cng.c', + 'webrtc_cng.h', ], }, ], # targets diff --git a/webrtc/modules/audio_coding/codecs/cng/include/webrtc_cng.h b/webrtc/modules/audio_coding/codecs/cng/webrtc_cng.h index 35660c4c3c..64bea1e26f 100644 --- a/webrtc/modules/audio_coding/codecs/cng/include/webrtc_cng.h +++ b/webrtc/modules/audio_coding/codecs/cng/webrtc_cng.h @@ -9,8 +9,8 @@ */ -#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_CNG_MAIN_INCLUDE_WEBRTC_CNG_H_ -#define WEBRTC_MODULES_AUDIO_CODING_CODECS_CNG_MAIN_INCLUDE_WEBRTC_CNG_H_ +#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_CNG_WEBRTC_CNG_H_ +#define WEBRTC_MODULES_AUDIO_CODING_CODECS_CNG_WEBRTC_CNG_H_ #include <stddef.h> #include "webrtc/typedefs.h" @@ -144,7 +144,7 @@ int16_t WebRtcCng_Generate(CNG_dec_inst* cng_inst, int16_t* outData, * WebRtcCng_GetErrorCodeEnc/Dec(...) * * This functions can be used to check the error code of a CNG instance. When - * a function returns -1 a error code will be set for that instance. The + * a function returns -1 a error code will be set for that instance. The * function below extract the code of the last error that occurred in the * specified instance. * @@ -160,4 +160,4 @@ int16_t WebRtcCng_GetErrorCodeDec(CNG_dec_inst* cng_inst); } #endif -#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_CNG_MAIN_INCLUDE_WEBRTC_CNG_H_ +#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_CNG_WEBRTC_CNG_H_ diff --git a/webrtc/modules/audio_coding/codecs/g711/audio_decoder_pcm.cc b/webrtc/modules/audio_coding/codecs/g711/audio_decoder_pcm.cc index 12306d9167..9757b4a010 100644 --- a/webrtc/modules/audio_coding/codecs/g711/audio_decoder_pcm.cc +++ b/webrtc/modules/audio_coding/codecs/g711/audio_decoder_pcm.cc @@ -8,9 +8,9 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include "webrtc/modules/audio_coding/codecs/g711/include/audio_decoder_pcm.h" +#include "webrtc/modules/audio_coding/codecs/g711/audio_decoder_pcm.h" -#include "webrtc/modules/audio_coding/codecs/g711/include/g711_interface.h" +#include "webrtc/modules/audio_coding/codecs/g711/g711_interface.h" namespace webrtc { diff --git a/webrtc/modules/audio_coding/codecs/g711/include/audio_decoder_pcm.h b/webrtc/modules/audio_coding/codecs/g711/audio_decoder_pcm.h index 7bc37d3b7a..9dc3a6fd7a 100644 --- a/webrtc/modules/audio_coding/codecs/g711/include/audio_decoder_pcm.h +++ b/webrtc/modules/audio_coding/codecs/g711/audio_decoder_pcm.h @@ -8,8 +8,8 @@ * be found in the AUTHORS file in the root of the source tree. */ -#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_G711_INCLUDE_AUDIO_DECODER_PCM_H_ -#define WEBRTC_MODULES_AUDIO_CODING_CODECS_G711_INCLUDE_AUDIO_DECODER_PCM_H_ +#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_G711_AUDIO_DECODER_PCM_H_ +#define WEBRTC_MODULES_AUDIO_CODING_CODECS_G711_AUDIO_DECODER_PCM_H_ #include "webrtc/base/checks.h" #include "webrtc/modules/audio_coding/codecs/audio_decoder.h" @@ -60,4 +60,4 @@ class AudioDecoderPcmA final : public AudioDecoder { } // namespace webrtc -#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_G711_INCLUDE_AUDIO_DECODER_PCM_H_ +#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_G711_AUDIO_DECODER_PCM_H_ 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 dde3cc6799..ff61db8e8d 100644 --- a/webrtc/modules/audio_coding/codecs/g711/audio_encoder_pcm.cc +++ b/webrtc/modules/audio_coding/codecs/g711/audio_encoder_pcm.cc @@ -8,27 +8,18 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include "webrtc/modules/audio_coding/codecs/g711/include/audio_encoder_pcm.h" +#include "webrtc/modules/audio_coding/codecs/g711/audio_encoder_pcm.h" #include <limits> #include "webrtc/base/checks.h" #include "webrtc/common_types.h" -#include "webrtc/modules/audio_coding/codecs/g711/include/g711_interface.h" +#include "webrtc/modules/audio_coding/codecs/g711/g711_interface.h" namespace webrtc { namespace { -int16_t NumSamplesPerFrame(int num_channels, - int frame_size_ms, - int sample_rate_hz) { - int samples_per_frame = num_channels * frame_size_ms * sample_rate_hz / 1000; - RTC_CHECK_LE(samples_per_frame, std::numeric_limits<int16_t>::max()) - << "Frame size too large."; - return static_cast<int16_t>(samples_per_frame); -} - template <typename T> typename T::Config CreateConfig(const CodecInst& codec_inst) { typename T::Config config; @@ -50,9 +41,8 @@ AudioEncoderPcm::AudioEncoderPcm(const Config& config, int sample_rate_hz) payload_type_(config.payload_type), num_10ms_frames_per_packet_( static_cast<size_t>(config.frame_size_ms / 10)), - full_frame_samples_(NumSamplesPerFrame(config.num_channels, - config.frame_size_ms, - sample_rate_hz_)), + full_frame_samples_( + config.num_channels * config.frame_size_ms * sample_rate_hz / 1000), first_timestamp_in_buffer_(0) { RTC_CHECK_GT(sample_rate_hz, 0) << "Sample rate must be larger than 0 Hz"; RTC_CHECK_EQ(config.frame_size_ms % 10, 0) @@ -70,7 +60,7 @@ int AudioEncoderPcm::SampleRateHz() const { return sample_rate_hz_; } -int AudioEncoderPcm::NumChannels() const { +size_t AudioEncoderPcm::NumChannels() const { return num_channels_; } @@ -83,21 +73,19 @@ size_t AudioEncoderPcm::Max10MsFramesInAPacket() const { } int AudioEncoderPcm::GetTargetBitrate() const { - return 8 * BytesPerSample() * SampleRateHz() * NumChannels(); + return static_cast<int>( + 8 * BytesPerSample() * SampleRateHz() * NumChannels()); } AudioEncoder::EncodedInfo AudioEncoderPcm::EncodeInternal( uint32_t rtp_timestamp, - const int16_t* audio, + rtc::ArrayView<const int16_t> audio, size_t max_encoded_bytes, uint8_t* encoded) { - const int num_samples = SampleRateHz() / 100 * NumChannels(); if (speech_buffer_.empty()) { first_timestamp_in_buffer_ = rtp_timestamp; } - for (int i = 0; i < num_samples; ++i) { - speech_buffer_.push_back(audio[i]); - } + speech_buffer_.insert(speech_buffer_.end(), audio.begin(), audio.end()); if (speech_buffer_.size() < full_frame_samples_) { return EncodedInfo(); } @@ -125,7 +113,7 @@ size_t AudioEncoderPcmA::EncodeCall(const int16_t* audio, return WebRtcG711_EncodeA(audio, input_len, encoded); } -int AudioEncoderPcmA::BytesPerSample() const { +size_t AudioEncoderPcmA::BytesPerSample() const { return 1; } @@ -138,7 +126,7 @@ size_t AudioEncoderPcmU::EncodeCall(const int16_t* audio, return WebRtcG711_EncodeU(audio, input_len, encoded); } -int AudioEncoderPcmU::BytesPerSample() const { +size_t AudioEncoderPcmU::BytesPerSample() const { return 1; } diff --git a/webrtc/modules/audio_coding/codecs/g711/include/audio_encoder_pcm.h b/webrtc/modules/audio_coding/codecs/g711/audio_encoder_pcm.h index e532f9b1bc..b839488628 100644 --- a/webrtc/modules/audio_coding/codecs/g711/include/audio_encoder_pcm.h +++ b/webrtc/modules/audio_coding/codecs/g711/audio_encoder_pcm.h @@ -8,8 +8,8 @@ * be found in the AUTHORS file in the root of the source tree. */ -#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_G711_INCLUDE_AUDIO_ENCODER_PCM_H_ -#define WEBRTC_MODULES_AUDIO_CODING_CODECS_G711_INCLUDE_AUDIO_ENCODER_PCM_H_ +#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_G711_AUDIO_ENCODER_PCM_H_ +#define WEBRTC_MODULES_AUDIO_CODING_CODECS_G711_AUDIO_ENCODER_PCM_H_ #include <vector> @@ -25,7 +25,7 @@ class AudioEncoderPcm : public AudioEncoder { bool IsOk() const; int frame_size_ms; - int num_channels; + size_t num_channels; int payload_type; protected: @@ -37,12 +37,12 @@ class AudioEncoderPcm : public AudioEncoder { size_t MaxEncodedBytes() const override; int SampleRateHz() const override; - int NumChannels() const override; + size_t NumChannels() const override; size_t Num10MsFramesInNextPacket() const override; size_t Max10MsFramesInAPacket() const override; int GetTargetBitrate() const override; EncodedInfo EncodeInternal(uint32_t rtp_timestamp, - const int16_t* audio, + rtc::ArrayView<const int16_t> audio, size_t max_encoded_bytes, uint8_t* encoded) override; void Reset() override; @@ -54,11 +54,11 @@ class AudioEncoderPcm : public AudioEncoder { size_t input_len, uint8_t* encoded) = 0; - virtual int BytesPerSample() const = 0; + virtual size_t BytesPerSample() const = 0; private: const int sample_rate_hz_; - const int num_channels_; + const size_t num_channels_; const int payload_type_; const size_t num_10ms_frames_per_packet_; const size_t full_frame_samples_; @@ -83,7 +83,7 @@ class AudioEncoderPcmA final : public AudioEncoderPcm { size_t input_len, uint8_t* encoded) override; - int BytesPerSample() const override; + size_t BytesPerSample() const override; private: static const int kSampleRateHz = 8000; @@ -105,7 +105,7 @@ class AudioEncoderPcmU final : public AudioEncoderPcm { size_t input_len, uint8_t* encoded) override; - int BytesPerSample() const override; + size_t BytesPerSample() const override; private: static const int kSampleRateHz = 8000; @@ -114,4 +114,4 @@ class AudioEncoderPcmU final : public AudioEncoderPcm { } // namespace webrtc -#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_G711_INCLUDE_AUDIO_ENCODER_PCM_H_ +#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_G711_AUDIO_ENCODER_PCM_H_ diff --git a/webrtc/modules/audio_coding/codecs/g711/g711.gypi b/webrtc/modules/audio_coding/codecs/g711/g711.gypi index d35d7874e7..4b902809ea 100644 --- a/webrtc/modules/audio_coding/codecs/g711/g711.gypi +++ b/webrtc/modules/audio_coding/codecs/g711/g711.gypi @@ -14,25 +14,15 @@ 'dependencies': [ 'audio_encoder_interface', ], - 'include_dirs': [ - 'include', - '<(webrtc_root)', - ], - 'direct_dependent_settings': { - 'include_dirs': [ - 'include', - '<(webrtc_root)', - ], - }, 'sources': [ - 'include/g711_interface.h', - 'include/audio_decoder_pcm.h', - 'include/audio_encoder_pcm.h', + 'audio_decoder_pcm.cc', + 'audio_decoder_pcm.h', + 'audio_encoder_pcm.cc', + 'audio_encoder_pcm.h', 'g711_interface.c', + 'g711_interface.h', 'g711.c', 'g711.h', - 'audio_decoder_pcm.cc', - 'audio_encoder_pcm.cc', ], }, ], # targets diff --git a/webrtc/modules/audio_coding/codecs/g711/include/g711_interface.h b/webrtc/modules/audio_coding/codecs/g711/g711_interface.h index f9867f4504..00854bbb2c 100644 --- a/webrtc/modules/audio_coding/codecs/g711/include/g711_interface.h +++ b/webrtc/modules/audio_coding/codecs/g711/g711_interface.h @@ -8,8 +8,8 @@ * be found in the AUTHORS file in the root of the source tree. */ -#ifndef MODULES_AUDIO_CODING_CODECS_G711_MAIN_INCLUDE_G711_INTERFACE_H_ -#define MODULES_AUDIO_CODING_CODECS_G711_MAIN_INCLUDE_G711_INTERFACE_H_ +#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_G711_G711_INTERFACE_H_ +#define WEBRTC_MODULES_AUDIO_CODING_CODECS_G711_G711_INTERFACE_H_ #include "webrtc/typedefs.h" @@ -132,4 +132,4 @@ int16_t WebRtcG711_Version(char* version, int16_t lenBytes); } #endif -#endif /* MODULES_AUDIO_CODING_CODECS_G711_MAIN_INCLUDE_G711_INCLUDE_H_ */ +#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_G711_G711_INTERFACE_H_ diff --git a/webrtc/modules/audio_coding/codecs/g711/test/testG711.cc b/webrtc/modules/audio_coding/codecs/g711/test/testG711.cc index 94248f7a66..5675b1f8b0 100644 --- a/webrtc/modules/audio_coding/codecs/g711/test/testG711.cc +++ b/webrtc/modules/audio_coding/codecs/g711/test/testG711.cc @@ -17,7 +17,7 @@ #include <string.h> /* include API */ -#include "g711_interface.h" +#include "webrtc/modules/audio_coding/codecs/g711/g711_interface.h" /* Runtime statistics */ #include <time.h> diff --git a/webrtc/modules/audio_coding/codecs/g722/audio_decoder_g722.cc b/webrtc/modules/audio_coding/codecs/g722/audio_decoder_g722.cc index 55ebe7a315..7676e90d9e 100644 --- a/webrtc/modules/audio_coding/codecs/g722/audio_decoder_g722.cc +++ b/webrtc/modules/audio_coding/codecs/g722/audio_decoder_g722.cc @@ -8,12 +8,12 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include "webrtc/modules/audio_coding/codecs/g722/include/audio_decoder_g722.h" +#include "webrtc/modules/audio_coding/codecs/g722/audio_decoder_g722.h" #include <string.h> #include "webrtc/base/checks.h" -#include "webrtc/modules/audio_coding/codecs/g722/include/g722_interface.h" +#include "webrtc/modules/audio_coding/codecs/g722/g722_interface.h" namespace webrtc { diff --git a/webrtc/modules/audio_coding/codecs/g722/include/audio_decoder_g722.h b/webrtc/modules/audio_coding/codecs/g722/audio_decoder_g722.h index b9fa68fc48..7cc2ea9877 100644 --- a/webrtc/modules/audio_coding/codecs/g722/include/audio_decoder_g722.h +++ b/webrtc/modules/audio_coding/codecs/g722/audio_decoder_g722.h @@ -8,8 +8,8 @@ * be found in the AUTHORS file in the root of the source tree. */ -#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_G722_INCLUDE_AUDIO_DECODER_G722_H_ -#define WEBRTC_MODULES_AUDIO_CODING_CODECS_G722_INCLUDE_AUDIO_DECODER_G722_H_ +#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_G722_AUDIO_DECODER_G722_H_ +#define WEBRTC_MODULES_AUDIO_CODING_CODECS_G722_AUDIO_DECODER_G722_H_ #include "webrtc/modules/audio_coding/codecs/audio_decoder.h" @@ -69,4 +69,4 @@ class AudioDecoderG722Stereo final : public AudioDecoder { } // namespace webrtc -#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_G722_INCLUDE_AUDIO_DECODER_G722_H_ +#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_G722_AUDIO_DECODER_G722_H_ 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 43b097fa0e..d7203b9da3 100644 --- a/webrtc/modules/audio_coding/codecs/g722/audio_encoder_g722.cc +++ b/webrtc/modules/audio_coding/codecs/g722/audio_encoder_g722.cc @@ -8,12 +8,12 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include "webrtc/modules/audio_coding/codecs/g722/include/audio_encoder_g722.h" +#include "webrtc/modules/audio_coding/codecs/g722/audio_encoder_g722.h" #include <limits> #include "webrtc/base/checks.h" #include "webrtc/common_types.h" -#include "webrtc/modules/audio_coding/codecs/g722/include/g722_interface.h" +#include "webrtc/modules/audio_coding/codecs/g722/g722_interface.h" namespace webrtc { @@ -48,7 +48,7 @@ AudioEncoderG722::AudioEncoderG722(const Config& config) RTC_CHECK(config.IsOk()); const size_t samples_per_channel = kSampleRateHz / 100 * num_10ms_frames_per_packet_; - for (int i = 0; i < num_channels_; ++i) { + for (size_t i = 0; i < num_channels_; ++i) { encoders_[i].speech_buffer.reset(new int16_t[samples_per_channel]); encoders_[i].encoded_buffer.SetSize(samples_per_channel / 2); } @@ -68,7 +68,7 @@ int AudioEncoderG722::SampleRateHz() const { return kSampleRateHz; } -int AudioEncoderG722::NumChannels() const { +size_t AudioEncoderG722::NumChannels() const { return num_channels_; } @@ -88,12 +88,12 @@ size_t AudioEncoderG722::Max10MsFramesInAPacket() const { int AudioEncoderG722::GetTargetBitrate() const { // 4 bits/sample, 16000 samples/s/channel. - return 64000 * NumChannels(); + return static_cast<int>(64000 * NumChannels()); } AudioEncoder::EncodedInfo AudioEncoderG722::EncodeInternal( uint32_t rtp_timestamp, - const int16_t* audio, + rtc::ArrayView<const int16_t> audio, size_t max_encoded_bytes, uint8_t* encoded) { RTC_CHECK_GE(max_encoded_bytes, MaxEncodedBytes()); @@ -104,7 +104,7 @@ AudioEncoder::EncodedInfo AudioEncoderG722::EncodeInternal( // Deinterleave samples and save them in each channel's buffer. const size_t start = kSampleRateHz / 100 * num_10ms_frames_buffered_; for (size_t i = 0; i < kSampleRateHz / 100; ++i) - for (int j = 0; j < num_channels_; ++j) + for (size_t j = 0; j < num_channels_; ++j) encoders_[j].speech_buffer[start + i] = audio[i * num_channels_ + j]; // If we don't yet have enough samples for a packet, we're done for now. @@ -116,7 +116,7 @@ AudioEncoder::EncodedInfo AudioEncoderG722::EncodeInternal( RTC_CHECK_EQ(num_10ms_frames_buffered_, num_10ms_frames_per_packet_); num_10ms_frames_buffered_ = 0; const size_t samples_per_channel = SamplesPerChannel(); - for (int i = 0; i < num_channels_; ++i) { + for (size_t i = 0; i < num_channels_; ++i) { const size_t encoded = WebRtcG722_Encode( encoders_[i].encoder, encoders_[i].speech_buffer.get(), samples_per_channel, encoders_[i].encoded_buffer.data()); @@ -127,12 +127,12 @@ AudioEncoder::EncodedInfo AudioEncoderG722::EncodeInternal( // channel and the interleaved stream encodes two samples per byte, most // significant half first. for (size_t i = 0; i < samples_per_channel / 2; ++i) { - for (int j = 0; j < num_channels_; ++j) { + for (size_t j = 0; j < num_channels_; ++j) { uint8_t two_samples = encoders_[j].encoded_buffer.data()[i]; interleave_buffer_.data()[j] = two_samples >> 4; interleave_buffer_.data()[num_channels_ + j] = two_samples & 0xf; } - for (int j = 0; j < num_channels_; ++j) + for (size_t j = 0; j < num_channels_; ++j) encoded[i * num_channels_ + j] = interleave_buffer_.data()[2 * j] << 4 | interleave_buffer_.data()[2 * j + 1]; } @@ -145,7 +145,7 @@ AudioEncoder::EncodedInfo AudioEncoderG722::EncodeInternal( void AudioEncoderG722::Reset() { num_10ms_frames_buffered_ = 0; - for (int i = 0; i < num_channels_; ++i) + for (size_t i = 0; i < num_channels_; ++i) RTC_CHECK_EQ(0, WebRtcG722_EncoderInit(encoders_[i].encoder)); } diff --git a/webrtc/modules/audio_coding/codecs/g722/include/audio_encoder_g722.h b/webrtc/modules/audio_coding/codecs/g722/audio_encoder_g722.h index 12495c5f48..07d767e778 100644 --- a/webrtc/modules/audio_coding/codecs/g722/include/audio_encoder_g722.h +++ b/webrtc/modules/audio_coding/codecs/g722/audio_encoder_g722.h @@ -8,13 +8,13 @@ * be found in the AUTHORS file in the root of the source tree. */ -#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_G722_INCLUDE_AUDIO_ENCODER_G722_H_ -#define WEBRTC_MODULES_AUDIO_CODING_CODECS_G722_INCLUDE_AUDIO_ENCODER_G722_H_ +#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_G722_AUDIO_ENCODER_G722_H_ +#define WEBRTC_MODULES_AUDIO_CODING_CODECS_G722_AUDIO_ENCODER_G722_H_ #include "webrtc/base/buffer.h" #include "webrtc/base/scoped_ptr.h" #include "webrtc/modules/audio_coding/codecs/audio_encoder.h" -#include "webrtc/modules/audio_coding/codecs/g722/include/g722_interface.h" +#include "webrtc/modules/audio_coding/codecs/g722/g722_interface.h" namespace webrtc { @@ -27,7 +27,7 @@ class AudioEncoderG722 final : public AudioEncoder { int payload_type = 9; int frame_size_ms = 20; - int num_channels = 1; + size_t num_channels = 1; }; explicit AudioEncoderG722(const Config& config); @@ -36,13 +36,13 @@ class AudioEncoderG722 final : public AudioEncoder { size_t MaxEncodedBytes() const override; int SampleRateHz() const override; - int NumChannels() const override; + size_t NumChannels() const override; int RtpTimestampRateHz() const override; size_t Num10MsFramesInNextPacket() const override; size_t Max10MsFramesInAPacket() const override; int GetTargetBitrate() const override; EncodedInfo EncodeInternal(uint32_t rtp_timestamp, - const int16_t* audio, + rtc::ArrayView<const int16_t> audio, size_t max_encoded_bytes, uint8_t* encoded) override; void Reset() override; @@ -59,7 +59,7 @@ class AudioEncoderG722 final : public AudioEncoder { size_t SamplesPerChannel() const; - const int num_channels_; + const size_t num_channels_; const int payload_type_; const size_t num_10ms_frames_per_packet_; size_t num_10ms_frames_buffered_; @@ -70,4 +70,4 @@ class AudioEncoderG722 final : public AudioEncoder { }; } // namespace webrtc -#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_G722_INCLUDE_AUDIO_ENCODER_G722_H_ +#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_G722_AUDIO_ENCODER_G722_H_ diff --git a/webrtc/modules/audio_coding/codecs/g722/g722.gypi b/webrtc/modules/audio_coding/codecs/g722/g722.gypi index aad11e3685..756fabe345 100644 --- a/webrtc/modules/audio_coding/codecs/g722/g722.gypi +++ b/webrtc/modules/audio_coding/codecs/g722/g722.gypi @@ -13,26 +13,16 @@ 'dependencies': [ 'audio_encoder_interface', ], - 'include_dirs': [ - 'include', - '<(webrtc_root)', - ], - 'direct_dependent_settings': { - 'include_dirs': [ - 'include', - '<(webrtc_root)', - ], - }, 'sources': [ 'audio_decoder_g722.cc', + 'audio_decoder_g722.h', 'audio_encoder_g722.cc', - 'include/audio_decoder_g722.h', - 'include/audio_encoder_g722.h', - 'include/g722_interface.h', + 'audio_encoder_g722.h', 'g722_interface.c', - 'g722_encode.c', + 'g722_interface.h', 'g722_decode.c', 'g722_enc_dec.h', + 'g722_encode.c', ], }, ], # targets diff --git a/webrtc/modules/audio_coding/codecs/g722/include/g722_interface.h b/webrtc/modules/audio_coding/codecs/g722/g722_interface.h index 5a46ef2ad5..b411ef0e8e 100644 --- a/webrtc/modules/audio_coding/codecs/g722/include/g722_interface.h +++ b/webrtc/modules/audio_coding/codecs/g722/g722_interface.h @@ -8,8 +8,8 @@ * be found in the AUTHORS file in the root of the source tree. */ -#ifndef MODULES_AUDIO_CODING_CODECS_G722_MAIN_INCLUDE_G722_INTERFACE_H_ -#define MODULES_AUDIO_CODING_CODECS_G722_MAIN_INCLUDE_G722_INTERFACE_H_ +#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_G722_G722_INTERFACE_H_ +#define WEBRTC_MODULES_AUDIO_CODING_CODECS_G722_G722_INTERFACE_H_ #include "webrtc/typedefs.h" @@ -179,4 +179,4 @@ int16_t WebRtcG722_Version(char *versionStr, short len); #endif -#endif /* MODULES_AUDIO_CODING_CODECS_G722_MAIN_INCLUDE_G722_INCLUDE_H_ */ +#endif /* WEBRTC_MODULES_AUDIO_CODING_CODECS_G722_G722_INTERFACE_H_ */ diff --git a/webrtc/modules/audio_coding/codecs/g722/test/testG722.cc b/webrtc/modules/audio_coding/codecs/g722/test/testG722.cc index b473c138c6..c55a2eb357 100644 --- a/webrtc/modules/audio_coding/codecs/g722/test/testG722.cc +++ b/webrtc/modules/audio_coding/codecs/g722/test/testG722.cc @@ -18,7 +18,7 @@ #include "webrtc/typedefs.h" /* include API */ -#include "g722_interface.h" +#include "webrtc/modules/audio_coding/codecs/g722/g722_interface.h" /* Runtime statistics */ #include <time.h> diff --git a/webrtc/modules/audio_coding/codecs/ilbc/audio_decoder_ilbc.cc b/webrtc/modules/audio_coding/codecs/ilbc/audio_decoder_ilbc.cc index ba6284f33d..9ae0e1a95e 100644 --- a/webrtc/modules/audio_coding/codecs/ilbc/audio_decoder_ilbc.cc +++ b/webrtc/modules/audio_coding/codecs/ilbc/audio_decoder_ilbc.cc @@ -8,10 +8,10 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include "webrtc/modules/audio_coding/codecs/ilbc/include/audio_decoder_ilbc.h" +#include "webrtc/modules/audio_coding/codecs/ilbc/audio_decoder_ilbc.h" #include "webrtc/base/checks.h" -#include "webrtc/modules/audio_coding/codecs/ilbc/include/ilbc.h" +#include "webrtc/modules/audio_coding/codecs/ilbc/ilbc.h" namespace webrtc { diff --git a/webrtc/modules/audio_coding/codecs/ilbc/include/audio_decoder_ilbc.h b/webrtc/modules/audio_coding/codecs/ilbc/audio_decoder_ilbc.h index fd52da7986..e890635da0 100644 --- a/webrtc/modules/audio_coding/codecs/ilbc/include/audio_decoder_ilbc.h +++ b/webrtc/modules/audio_coding/codecs/ilbc/audio_decoder_ilbc.h @@ -8,8 +8,8 @@ * be found in the AUTHORS file in the root of the source tree. */ -#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_INCLUDE_AUDIO_DECODER_ILBC_H_ -#define WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_INCLUDE_AUDIO_DECODER_ILBC_H_ +#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_AUDIO_DECODER_ILBC_H_ +#define WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_AUDIO_DECODER_ILBC_H_ #include "webrtc/modules/audio_coding/codecs/audio_decoder.h" @@ -39,4 +39,4 @@ class AudioDecoderIlbc final : public AudioDecoder { }; } // namespace webrtc -#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_INCLUDE_AUDIO_DECODER_ILBC_H_ +#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_AUDIO_DECODER_ILBC_H_ 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 065dc06817..ddd6dde31c 100644 --- a/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc +++ b/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc @@ -8,13 +8,13 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include "webrtc/modules/audio_coding/codecs/ilbc/include/audio_encoder_ilbc.h" +#include "webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.h" -#include <cstring> +#include <algorithm> #include <limits> #include "webrtc/base/checks.h" #include "webrtc/common_types.h" -#include "webrtc/modules/audio_coding/codecs/ilbc/include/ilbc.h" +#include "webrtc/modules/audio_coding/codecs/ilbc/ilbc.h" namespace webrtc { @@ -64,7 +64,7 @@ int AudioEncoderIlbc::SampleRateHz() const { return kSampleRateHz; } -int AudioEncoderIlbc::NumChannels() const { +size_t AudioEncoderIlbc::NumChannels() const { return 1; } @@ -91,7 +91,7 @@ int AudioEncoderIlbc::GetTargetBitrate() const { AudioEncoder::EncodedInfo AudioEncoderIlbc::EncodeInternal( uint32_t rtp_timestamp, - const int16_t* audio, + rtc::ArrayView<const int16_t> audio, size_t max_encoded_bytes, uint8_t* encoded) { RTC_DCHECK_GE(max_encoded_bytes, RequiredOutputSizeBytes()); @@ -101,9 +101,9 @@ AudioEncoder::EncodedInfo AudioEncoderIlbc::EncodeInternal( first_timestamp_in_buffer_ = rtp_timestamp; // Buffer input. - std::memcpy(input_buffer_ + kSampleRateHz / 100 * num_10ms_frames_buffered_, - audio, - kSampleRateHz / 100 * sizeof(audio[0])); + RTC_DCHECK_EQ(static_cast<size_t>(kSampleRateHz / 100), audio.size()); + std::copy(audio.cbegin(), audio.cend(), + input_buffer_ + kSampleRateHz / 100 * num_10ms_frames_buffered_); // If we don't yet have enough buffered input for a whole packet, we're done // for now. diff --git a/webrtc/modules/audio_coding/codecs/ilbc/include/audio_encoder_ilbc.h b/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.h index 2bb3101fd4..102a274642 100644 --- a/webrtc/modules/audio_coding/codecs/ilbc/include/audio_encoder_ilbc.h +++ b/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.h @@ -8,12 +8,12 @@ * be found in the AUTHORS file in the root of the source tree. */ -#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_INCLUDE_AUDIO_ENCODER_ILBC_H_ -#define WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_INCLUDE_AUDIO_ENCODER_ILBC_H_ +#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_AUDIO_ENCODER_ILBC_H_ +#define WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_AUDIO_ENCODER_ILBC_H_ #include "webrtc/base/scoped_ptr.h" #include "webrtc/modules/audio_coding/codecs/audio_encoder.h" -#include "webrtc/modules/audio_coding/codecs/ilbc/include/ilbc.h" +#include "webrtc/modules/audio_coding/codecs/ilbc/ilbc.h" namespace webrtc { @@ -36,12 +36,12 @@ class AudioEncoderIlbc final : public AudioEncoder { size_t MaxEncodedBytes() const override; int SampleRateHz() const override; - int NumChannels() const override; + size_t NumChannels() const override; size_t Num10MsFramesInNextPacket() const override; size_t Max10MsFramesInAPacket() const override; int GetTargetBitrate() const override; EncodedInfo EncodeInternal(uint32_t rtp_timestamp, - const int16_t* audio, + rtc::ArrayView<const int16_t> audio, size_t max_encoded_bytes, uint8_t* encoded) override; void Reset() override; @@ -60,4 +60,4 @@ class AudioEncoderIlbc final : public AudioEncoder { }; } // namespace webrtc -#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_INCLUDE_AUDIO_ENCODER_ILBC_H_ +#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_AUDIO_ENCODER_ILBC_H_ diff --git a/webrtc/modules/audio_coding/codecs/ilbc/ilbc.gypi b/webrtc/modules/audio_coding/codecs/ilbc/ilbc.gypi index ac9f2e7b39..ffb0574588 100644 --- a/webrtc/modules/audio_coding/codecs/ilbc/ilbc.gypi +++ b/webrtc/modules/audio_coding/codecs/ilbc/ilbc.gypi @@ -15,24 +15,13 @@ '<(webrtc_root)/common_audio/common_audio.gyp:common_audio', 'audio_encoder_interface', ], - 'include_dirs': [ - 'include', - '<(webrtc_root)', - ], - 'direct_dependent_settings': { - 'include_dirs': [ - 'include', - '<(webrtc_root)', - ], - }, 'sources': [ - 'include/audio_decoder_ilbc.h', - 'include/audio_encoder_ilbc.h', - 'include/ilbc.h', 'abs_quant.c', 'abs_quant_loop.c', 'audio_decoder_ilbc.cc', + 'audio_decoder_ilbc.h', 'audio_encoder_ilbc.cc', + 'audio_encoder_ilbc.h', 'augmented_cb_corr.c', 'bw_expand.c', 'cb_construct.c', @@ -65,6 +54,7 @@ 'hp_input.c', 'hp_output.c', 'ilbc.c', + 'ilbc.h', 'index_conv_dec.c', 'index_conv_enc.c', 'init_decode.c', diff --git a/webrtc/modules/audio_coding/codecs/ilbc/include/ilbc.h b/webrtc/modules/audio_coding/codecs/ilbc/ilbc.h index 3be9142c8c..c021f5be52 100644 --- a/webrtc/modules/audio_coding/codecs/ilbc/include/ilbc.h +++ b/webrtc/modules/audio_coding/codecs/ilbc/ilbc.h @@ -15,8 +15,8 @@ * */ -#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_INCLUDE_ILBC_H_ -#define WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_INCLUDE_ILBC_H_ +#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_ILBC_H_ +#define WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_ILBC_H_ #include <stddef.h> @@ -53,10 +53,10 @@ extern "C" { * memory location * * Input: - * - XXX_xxxinst : Pointer to created instance that should be - * assigned - * - ILBCXXX_inst_Addr : Pointer to the desired memory space - * - size : The size that this structure occupies (in Word16) + * - XXX_xxxinst : Pointer to created instance that should be + * assigned + * - ILBCXXX_inst_Addr : Pointer to the desired memory space + * - size : The size that this structure occupies (in Word16) * * Return value : 0 - Ok * -1 - Error @@ -76,10 +76,10 @@ extern "C" { * These functions create a instance to the specified structure * * Input: - * - XXX_inst : Pointer to created instance that should be created + * - XXX_inst : Pointer to created instance that should be created * - * Return value : 0 - Ok - * -1 - Error + * Return value : 0 - Ok + * -1 - Error */ int16_t WebRtcIlbcfix_EncoderCreate(IlbcEncoderInstance **iLBC_encinst); @@ -255,4 +255,4 @@ extern "C" { } #endif -#endif +#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_ILBC_H_ diff --git a/webrtc/modules/audio_coding/codecs/ilbc/test/iLBC_test.c b/webrtc/modules/audio_coding/codecs/ilbc/test/iLBC_test.c index 1199c816d8..b440c7a45f 100644 --- a/webrtc/modules/audio_coding/codecs/ilbc/test/iLBC_test.c +++ b/webrtc/modules/audio_coding/codecs/ilbc/test/iLBC_test.c @@ -19,7 +19,7 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#include "ilbc.h" +#include "webrtc/modules/audio_coding/codecs/ilbc/ilbc.h" /*---------------------------------------------------------------* * Main program to test iLBC encoding and decoding diff --git a/webrtc/modules/audio_coding/codecs/ilbc/test/iLBC_testLib.c b/webrtc/modules/audio_coding/codecs/ilbc/test/iLBC_testLib.c index f14192c2ae..7ffa4a7d0e 100644 --- a/webrtc/modules/audio_coding/codecs/ilbc/test/iLBC_testLib.c +++ b/webrtc/modules/audio_coding/codecs/ilbc/test/iLBC_testLib.c @@ -21,7 +21,7 @@ iLBC_test.c #include <stdio.h> #include <string.h> #include <time.h> -#include "ilbc.h" +#include "webrtc/modules/audio_coding/codecs/ilbc/ilbc.h" //#define JUNK_DATA #ifdef JUNK_DATA diff --git a/webrtc/modules/audio_coding/codecs/ilbc/test/iLBC_testprogram.c b/webrtc/modules/audio_coding/codecs/ilbc/test/iLBC_testprogram.c index 303ede3e63..5454948287 100644 --- a/webrtc/modules/audio_coding/codecs/ilbc/test/iLBC_testprogram.c +++ b/webrtc/modules/audio_coding/codecs/ilbc/test/iLBC_testprogram.c @@ -21,13 +21,13 @@ #include <stdio.h> #include <string.h> -#include "defines.h" -#include "nit_encode.h" -#include "encode.h" -#include "init_decode.h" -#include "decode.h" -#include "constants.h" -#include "ilbc.h" +#include "webrtc/modules/audio_coding/codecs/ilbc/defines.h" +#include "webrtc/modules/audio_coding/codecs/ilbc/nit_encode.h" +#include "webrtc/modules/audio_coding/codecs/ilbc/encode.h" +#include "webrtc/modules/audio_coding/codecs/ilbc/init_decode.h" +#include "webrtc/modules/audio_coding/codecs/ilbc/decode.h" +#include "webrtc/modules/audio_coding/codecs/ilbc/constants.h" +#include "webrtc/modules/audio_coding/codecs/ilbc/ilbc.h" #define ILBCNOOFWORDS_MAX (NO_OF_BYTES_30MS)/2 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 b15ad942df..321dac3567 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,12 +56,12 @@ class AudioEncoderIsacT final : public AudioEncoder { size_t MaxEncodedBytes() const override; int SampleRateHz() const override; - int NumChannels() const override; + size_t NumChannels() const override; size_t Num10MsFramesInNextPacket() const override; size_t Max10MsFramesInAPacket() const override; int GetTargetBitrate() const override; EncodedInfo EncodeInternal(uint32_t rtp_timestamp, - const int16_t* audio, + rtc::ArrayView<const int16_t> audio, size_t max_encoded_bytes, uint8_t* encoded) override; void Reset() 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 279f80d6fc..d4438cc775 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 @@ -88,7 +88,7 @@ int AudioEncoderIsacT<T>::SampleRateHz() const { } template <typename T> -int AudioEncoderIsacT<T>::NumChannels() const { +size_t AudioEncoderIsacT<T>::NumChannels() const { return 1; } @@ -115,7 +115,7 @@ int AudioEncoderIsacT<T>::GetTargetBitrate() const { template <typename T> AudioEncoder::EncodedInfo AudioEncoderIsacT<T>::EncodeInternal( uint32_t rtp_timestamp, - const int16_t* audio, + rtc::ArrayView<const int16_t> audio, size_t max_encoded_bytes, uint8_t* encoded) { if (!packet_in_progress_) { @@ -127,7 +127,7 @@ AudioEncoder::EncodedInfo AudioEncoderIsacT<T>::EncodeInternal( IsacBandwidthInfo bwinfo = bwinfo_->Get(); T::SetBandwidthInfo(isac_state_, &bwinfo); } - int r = T::Encode(isac_state_, audio, encoded); + int r = T::Encode(isac_state_, audio.data(), encoded); RTC_CHECK_GE(r, 0) << "Encode failed (error code " << T::GetErrorCode(isac_state_) << ")"; diff --git a/webrtc/modules/audio_coding/codecs/isac/fix/test/isac_speed_test.cc b/webrtc/modules/audio_coding/codecs/isac/fix/test/isac_speed_test.cc index 632a4fe825..32f36c5261 100644 --- a/webrtc/modules/audio_coding/codecs/isac/fix/test/isac_speed_test.cc +++ b/webrtc/modules/audio_coding/codecs/isac/fix/test/isac_speed_test.cc @@ -92,7 +92,7 @@ float IsacSpeedTest::DecodeABlock(const uint8_t* bit_stream, value = WebRtcIsacfix_Decode(ISACFIX_main_inst_, bit_stream, encoded_bytes, out_data, &audio_type); clocks = clock() - clocks; - EXPECT_EQ(output_length_sample_, value); + EXPECT_EQ(output_length_sample_, static_cast<size_t>(value)); return 1000.0 * clocks / CLOCKS_PER_SEC; } diff --git a/webrtc/modules/audio_coding/codecs/isac/fix/test/test_iSACfixfloat.c b/webrtc/modules/audio_coding/codecs/isac/fix/test/test_iSACfixfloat.c index b82af1c059..ac0fa350c9 100644 --- a/webrtc/modules/audio_coding/codecs/isac/fix/test/test_iSACfixfloat.c +++ b/webrtc/modules/audio_coding/codecs/isac/fix/test/test_iSACfixfloat.c @@ -112,12 +112,12 @@ int main(int argc, char* argv[]) { char version_number[20]; int mode = -1, tmp, nbTest = 0; /*,sss;*/ -#ifdef _DEBUG +#if !defined(NDEBUG) FILE* fy; double kbps; size_t totalbits = 0; int totalsmpls = 0; -#endif /* _DEBUG */ +#endif /* only one structure used for ISAC encoder */ ISAC_MainStruct* ISAC_main_inst; @@ -126,12 +126,12 @@ int main(int argc, char* argv[]) { BottleNeckModel BN_data; f_bn = NULL; -#ifdef _DEBUG +#if !defined(NDEBUG) fy = fopen("bit_rate.dat", "w"); fclose(fy); fy = fopen("bytes_frames.dat", "w"); fclose(fy); -#endif /* _DEBUG */ +#endif // histfile = fopen("histo.dat", "ab"); // ratefile = fopen("rates.dat", "ab"); @@ -589,7 +589,7 @@ int main(int argc, char* argv[]) { fprintf(stderr, " \rframe = %d", framecnt); framecnt++; -#ifdef _DEBUG +#if !defined(NDEBUG) totalsmpls += declen; totalbits += 8 * stream_len; @@ -598,15 +598,15 @@ int main(int argc, char* argv[]) { fprintf(fy, "Frame %i = %0.14f\n", framecnt, kbps); fclose(fy); -#endif /* _DEBUG */ +#endif } -#ifdef _DEBUG +#if !defined(NDEBUG) printf("\n\ntotal bits = %" PRIuS " bits", totalbits); printf("\nmeasured average bitrate = %0.3f kbits/s", (double)totalbits * (FS / 1000) / totalsmpls); printf("\n"); -#endif /* _DEBUG */ +#endif /* Runtime statistics */ runtime = (double)(clock() / (double)CLOCKS_PER_SEC - starttime); diff --git a/webrtc/modules/audio_coding/codecs/isac/isac_test.gypi b/webrtc/modules/audio_coding/codecs/isac/isac_test.gypi index 47944b7f42..54cedb4e18 100644 --- a/webrtc/modules/audio_coding/codecs/isac/isac_test.gypi +++ b/webrtc/modules/audio_coding/codecs/isac/isac_test.gypi @@ -25,6 +25,19 @@ './main/test/simpleKenny.c', './main/util/utility.c', ], + 'conditions': [ + ['OS=="win" and clang==1', { + 'msvs_settings': { + 'VCCLCompilerTool': { + 'AdditionalOptions': [ + # Disable warnings failing when compiling with Clang on Windows. + # https://bugs.chromium.org/p/webrtc/issues/detail?id=5366 + '-Wno-format', + ], + }, + }, + }], + ], # conditions. }, # ReleaseTest-API { @@ -63,6 +76,5 @@ './main/util/utility.c', ], }, - ], } diff --git a/webrtc/modules/audio_coding/codecs/isac/isacfix.gypi b/webrtc/modules/audio_coding/codecs/isac/isacfix.gypi index f10de56c5a..7730d16dc9 100644 --- a/webrtc/modules/audio_coding/codecs/isac/isacfix.gypi +++ b/webrtc/modules/audio_coding/codecs/isac/isacfix.gypi @@ -77,11 +77,6 @@ 'fix/source/structs.h', ], 'conditions': [ - ['OS!="win"', { - 'defines': [ - 'WEBRTC_LINUX', - ], - }], ['target_arch=="arm" and arm_version>=7', { 'sources': [ 'fix/source/lattice_armv7.S', diff --git a/webrtc/modules/audio_coding/codecs/isac/main/test/ReleaseTest-API/ReleaseTest-API.cc b/webrtc/modules/audio_coding/codecs/isac/main/test/ReleaseTest-API/ReleaseTest-API.cc index 2e5badd82c..4cef8f7b3b 100644 --- a/webrtc/modules/audio_coding/codecs/isac/main/test/ReleaseTest-API/ReleaseTest-API.cc +++ b/webrtc/modules/audio_coding/codecs/isac/main/test/ReleaseTest-API/ReleaseTest-API.cc @@ -73,10 +73,10 @@ int main(int argc, char* argv[]) { FILE* plFile; int32_t sendBN; -#ifdef _DEBUG +#if !defined(NDEBUG) FILE* fy; double kbps; -#endif /* _DEBUG */ +#endif size_t totalbits = 0; int totalsmpls = 0; @@ -103,12 +103,12 @@ int main(int argc, char* argv[]) { BottleNeckModel BN_data; -#ifdef _DEBUG +#if !defined(NDEBUG) fy = fopen("bit_rate.dat", "w"); fclose(fy); fy = fopen("bytes_frames.dat", "w"); fclose(fy); -#endif /* _DEBUG */ +#endif /* Handling wrong input arguments in the command line */ if ((argc < 3) || (argc > 17)) { @@ -885,14 +885,14 @@ int main(int argc, char* argv[]) { totalsmpls += declen; totalbits += 8 * stream_len; -#ifdef _DEBUG +#if !defined(NDEBUG) kbps = ((double)sampFreqKHz * 1000.) / ((double)cur_framesmpls) * 8.0 * stream_len / 1000.0; // kbits/s fy = fopen("bit_rate.dat", "a"); fprintf(fy, "Frame %i = %0.14f\n", framecnt, kbps); fclose(fy); -#endif /* _DEBUG */ +#endif } printf("\n"); printf("total bits = %" PRIuS " bits\n", totalbits); 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 95426d89e1..66adde4be1 100644 --- a/webrtc/modules/audio_coding/codecs/mock/mock_audio_encoder.h +++ b/webrtc/modules/audio_coding/codecs/mock/mock_audio_encoder.h @@ -24,7 +24,7 @@ class MockAudioEncoder final : public AudioEncoder { MOCK_METHOD1(Mark, void(std::string desc)); MOCK_CONST_METHOD0(MaxEncodedBytes, size_t()); MOCK_CONST_METHOD0(SampleRateHz, int()); - MOCK_CONST_METHOD0(NumChannels, int()); + MOCK_CONST_METHOD0(NumChannels, size_t()); MOCK_CONST_METHOD0(RtpTimestampRateHz, int()); MOCK_CONST_METHOD0(Num10MsFramesInNextPacket, size_t()); MOCK_CONST_METHOD0(Max10MsFramesInAPacket, size_t()); @@ -32,7 +32,7 @@ class MockAudioEncoder final : public AudioEncoder { // Note, we explicitly chose not to create a mock for the Encode method. MOCK_METHOD4(EncodeInternal, EncodedInfo(uint32_t timestamp, - const int16_t* audio, + rtc::ArrayView<const int16_t> audio, size_t max_encoded_bytes, uint8_t* encoded)); MOCK_METHOD0(Reset, void()); diff --git a/webrtc/modules/audio_coding/codecs/opus/audio_decoder_opus.cc b/webrtc/modules/audio_coding/codecs/opus/audio_decoder_opus.cc index d1390e2ca4..f64e811afe 100644 --- a/webrtc/modules/audio_coding/codecs/opus/audio_decoder_opus.cc +++ b/webrtc/modules/audio_coding/codecs/opus/audio_decoder_opus.cc @@ -8,7 +8,7 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include "webrtc/modules/audio_coding/codecs/opus/include/audio_decoder_opus.h" +#include "webrtc/modules/audio_coding/codecs/opus/audio_decoder_opus.h" #include "webrtc/base/checks.h" @@ -17,7 +17,7 @@ namespace webrtc { AudioDecoderOpus::AudioDecoderOpus(size_t num_channels) : channels_(num_channels) { RTC_DCHECK(num_channels == 1 || num_channels == 2); - WebRtcOpus_DecoderCreate(&dec_state_, static_cast<int>(channels_)); + WebRtcOpus_DecoderCreate(&dec_state_, channels_); WebRtcOpus_DecoderInit(dec_state_); } diff --git a/webrtc/modules/audio_coding/codecs/opus/include/audio_decoder_opus.h b/webrtc/modules/audio_coding/codecs/opus/audio_decoder_opus.h index 6b0a88ae97..af32a84512 100644 --- a/webrtc/modules/audio_coding/codecs/opus/include/audio_decoder_opus.h +++ b/webrtc/modules/audio_coding/codecs/opus/audio_decoder_opus.h @@ -8,11 +8,11 @@ * be found in the AUTHORS file in the root of the source tree. */ -#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_OPUS_INCLUDE_AUDIO_DECODER_OPUS_H -#define WEBRTC_MODULES_AUDIO_CODING_CODECS_OPUS_INCLUDE_AUDIO_DECODER_OPUS_H +#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_OPUS_AUDIO_DECODER_OPUS_H_ +#define WEBRTC_MODULES_AUDIO_CODING_CODECS_OPUS_AUDIO_DECODER_OPUS_H_ #include "webrtc/modules/audio_coding/codecs/audio_decoder.h" -#include "webrtc/modules/audio_coding/codecs/opus/include/opus_interface.h" +#include "webrtc/modules/audio_coding/codecs/opus/opus_interface.h" namespace webrtc { @@ -48,4 +48,4 @@ class AudioDecoderOpus final : public AudioDecoder { } // namespace webrtc -#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_OPUS_INCLUDE_AUDIO_DECODER_OPUS_H +#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_OPUS_AUDIO_DECODER_OPUS_H_ 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 eac7412178..707d6c2488 100644 --- a/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc +++ b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc @@ -8,12 +8,12 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include "webrtc/modules/audio_coding/codecs/opus/include/audio_encoder_opus.h" +#include "webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.h" #include "webrtc/base/checks.h" #include "webrtc/base/safe_conversions.h" #include "webrtc/common_types.h" -#include "webrtc/modules/audio_coding/codecs/opus/include/opus_interface.h" +#include "webrtc/modules/audio_coding/codecs/opus/opus_interface.h" namespace webrtc { @@ -114,7 +114,7 @@ int AudioEncoderOpus::SampleRateHz() const { return kSampleRateHz; } -int AudioEncoderOpus::NumChannels() const { +size_t AudioEncoderOpus::NumChannels() const { return config_.num_channels; } @@ -132,24 +132,22 @@ int AudioEncoderOpus::GetTargetBitrate() const { AudioEncoder::EncodedInfo AudioEncoderOpus::EncodeInternal( uint32_t rtp_timestamp, - const int16_t* audio, + rtc::ArrayView<const int16_t> audio, size_t max_encoded_bytes, uint8_t* encoded) { if (input_buffer_.empty()) first_timestamp_in_buffer_ = rtp_timestamp; - input_buffer_.insert(input_buffer_.end(), audio, - audio + SamplesPer10msFrame()); + RTC_DCHECK_EQ(SamplesPer10msFrame(), audio.size()); + input_buffer_.insert(input_buffer_.end(), audio.cbegin(), audio.cend()); if (input_buffer_.size() < - (static_cast<size_t>(Num10msFramesPerPacket()) * SamplesPer10msFrame())) { + (Num10msFramesPerPacket() * SamplesPer10msFrame())) { return EncodedInfo(); } - RTC_CHECK_EQ( - input_buffer_.size(), - static_cast<size_t>(Num10msFramesPerPacket()) * SamplesPer10msFrame()); + RTC_CHECK_EQ(input_buffer_.size(), + Num10msFramesPerPacket() * SamplesPer10msFrame()); int status = WebRtcOpus_Encode( inst_, &input_buffer_[0], - rtc::CheckedDivExact(input_buffer_.size(), - static_cast<size_t>(config_.num_channels)), + 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(); @@ -214,11 +212,11 @@ void AudioEncoderOpus::SetTargetBitrate(int bits_per_second) { RTC_CHECK_EQ(0, WebRtcOpus_SetBitRate(inst_, config_.bitrate_bps)); } -int AudioEncoderOpus::Num10msFramesPerPacket() const { - return rtc::CheckedDivExact(config_.frame_size_ms, 10); +size_t AudioEncoderOpus::Num10msFramesPerPacket() const { + return static_cast<size_t>(rtc::CheckedDivExact(config_.frame_size_ms, 10)); } -int AudioEncoderOpus::SamplesPer10msFrame() const { +size_t AudioEncoderOpus::SamplesPer10msFrame() const { return rtc::CheckedDivExact(kSampleRateHz, 100) * config_.num_channels; } diff --git a/webrtc/modules/audio_coding/codecs/opus/include/audio_encoder_opus.h b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.h index 7f2b563fd9..59c8f796ee 100644 --- a/webrtc/modules/audio_coding/codecs/opus/include/audio_encoder_opus.h +++ b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.h @@ -8,13 +8,13 @@ * be found in the AUTHORS file in the root of the source tree. */ -#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_OPUS_INCLUDE_AUDIO_ENCODER_OPUS_H_ -#define WEBRTC_MODULES_AUDIO_CODING_CODECS_OPUS_INCLUDE_AUDIO_ENCODER_OPUS_H_ +#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_OPUS_AUDIO_ENCODER_OPUS_H_ +#define WEBRTC_MODULES_AUDIO_CODING_CODECS_OPUS_AUDIO_ENCODER_OPUS_H_ #include <vector> #include "webrtc/base/constructormagic.h" -#include "webrtc/modules/audio_coding/codecs/opus/include/opus_interface.h" +#include "webrtc/modules/audio_coding/codecs/opus/opus_interface.h" #include "webrtc/modules/audio_coding/codecs/audio_encoder.h" namespace webrtc { @@ -31,7 +31,7 @@ class AudioEncoderOpus final : public AudioEncoder { struct Config { bool IsOk() const; int frame_size_ms = 20; - int num_channels = 1; + size_t num_channels = 1; int payload_type = 120; ApplicationMode application = kVoip; int bitrate_bps = 64000; @@ -56,13 +56,13 @@ class AudioEncoderOpus final : public AudioEncoder { size_t MaxEncodedBytes() const override; int SampleRateHz() const override; - int NumChannels() const override; + size_t NumChannels() const override; size_t Num10MsFramesInNextPacket() const override; size_t Max10MsFramesInAPacket() const override; int GetTargetBitrate() const override; EncodedInfo EncodeInternal(uint32_t rtp_timestamp, - const int16_t* audio, + rtc::ArrayView<const int16_t> audio, size_t max_encoded_bytes, uint8_t* encoded) override; @@ -85,8 +85,8 @@ class AudioEncoderOpus final : public AudioEncoder { bool dtx_enabled() const { return config_.dtx_enabled; } private: - int Num10msFramesPerPacket() const; - int SamplesPer10msFrame() const; + size_t Num10msFramesPerPacket() const; + size_t SamplesPer10msFrame() const; bool RecreateEncoderInstance(const Config& config); Config config_; @@ -99,4 +99,4 @@ class AudioEncoderOpus final : public AudioEncoder { } // namespace webrtc -#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_OPUS_INCLUDE_AUDIO_ENCODER_OPUS_H_ +#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_OPUS_AUDIO_ENCODER_OPUS_H_ diff --git a/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc index e69f259554..441e807b4f 100644 --- a/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc +++ b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc @@ -12,7 +12,7 @@ #include "webrtc/base/checks.h" #include "webrtc/base/scoped_ptr.h" #include "webrtc/common_types.h" -#include "webrtc/modules/audio_coding/codecs/opus/include/audio_encoder_opus.h" +#include "webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.h" namespace webrtc { diff --git a/webrtc/modules/audio_coding/codecs/opus/opus.gypi b/webrtc/modules/audio_coding/codecs/opus/opus.gypi index 05da3e5e47..d7454d632d 100644 --- a/webrtc/modules/audio_coding/codecs/opus/opus.gypi +++ b/webrtc/modules/audio_coding/codecs/opus/opus.gypi @@ -39,17 +39,14 @@ 'dependencies': [ 'audio_encoder_interface', ], - 'include_dirs': [ - '<(webrtc_root)', - ], 'sources': [ 'audio_decoder_opus.cc', + 'audio_decoder_opus.h', 'audio_encoder_opus.cc', - 'include/audio_decoder_opus.h', - 'include/audio_encoder_opus.h', - 'include/opus_interface.h', + 'audio_encoder_opus.h', 'opus_inst.h', 'opus_interface.c', + 'opus_interface.h', ], }, ], @@ -65,9 +62,6 @@ '<(webrtc_root)/test/test.gyp:test_support_main', '<(DEPTH)/testing/gtest.gyp:gtest', ], - 'include_dirs': [ - '<(webrtc_root)', - ], 'sources': [ 'opus_fec_test.cc', ], diff --git a/webrtc/modules/audio_coding/codecs/opus/opus_fec_test.cc b/webrtc/modules/audio_coding/codecs/opus/opus_fec_test.cc index f257210431..4f9f7ff7bb 100644 --- a/webrtc/modules/audio_coding/codecs/opus/opus_fec_test.cc +++ b/webrtc/modules/audio_coding/codecs/opus/opus_fec_test.cc @@ -9,8 +9,9 @@ */ #include "testing/gtest/include/gtest/gtest.h" +#include "webrtc/base/format_macros.h" #include "webrtc/base/scoped_ptr.h" -#include "webrtc/modules/audio_coding/codecs/opus/include/opus_interface.h" +#include "webrtc/modules/audio_coding/codecs/opus/opus_interface.h" #include "webrtc/test/testsupport/fileutils.h" using ::std::string; @@ -21,7 +22,7 @@ using ::testing::TestWithParam; namespace webrtc { // Define coding parameter as <channels, bit_rate, filename, extension>. -typedef tuple<int, int, string, string> coding_param; +typedef tuple<size_t, int, string, string> coding_param; typedef struct mode mode; struct mode { @@ -47,7 +48,7 @@ class OpusFecTest : public TestWithParam<coding_param> { int sampling_khz_; size_t block_length_sample_; - int channels_; + size_t channels_; int bit_rate_; size_t data_pointer_; @@ -68,7 +69,7 @@ class OpusFecTest : public TestWithParam<coding_param> { void OpusFecTest::SetUp() { channels_ = get<0>(GetParam()); bit_rate_ = get<1>(GetParam()); - printf("Coding %d channel signal at %d bps.\n", channels_, bit_rate_); + printf("Coding %" PRIuS " channel signal at %d bps.\n", channels_, bit_rate_); in_filename_ = test::ResourcePath(get<2>(GetParam()), get<3>(GetParam())); diff --git a/webrtc/modules/audio_coding/codecs/opus/opus_inst.h b/webrtc/modules/audio_coding/codecs/opus/opus_inst.h index 373db392a6..8d032baf35 100644 --- a/webrtc/modules/audio_coding/codecs/opus/opus_inst.h +++ b/webrtc/modules/audio_coding/codecs/opus/opus_inst.h @@ -11,17 +11,26 @@ #ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_OPUS_OPUS_INST_H_ #define WEBRTC_MODULES_AUDIO_CODING_CODECS_OPUS_OPUS_INST_H_ +#include <stddef.h> + #include "opus.h" struct WebRtcOpusEncInst { OpusEncoder* encoder; + size_t channels; int in_dtx_mode; + // When Opus is in DTX mode, we use |zero_counts| to count consecutive zeros + // to break long zero segment so as to prevent DTX from going wrong. We use + // one counter for each channel. After each encoding, |zero_counts| contain + // the remaining zeros from the last frame. + // TODO(minyue): remove this when Opus gets an internal fix to DTX. + size_t* zero_counts; }; struct WebRtcOpusDecInst { OpusDecoder* decoder; int prev_decoded_samples; - int channels; + size_t channels; int in_dtx_mode; }; diff --git a/webrtc/modules/audio_coding/codecs/opus/opus_interface.c b/webrtc/modules/audio_coding/codecs/opus/opus_interface.c index 1a632422c5..9dc7ef95fe 100644 --- a/webrtc/modules/audio_coding/codecs/opus/opus_interface.c +++ b/webrtc/modules/audio_coding/codecs/opus/opus_interface.c @@ -8,9 +8,10 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include "webrtc/modules/audio_coding/codecs/opus/include/opus_interface.h" +#include "webrtc/modules/audio_coding/codecs/opus/opus_interface.h" #include "webrtc/modules/audio_coding/codecs/opus/opus_inst.h" +#include <assert.h> #include <stdlib.h> #include <string.h> @@ -29,48 +30,61 @@ enum { /* Default frame size, 20 ms @ 48 kHz, in samples (for one channel). */ kWebRtcOpusDefaultFrameSize = 960, + + // Maximum number of consecutive zeros, beyond or equal to which DTX can fail. + kZeroBreakCount = 157, + +#if defined(OPUS_FIXED_POINT) + kZeroBreakValue = 10, +#else + kZeroBreakValue = 1, +#endif }; int16_t WebRtcOpus_EncoderCreate(OpusEncInst** inst, - int32_t channels, + size_t channels, int32_t application) { - OpusEncInst* state; - if (inst != NULL) { - state = (OpusEncInst*) calloc(1, sizeof(OpusEncInst)); - if (state) { - int opus_app; - switch (application) { - case 0: { - opus_app = OPUS_APPLICATION_VOIP; - break; - } - case 1: { - opus_app = OPUS_APPLICATION_AUDIO; - break; - } - default: { - free(state); - return -1; - } - } + int opus_app; + if (!inst) + return -1; - int error; - state->encoder = opus_encoder_create(48000, channels, opus_app, - &error); - state->in_dtx_mode = 0; - if (error == OPUS_OK && state->encoder != NULL) { - *inst = state; - return 0; - } - free(state); - } + switch (application) { + case 0: + opus_app = OPUS_APPLICATION_VOIP; + break; + case 1: + opus_app = OPUS_APPLICATION_AUDIO; + break; + default: + return -1; } - return -1; + + OpusEncInst* state = calloc(1, sizeof(OpusEncInst)); + assert(state); + + // Allocate zero counters. + state->zero_counts = calloc(channels, sizeof(size_t)); + assert(state->zero_counts); + + int error; + state->encoder = opus_encoder_create(48000, (int)channels, opus_app, + &error); + if (error != OPUS_OK || !state->encoder) { + WebRtcOpus_EncoderFree(state); + return -1; + } + + state->in_dtx_mode = 0; + state->channels = channels; + + *inst = state; + return 0; } int16_t WebRtcOpus_EncoderFree(OpusEncInst* inst) { if (inst) { opus_encoder_destroy(inst->encoder); + free(inst->zero_counts); free(inst); return 0; } else { @@ -84,13 +98,42 @@ int WebRtcOpus_Encode(OpusEncInst* inst, size_t length_encoded_buffer, uint8_t* encoded) { int res; + size_t i; + size_t c; + + int16_t buffer[2 * 48 * kWebRtcOpusMaxEncodeFrameSizeMs]; if (samples > 48 * kWebRtcOpusMaxEncodeFrameSizeMs) { return -1; } + const size_t channels = inst->channels; + int use_buffer = 0; + + // Break long consecutive zeros by forcing a "1" every |kZeroBreakCount| + // samples. + if (inst->in_dtx_mode) { + for (i = 0; i < samples; ++i) { + for (c = 0; c < channels; ++c) { + if (audio_in[i * channels + c] == 0) { + ++inst->zero_counts[c]; + if (inst->zero_counts[c] == kZeroBreakCount) { + if (!use_buffer) { + memcpy(buffer, audio_in, samples * channels * sizeof(int16_t)); + use_buffer = 1; + } + buffer[i * channels + c] = kZeroBreakValue; + inst->zero_counts[c] = 0; + } + } else { + inst->zero_counts[c] = 0; + } + } + } + } + res = opus_encode(inst->encoder, - (const opus_int16*)audio_in, + use_buffer ? buffer : audio_in, (int)samples, encoded, (opus_int32)length_encoded_buffer); @@ -205,7 +248,7 @@ int16_t WebRtcOpus_SetComplexity(OpusEncInst* inst, int32_t complexity) { } } -int16_t WebRtcOpus_DecoderCreate(OpusDecInst** inst, int channels) { +int16_t WebRtcOpus_DecoderCreate(OpusDecInst** inst, size_t channels) { int error; OpusDecInst* state; @@ -217,7 +260,7 @@ int16_t WebRtcOpus_DecoderCreate(OpusDecInst** inst, int channels) { } /* Create new memory, always at 48000 Hz. */ - state->decoder = opus_decoder_create(48000, channels, &error); + state->decoder = opus_decoder_create(48000, (int)channels, &error); if (error == OPUS_OK && state->decoder != NULL) { /* Creation of memory all ok. */ state->channels = channels; @@ -246,7 +289,7 @@ int16_t WebRtcOpus_DecoderFree(OpusDecInst* inst) { } } -int WebRtcOpus_DecoderChannels(OpusDecInst* inst) { +size_t WebRtcOpus_DecoderChannels(OpusDecInst* inst) { return inst->channels; } diff --git a/webrtc/modules/audio_coding/codecs/opus/include/opus_interface.h b/webrtc/modules/audio_coding/codecs/opus/opus_interface.h index 50b2338ab5..754b49c808 100644 --- a/webrtc/modules/audio_coding/codecs/opus/include/opus_interface.h +++ b/webrtc/modules/audio_coding/codecs/opus/opus_interface.h @@ -8,8 +8,8 @@ * be found in the AUTHORS file in the root of the source tree. */ -#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_OPUS_INCLUDE_OPUS_INTERFACE_H_ -#define WEBRTC_MODULES_AUDIO_CODING_CODECS_OPUS_INCLUDE_OPUS_INTERFACE_H_ +#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_OPUS_OPUS_INTERFACE_H_ +#define WEBRTC_MODULES_AUDIO_CODING_CODECS_OPUS_OPUS_INTERFACE_H_ #include <stddef.h> @@ -43,7 +43,7 @@ typedef struct WebRtcOpusDecInst OpusDecInst; * -1 - Error */ int16_t WebRtcOpus_EncoderCreate(OpusEncInst** inst, - int32_t channels, + size_t channels, int32_t application); int16_t WebRtcOpus_EncoderFree(OpusEncInst* inst); @@ -195,7 +195,7 @@ int16_t WebRtcOpus_DisableDtx(OpusEncInst* inst); */ int16_t WebRtcOpus_SetComplexity(OpusEncInst* inst, int32_t complexity); -int16_t WebRtcOpus_DecoderCreate(OpusDecInst** inst, int channels); +int16_t WebRtcOpus_DecoderCreate(OpusDecInst** inst, size_t channels); int16_t WebRtcOpus_DecoderFree(OpusDecInst* inst); /**************************************************************************** @@ -203,7 +203,7 @@ int16_t WebRtcOpus_DecoderFree(OpusDecInst* inst); * * This function returns the number of channels created for Opus decoder. */ -int WebRtcOpus_DecoderChannels(OpusDecInst* inst); +size_t WebRtcOpus_DecoderChannels(OpusDecInst* inst); /**************************************************************************** * WebRtcOpus_DecoderInit(...) @@ -346,4 +346,4 @@ int WebRtcOpus_PacketHasFec(const uint8_t* payload, } // extern "C" #endif -#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_OPUS_INCLUDE_OPUS_INCLUDE_H_ +#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_OPUS_OPUS_INTERFACE_H_ diff --git a/webrtc/modules/audio_coding/codecs/opus/opus_speed_test.cc b/webrtc/modules/audio_coding/codecs/opus/opus_speed_test.cc index 29def14bf8..4d1aa42c89 100644 --- a/webrtc/modules/audio_coding/codecs/opus/opus_speed_test.cc +++ b/webrtc/modules/audio_coding/codecs/opus/opus_speed_test.cc @@ -8,7 +8,7 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include "webrtc/modules/audio_coding/codecs/opus/include/opus_interface.h" +#include "webrtc/modules/audio_coding/codecs/opus/opus_interface.h" #include "webrtc/modules/audio_coding/codecs/tools/audio_codec_speed_test.h" using ::std::string; @@ -77,7 +77,7 @@ float OpusSpeedTest::DecodeABlock(const uint8_t* bit_stream, value = WebRtcOpus_Decode(opus_decoder_, bit_stream, encoded_bytes, out_data, &audio_type); clocks = clock() - clocks; - EXPECT_EQ(output_length_sample_, value); + EXPECT_EQ(output_length_sample_, static_cast<size_t>(value)); return 1000.0 * clocks / CLOCKS_PER_SEC; } diff --git a/webrtc/modules/audio_coding/codecs/opus/opus_unittest.cc b/webrtc/modules/audio_coding/codecs/opus/opus_unittest.cc index 4630e44807..c82b184b38 100644 --- a/webrtc/modules/audio_coding/codecs/opus/opus_unittest.cc +++ b/webrtc/modules/audio_coding/codecs/opus/opus_unittest.cc @@ -10,7 +10,8 @@ #include <string> #include "testing/gtest/include/gtest/gtest.h" -#include "webrtc/modules/audio_coding/codecs/opus/include/opus_interface.h" +#include "webrtc/base/checks.h" +#include "webrtc/modules/audio_coding/codecs/opus/opus_interface.h" #include "webrtc/modules/audio_coding/codecs/opus/opus_inst.h" #include "webrtc/modules/audio_coding/neteq/tools/audio_loop.h" #include "webrtc/test/testsupport/fileutils.h" @@ -35,17 +36,18 @@ class OpusTest : public TestWithParam<::testing::tuple<int, int>> { protected: OpusTest(); - void TestDtxEffect(bool dtx); + void TestDtxEffect(bool dtx, int block_length_ms); // Prepare |speech_data_| for encoding, read from a hard-coded file. // After preparation, |speech_data_.GetNextBlock()| returns a pointer to a // block of |block_length_ms| milliseconds. The data is looped every // |loop_length_ms| milliseconds. - void PrepareSpeechData(int channel, int block_length_ms, int loop_length_ms); + void PrepareSpeechData(size_t channel, + int block_length_ms, + int loop_length_ms); int EncodeDecode(WebRtcOpusEncInst* encoder, - const int16_t* input_audio, - size_t input_samples, + rtc::ArrayView<const int16_t> input_audio, WebRtcOpusDecInst* decoder, int16_t* output_audio, int16_t* audio_type); @@ -53,13 +55,16 @@ class OpusTest : public TestWithParam<::testing::tuple<int, int>> { void SetMaxPlaybackRate(WebRtcOpusEncInst* encoder, opus_int32 expect, int32_t set); + void CheckAudioBounded(const int16_t* audio, size_t samples, size_t channels, + uint16_t bound) const; + WebRtcOpusEncInst* opus_encoder_; WebRtcOpusDecInst* opus_decoder_; AudioLoop speech_data_; uint8_t bitstream_[kMaxBytes]; size_t encoded_bytes_; - int channels_; + size_t channels_; int application_; }; @@ -67,11 +72,11 @@ OpusTest::OpusTest() : opus_encoder_(NULL), opus_decoder_(NULL), encoded_bytes_(0), - channels_(::testing::get<0>(GetParam())), + channels_(static_cast<size_t>(::testing::get<0>(GetParam()))), application_(::testing::get<1>(GetParam())) { } -void OpusTest::PrepareSpeechData(int channel, int block_length_ms, +void OpusTest::PrepareSpeechData(size_t channel, int block_length_ms, int loop_length_ms) { const std::string file_name = webrtc::test::ResourcePath((channel == 1) ? @@ -95,14 +100,25 @@ void OpusTest::SetMaxPlaybackRate(WebRtcOpusEncInst* encoder, EXPECT_EQ(expect, bandwidth); } +void OpusTest::CheckAudioBounded(const int16_t* audio, size_t samples, + size_t channels, uint16_t bound) const { + for (size_t i = 0; i < samples; ++i) { + for (size_t c = 0; c < channels; ++c) { + ASSERT_GE(audio[i * channels + c], -bound); + ASSERT_LE(audio[i * channels + c], bound); + } + } +} + int OpusTest::EncodeDecode(WebRtcOpusEncInst* encoder, - const int16_t* input_audio, - size_t input_samples, + rtc::ArrayView<const int16_t> input_audio, WebRtcOpusDecInst* decoder, int16_t* output_audio, int16_t* audio_type) { - int encoded_bytes_int = WebRtcOpus_Encode(encoder, input_audio, input_samples, - kMaxBytes, bitstream_); + int encoded_bytes_int = WebRtcOpus_Encode( + encoder, input_audio.data(), + rtc::CheckedDivExact(input_audio.size(), channels_), + kMaxBytes, bitstream_); EXPECT_GE(encoded_bytes_int, 0); encoded_bytes_ = static_cast<size_t>(encoded_bytes_int); int est_len = WebRtcOpus_DurationEst(decoder, bitstream_, encoded_bytes_); @@ -115,8 +131,9 @@ int OpusTest::EncodeDecode(WebRtcOpusEncInst* encoder, // Test if encoder/decoder can enter DTX mode properly and do not enter DTX when // they should not. This test is signal dependent. -void OpusTest::TestDtxEffect(bool dtx) { - PrepareSpeechData(channels_, 20, 2000); +void OpusTest::TestDtxEffect(bool dtx, int block_length_ms) { + PrepareSpeechData(channels_, block_length_ms, 2000); + const size_t samples = kOpusRateKhz * block_length_ms; // Create encoder memory. EXPECT_EQ(0, WebRtcOpus_EncoderCreate(&opus_encoder_, @@ -129,22 +146,20 @@ void OpusTest::TestDtxEffect(bool dtx) { channels_ == 1 ? 32000 : 64000)); // Set input audio as silence. - int16_t* silence = new int16_t[kOpus20msFrameSamples * channels_]; - memset(silence, 0, sizeof(int16_t) * kOpus20msFrameSamples * channels_); + std::vector<int16_t> silence(samples * channels_, 0); // Setting DTX. EXPECT_EQ(0, dtx ? WebRtcOpus_EnableDtx(opus_encoder_) : WebRtcOpus_DisableDtx(opus_encoder_)); int16_t audio_type; - int16_t* output_data_decode = new int16_t[kOpus20msFrameSamples * channels_]; + int16_t* output_data_decode = new int16_t[samples * channels_]; for (int i = 0; i < 100; ++i) { - EXPECT_EQ(kOpus20msFrameSamples, + EXPECT_EQ(samples, static_cast<size_t>(EncodeDecode( - opus_encoder_, speech_data_.GetNextBlock(), - kOpus20msFrameSamples, opus_decoder_, output_data_decode, - &audio_type))); + opus_encoder_, speech_data_.GetNextBlock(), opus_decoder_, + output_data_decode, &audio_type))); // If not DTX, it should never enter DTX mode. If DTX, we do not care since // whether it enters DTX depends on the signal type. if (!dtx) { @@ -158,10 +173,10 @@ void OpusTest::TestDtxEffect(bool dtx) { // We input some silent segments. In DTX mode, the encoder will stop sending. // However, DTX may happen after a while. for (int i = 0; i < 30; ++i) { - EXPECT_EQ(kOpus20msFrameSamples, + EXPECT_EQ(samples, static_cast<size_t>(EncodeDecode( - opus_encoder_, silence, kOpus20msFrameSamples, opus_decoder_, - output_data_decode, &audio_type))); + opus_encoder_, silence, opus_decoder_, output_data_decode, + &audio_type))); if (!dtx) { EXPECT_GT(encoded_bytes_, 1U); EXPECT_EQ(0, opus_encoder_->in_dtx_mode); @@ -177,21 +192,47 @@ void OpusTest::TestDtxEffect(bool dtx) { // When Opus is in DTX, it wakes up in a regular basis. It sends two packets, // one with an arbitrary size and the other of 1-byte, then stops sending for - // 19 frames. - const int cycles = 5; - for (int j = 0; j < cycles; ++j) { - // DTX mode is maintained 19 frames. - for (int i = 0; i < 19; ++i) { - EXPECT_EQ(kOpus20msFrameSamples, + // a certain number of frames. + + // |max_dtx_frames| is the maximum number of frames Opus can stay in DTX. + const int max_dtx_frames = 400 / block_length_ms + 1; + + // We run |kRunTimeMs| milliseconds of pure silence. + const int kRunTimeMs = 2000; + + // We check that, after a |kCheckTimeMs| milliseconds (given that the CNG in + // Opus needs time to adapt), the absolute values of DTX decoded signal are + // bounded by |kOutputValueBound|. + const int kCheckTimeMs = 1500; + +#if defined(OPUS_FIXED_POINT) + const uint16_t kOutputValueBound = 20; +#else + const uint16_t kOutputValueBound = 2; +#endif + + int time = 0; + while (time < kRunTimeMs) { + // DTX mode is maintained for maximum |max_dtx_frames| frames. + int i = 0; + for (; i < max_dtx_frames; ++i) { + time += block_length_ms; + EXPECT_EQ(samples, static_cast<size_t>(EncodeDecode( - opus_encoder_, silence, kOpus20msFrameSamples, - opus_decoder_, output_data_decode, &audio_type))); + opus_encoder_, silence, opus_decoder_, output_data_decode, + &audio_type))); if (dtx) { + if (encoded_bytes_ > 1) + break; EXPECT_EQ(0U, encoded_bytes_) // Send 0 byte. << "Opus should have entered DTX mode."; EXPECT_EQ(1, opus_encoder_->in_dtx_mode); EXPECT_EQ(1, opus_decoder_->in_dtx_mode); EXPECT_EQ(2, audio_type); // Comfort noise. + if (time >= kCheckTimeMs) { + CheckAudioBounded(output_data_decode, samples, channels_, + kOutputValueBound); + } } else { EXPECT_GT(encoded_bytes_, 1U); EXPECT_EQ(0, opus_encoder_->in_dtx_mode); @@ -200,27 +241,31 @@ void OpusTest::TestDtxEffect(bool dtx) { } } - // Quit DTX after 19 frames. - EXPECT_EQ(kOpus20msFrameSamples, - static_cast<size_t>(EncodeDecode( - opus_encoder_, silence, kOpus20msFrameSamples, opus_decoder_, - output_data_decode, &audio_type))); + if (dtx) { + // With DTX, Opus must stop transmission for some time. + EXPECT_GT(i, 1); + } - EXPECT_GT(encoded_bytes_, 1U); + // We expect a normal payload. EXPECT_EQ(0, opus_encoder_->in_dtx_mode); EXPECT_EQ(0, opus_decoder_->in_dtx_mode); EXPECT_EQ(0, audio_type); // Speech. // Enters DTX again immediately. - EXPECT_EQ(kOpus20msFrameSamples, + time += block_length_ms; + EXPECT_EQ(samples, static_cast<size_t>(EncodeDecode( - opus_encoder_, silence, kOpus20msFrameSamples, opus_decoder_, - output_data_decode, &audio_type))); + opus_encoder_, silence, opus_decoder_, output_data_decode, + &audio_type))); if (dtx) { EXPECT_EQ(1U, encoded_bytes_); // Send 1 byte. EXPECT_EQ(1, opus_encoder_->in_dtx_mode); EXPECT_EQ(1, opus_decoder_->in_dtx_mode); EXPECT_EQ(2, audio_type); // Comfort noise. + if (time >= kCheckTimeMs) { + CheckAudioBounded(output_data_decode, samples, channels_, + kOutputValueBound); + } } else { EXPECT_GT(encoded_bytes_, 1U); EXPECT_EQ(0, opus_encoder_->in_dtx_mode); @@ -232,10 +277,10 @@ void OpusTest::TestDtxEffect(bool dtx) { silence[0] = 10000; if (dtx) { // Verify that encoder/decoder can jump out from DTX mode. - EXPECT_EQ(kOpus20msFrameSamples, + EXPECT_EQ(samples, static_cast<size_t>(EncodeDecode( - opus_encoder_, silence, kOpus20msFrameSamples, opus_decoder_, - output_data_decode, &audio_type))); + opus_encoder_, silence, opus_decoder_, output_data_decode, + &audio_type))); EXPECT_GT(encoded_bytes_, 1U); EXPECT_EQ(0, opus_encoder_->in_dtx_mode); EXPECT_EQ(0, opus_decoder_->in_dtx_mode); @@ -244,7 +289,6 @@ void OpusTest::TestDtxEffect(bool dtx) { // Free memory. delete[] output_data_decode; - delete[] silence; EXPECT_EQ(0, WebRtcOpus_EncoderFree(opus_encoder_)); EXPECT_EQ(0, WebRtcOpus_DecoderFree(opus_decoder_)); } @@ -314,10 +358,9 @@ TEST_P(OpusTest, OpusEncodeDecode) { int16_t audio_type; int16_t* output_data_decode = new int16_t[kOpus20msFrameSamples * channels_]; EXPECT_EQ(kOpus20msFrameSamples, - static_cast<size_t>(EncodeDecode( - opus_encoder_, speech_data_.GetNextBlock(), - kOpus20msFrameSamples, opus_decoder_, output_data_decode, - &audio_type))); + static_cast<size_t>( + EncodeDecode(opus_encoder_, speech_data_.GetNextBlock(), + opus_decoder_, output_data_decode, &audio_type))); // Free memory. delete[] output_data_decode; @@ -374,10 +417,9 @@ TEST_P(OpusTest, OpusDecodeInit) { int16_t audio_type; int16_t* output_data_decode = new int16_t[kOpus20msFrameSamples * channels_]; EXPECT_EQ(kOpus20msFrameSamples, - static_cast<size_t>(EncodeDecode( - opus_encoder_, speech_data_.GetNextBlock(), - kOpus20msFrameSamples, opus_decoder_, output_data_decode, - &audio_type))); + static_cast<size_t>( + EncodeDecode(opus_encoder_, speech_data_.GetNextBlock(), + opus_decoder_, output_data_decode, &audio_type))); WebRtcOpus_DecoderInit(opus_decoder_); @@ -444,11 +486,15 @@ TEST_P(OpusTest, OpusEnableDisableDtx) { } TEST_P(OpusTest, OpusDtxOff) { - TestDtxEffect(false); + TestDtxEffect(false, 10); + TestDtxEffect(false, 20); + TestDtxEffect(false, 40); } TEST_P(OpusTest, OpusDtxOn) { - TestDtxEffect(true); + TestDtxEffect(true, 10); + TestDtxEffect(true, 20); + TestDtxEffect(true, 40); } TEST_P(OpusTest, OpusSetPacketLossRate) { @@ -513,10 +559,9 @@ TEST_P(OpusTest, OpusDecodePlc) { int16_t audio_type; int16_t* output_data_decode = new int16_t[kOpus20msFrameSamples * channels_]; EXPECT_EQ(kOpus20msFrameSamples, - static_cast<size_t>(EncodeDecode( - opus_encoder_, speech_data_.GetNextBlock(), - kOpus20msFrameSamples, opus_decoder_, output_data_decode, - &audio_type))); + static_cast<size_t>( + EncodeDecode(opus_encoder_, speech_data_.GetNextBlock(), + opus_decoder_, output_data_decode, &audio_type))); // Call decoder PLC. int16_t* plc_buffer = new int16_t[kOpus20msFrameSamples * channels_]; @@ -542,10 +587,11 @@ TEST_P(OpusTest, OpusDurationEstimation) { EXPECT_EQ(0, WebRtcOpus_DecoderCreate(&opus_decoder_, channels_)); // 10 ms. We use only first 10 ms of a 20 ms block. - int encoded_bytes_int = WebRtcOpus_Encode(opus_encoder_, - speech_data_.GetNextBlock(), - kOpus10msFrameSamples, - kMaxBytes, bitstream_); + auto speech_block = speech_data_.GetNextBlock(); + int encoded_bytes_int = WebRtcOpus_Encode( + opus_encoder_, speech_block.data(), + rtc::CheckedDivExact(speech_block.size(), 2 * channels_), + kMaxBytes, bitstream_); EXPECT_GE(encoded_bytes_int, 0); EXPECT_EQ(kOpus10msFrameSamples, static_cast<size_t>(WebRtcOpus_DurationEst( @@ -553,10 +599,11 @@ TEST_P(OpusTest, OpusDurationEstimation) { static_cast<size_t>(encoded_bytes_int)))); // 20 ms - encoded_bytes_int = WebRtcOpus_Encode(opus_encoder_, - speech_data_.GetNextBlock(), - kOpus20msFrameSamples, - kMaxBytes, bitstream_); + speech_block = speech_data_.GetNextBlock(); + encoded_bytes_int = WebRtcOpus_Encode( + opus_encoder_, speech_block.data(), + rtc::CheckedDivExact(speech_block.size(), channels_), + kMaxBytes, bitstream_); EXPECT_GE(encoded_bytes_int, 0); EXPECT_EQ(kOpus20msFrameSamples, static_cast<size_t>(WebRtcOpus_DurationEst( @@ -594,10 +641,11 @@ TEST_P(OpusTest, OpusDecodeRepacketized) { OpusRepacketizer* rp = opus_repacketizer_create(); for (int idx = 0; idx < kPackets; idx++) { - encoded_bytes_ = WebRtcOpus_Encode(opus_encoder_, - speech_data_.GetNextBlock(), - kOpus20msFrameSamples, kMaxBytes, - bitstream_); + auto speech_block = speech_data_.GetNextBlock(); + encoded_bytes_ = + WebRtcOpus_Encode(opus_encoder_, speech_block.data(), + rtc::CheckedDivExact(speech_block.size(), channels_), + kMaxBytes, bitstream_); EXPECT_EQ(OPUS_OK, opus_repacketizer_cat(rp, bitstream_, encoded_bytes_)); } diff --git a/webrtc/modules/audio_coding/codecs/pcm16b/audio_decoder_pcm16b.cc b/webrtc/modules/audio_coding/codecs/pcm16b/audio_decoder_pcm16b.cc index 7d07b23a3c..834c070073 100644 --- a/webrtc/modules/audio_coding/codecs/pcm16b/audio_decoder_pcm16b.cc +++ b/webrtc/modules/audio_coding/codecs/pcm16b/audio_decoder_pcm16b.cc @@ -8,10 +8,10 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include "webrtc/modules/audio_coding/codecs/pcm16b/include/audio_decoder_pcm16b.h" +#include "webrtc/modules/audio_coding/codecs/pcm16b/audio_decoder_pcm16b.h" #include "webrtc/base/checks.h" -#include "webrtc/modules/audio_coding/codecs/pcm16b/include/pcm16b.h" +#include "webrtc/modules/audio_coding/codecs/pcm16b/pcm16b.h" namespace webrtc { diff --git a/webrtc/modules/audio_coding/codecs/pcm16b/include/audio_decoder_pcm16b.h b/webrtc/modules/audio_coding/codecs/pcm16b/audio_decoder_pcm16b.h index 96131c4d21..692cb94282 100644 --- a/webrtc/modules/audio_coding/codecs/pcm16b/include/audio_decoder_pcm16b.h +++ b/webrtc/modules/audio_coding/codecs/pcm16b/audio_decoder_pcm16b.h @@ -8,8 +8,8 @@ * be found in the AUTHORS file in the root of the source tree. */ -#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_PCM16B_INCLUDE_AUDIO_DECODER_PCM16B_H_ -#define WEBRTC_MODULES_AUDIO_CODING_CODECS_PCM16B_INCLUDE_AUDIO_DECODER_PCM16B_H_ +#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_PCM16B_AUDIO_DECODER_PCM16B_H_ +#define WEBRTC_MODULES_AUDIO_CODING_CODECS_PCM16B_AUDIO_DECODER_PCM16B_H_ #include "webrtc/base/constructormagic.h" #include "webrtc/modules/audio_coding/codecs/audio_decoder.h" @@ -37,4 +37,4 @@ class AudioDecoderPcm16B final : public AudioDecoder { } // namespace webrtc -#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_PCM16B_INCLUDE_AUDIO_DECODER_PCM16B_H_ +#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_PCM16B_AUDIO_DECODER_PCM16B_H_ diff --git a/webrtc/modules/audio_coding/codecs/pcm16b/audio_encoder_pcm16b.cc b/webrtc/modules/audio_coding/codecs/pcm16b/audio_encoder_pcm16b.cc index 6c30c7ff62..f4d4022302 100644 --- a/webrtc/modules/audio_coding/codecs/pcm16b/audio_encoder_pcm16b.cc +++ b/webrtc/modules/audio_coding/codecs/pcm16b/audio_encoder_pcm16b.cc @@ -8,11 +8,11 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include "webrtc/modules/audio_coding/codecs/pcm16b/include/audio_encoder_pcm16b.h" +#include "webrtc/modules/audio_coding/codecs/pcm16b/audio_encoder_pcm16b.h" #include "webrtc/base/checks.h" #include "webrtc/common_types.h" -#include "webrtc/modules/audio_coding/codecs/pcm16b/include/pcm16b.h" +#include "webrtc/modules/audio_coding/codecs/pcm16b/pcm16b.h" namespace webrtc { @@ -22,7 +22,7 @@ size_t AudioEncoderPcm16B::EncodeCall(const int16_t* audio, return WebRtcPcm16b_Encode(audio, input_len, encoded); } -int AudioEncoderPcm16B::BytesPerSample() const { +size_t AudioEncoderPcm16B::BytesPerSample() const { return 2; } diff --git a/webrtc/modules/audio_coding/codecs/pcm16b/include/audio_encoder_pcm16b.h b/webrtc/modules/audio_coding/codecs/pcm16b/audio_encoder_pcm16b.h index e03da213df..68ca2da77e 100644 --- a/webrtc/modules/audio_coding/codecs/pcm16b/include/audio_encoder_pcm16b.h +++ b/webrtc/modules/audio_coding/codecs/pcm16b/audio_encoder_pcm16b.h @@ -8,11 +8,11 @@ * be found in the AUTHORS file in the root of the source tree. */ -#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_PCM16B_INCLUDE_AUDIO_ENCODER_PCM16B_H_ -#define WEBRTC_MODULES_AUDIO_CODING_CODECS_PCM16B_INCLUDE_AUDIO_ENCODER_PCM16B_H_ +#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_PCM16B_AUDIO_ENCODER_PCM16B_H_ +#define WEBRTC_MODULES_AUDIO_CODING_CODECS_PCM16B_AUDIO_ENCODER_PCM16B_H_ #include "webrtc/base/scoped_ptr.h" -#include "webrtc/modules/audio_coding/codecs/g711/include/audio_encoder_pcm.h" +#include "webrtc/modules/audio_coding/codecs/g711/audio_encoder_pcm.h" namespace webrtc { @@ -37,12 +37,12 @@ class AudioEncoderPcm16B final : public AudioEncoderPcm { size_t input_len, uint8_t* encoded) override; - int BytesPerSample() const override; + size_t BytesPerSample() const override; -private: + private: RTC_DISALLOW_COPY_AND_ASSIGN(AudioEncoderPcm16B); }; } // namespace webrtc -#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_PCM16B_INCLUDE_AUDIO_ENCODER_PCM16B_H_ +#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_PCM16B_AUDIO_ENCODER_PCM16B_H_ diff --git a/webrtc/modules/audio_coding/codecs/pcm16b/pcm16b.gypi b/webrtc/modules/audio_coding/codecs/pcm16b/pcm16b.gypi index 3dc2f772c1..d0dd21bb60 100644 --- a/webrtc/modules/audio_coding/codecs/pcm16b/pcm16b.gypi +++ b/webrtc/modules/audio_coding/codecs/pcm16b/pcm16b.gypi @@ -15,23 +15,13 @@ 'audio_encoder_interface', 'g711', ], - 'include_dirs': [ - 'include', - '<(webrtc_root)', - ], - 'direct_dependent_settings': { - 'include_dirs': [ - 'include', - '<(webrtc_root)', - ], - }, 'sources': [ - 'include/audio_decoder_pcm16b.h', - 'include/audio_encoder_pcm16b.h', - 'include/pcm16b.h', 'audio_decoder_pcm16b.cc', + 'audio_decoder_pcm16b.h', 'audio_encoder_pcm16b.cc', + 'audio_encoder_pcm16b.h', 'pcm16b.c', + 'pcm16b.h', ], }, ], # targets diff --git a/webrtc/modules/audio_coding/codecs/pcm16b/include/pcm16b.h b/webrtc/modules/audio_coding/codecs/pcm16b/pcm16b.h index d86a65db49..f96e741c46 100644 --- a/webrtc/modules/audio_coding/codecs/pcm16b/include/pcm16b.h +++ b/webrtc/modules/audio_coding/codecs/pcm16b/pcm16b.h @@ -8,8 +8,8 @@ * be found in the AUTHORS file in the root of the source tree. */ -#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_PCM16B_MAIN_INCLUDE_PCM16B_H_ -#define WEBRTC_MODULES_AUDIO_CODING_CODECS_PCM16B_MAIN_INCLUDE_PCM16B_H_ +#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_PCM16B_PCM16B_H_ +#define WEBRTC_MODULES_AUDIO_CODING_CODECS_PCM16B_PCM16B_H_ /* * Define the fixpoint numeric formats */ @@ -65,4 +65,4 @@ size_t WebRtcPcm16b_Decode(const uint8_t* encoded, } #endif -#endif /* PCM16B */ +#endif /* WEBRTC_MODULES_AUDIO_CODING_CODECS_PCM16B_PCM16B_H_ */ 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 a19d194e59..7ef1ce096b 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 @@ -32,7 +32,7 @@ int AudioEncoderCopyRed::SampleRateHz() const { return speech_encoder_->SampleRateHz(); } -int AudioEncoderCopyRed::NumChannels() const { +size_t AudioEncoderCopyRed::NumChannels() const { return speech_encoder_->NumChannels(); } @@ -54,12 +54,11 @@ int AudioEncoderCopyRed::GetTargetBitrate() const { AudioEncoder::EncodedInfo AudioEncoderCopyRed::EncodeInternal( uint32_t rtp_timestamp, - const int16_t* audio, + rtc::ArrayView<const int16_t> audio, size_t max_encoded_bytes, uint8_t* encoded) { - EncodedInfo info = speech_encoder_->Encode( - rtp_timestamp, audio, static_cast<size_t>(SampleRateHz() / 100), - max_encoded_bytes, encoded); + EncodedInfo info = + speech_encoder_->Encode(rtp_timestamp, audio, max_encoded_bytes, encoded); RTC_CHECK_GE(max_encoded_bytes, info.encoded_bytes + secondary_info_.encoded_bytes); RTC_CHECK(info.redundant.empty()) << "Cannot use nested redundant encoders."; 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 7837010605..2f53765389 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 @@ -38,13 +38,13 @@ class AudioEncoderCopyRed final : public AudioEncoder { size_t MaxEncodedBytes() const override; int SampleRateHz() const override; - int NumChannels() const override; + size_t NumChannels() const override; int RtpTimestampRateHz() const override; size_t Num10MsFramesInNextPacket() const override; size_t Max10MsFramesInAPacket() const override; int GetTargetBitrate() const override; EncodedInfo EncodeInternal(uint32_t rtp_timestamp, - const int16_t* audio, + rtc::ArrayView<const int16_t> audio, size_t max_encoded_bytes, uint8_t* encoded) override; void Reset() 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 cb50652183..22601b6597 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 @@ -42,7 +42,7 @@ class AudioEncoderCopyRedTest : public ::testing::Test { config.speech_encoder = &mock_encoder_; red_.reset(new AudioEncoderCopyRed(config)); memset(audio_, 0, sizeof(audio_)); - EXPECT_CALL(mock_encoder_, NumChannels()).WillRepeatedly(Return(1)); + EXPECT_CALL(mock_encoder_, NumChannels()).WillRepeatedly(Return(1U)); EXPECT_CALL(mock_encoder_, SampleRateHz()) .WillRepeatedly(Return(sample_rate_hz_)); EXPECT_CALL(mock_encoder_, MaxEncodedBytes()) @@ -60,8 +60,10 @@ class AudioEncoderCopyRedTest : public ::testing::Test { void Encode() { ASSERT_TRUE(red_.get() != NULL); - encoded_info_ = red_->Encode(timestamp_, audio_, num_audio_samples_10ms, - encoded_.size(), &encoded_[0]); + encoded_info_ = red_->Encode( + timestamp_, + rtc::ArrayView<const int16_t>(audio_, num_audio_samples_10ms), + encoded_.size(), &encoded_[0]); timestamp_ += num_audio_samples_10ms; } @@ -83,7 +85,7 @@ class MockEncodeHelper { } AudioEncoder::EncodedInfo Encode(uint32_t timestamp, - const int16_t* audio, + rtc::ArrayView<const int16_t> audio, size_t max_encoded_bytes, uint8_t* encoded) { if (write_payload_) { @@ -108,8 +110,8 @@ TEST_F(AudioEncoderCopyRedTest, CheckSampleRatePropagation) { } TEST_F(AudioEncoderCopyRedTest, CheckNumChannelsPropagation) { - EXPECT_CALL(mock_encoder_, NumChannels()).WillOnce(Return(17)); - EXPECT_EQ(17, red_->NumChannels()); + EXPECT_CALL(mock_encoder_, NumChannels()).WillOnce(Return(17U)); + EXPECT_EQ(17U, red_->NumChannels()); } TEST_F(AudioEncoderCopyRedTest, CheckFrameSizePropagation) { diff --git a/webrtc/modules/audio_coding/codecs/tools/audio_codec_speed_test.cc b/webrtc/modules/audio_coding/codecs/tools/audio_codec_speed_test.cc index 3395721f8b..3dc665482a 100644 --- a/webrtc/modules/audio_coding/codecs/tools/audio_codec_speed_test.cc +++ b/webrtc/modules/audio_coding/codecs/tools/audio_codec_speed_test.cc @@ -11,6 +11,7 @@ #include "webrtc/modules/audio_coding/codecs/tools/audio_codec_speed_test.h" #include "testing/gtest/include/gtest/gtest.h" +#include "webrtc/base/format_macros.h" #include "webrtc/test/testsupport/fileutils.h" using ::std::tr1::get; @@ -23,8 +24,10 @@ AudioCodecSpeedTest::AudioCodecSpeedTest(int block_duration_ms, : block_duration_ms_(block_duration_ms), input_sampling_khz_(input_sampling_khz), output_sampling_khz_(output_sampling_khz), - input_length_sample_(block_duration_ms_ * input_sampling_khz_), - output_length_sample_(block_duration_ms_ * output_sampling_khz_), + input_length_sample_( + static_cast<size_t>(block_duration_ms_ * input_sampling_khz_)), + output_length_sample_( + static_cast<size_t>(block_duration_ms_ * output_sampling_khz_)), data_pointer_(0), loop_length_samples_(0), max_bytes_(0), @@ -65,8 +68,7 @@ void AudioCodecSpeedTest::SetUp() { memcpy(&in_data_[loop_length_samples_], &in_data_[0], input_length_sample_ * channels_ * sizeof(int16_t)); - max_bytes_ = - static_cast<size_t>(input_length_sample_ * channels_ * sizeof(int16_t)); + max_bytes_ = input_length_sample_ * channels_ * sizeof(int16_t); out_data_.reset(new int16_t[output_length_sample_ * channels_]); bit_stream_.reset(new uint8_t[max_bytes_]); @@ -98,7 +100,7 @@ void AudioCodecSpeedTest::EncodeDecode(size_t audio_duration_sec) { size_t time_now_ms = 0; float time_ms; - printf("Coding %d kHz-sampled %d-channel audio at %d bps ...\n", + printf("Coding %d kHz-sampled %" PRIuS "-channel audio at %d bps ...\n", input_sampling_khz_, channels_, bit_rate_); while (time_now_ms < audio_duration_sec * 1000) { diff --git a/webrtc/modules/audio_coding/codecs/tools/audio_codec_speed_test.h b/webrtc/modules/audio_coding/codecs/tools/audio_codec_speed_test.h index 2736c2912e..fb7b3e5b1e 100644 --- a/webrtc/modules/audio_coding/codecs/tools/audio_codec_speed_test.h +++ b/webrtc/modules/audio_coding/codecs/tools/audio_codec_speed_test.h @@ -20,7 +20,8 @@ namespace webrtc { // Define coding parameter as // <channels, bit_rate, file_name, extension, if_save_output>. -typedef std::tr1::tuple<int, int, std::string, std::string, bool> coding_param; +typedef std::tr1::tuple<size_t, int, std::string, std::string, bool> + coding_param; class AudioCodecSpeedTest : public testing::TestWithParam<coding_param> { protected: @@ -55,10 +56,10 @@ class AudioCodecSpeedTest : public testing::TestWithParam<coding_param> { int output_sampling_khz_; // Number of samples-per-channel in a frame. - int input_length_sample_; + size_t input_length_sample_; // Expected output number of samples-per-channel in a frame. - int output_length_sample_; + size_t output_length_sample_; rtc::scoped_ptr<int16_t[]> in_data_; rtc::scoped_ptr<int16_t[]> out_data_; @@ -74,7 +75,7 @@ class AudioCodecSpeedTest : public testing::TestWithParam<coding_param> { float decoding_time_ms_; FILE* out_file_; - int channels_; + size_t channels_; // Bit rate is in bit-per-second. int bit_rate_; |