Propagate Clock with Environment into win helper CoreAudioBase
Bug: webrtc:42223992
Change-Id: I81c0dad6e041a53a4d5f77ea70caa6e8dd55c5a3
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/406102
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Henrik Andreassson <henrika@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#45431}
diff --git a/modules/audio_device/BUILD.gn b/modules/audio_device/BUILD.gn
index 82e6408..8e8a4bf 100644
--- a/modules/audio_device/BUILD.gn
+++ b/modules/audio_device/BUILD.gn
@@ -146,19 +146,23 @@
deps = [
":audio_device_buffer",
+ ":audio_device_name",
":windows_core_audio_utility",
+ "../../api:array_view",
"../../api:make_ref_counted",
"../../api:scoped_refptr",
"../../api:sequence_checker",
"../../api/audio:audio_device",
"../../api/environment",
"../../api/task_queue",
+ "../../api/units:time_delta",
"../../rtc_base:checks",
"../../rtc_base:logging",
"../../rtc_base:platform_thread",
"../../rtc_base:safe_conversions",
"../../rtc_base:stringutils",
"../../rtc_base:timeutils",
+ "../../rtc_base:zero_memory",
"../../rtc_base/win:scoped_com_initializer",
"../../rtc_base/win:windows_version",
"//third_party/abseil-cpp/absl/strings",
diff --git a/modules/audio_device/include/audio_device_factory.cc b/modules/audio_device/include/audio_device_factory.cc
index a823401..fac3d16 100644
--- a/modules/audio_device/include/audio_device_factory.cc
+++ b/modules/audio_device/include/audio_device_factory.cc
@@ -10,7 +10,11 @@
#include "modules/audio_device/include/audio_device_factory.h"
+#include <memory>
+
+#include "api/audio/audio_device.h"
#include "api/environment/environment.h"
+#include "api/scoped_refptr.h"
#include "rtc_base/logging.h"
#if defined(WEBRTC_WIN)
@@ -41,8 +45,8 @@
return nullptr;
}
return CreateWindowsCoreAudioAudioDeviceModuleFromInputAndOutput(
- env, std::make_unique<webrtc_win::CoreAudioInput>(automatic_restart),
- std::make_unique<webrtc_win::CoreAudioOutput>(automatic_restart));
+ env, std::make_unique<webrtc_win::CoreAudioInput>(env, automatic_restart),
+ std::make_unique<webrtc_win::CoreAudioOutput>(env, automatic_restart));
}
} // namespace webrtc
diff --git a/modules/audio_device/win/core_audio_base_win.cc b/modules/audio_device/win/core_audio_base_win.cc
index 98cb29f..be90bb4 100644
--- a/modules/audio_device/win/core_audio_base_win.cc
+++ b/modules/audio_device/win/core_audio_base_win.cc
@@ -10,17 +10,20 @@
#include "modules/audio_device/win/core_audio_base_win.h"
+#include <cstdint>
#include <iterator>
-#include <memory>
#include <string>
#include "absl/strings/string_view.h"
-#include "modules/audio_device/audio_device_buffer.h"
+#include "api/audio/audio_device_defines.h"
+#include "api/environment/environment.h"
+#include "api/sequence_checker.h"
+#include "modules/audio_device/audio_device_name.h"
+#include "modules/audio_device/win/core_audio_utility_win.h"
#include "rtc_base/checks.h"
#include "rtc_base/logging.h"
#include "rtc_base/numerics/safe_conversions.h"
#include "rtc_base/platform_thread.h"
-#include "rtc_base/time_utils.h"
#include "rtc_base/win/scoped_com_initializer.h"
#include "rtc_base/win/windows_version.h"
@@ -151,11 +154,13 @@
} // namespace
-CoreAudioBase::CoreAudioBase(Direction direction,
+CoreAudioBase::CoreAudioBase(const Environment& env,
+ Direction direction,
bool automatic_restart,
OnDataCallback data_callback,
OnErrorCallback error_callback)
- : format_(),
+ : env_(env),
+ format_(),
direction_(direction),
automatic_restart_(automatic_restart),
on_data_callback_(data_callback),
@@ -195,8 +200,8 @@
return is_restarting_;
}
-int64_t CoreAudioBase::TimeSinceStart() const {
- return webrtc::TimeSince(start_time_);
+int64_t CoreAudioBase::TimeSinceStartMs() const {
+ return env_.clock().TimeInMilliseconds() - start_time_;
}
int CoreAudioBase::NumberOfActiveDevices() const {
@@ -576,7 +581,7 @@
return false;
}
- start_time_ = webrtc::TimeMillis();
+ start_time_ = env_.clock().TimeInMilliseconds();
num_data_callbacks_ = 0;
return true;
@@ -585,7 +590,7 @@
bool CoreAudioBase::Stop() {
RTC_DLOG(LS_INFO) << __FUNCTION__ << "[" << DirectionToString(direction())
<< "]";
- RTC_DLOG(LS_INFO) << "total activity time: " << TimeSinceStart();
+ RTC_DLOG(LS_INFO) << "total activity time: " << TimeSinceStartMs();
// Stop audio streaming.
_com_error error = audio_client_->Stop();
diff --git a/modules/audio_device/win/core_audio_base_win.h b/modules/audio_device/win/core_audio_base_win.h
index 918c675..1fe7cdc 100644
--- a/modules/audio_device/win/core_audio_base_win.h
+++ b/modules/audio_device/win/core_audio_base_win.h
@@ -12,12 +12,14 @@
#define MODULES_AUDIO_DEVICE_WIN_CORE_AUDIO_BASE_WIN_H_
#include <atomic>
+#include <cstdint>
#include <functional>
-#include <memory>
#include <optional>
#include <string>
+#include <type_traits>
#include "absl/strings/string_view.h"
+#include "api/environment/environment.h"
#include "api/sequence_checker.h"
#include "modules/audio_device/win/core_audio_utility_win.h"
#include "rtc_base/platform_thread.h"
@@ -77,7 +79,8 @@
CoreAudioBase& operator=(const CoreAudioBase&) = delete;
protected:
- explicit CoreAudioBase(Direction direction,
+ explicit CoreAudioBase(const Environment& env,
+ Direction direction,
bool automatic_restart,
OnDataCallback data_callback,
OnErrorCallback error_callback);
@@ -122,7 +125,9 @@
bool IsDefaultCommunicationsDeviceId(absl::string_view device_id) const;
EDataFlow GetDataFlow() const;
bool IsRestarting() const;
- int64_t TimeSinceStart() const;
+ int64_t TimeSinceStartMs() const;
+
+ const Environment env_;
// TODO(henrika): is the existing thread checker in WindowsAudioDeviceModule
// sufficient? As is, we have one top-level protection and then a second
diff --git a/modules/audio_device/win/core_audio_input_win.cc b/modules/audio_device/win/core_audio_input_win.cc
index 8c52dd9..f6139ae 100644
--- a/modules/audio_device/win/core_audio_input_win.cc
+++ b/modules/audio_device/win/core_audio_input_win.cc
@@ -10,13 +10,24 @@
#include "modules/audio_device/win/core_audio_input_win.h"
+#include <cstdint>
#include <memory>
+#include <optional>
+#include <string>
+#include "api/array_view.h"
+#include "api/audio/audio_device.h"
+#include "api/environment/environment.h"
+#include "api/sequence_checker.h"
+#include "api/units/time_delta.h"
#include "modules/audio_device/audio_device_buffer.h"
#include "modules/audio_device/fine_audio_buffer.h"
+#include "modules/audio_device/win/core_audio_base_win.h"
+#include "modules/audio_device/win/core_audio_utility_win.h"
#include "rtc_base/checks.h"
#include "rtc_base/logging.h"
#include "rtc_base/numerics/safe_conversions.h"
+#include "rtc_base/zero_memory.h"
using Microsoft::WRL::ComPtr;
@@ -27,8 +38,9 @@
kMessageInputStreamDisconnected,
};
-CoreAudioInput::CoreAudioInput(bool automatic_restart)
+CoreAudioInput::CoreAudioInput(const Environment& env, bool automatic_restart)
: CoreAudioBase(
+ env,
CoreAudioBase::Direction::kInput,
automatic_restart,
[this](uint64_t freq) { return OnDataCallback(freq); },
diff --git a/modules/audio_device/win/core_audio_input_win.h b/modules/audio_device/win/core_audio_input_win.h
index ecf536a..372a5a4 100644
--- a/modules/audio_device/win/core_audio_input_win.h
+++ b/modules/audio_device/win/core_audio_input_win.h
@@ -11,10 +11,13 @@
#ifndef MODULES_AUDIO_DEVICE_WIN_CORE_AUDIO_INPUT_WIN_H_
#define MODULES_AUDIO_DEVICE_WIN_CORE_AUDIO_INPUT_WIN_H_
+#include <cstdint>
#include <memory>
#include <optional>
#include <string>
+#include "api/audio/audio_device.h"
+#include "api/environment/environment.h"
#include "modules/audio_device/win/audio_device_module_win.h"
#include "modules/audio_device/win/core_audio_base_win.h"
@@ -30,7 +33,7 @@
// and streaming of captured audio to a WebRTC client.
class CoreAudioInput final : public CoreAudioBase, public AudioInput {
public:
- CoreAudioInput(bool automatic_restart);
+ CoreAudioInput(const Environment& env, bool automatic_restart);
~CoreAudioInput() override;
// AudioInput implementation.
diff --git a/modules/audio_device/win/core_audio_output_win.cc b/modules/audio_device/win/core_audio_output_win.cc
index 6db9870..decc0ee 100644
--- a/modules/audio_device/win/core_audio_output_win.cc
+++ b/modules/audio_device/win/core_audio_output_win.cc
@@ -10,10 +10,19 @@
#include "modules/audio_device/win/core_audio_output_win.h"
+#include <cstdint>
#include <memory>
+#include <string>
+#include "api/array_view.h"
+#include "api/audio/audio_device.h"
+#include "api/environment/environment.h"
+#include "api/sequence_checker.h"
+#include "api/units/time_delta.h"
#include "modules/audio_device/audio_device_buffer.h"
#include "modules/audio_device/fine_audio_buffer.h"
+#include "modules/audio_device/win/core_audio_base_win.h"
+#include "modules/audio_device/win/core_audio_utility_win.h"
#include "rtc_base/checks.h"
#include "rtc_base/logging.h"
#include "rtc_base/time_utils.h"
@@ -23,8 +32,9 @@
namespace webrtc {
namespace webrtc_win {
-CoreAudioOutput::CoreAudioOutput(bool automatic_restart)
+CoreAudioOutput::CoreAudioOutput(const Environment& env, bool automatic_restart)
: CoreAudioBase(
+ env,
CoreAudioBase::Direction::kOutput,
automatic_restart,
[this](uint64_t freq) { return OnDataCallback(freq); },
diff --git a/modules/audio_device/win/core_audio_output_win.h b/modules/audio_device/win/core_audio_output_win.h
index 5a54749..a58b671 100644
--- a/modules/audio_device/win/core_audio_output_win.h
+++ b/modules/audio_device/win/core_audio_output_win.h
@@ -11,9 +11,12 @@
#ifndef MODULES_AUDIO_DEVICE_WIN_CORE_AUDIO_OUTPUT_WIN_H_
#define MODULES_AUDIO_DEVICE_WIN_CORE_AUDIO_OUTPUT_WIN_H_
+#include <cstdint>
#include <memory>
#include <string>
+#include "api/audio/audio_device.h"
+#include "api/environment/environment.h"
#include "modules/audio_device/win/audio_device_module_win.h"
#include "modules/audio_device/win/core_audio_base_win.h"
@@ -30,7 +33,7 @@
// layer.
class CoreAudioOutput final : public CoreAudioBase, public AudioOutput {
public:
- CoreAudioOutput(bool automatic_restart);
+ CoreAudioOutput(const Environment& env, bool automatic_restart);
~CoreAudioOutput() override;
// AudioOutput implementation.