diff --git a/modules/audio_device/BUILD.gn b/modules/audio_device/BUILD.gn index e565b5aed7..327c08f674 100644 --- a/modules/audio_device/BUILD.gn +++ b/modules/audio_device/BUILD.gn @@ -101,6 +101,7 @@ rtc_library("audio_device_name") { "audio_device_name.cc", "audio_device_name.h", ] + absl_deps = [ "//third_party/abseil-cpp/absl/strings" ] } rtc_source_set("windows_core_audio_utility") { @@ -121,6 +122,7 @@ rtc_source_set("windows_core_audio_utility") { "../../rtc_base:stringutils", "../../rtc_base/win:windows_version", ] + absl_deps = [ "//third_party/abseil-cpp/absl/strings:strings" ] libs = [ "oleaut32.lib" ] } @@ -166,7 +168,10 @@ rtc_source_set("audio_device_module_from_input_and_output") { "../../rtc_base/win:scoped_com_initializer", "../../rtc_base/win:windows_version", ] - absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] + absl_deps = [ + "//third_party/abseil-cpp/absl/strings:strings", + "//third_party/abseil-cpp/absl/types:optional", + ] } } @@ -434,7 +439,10 @@ if (rtc_include_tests && !build_with_chromium) { "../../test:fileutils", "../../test:test_support", ] - absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] + absl_deps = [ + "//third_party/abseil-cpp/absl/strings", + "//third_party/abseil-cpp/absl/types:optional", + ] if (is_linux || is_chromeos || is_mac || is_win) { sources += [ "audio_device_unittest.cc" ] } diff --git a/modules/audio_device/android/audio_device_unittest.cc b/modules/audio_device/android/audio_device_unittest.cc index 4e607bc446..35ed5da1b7 100644 --- a/modules/audio_device/android/audio_device_unittest.cc +++ b/modules/audio_device/android/audio_device_unittest.cc @@ -18,6 +18,7 @@ #include #include +#include "absl/strings/string_view.h" #include "api/scoped_refptr.h" #include "api/task_queue/default_task_queue_factory.h" #include "api/task_queue/task_queue_factory.h" @@ -104,7 +105,7 @@ class AudioStreamInterface { class FileAudioStream : public AudioStreamInterface { public: FileAudioStream(size_t num_callbacks, - const std::string& file_name, + absl::string_view file_name, int sample_rate) : file_size_in_bytes_(0), sample_rate_(sample_rate), file_pos_(0) { file_size_in_bytes_ = test::GetFileSize(file_name); @@ -114,7 +115,7 @@ class FileAudioStream : public AudioStreamInterface { const size_t num_16bit_samples = test::GetFileSize(file_name) / kBytesPerSample; file_.reset(new int16_t[num_16bit_samples]); - FILE* audio_file = fopen(file_name.c_str(), "rb"); + FILE* audio_file = fopen(std::string(file_name).c_str(), "rb"); EXPECT_NE(audio_file, nullptr); size_t num_samples_read = fread(file_.get(), sizeof(int16_t), num_16bit_samples, audio_file); @@ -567,7 +568,7 @@ class AudioDeviceTest : public ::testing::Test { return active; } - bool DisableTestForThisDevice(const std::string& model) { + bool DisableTestForThisDevice(absl::string_view model) { return (build_info_->GetDeviceModel() == model); } diff --git a/modules/audio_device/audio_device_name.cc b/modules/audio_device/audio_device_name.cc index 5246c768ff..5318496768 100644 --- a/modules/audio_device/audio_device_name.cc +++ b/modules/audio_device/audio_device_name.cc @@ -10,14 +10,15 @@ #include "modules/audio_device/audio_device_name.h" -#include +#include "absl/strings/string_view.h" namespace webrtc { const char AudioDeviceName::kDefaultDeviceId[] = "default"; -AudioDeviceName::AudioDeviceName(std::string device_name, std::string unique_id) - : device_name(std::move(device_name)), unique_id(std::move(unique_id)) {} +AudioDeviceName::AudioDeviceName(absl::string_view device_name, + absl::string_view unique_id) + : device_name(device_name), unique_id(unique_id) {} bool AudioDeviceName::IsValid() { return !device_name.empty() && !unique_id.empty(); diff --git a/modules/audio_device/audio_device_name.h b/modules/audio_device/audio_device_name.h index baabd781a7..db37852e9a 100644 --- a/modules/audio_device/audio_device_name.h +++ b/modules/audio_device/audio_device_name.h @@ -14,6 +14,8 @@ #include #include +#include "absl/strings/string_view.h" + namespace webrtc { struct AudioDeviceName { @@ -25,7 +27,7 @@ struct AudioDeviceName { static const char kDefaultDeviceId[]; AudioDeviceName() = default; - AudioDeviceName(std::string device_name, std::string unique_id); + AudioDeviceName(absl::string_view device_name, absl::string_view unique_id); ~AudioDeviceName() = default; diff --git a/modules/audio_device/dummy/file_audio_device.cc b/modules/audio_device/dummy/file_audio_device.cc index 0e3caa9d4f..8c10ae4186 100644 --- a/modules/audio_device/dummy/file_audio_device.cc +++ b/modules/audio_device/dummy/file_audio_device.cc @@ -12,6 +12,7 @@ #include +#include "absl/strings/string_view.h" #include "rtc_base/checks.h" #include "rtc_base/logging.h" #include "rtc_base/platform_thread.h" @@ -29,8 +30,8 @@ const size_t kPlayoutBufferSize = const size_t kRecordingBufferSize = kRecordingFixedSampleRate / 100 * kRecordingNumChannels * 2; -FileAudioDevice::FileAudioDevice(const char* inputFilename, - const char* outputFilename) +FileAudioDevice::FileAudioDevice(absl::string_view inputFilename, + absl::string_view outputFilename) : _ptrAudioBuffer(NULL), _recordingBuffer(NULL), _playoutBuffer(NULL), diff --git a/modules/audio_device/dummy/file_audio_device.h b/modules/audio_device/dummy/file_audio_device.h index 4d6858f992..27979933f2 100644 --- a/modules/audio_device/dummy/file_audio_device.h +++ b/modules/audio_device/dummy/file_audio_device.h @@ -16,6 +16,7 @@ #include #include +#include "absl/strings/string_view.h" #include "modules/audio_device/audio_device_generic.h" #include "rtc_base/platform_thread.h" #include "rtc_base/synchronization/mutex.h" @@ -34,7 +35,8 @@ class FileAudioDevice : public AudioDeviceGeneric { // The input file should be a readable 48k stereo raw file, and the output // file should point to a writable location. The output format will also be // 48k stereo raw audio. - FileAudioDevice(const char* inputFilename, const char* outputFilename); + FileAudioDevice(absl::string_view inputFilename, + absl::string_view outputFilename); virtual ~FileAudioDevice(); // Retrieve the currently utilized audio layer diff --git a/modules/audio_device/dummy/file_audio_device_factory.cc b/modules/audio_device/dummy/file_audio_device_factory.cc index 0f56e0641a..8c41111478 100644 --- a/modules/audio_device/dummy/file_audio_device_factory.cc +++ b/modules/audio_device/dummy/file_audio_device_factory.cc @@ -14,8 +14,10 @@ #include +#include "absl/strings/string_view.h" #include "modules/audio_device/dummy/file_audio_device.h" #include "rtc_base/logging.h" +#include "rtc_base/string_utils.h" namespace webrtc { @@ -38,15 +40,15 @@ FileAudioDevice* FileAudioDeviceFactory::CreateFileAudioDevice() { } void FileAudioDeviceFactory::SetFilenamesToUse( - const char* inputAudioFilename, - const char* outputAudioFilename) { + absl::string_view inputAudioFilename, + absl::string_view outputAudioFilename) { #ifdef WEBRTC_DUMMY_FILE_DEVICES - RTC_DCHECK_LT(strlen(inputAudioFilename), MAX_FILENAME_LEN); - RTC_DCHECK_LT(strlen(outputAudioFilename), MAX_FILENAME_LEN); + RTC_DCHECK_LT(inputAudioFilename.size(), MAX_FILENAME_LEN); + RTC_DCHECK_LT(outputAudioFilename.size(), MAX_FILENAME_LEN); // Copy the strings since we don't know the lifetime of the input pointers. - strncpy(_inputAudioFilename, inputAudioFilename, MAX_FILENAME_LEN); - strncpy(_outputAudioFilename, outputAudioFilename, MAX_FILENAME_LEN); + rtc::strcpyn(_inputAudioFilename, MAX_FILENAME_LEN, inputAudioFilename); + rtc::strcpyn(_outputAudioFilename, MAX_FILENAME_LEN, outputAudioFilename); _isConfigured = true; #else // Sanity: must be compiled with the right define to run this. diff --git a/modules/audio_device/dummy/file_audio_device_factory.h b/modules/audio_device/dummy/file_audio_device_factory.h index 72f4ab2b38..18f9388f21 100644 --- a/modules/audio_device/dummy/file_audio_device_factory.h +++ b/modules/audio_device/dummy/file_audio_device_factory.h @@ -13,6 +13,8 @@ #include +#include "absl/strings/string_view.h" + namespace webrtc { class FileAudioDevice; @@ -27,8 +29,8 @@ class FileAudioDeviceFactory { // The input file must be a readable 48k stereo raw file. The output // file must be writable. The strings will be copied. - static void SetFilenamesToUse(const char* inputAudioFilename, - const char* outputAudioFilename); + static void SetFilenamesToUse(absl::string_view inputAudioFilename, + absl::string_view outputAudioFilename); private: enum : uint32_t { MAX_FILENAME_LEN = 512 }; diff --git a/modules/audio_device/include/test_audio_device.cc b/modules/audio_device/include/test_audio_device.cc index d18ed99a79..90cdd5869e 100644 --- a/modules/audio_device/include/test_audio_device.cc +++ b/modules/audio_device/include/test_audio_device.cc @@ -18,6 +18,7 @@ #include #include +#include "absl/strings/string_view.h" #include "api/array_view.h" #include "api/make_ref_counted.h" #include "common_audio/wav_file.h" @@ -266,7 +267,7 @@ class PulsedNoiseCapturerImpl final class WavFileReader final : public TestAudioDeviceModule::Capturer { public: - WavFileReader(std::string filename, + WavFileReader(absl::string_view filename, int sampling_frequency_in_hz, int num_channels, bool repeat) @@ -320,7 +321,7 @@ class WavFileReader final : public TestAudioDeviceModule::Capturer { class WavFileWriter final : public TestAudioDeviceModule::Renderer { public: - WavFileWriter(std::string filename, + WavFileWriter(absl::string_view filename, int sampling_frequency_in_hz, int num_channels) : WavFileWriter(std::make_unique(filename, @@ -353,7 +354,7 @@ class WavFileWriter final : public TestAudioDeviceModule::Renderer { class BoundedWavFileWriter : public TestAudioDeviceModule::Renderer { public: - BoundedWavFileWriter(std::string filename, + BoundedWavFileWriter(absl::string_view filename, int sampling_frequency_in_hz, int num_channels) : sampling_frequency_in_hz_(sampling_frequency_in_hz), @@ -467,7 +468,7 @@ TestAudioDeviceModule::CreateDiscardRenderer(int sampling_frequency_in_hz, } std::unique_ptr -TestAudioDeviceModule::CreateWavFileReader(std::string filename, +TestAudioDeviceModule::CreateWavFileReader(absl::string_view filename, int sampling_frequency_in_hz, int num_channels) { return std::make_unique(filename, sampling_frequency_in_hz, @@ -475,7 +476,8 @@ TestAudioDeviceModule::CreateWavFileReader(std::string filename, } std::unique_ptr -TestAudioDeviceModule::CreateWavFileReader(std::string filename, bool repeat) { +TestAudioDeviceModule::CreateWavFileReader(absl::string_view filename, + bool repeat) { WavReader reader(filename); int sampling_frequency_in_hz = reader.sample_rate(); int num_channels = rtc::checked_cast(reader.num_channels()); @@ -484,7 +486,7 @@ TestAudioDeviceModule::CreateWavFileReader(std::string filename, bool repeat) { } std::unique_ptr -TestAudioDeviceModule::CreateWavFileWriter(std::string filename, +TestAudioDeviceModule::CreateWavFileWriter(absl::string_view filename, int sampling_frequency_in_hz, int num_channels) { return std::make_unique(filename, sampling_frequency_in_hz, @@ -492,7 +494,7 @@ TestAudioDeviceModule::CreateWavFileWriter(std::string filename, } std::unique_ptr -TestAudioDeviceModule::CreateBoundedWavFileWriter(std::string filename, +TestAudioDeviceModule::CreateBoundedWavFileWriter(absl::string_view filename, int sampling_frequency_in_hz, int num_channels) { return std::make_unique( diff --git a/modules/audio_device/include/test_audio_device.h b/modules/audio_device/include/test_audio_device.h index fd006a3558..facc4317bb 100644 --- a/modules/audio_device/include/test_audio_device.h +++ b/modules/audio_device/include/test_audio_device.h @@ -16,6 +16,7 @@ #include #include +#include "absl/strings/string_view.h" #include "api/array_view.h" #include "api/scoped_refptr.h" #include "api/task_queue/task_queue_factory.h" @@ -103,7 +104,7 @@ class TestAudioDeviceModule : public AudioDeviceModule { // Returns a Capturer instance that gets its data from a file. The sample rate // and channels will be checked against the Wav file. static std::unique_ptr CreateWavFileReader( - std::string filename, + absl::string_view filename, int sampling_frequency_in_hz, int num_channels = 1); @@ -111,12 +112,13 @@ class TestAudioDeviceModule : public AudioDeviceModule { // Automatically detects sample rate and num of channels. // `repeat` - if true, the file will be replayed from the start when we reach // the end of file. - static std::unique_ptr CreateWavFileReader(std::string filename, - bool repeat = false); + static std::unique_ptr CreateWavFileReader( + absl::string_view filename, + bool repeat = false); // Returns a Renderer instance that writes its data to a file. static std::unique_ptr CreateWavFileWriter( - std::string filename, + absl::string_view filename, int sampling_frequency_in_hz, int num_channels = 1); @@ -124,7 +126,7 @@ class TestAudioDeviceModule : public AudioDeviceModule { // off silence at the beginning (not necessarily perfect silence, see // kAmplitudeThreshold) and at the end (only actual 0 samples in this case). static std::unique_ptr CreateBoundedWavFileWriter( - std::string filename, + absl::string_view filename, int sampling_frequency_in_hz, int num_channels = 1); diff --git a/modules/audio_device/linux/latebindingsymboltable_linux.cc b/modules/audio_device/linux/latebindingsymboltable_linux.cc index def4866d5a..751edafd8b 100644 --- a/modules/audio_device/linux/latebindingsymboltable_linux.cc +++ b/modules/audio_device/linux/latebindingsymboltable_linux.cc @@ -10,6 +10,7 @@ #include "modules/audio_device/linux/latebindingsymboltable_linux.h" +#include "absl/strings/string_view.h" #include "rtc_base/logging.h" #ifdef WEBRTC_LINUX @@ -32,9 +33,9 @@ inline static const char* GetDllError() { #endif } -DllHandle InternalLoadDll(const char dll_name[]) { +DllHandle InternalLoadDll(absl::string_view dll_name) { #ifdef WEBRTC_LINUX - DllHandle handle = dlopen(dll_name, RTLD_NOW); + DllHandle handle = dlopen(std::string(dll_name).c_str(), RTLD_NOW); #else #error Not implemented #endif @@ -64,10 +65,10 @@ void InternalUnloadDll(DllHandle handle) { } static bool LoadSymbol(DllHandle handle, - const char* symbol_name, + absl::string_view symbol_name, void** symbol) { #ifdef WEBRTC_LINUX - *symbol = dlsym(handle, symbol_name); + *symbol = dlsym(handle, std::string(symbol_name).c_str()); char* err = dlerror(); if (err) { RTC_LOG(LS_ERROR) << "Error loading symbol " << symbol_name << " : " << err; diff --git a/modules/audio_device/linux/latebindingsymboltable_linux.h b/modules/audio_device/linux/latebindingsymboltable_linux.h index 9484b075ef..00f3c5a449 100644 --- a/modules/audio_device/linux/latebindingsymboltable_linux.h +++ b/modules/audio_device/linux/latebindingsymboltable_linux.h @@ -14,6 +14,7 @@ #include // for NULL #include +#include "absl/strings/string_view.h" #include "rtc_base/checks.h" // This file provides macros for creating "symbol table" classes to simplify the @@ -33,7 +34,7 @@ const DllHandle kInvalidDllHandle = NULL; #endif // These are helpers for use only by the class below. -DllHandle InternalLoadDll(const char dll_name[]); +DllHandle InternalLoadDll(absl::string_view); void InternalUnloadDll(DllHandle handle); diff --git a/modules/audio_device/win/core_audio_base_win.cc b/modules/audio_device/win/core_audio_base_win.cc index f43c068fb2..dc8526b625 100644 --- a/modules/audio_device/win/core_audio_base_win.cc +++ b/modules/audio_device/win/core_audio_base_win.cc @@ -13,6 +13,7 @@ #include #include +#include "absl/strings/string_view.h" #include "modules/audio_device/audio_device_buffer.h" #include "rtc_base/arraysize.h" #include "rtc_base/checks.h" @@ -230,7 +231,7 @@ bool CoreAudioBase::IsDefaultCommunicationsDevice(int index) const { return index == kDefaultCommunications; } -bool CoreAudioBase::IsDefaultDeviceId(const std::string& device_id) const { +bool CoreAudioBase::IsDefaultDeviceId(absl::string_view device_id) const { // Returns true if `device_id` corresponds to the id of the default // device. Note that, if only one device is available (or if the user has not // explicitly set a default device), `device_id` will also math @@ -242,7 +243,7 @@ bool CoreAudioBase::IsDefaultDeviceId(const std::string& device_id) const { } bool CoreAudioBase::IsDefaultCommunicationsDeviceId( - const std::string& device_id) const { + absl::string_view device_id) const { // Returns true if `device_id` corresponds to the id of the default // communication device. Note that, if only one device is available (or if // the user has not explicitly set a communication device), `device_id` will diff --git a/modules/audio_device/win/core_audio_base_win.h b/modules/audio_device/win/core_audio_base_win.h index a9a769e15f..6c1357e059 100644 --- a/modules/audio_device/win/core_audio_base_win.h +++ b/modules/audio_device/win/core_audio_base_win.h @@ -16,6 +16,7 @@ #include #include +#include "absl/strings/string_view.h" #include "absl/types/optional.h" #include "api/sequence_checker.h" #include "modules/audio_device/win/core_audio_utility_win.h" @@ -117,8 +118,8 @@ class CoreAudioBase : public IAudioSessionEvents { bool IsOutput() const; bool IsDefaultDevice(int index) const; bool IsDefaultCommunicationsDevice(int index) const; - bool IsDefaultDeviceId(const std::string& device_id) const; - bool IsDefaultCommunicationsDeviceId(const std::string& device_id) const; + bool IsDefaultDeviceId(absl::string_view device_id) const; + bool IsDefaultCommunicationsDeviceId(absl::string_view device_id) const; EDataFlow GetDataFlow() const; bool IsRestarting() const; int64_t TimeSinceStart() const; diff --git a/modules/audio_device/win/core_audio_utility_win.cc b/modules/audio_device/win/core_audio_utility_win.cc index c5a3520868..e4e2864db5 100644 --- a/modules/audio_device/win/core_audio_utility_win.cc +++ b/modules/audio_device/win/core_audio_utility_win.cc @@ -18,6 +18,7 @@ #include #include +#include "absl/strings/string_view.h" #include "rtc_base/arraysize.h" #include "rtc_base/logging.h" #include "rtc_base/platform_thread_types.h" @@ -280,7 +281,7 @@ bool IsDeviceActive(IMMDevice* device) { // Retrieve an audio device specified by `device_id` or a default device // specified by data-flow direction and role if `device_id` is default. -ComPtr CreateDeviceInternal(const std::string& device_id, +ComPtr CreateDeviceInternal(absl::string_view device_id, EDataFlow data_flow, ERole role) { RTC_DLOG(LS_INFO) << "CreateDeviceInternal: " @@ -745,7 +746,7 @@ std::string GetCommunicationsOutputDeviceID() { return device.Get() ? GetDeviceIdInternal(device.Get()) : std::string(); } -ComPtr CreateDevice(const std::string& device_id, +ComPtr CreateDevice(absl::string_view device_id, EDataFlow data_flow, ERole role) { RTC_DLOG(LS_INFO) << "CreateDevice"; @@ -762,7 +763,7 @@ AudioDeviceName GetDeviceName(IMMDevice* device) { return device_name; } -std::string GetFriendlyName(const std::string& device_id, +std::string GetFriendlyName(absl::string_view device_id, EDataFlow data_flow, ERole role) { RTC_DLOG(LS_INFO) << "GetFriendlyName"; @@ -871,7 +872,7 @@ int NumberOfActiveSessions(IMMDevice* device) { return num_active; } -ComPtr CreateClient(const std::string& device_id, +ComPtr CreateClient(absl::string_view device_id, EDataFlow data_flow, ERole role) { RTC_DLOG(LS_INFO) << "CreateClient"; @@ -879,7 +880,7 @@ ComPtr CreateClient(const std::string& device_id, return CreateClientInternal(device.Get()); } -ComPtr CreateClient2(const std::string& device_id, +ComPtr CreateClient2(absl::string_view device_id, EDataFlow data_flow, ERole role) { RTC_DLOG(LS_INFO) << "CreateClient2"; @@ -887,7 +888,7 @@ ComPtr CreateClient2(const std::string& device_id, return CreateClient2Internal(device.Get()); } -ComPtr CreateClient3(const std::string& device_id, +ComPtr CreateClient3(absl::string_view device_id, EDataFlow data_flow, ERole role) { RTC_DLOG(LS_INFO) << "CreateClient3"; diff --git a/modules/audio_device/win/core_audio_utility_win.h b/modules/audio_device/win/core_audio_utility_win.h index 754b4ddafa..454e60bf31 100644 --- a/modules/audio_device/win/core_audio_utility_win.h +++ b/modules/audio_device/win/core_audio_utility_win.h @@ -22,6 +22,7 @@ #include +#include "absl/strings/string_view.h" #include "api/units/time_delta.h" #include "modules/audio_device/audio_device_name.h" #include "modules/audio_device/include/audio_device_defines.h" @@ -329,7 +330,7 @@ std::string GetCommunicationsOutputDeviceID(); // Creates an IMMDevice interface corresponding to the unique device id in // `device_id`, or by data-flow direction and role if `device_id` is set to // AudioDeviceName::kDefaultDeviceId. -Microsoft::WRL::ComPtr CreateDevice(const std::string& device_id, +Microsoft::WRL::ComPtr CreateDevice(absl::string_view device_id, EDataFlow data_flow, ERole role); @@ -341,7 +342,7 @@ webrtc::AudioDeviceName GetDeviceName(IMMDevice* device); // Gets the user-friendly name of the endpoint device which is represented // by a unique id in `device_id`, or by data-flow direction and role if // `device_id` is set to AudioDeviceName::kDefaultDeviceId. -std::string GetFriendlyName(const std::string& device_id, +std::string GetFriendlyName(absl::string_view device_id, EDataFlow data_flow, ERole role); @@ -378,13 +379,15 @@ int NumberOfActiveSessions(IMMDevice* device); // Creates an IAudioClient instance for a specific device or the default // device specified by data-flow direction and role. -Microsoft::WRL::ComPtr CreateClient(const std::string& device_id, +Microsoft::WRL::ComPtr CreateClient(absl::string_view device_id, EDataFlow data_flow, ERole role); -Microsoft::WRL::ComPtr -CreateClient2(const std::string& device_id, EDataFlow data_flow, ERole role); -Microsoft::WRL::ComPtr -CreateClient3(const std::string& device_id, EDataFlow data_flow, ERole role); +Microsoft::WRL::ComPtr CreateClient2(absl::string_view device_id, + EDataFlow data_flow, + ERole role); +Microsoft::WRL::ComPtr CreateClient3(absl::string_view device_id, + EDataFlow data_flow, + ERole role); // Sets the AudioCategory_Communications category. Should be called before // GetSharedModeMixFormat() and IsFormatSupported(). The `client` argument must