diff --git a/common_audio/wav_header.cc b/common_audio/wav_header.cc index 65d8be5b89..bca209a665 100644 --- a/common_audio/wav_header.cc +++ b/common_audio/wav_header.cc @@ -80,8 +80,6 @@ const uint32_t kFmtIeeeFloatSubchunkSize = // read audio samples. #pragma pack(2) struct WavHeaderPcm { - WavHeaderPcm(const WavHeaderPcm&) = default; - WavHeaderPcm& operator=(const WavHeaderPcm&) = default; RiffHeader riff; FmtPcmSubchunk fmt; struct { @@ -95,8 +93,6 @@ static_assert(sizeof(WavHeaderPcm) == kPcmWavHeaderSize, // WAV implementation. #pragma pack(2) struct WavHeaderIeeeFloat { - WavHeaderIeeeFloat(const WavHeaderIeeeFloat&) = default; - WavHeaderIeeeFloat& operator=(const WavHeaderIeeeFloat&) = default; RiffHeader riff; FmtIeeeFloatSubchunk fmt; struct { diff --git a/modules/audio_processing/include/aec_dump.cc b/modules/audio_processing/include/aec_dump.cc index 67809d0dcb..8f788cb802 100644 --- a/modules/audio_processing/include/aec_dump.cc +++ b/modules/audio_processing/include/aec_dump.cc @@ -17,7 +17,7 @@ InternalAPMConfig::InternalAPMConfig(InternalAPMConfig&&) = default; InternalAPMConfig& InternalAPMConfig::operator=(const InternalAPMConfig&) = default; -bool InternalAPMConfig::operator==(const InternalAPMConfig& other) { +bool InternalAPMConfig::operator==(const InternalAPMConfig& other) const { return aec_enabled == other.aec_enabled && aec_delay_agnostic_enabled == other.aec_delay_agnostic_enabled && aec_drift_compensation_enabled == diff --git a/modules/audio_processing/include/aec_dump.h b/modules/audio_processing/include/aec_dump.h index a7769d9973..07477d2f82 100644 --- a/modules/audio_processing/include/aec_dump.h +++ b/modules/audio_processing/include/aec_dump.h @@ -31,7 +31,7 @@ struct InternalAPMConfig { InternalAPMConfig& operator=(const InternalAPMConfig&); InternalAPMConfig& operator=(InternalAPMConfig&&) = delete; - bool operator==(const InternalAPMConfig& other); + bool operator==(const InternalAPMConfig& other) const; bool aec_enabled = false; bool aec_delay_agnostic_enabled = false; diff --git a/modules/audio_processing/utility/delay_estimator_wrapper.cc b/modules/audio_processing/utility/delay_estimator_wrapper.cc index 521a8a0997..3b1409cc0b 100644 --- a/modules/audio_processing/utility/delay_estimator_wrapper.cc +++ b/modules/audio_processing/utility/delay_estimator_wrapper.cc @@ -21,8 +21,8 @@ namespace webrtc { // Only bit `kBandFirst` through bit `kBandLast` are processed and // `kBandFirst` - `kBandLast` must be < 32. -enum { kBandFirst = 12 }; -enum { kBandLast = 43 }; +constexpr int kBandFirst = 12; +constexpr int kBandLast = 43; static __inline uint32_t SetBit(uint32_t in, int pos) { uint32_t mask = (1 << pos); diff --git a/modules/audio_processing/vad/vad_audio_proc.h b/modules/audio_processing/vad/vad_audio_proc.h index 4a71ce3800..cbdd707129 100644 --- a/modules/audio_processing/vad/vad_audio_proc.h +++ b/modules/audio_processing/vad/vad_audio_proc.h @@ -35,7 +35,7 @@ class VadAudioProc { size_t length, AudioFeatures* audio_features); - static const size_t kDftSize = 512; + static constexpr size_t kDftSize = 512; private: void PitchAnalysis(double* pitch_gains, double* pitch_lags_hz, size_t length); @@ -51,28 +51,24 @@ class VadAudioProc { // For every 30 ms we compute 3 spectral peak there for 3 LPC analysis. // LPC is computed over 15 ms of windowed audio. For every 10 ms sub-frame // we need 5 ms of past signal to create the input of LPC analysis. - enum : size_t { - kNumPastSignalSamples = static_cast(kSampleRateHz / 200) - }; + static constexpr size_t kNumPastSignalSamples = + static_cast(kSampleRateHz / 200); // TODO(turajs): maybe defining this at a higher level (maybe enum) so that // all the code recognize it as "no-error." - enum : int { kNoError = 0 }; + static constexpr int kNoError = 0; - enum : size_t { kNum10msSubframes = 3 }; - enum : size_t { - kNumSubframeSamples = static_cast(kSampleRateHz / 100) - }; - enum : size_t { - // Samples in 30 ms @ given sampling rate. - kNumSamplesToProcess = kNum10msSubframes * kNumSubframeSamples - }; - enum : size_t { - kBufferLength = kNumPastSignalSamples + kNumSamplesToProcess - }; - enum : size_t { kIpLength = kDftSize >> 1 }; - enum : size_t { kWLength = kDftSize >> 1 }; - enum : size_t { kLpcOrder = 16 }; + static constexpr size_t kNum10msSubframes = 3; + static constexpr size_t kNumSubframeSamples = + static_cast(kSampleRateHz / 100); + // Samples in 30 ms @ given sampling rate. + static constexpr size_t kNumSamplesToProcess = + size_t{kNum10msSubframes} * kNumSubframeSamples; + static constexpr size_t kBufferLength = + size_t{kNumPastSignalSamples} + kNumSamplesToProcess; + static constexpr size_t kIpLength = kDftSize >> 1; + static constexpr size_t kWLength = kDftSize >> 1; + static constexpr size_t kLpcOrder = 16; size_t ip_[kIpLength]; float w_fft_[kWLength]; diff --git a/modules/video_coding/codecs/av1/libaom_av1_decoder.cc b/modules/video_coding/codecs/av1/libaom_av1_decoder.cc index 2405e2c52c..b05a1f7539 100644 --- a/modules/video_coding/codecs/av1/libaom_av1_decoder.cc +++ b/modules/video_coding/codecs/av1/libaom_av1_decoder.cc @@ -191,7 +191,7 @@ const char* LibaomAv1Decoder::ImplementationName() const { } // namespace -const bool kIsLibaomAv1DecoderSupported = true; +ABSL_CONST_INIT const bool kIsLibaomAv1DecoderSupported = true; std::unique_ptr CreateLibaomAv1Decoder() { return std::make_unique(); diff --git a/modules/video_coding/codecs/av1/libaom_av1_encoder_supported.cc b/modules/video_coding/codecs/av1/libaom_av1_encoder_supported.cc index 8a65da5073..9f788d6203 100644 --- a/modules/video_coding/codecs/av1/libaom_av1_encoder_supported.cc +++ b/modules/video_coding/codecs/av1/libaom_av1_encoder_supported.cc @@ -18,7 +18,7 @@ namespace webrtc { #if defined(RTC_USE_LIBAOM_AV1_ENCODER) -const bool kIsLibaomAv1EncoderSupported = true; +ABSL_CONST_INIT const bool kIsLibaomAv1EncoderSupported = true; std::unique_ptr CreateLibaomAv1EncoderIfSupported() { return CreateLibaomAv1Encoder(); } diff --git a/modules/video_coding/media_opt_util.h b/modules/video_coding/media_opt_util.h index 1d98ea6ca4..a74d1af6cb 100644 --- a/modules/video_coding/media_opt_util.h +++ b/modules/video_coding/media_opt_util.h @@ -26,10 +26,10 @@ namespace media_optimization { // Number of time periods used for (max) window filter for packet loss // TODO(marpan): set reasonable window size for filtered packet loss, // adjustment should be based on logged/real data of loss stats/correlation. -enum { kLossPrHistorySize = 10 }; +constexpr int kLossPrHistorySize = 10; // 1000 ms, total filter length is (kLossPrHistorySize * 1000) ms -enum { kLossPrShortFilterWinMs = 1000 }; +constexpr int kLossPrShortFilterWinMs = 1000; // The type of filter used on the received packet loss reports. enum FilterPacketLossMode { @@ -41,11 +41,11 @@ enum FilterPacketLossMode { // Thresholds for hybrid NACK/FEC // common to media optimization and the jitter buffer. -const int64_t kLowRttNackMs = 20; +constexpr int64_t kLowRttNackMs = 20; // If the RTT is higher than this an extra RTT wont be added to to the jitter // buffer delay. -const int kMaxRttDelayThreshold = 500; +constexpr int kMaxRttDelayThreshold = 500; struct VCMProtectionParameters { VCMProtectionParameters(); @@ -175,15 +175,15 @@ class VCMFecMethod : public VCMProtectionMethod { int BitsPerFrame(const VCMProtectionParameters* parameters); protected: - enum { kUpperLimitFramesFec = 6 }; + static constexpr int kUpperLimitFramesFec = 6; // Thresholds values for the bytes/frame and round trip time, below which we // may turn off FEC, depending on `_numLayers` and `_maxFramesFec`. // Max bytes/frame for VGA, corresponds to ~140k at 25fps. - enum { kMaxBytesPerFrameForFec = 700 }; + static constexpr int kMaxBytesPerFrameForFec = 700; // Max bytes/frame for CIF and lower: corresponds to ~80k at 25fps. - enum { kMaxBytesPerFrameForFecLow = 400 }; + static constexpr int kMaxBytesPerFrameForFecLow = 400; // Max bytes/frame for frame size larger than VGA, ~200k at 25fps. - enum { kMaxBytesPerFrameForFecHigh = 1000 }; + static constexpr int kMaxBytesPerFrameForFecHigh = 1000; const RateControlSettings rate_control_settings_; }; diff --git a/rtc_base/race_checker.cc b/rtc_base/race_checker.cc index bf9dfdcdaa..f0d4e868c2 100644 --- a/rtc_base/race_checker.cc +++ b/rtc_base/race_checker.cc @@ -25,7 +25,9 @@ RaceChecker::RaceChecker() {} bool RaceChecker::Acquire() const { const PlatformThreadRef current_thread = CurrentThreadRef(); // Set new accessing thread if this is a new use. - if (access_count_++ == 0) + const int current_access_count = access_count_; + access_count_ = access_count_ + 1; + if (current_access_count == 0) accessing_thread_ = current_thread; // If this is being used concurrently this check will fail for the second // thread entering since it won't set the thread. Recursive use of checked @@ -35,7 +37,7 @@ bool RaceChecker::Acquire() const { } void RaceChecker::Release() const { - --access_count_; + access_count_ = access_count_ - 1; } namespace internal { diff --git a/rtc_base/system/no_unique_address.h b/rtc_base/system/no_unique_address.h index 77e7a99526..6bede2c6b6 100644 --- a/rtc_base/system/no_unique_address.h +++ b/rtc_base/system/no_unique_address.h @@ -24,8 +24,10 @@ // should add support for it starting from C++20. Among clang compilers, // clang-cl doesn't support it yet and support is unclear also when the target // platform is iOS. -#if ((defined(__clang__) && !defined(_MSC_VER) && !defined(WEBRTC_IOS)) || \ - __cplusplus > 201703L) +#ifndef __has_cpp_attribute +#define __has_cpp_attribute(__x) 0 +#endif +#if __has_cpp_attribute(no_unique_address) // NOLINTNEXTLINE(whitespace/braces) #define RTC_NO_UNIQUE_ADDRESS [[no_unique_address]] #else diff --git a/rtc_base/task_utils/repeating_task.h b/rtc_base/task_utils/repeating_task.h index 20f28d54f4..1086c1629e 100644 --- a/rtc_base/task_utils/repeating_task.h +++ b/rtc_base/task_utils/repeating_task.h @@ -75,8 +75,8 @@ class RepeatingTaskImpl final : public RepeatingTaskBase { closure_(std::forward(closure)) { static_assert( std::is_same::type>::value, + typename std::invoke_result::type>::value, ""); } diff --git a/rtc_base/units/unit_base.h b/rtc_base/units/unit_base.h index 4ccd9b750a..57cdd8c8b6 100644 --- a/rtc_base/units/unit_base.h +++ b/rtc_base/units/unit_base.h @@ -50,22 +50,22 @@ class UnitBase { return value_ == MinusInfinityVal(); } - constexpr bool operator==(const Unit_T& other) const { + constexpr bool operator==(const UnitBase& other) const { return value_ == other.value_; } - constexpr bool operator!=(const Unit_T& other) const { + constexpr bool operator!=(const UnitBase& other) const { return value_ != other.value_; } - constexpr bool operator<=(const Unit_T& other) const { + constexpr bool operator<=(const UnitBase& other) const { return value_ <= other.value_; } - constexpr bool operator>=(const Unit_T& other) const { + constexpr bool operator>=(const UnitBase& other) const { return value_ >= other.value_; } - constexpr bool operator>(const Unit_T& other) const { + constexpr bool operator>(const UnitBase& other) const { return value_ > other.value_; } - constexpr bool operator<(const Unit_T& other) const { + constexpr bool operator<(const UnitBase& other) const { return value_ < other.value_; } constexpr Unit_T RoundTo(const Unit_T& resolution) const { diff --git a/system_wrappers/include/metrics.h b/system_wrappers/include/metrics.h index c992458415..c29a727df9 100644 --- a/system_wrappers/include/metrics.h +++ b/system_wrappers/include/metrics.h @@ -363,7 +363,7 @@ namespace webrtc { namespace metrics { // Time that should have elapsed for stats that are gathered once per call. -enum { kMinRunTimeInSeconds = 10 }; +constexpr int kMinRunTimeInSeconds = 10; class Histogram; diff --git a/test/testsupport/file_utils.cc b/test/testsupport/file_utils.cc index 5ed5a1c0a1..3d462d4e61 100644 --- a/test/testsupport/file_utils.cc +++ b/test/testsupport/file_utils.cc @@ -63,9 +63,9 @@ namespace webrtc { namespace test { #if defined(WEBRTC_WIN) -const absl::string_view kPathDelimiter = "\\"; +ABSL_CONST_INIT const absl::string_view kPathDelimiter = "\\"; #else -const absl::string_view kPathDelimiter = "/"; +ABSL_CONST_INIT const absl::string_view kPathDelimiter = "/"; #endif std::string DirName(absl::string_view path) {