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

Unified Diff: remoting/host/audio_capturer_win.h

Issue 2163473002: [Chromoting] Audio playback won't work after switching default playback device (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Resolve review comments Created 4 years, 5 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 | « no previous file | remoting/host/audio_capturer_win.cc » ('j') | remoting/host/audio_capturer_win.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/host/audio_capturer_win.h
diff --git a/remoting/host/audio_capturer_win.h b/remoting/host/audio_capturer_win.h
index d53920a43d9284f6b4ebd8f7d8f5f626b568a87e..5cc826aaa5b7505ce287c6a2575b78a1aa9ef7e9 100644
--- a/remoting/host/audio_capturer_win.h
+++ b/remoting/host/audio_capturer_win.h
@@ -31,6 +31,21 @@ class AudioCapturerWin : public AudioCapturer {
bool Start(const PacketCapturedCallback& callback) override;
private:
+ // An IMMNotificationClient implementation to detect the event of default
+ // audio device recently changed. If it indicates a changed happend recently,
+ // we need to recreate all audio components.
+ class MMNotificationClient;
+
+ // Resets and reinitializes default audio device related components. These
+ // components must be recreated once the default audio device changed. Returns
+ // false if initialization failed.
+ bool ResetAndInitialize();
+
+ // Whether all components are correctly initialized. If last
+ // ResetAndInitialize() function call failed, this function will return false.
+ // Otherwise this function will return true.
+ bool Initialized() const;
+
// Receives all packets from the audio capture endpoint buffer and pushes them
// to the network.
void DoCapture();
@@ -55,11 +70,14 @@ class AudioCapturerWin : public AudioCapturer {
AudioSilenceDetector silence_detector_;
base::win::ScopedCoMem<WAVEFORMATEX> wave_format_ex_;
+ base::win::ScopedComPtr<IMMDeviceEnumerator> mm_device_enumerator_;
base::win::ScopedComPtr<IAudioCaptureClient> audio_capture_client_;
base::win::ScopedComPtr<IAudioClient> audio_client_;
base::win::ScopedComPtr<IMMDevice> mm_device_;
base::win::ScopedComPtr<IAudioEndpointVolume> audio_volume_;
+ const std::unique_ptr<MMNotificationClient> mm_notification_client_;
+
HRESULT last_capture_error_;
base::ThreadChecker thread_checker_;
« no previous file with comments | « no previous file | remoting/host/audio_capturer_win.cc » ('j') | remoting/host/audio_capturer_win.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698