Use std::numbers constants more
Part of modernizing to C++20.
Also prefer C++ std::isfinite to C macro, see
https://en.cppreference.com/w/c/numeric/math/isfinite
vs
https://en.cppreference.com/w/cpp/numeric/math/isfinite
Bug: None
Change-Id: I41c3173984a5bb5356b6774af3794d1b05798d37
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/394244
Reviewed-by: Guido Urdaneta <guidou@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Philipp Hancke <phancke@meta.com>
Cr-Commit-Position: refs/heads/main@{#44877}
diff --git a/api/audio/audio_processing.h b/api/audio/audio_processing.h
index b788213..c379bec 100644
--- a/api/audio/audio_processing.h
+++ b/api/audio/audio_processing.h
@@ -11,18 +11,11 @@
#ifndef API_AUDIO_AUDIO_PROCESSING_H_
#define API_AUDIO_AUDIO_PROCESSING_H_
-// MSVC++ requires this to be set before any other includes to get M_PI.
-#ifndef _USE_MATH_DEFINES
-#define _USE_MATH_DEFINES
-#endif
-
-#include <math.h>
-#include <stddef.h> // size_t
-#include <stdio.h> // FILE
-#include <string.h>
-
#include <array>
+#include <cstddef>
#include <cstdint>
+#include <cstdio>
+#include <cstring>
#include <memory>
#include <optional>
#include <string>
diff --git a/common_audio/resampler/sinc_resampler.cc b/common_audio/resampler/sinc_resampler.cc
index f0c3804..fc64ba6 100644
--- a/common_audio/resampler/sinc_resampler.cc
+++ b/common_audio/resampler/sinc_resampler.cc
@@ -82,19 +82,17 @@
// Note: we're glossing over how the sub-sample handling works with
// `virtual_source_idx_`, etc.
-// MSVC++ requires this to be set before any other includes to get M_PI.
-#define _USE_MATH_DEFINES
-
#include "common_audio/resampler/sinc_resampler.h"
-#include <math.h>
-#include <stdint.h>
-#include <string.h>
-
+#include <cmath>
+#include <cstdint>
+#include <cstring>
#include <limits>
+#include <numbers>
#include "rtc_base/checks.h"
#include "rtc_base/cpu_info.h"
+#include "rtc_base/memory/aligned_malloc.h"
#include "rtc_base/system/arch.h"
namespace webrtc {
@@ -210,14 +208,16 @@
for (size_t i = 0; i < kKernelSize; ++i) {
const size_t idx = i + offset_idx * kKernelSize;
const float pre_sinc = static_cast<float>(
- M_PI * (static_cast<int>(i) - static_cast<int>(kKernelSize / 2) -
- subsample_offset));
+ std::numbers::pi *
+ (static_cast<int>(i) - static_cast<int>(kKernelSize / 2) -
+ subsample_offset));
kernel_pre_sinc_storage_[idx] = pre_sinc;
// Compute Blackman window, matching the offset of the sinc().
const float x = (i - subsample_offset) / kKernelSize;
- const float window = static_cast<float>(kA0 - kA1 * cos(2.0 * M_PI * x) +
- kA2 * cos(4.0 * M_PI * x));
+ const float window =
+ static_cast<float>(kA0 - kA1 * cos(2.0 * std::numbers::pi * x) +
+ kA2 * cos(4.0 * std::numbers::pi * x));
kernel_window_storage_[idx] = window;
// Compute the sinc with offset, then window the sinc() function and store
diff --git a/common_audio/resampler/sinc_resampler_unittest.cc b/common_audio/resampler/sinc_resampler_unittest.cc
index a35bd6d..01bb883 100644
--- a/common_audio/resampler/sinc_resampler_unittest.cc
+++ b/common_audio/resampler/sinc_resampler_unittest.cc
@@ -11,15 +11,16 @@
// Modified from the Chromium original:
// src/media/base/sinc_resampler_unittest.cc
-// MSVC++ requires this to be set before any other includes to get M_PI.
-#define _USE_MATH_DEFINES
-
#include "common_audio/resampler/sinc_resampler.h"
-#include <math.h>
-
#include <algorithm>
+#include <cmath>
+#include <cstddef>
+#include <cstdint>
+#include <cstdio>
+#include <cstring>
#include <memory>
+#include <numbers>
#include <tuple>
#include "common_audio/resampler/sinusoidal_linear_chirp_source.h"
@@ -261,7 +262,7 @@
std::unique_ptr<float[]> kernel(new float[SincResampler::kKernelStorageSize]);
memcpy(kernel.get(), resampler.get_kernel_for_testing(),
SincResampler::kKernelStorageSize);
- resampler.SetRatio(M_PI);
+ resampler.SetRatio(std::numbers::pi_v<float>);
ASSERT_NE(0, memcmp(kernel.get(), resampler.get_kernel_for_testing(),
SincResampler::kKernelStorageSize));
resampler.SetRatio(io_ratio);
diff --git a/common_audio/resampler/sinusoidal_linear_chirp_source.cc b/common_audio/resampler/sinusoidal_linear_chirp_source.cc
index 2afdd1b..7c68009 100644
--- a/common_audio/resampler/sinusoidal_linear_chirp_source.cc
+++ b/common_audio/resampler/sinusoidal_linear_chirp_source.cc
@@ -8,12 +8,11 @@
* be found in the AUTHORS file in the root of the source tree.
*/
-// MSVC++ requires this to be set before any other includes to get M_PI.
-#define _USE_MATH_DEFINES
-
#include "common_audio/resampler/sinusoidal_linear_chirp_source.h"
-#include <math.h>
+#include <cmath>
+#include <cstddef>
+#include <numbers>
namespace webrtc {
@@ -43,7 +42,8 @@
} else {
// Sinusoidal linear chirp.
double t = (current_index_ - delay_samples_) / sample_rate_;
- destination[i] = sin(2 * M_PI * (kMinFrequency * t + (k_ / 2) * t * t));
+ destination[i] =
+ sin(2 * std::numbers::pi * (kMinFrequency * t + (k_ / 2) * t * t));
}
}
}
diff --git a/common_audio/wav_file_unittest.cc b/common_audio/wav_file_unittest.cc
index fbfa4aa..f4a04b7 100644
--- a/common_audio/wav_file_unittest.cc
+++ b/common_audio/wav_file_unittest.cc
@@ -8,15 +8,19 @@
* be found in the AUTHORS file in the root of the source tree.
*/
-// MSVC++ requires this to be set before any other includes to get M_PI.
-#define _USE_MATH_DEFINES
-
#include "common_audio/wav_file.h"
#include <cmath>
+#include <cstddef>
+#include <cstdint>
+#include <cstdio>
+#include <cstring>
#include <limits>
+#include <numbers>
+#include <string>
#include "common_audio/wav_header.h"
+#include "rtc_base/checks.h"
#include "rtc_base/logging.h"
#include "test/gtest.h"
#include "test/testsupport/file_utils.h"
@@ -135,12 +139,13 @@
const double t =
static_cast<double>(i) / (kNumChannels * kSampleRate);
const double x = std::numeric_limits<int16_t>::max() *
- std::sin(t * kToneHz * 2 * M_PI);
- samples[i] = std::pow(std::sin(t * 2 * 2 * M_PI), 10) * x;
- samples[i + 1] = std::pow(std::cos(t * 2 * 2 * M_PI), 10) * x;
+ std::sin(t * kToneHz * 2 * std::numbers::pi);
+ samples[i] = std::pow(std::sin(t * 2 * 2 * std::numbers::pi), 10) * x;
+ samples[i + 1] =
+ std::pow(std::cos(t * 2 * 2 * std::numbers::pi), 10) * x;
// See https://issues.webrtc.org/issues/379973428
- RTC_CHECK(isfinite(samples[i]));
- RTC_CHECK(isfinite(samples[i + 1]));
+ RTC_CHECK(std::isfinite(samples[i]));
+ RTC_CHECK(std::isfinite(samples[i + 1]));
}
{
WavWriter w(outfile, kSampleRate, kNumChannels, wav_format);
@@ -177,7 +182,7 @@
EXPECT_EQ(kNumSamples, r.ReadSamples(kNumSamples, read_samples));
for (size_t i = 0; i < kNumSamples; ++i) {
EXPECT_NEAR(samples[i], read_samples[i], 1);
- if (!isfinite(samples[i])) {
+ if (!std::isfinite(samples[i])) {
// See https://issues.webrtc.org/issues/379973428
RTC_LOG(LS_ERROR)
<< "samples[" << i << "] is not finite. "
@@ -192,7 +197,7 @@
EXPECT_EQ(kNumSamples, r.ReadSamples(kNumSamples, read_samples));
for (size_t i = 0; i < kNumSamples; ++i) {
EXPECT_NEAR(samples[i], static_cast<float>(read_samples[i]), 1);
- if (!isfinite(samples[i])) {
+ if (!std::isfinite(samples[i])) {
// See https://issues.webrtc.org/issues/379973428
RTC_LOG(LS_ERROR)
<< "samples[" << i << "] is not finite. "
diff --git a/common_audio/window_generator.cc b/common_audio/window_generator.cc
index 7c33d25..5a6de1a 100644
--- a/common_audio/window_generator.cc
+++ b/common_audio/window_generator.cc
@@ -8,12 +8,11 @@
* be found in the AUTHORS file in the root of the source tree.
*/
-#define _USE_MATH_DEFINES
-
#include "common_audio/window_generator.h"
#include <cmath>
#include <complex>
+#include <cstddef>
#include <numbers>
#include "rtc_base/checks.h"
diff --git a/modules/audio_processing/post_filter_unittest.cc b/modules/audio_processing/post_filter_unittest.cc
index 096d734..ecb7536 100644
--- a/modules/audio_processing/post_filter_unittest.cc
+++ b/modules/audio_processing/post_filter_unittest.cc
@@ -14,6 +14,7 @@
#include <algorithm>
#include <cmath>
#include <memory>
+#include <numbers>
#include <vector>
#include "api/array_view.h"
@@ -91,7 +92,8 @@
constexpr int num_frames = sample_rate_hz * 10 / 1000; // 10ms;
constexpr double tone_frequency = 19800; // Hz
- const double phase_increment = tone_frequency * 2.0 * M_PI / sample_rate_hz;
+ const double phase_increment =
+ tone_frequency * 2.0 * std::numbers::pi / sample_rate_hz;
double phase = 0.0;
std::vector<float> audio_input(num_frames);
@@ -132,7 +134,8 @@
constexpr int num_frames = sample_rate_hz * 10 / 1000; // 10ms;
constexpr double tone_frequency = 16800; // Hz
- const double phase_increment = tone_frequency * 2.0 * M_PI / sample_rate_hz;
+ const double phase_increment =
+ tone_frequency * 2.0 * std::numbers::pi / sample_rate_hz;
double phase = 0.0;
std::vector<float> audio_input(num_frames);
diff --git a/modules/audio_processing/test/conversational_speech/generator_unittest.cc b/modules/audio_processing/test/conversational_speech/generator_unittest.cc
index 71acb15..390ce67 100644
--- a/modules/audio_processing/test/conversational_speech/generator_unittest.cc
+++ b/modules/audio_processing/test/conversational_speech/generator_unittest.cc
@@ -33,17 +33,13 @@
// cases in which there are wrong offsets leading to self cross-talk (which is
// rejected).
-// MSVC++ requires this to be set before any other includes to get M_PI.
-#define _USE_MATH_DEFINES
-
-#include <math.h>
-#include <stdio.h>
-
#include <cmath>
#include <cstddef>
#include <cstdint>
+#include <cstdio>
#include <map>
#include <memory>
+#include <numbers>
#include <optional>
#include <string>
#include <utility>
@@ -108,7 +104,8 @@
void CreateSineWavFile(absl::string_view filepath,
const MockWavReaderFactory::Params& params,
float frequency_hz = 440.0f) {
- const double phase_step = 2 * M_PI * frequency_hz / params.sample_rate;
+ const double phase_step =
+ 2 * std::numbers::pi * frequency_hz / params.sample_rate;
double phase = 0.0;
std::vector<int16_t> samples(params.num_samples);
for (size_t i = 0; i < params.num_samples; ++i) {