Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(606)

Unified Diff: remoting/host/audio_capturer_win.cc

Issue 2809293006: [Chromoting] Move DefaultAudioDeviceChangeDetector out of AudioCapturerWin (Closed)
Patch Set: Remove override of destructor Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/host/audio_capturer_win.h ('k') | remoting/host/win/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/host/audio_capturer_win.cc
diff --git a/remoting/host/audio_capturer_win.cc b/remoting/host/audio_capturer_win.cc
index 8e238db557cae1194f34e96da93da6c66b5dfaeb..6feaf5d14149578063f755e2d1571f5083675768 100644
--- a/remoting/host/audio_capturer_win.cc
+++ b/remoting/host/audio_capturer_win.cc
@@ -17,6 +17,7 @@
#include "base/logging.h"
#include "base/memory/ptr_util.h"
#include "base/synchronization/lock.h"
+#include "remoting/host/win/default_audio_device_change_detector.h"
namespace {
const int kChannels = 2;
@@ -41,72 +42,16 @@ const int kMaxExpectedTimerLag = 30;
namespace remoting {
-class AudioCapturerWin::MMNotificationClient : public IMMNotificationClient {
- public:
- HRESULT __stdcall OnDefaultDeviceChanged(
- EDataFlow flow,
- ERole role,
- LPCWSTR pwstrDefaultDevice) override {
- base::AutoLock lock(lock_);
- default_audio_device_changed_ = true;
- return S_OK;
- }
-
- HRESULT __stdcall QueryInterface(REFIID iid, void** object) override {
- if (iid == IID_IUnknown || iid == __uuidof(IMMNotificationClient)) {
- *object = static_cast<IMMNotificationClient*>(this);
- return S_OK;
- }
- *object = nullptr;
- return E_NOINTERFACE;
- }
-
- // No Ops overrides.
- HRESULT __stdcall OnDeviceAdded(LPCWSTR pwstrDeviceId) override {
- return S_OK;
- }
- HRESULT __stdcall OnDeviceRemoved(LPCWSTR pwstrDeviceId) override {
- return S_OK;
- }
- HRESULT __stdcall OnDeviceStateChanged(LPCWSTR pwstrDeviceId,
- DWORD dwNewState) override {
- return S_OK;
- }
- HRESULT __stdcall OnPropertyValueChanged(LPCWSTR pwstrDeviceId,
- const PROPERTYKEY key) override {
- return S_OK;
- }
- ULONG __stdcall AddRef() override { return 1; }
- ULONG __stdcall Release() override { return 1; }
-
- bool GetAndResetDefaultAudioDeviceChanged() {
- base::AutoLock lock(lock_);
- if (default_audio_device_changed_) {
- default_audio_device_changed_ = false;
- return true;
- }
- return false;
- }
-
- private:
- // |lock_| musted be locked when accessing |default_audio_device_changed_|.
- bool default_audio_device_changed_ = false;
- base::Lock lock_;
-};
-
AudioCapturerWin::AudioCapturerWin()
: sampling_rate_(AudioPacket::SAMPLING_RATE_INVALID),
silence_detector_(kSilenceThreshold),
- mm_notification_client_(new MMNotificationClient()),
last_capture_error_(S_OK) {
thread_checker_.DetachFromThread();
}
AudioCapturerWin::~AudioCapturerWin() {
DCHECK(thread_checker_.CalledOnValidThread());
- if (audio_client_) {
- audio_client_->Stop();
- }
+ Deinitialize();
}
bool AudioCapturerWin::Start(const PacketCapturedCallback& callback) {
@@ -138,8 +83,11 @@ bool AudioCapturerWin::ResetAndInitialize() {
void AudioCapturerWin::Deinitialize() {
DCHECK(thread_checker_.CalledOnValidThread());
wave_format_ex_.Reset(nullptr);
- mm_device_enumerator_.Reset();
+ default_device_detector_.reset();
audio_capture_client_.Reset();
+ if (audio_client_) {
+ audio_client_->Stop();
+ }
audio_client_.Reset();
mm_device_.Reset();
audio_volume_.Reset();
@@ -154,23 +102,19 @@ bool AudioCapturerWin::Initialize() {
DCHECK(thread_checker_.CalledOnValidThread());
HRESULT hr = S_OK;
- hr = mm_device_enumerator_.CreateInstance(__uuidof(MMDeviceEnumerator));
+ base::win::ScopedComPtr<IMMDeviceEnumerator> mm_device_enumerator;
+ hr = mm_device_enumerator.CreateInstance(__uuidof(MMDeviceEnumerator));
if (FAILED(hr)) {
LOG(ERROR) << "Failed to create IMMDeviceEnumerator. Error " << hr;
return false;
}
- hr = mm_device_enumerator_->RegisterEndpointNotificationCallback(
- mm_notification_client_.get());
- if (FAILED(hr)) {
- // We cannot predict which kind of error the API may return, but this is
- // not a fatal error.
- LOG(ERROR) << "Failed to register IMMNotificationClient. Error " << hr;
- }
+ default_device_detector_.reset(
+ new DefaultAudioDeviceChangeDetector(mm_device_enumerator));
// Get the audio endpoint.
- hr = mm_device_enumerator_->GetDefaultAudioEndpoint(eRender, eConsole,
- mm_device_.Receive());
+ hr = mm_device_enumerator->GetDefaultAudioEndpoint(eRender, eConsole,
+ mm_device_.Receive());
if (FAILED(hr)) {
LOG(ERROR) << "Failed to get IMMDevice. Error " << hr;
return false;
@@ -375,8 +319,7 @@ void AudioCapturerWin::DoCapture() {
DCHECK(AudioCapturer::IsValidSampleRate(sampling_rate_));
DCHECK(thread_checker_.CalledOnValidThread());
- if (!is_initialized() ||
- mm_notification_client_->GetAndResetDefaultAudioDeviceChanged()) {
+ if (!is_initialized() || default_device_detector_->GetAndReset()) {
if (!ResetAndInitialize()) {
// Initialization failed, we should wait for next DoCapture call.
return;
« no previous file with comments | « remoting/host/audio_capturer_win.h ('k') | remoting/host/win/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698