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

Side by Side 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 unified diff | Download patch
« no previous file with comments | « no previous file | remoting/host/audio_capturer_win.cc » ('j') | remoting/host/audio_capturer_win.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef REMOTING_HOST_AUDIO_CAPTURER_WIN_H_ 5 #ifndef REMOTING_HOST_AUDIO_CAPTURER_WIN_H_
6 #define REMOTING_HOST_AUDIO_CAPTURER_WIN_H_ 6 #define REMOTING_HOST_AUDIO_CAPTURER_WIN_H_
7 7
8 #include <audioclient.h> 8 #include <audioclient.h>
9 #include <endpointvolume.h> 9 #include <endpointvolume.h>
10 #include <mmdeviceapi.h> 10 #include <mmdeviceapi.h>
(...skipping 13 matching lines...) Expand all
24 24
25 class AudioCapturerWin : public AudioCapturer { 25 class AudioCapturerWin : public AudioCapturer {
26 public: 26 public:
27 AudioCapturerWin(); 27 AudioCapturerWin();
28 ~AudioCapturerWin() override; 28 ~AudioCapturerWin() override;
29 29
30 // AudioCapturer interface. 30 // AudioCapturer interface.
31 bool Start(const PacketCapturedCallback& callback) override; 31 bool Start(const PacketCapturedCallback& callback) override;
32 32
33 private: 33 private:
34 // The implementation of IMMNotificationClient, to set
35 // default_audio_device_changed_ in OnDefaultDeviceChanged function.
Sergey Ulanov 2016/07/20 17:28:34 nit: s/default_audio_device_changed_/|default_audi
Hzj_jie 2016/07/20 20:43:14 Since default_audio_device_changed_ has been moved
36 class MMNotificationClient;
37 friend class MMNotificationClient;
Sergey Ulanov 2016/07/20 17:28:34 if you move default_audio_device_changed_ to MMNot
Hzj_jie 2016/07/20 20:43:14 Done.
38
39 // Resets and reinitializes default audio device related components. These
40 // components must be recreated once the default audio device changed. Returns
41 // false if initialization failed.
42 bool ResetAndInitialize();
43
34 // Receives all packets from the audio capture endpoint buffer and pushes them 44 // Receives all packets from the audio capture endpoint buffer and pushes them
35 // to the network. 45 // to the network.
36 void DoCapture(); 46 void DoCapture();
37 47
38 // Returns current volume setting of the host, in range [0.0, 1.0]. If the 48 // Returns current volume setting of the host, in range [0.0, 1.0]. If the
39 // audio has been muted, this function returns 0. If Windows API returns error 49 // audio has been muted, this function returns 0. If Windows API returns error
40 // (such as audio device has been disabled or unpluged), this function ignores 50 // (such as audio device has been disabled or unpluged), this function ignores
41 // host volume setting, and returns 1.0. 51 // host volume setting, and returns 1.0.
42 float GetAudioLevel(); 52 float GetAudioLevel();
43 53
44 // Processes a series of samples, and executes callback if the packet is 54 // Processes a series of samples, and executes callback if the packet is
45 // qualified to be sent to client. 55 // qualified to be sent to client.
46 void ProcessSamples(uint8_t* data, size_t frames); 56 void ProcessSamples(uint8_t* data, size_t frames);
47 57
48 PacketCapturedCallback callback_; 58 PacketCapturedCallback callback_;
49 59
50 AudioPacket::SamplingRate sampling_rate_; 60 AudioPacket::SamplingRate sampling_rate_;
51 61
52 std::unique_ptr<base::RepeatingTimer> capture_timer_; 62 std::unique_ptr<base::RepeatingTimer> capture_timer_;
53 base::TimeDelta audio_device_period_; 63 base::TimeDelta audio_device_period_;
54 64
55 AudioSilenceDetector silence_detector_; 65 AudioSilenceDetector silence_detector_;
56 66
57 base::win::ScopedCoMem<WAVEFORMATEX> wave_format_ex_; 67 base::win::ScopedCoMem<WAVEFORMATEX> wave_format_ex_;
68 base::win::ScopedComPtr<IMMDeviceEnumerator> mm_device_enumerator_;
58 base::win::ScopedComPtr<IAudioCaptureClient> audio_capture_client_; 69 base::win::ScopedComPtr<IAudioCaptureClient> audio_capture_client_;
59 base::win::ScopedComPtr<IAudioClient> audio_client_; 70 base::win::ScopedComPtr<IAudioClient> audio_client_;
60 base::win::ScopedComPtr<IMMDevice> mm_device_; 71 base::win::ScopedComPtr<IMMDevice> mm_device_;
61 base::win::ScopedComPtr<IAudioEndpointVolume> audio_volume_; 72 base::win::ScopedComPtr<IAudioEndpointVolume> audio_volume_;
62 73
74 // Whether the default audio device has been changed recently. If this value
75 // is true, we need to recreate all audio components.
76 bool default_audio_device_changed_ = false;
77 const std::unique_ptr<MMNotificationClient> mm_notification_client_;
78
63 HRESULT last_capture_error_; 79 HRESULT last_capture_error_;
64 80
65 base::ThreadChecker thread_checker_; 81 base::ThreadChecker thread_checker_;
66 82
67 DISALLOW_COPY_AND_ASSIGN(AudioCapturerWin); 83 DISALLOW_COPY_AND_ASSIGN(AudioCapturerWin);
68 }; 84 };
69 85
70 } // namespace remoting 86 } // namespace remoting
71 87
72 #endif // REMOTING_HOST_AUDIO_CAPTURER_WIN_H_ 88 #endif // REMOTING_HOST_AUDIO_CAPTURER_WIN_H_
OLDNEW
« 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