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

Side by Side Diff: media/audio/win/core_audio_util_win.h

Issue 12049070: Avoids irregular OnMoreData callbacks on Windows using Core Audio (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Moved FillRenderEndpointBufferWithSilence to CoreAudioUtil Created 7 years, 10 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 | Annotate | Revision Log
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 // Utility methods for the Core Audio API on Windows. 5 // Utility methods for the Core Audio API on Windows.
6 // Always ensure that Core Audio is supported before using these methods. 6 // Always ensure that Core Audio is supported before using these methods.
7 // Use media::CoreAudioIsSupported() for this purpose. 7 // Use media::CoreAudioIsSupported() for this purpose.
8 // Also, all methods must be called on a valid COM thread. This can be done 8 // Also, all methods must be called on a valid COM thread. This can be done
9 // by using the base::win::ScopedCOMInitializer helper class. 9 // by using the base::win::ScopedCOMInitializer helper class.
10 10
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 // |audio_device|. Flow direction and role is define by the |audio_device|. 97 // |audio_device|. Flow direction and role is define by the |audio_device|.
98 static ScopedComPtr<IAudioClient> CreateClient(IMMDevice* audio_device); 98 static ScopedComPtr<IAudioClient> CreateClient(IMMDevice* audio_device);
99 99
100 // Get the mix format that the audio engine uses internally for processing 100 // Get the mix format that the audio engine uses internally for processing
101 // of shared-mode streams. This format is not necessarily a format that the 101 // of shared-mode streams. This format is not necessarily a format that the
102 // audio endpoint device supports. Thus, the caller might not succeed in 102 // audio endpoint device supports. Thus, the caller might not succeed in
103 // creating an exclusive-mode stream with a format obtained by this method. 103 // creating an exclusive-mode stream with a format obtained by this method.
104 static HRESULT GetSharedModeMixFormat(IAudioClient* client, 104 static HRESULT GetSharedModeMixFormat(IAudioClient* client,
105 WAVEFORMATPCMEX* format); 105 WAVEFORMATPCMEX* format);
106 106
107 // Get the mix format that the audio engine uses internally for processing
108 // of shared-mode streams using the default IMMDevice where flow direction
109 // and role is define by |data_flow| and |role|.
110 static HRESULT GetDefaultSharedModeMixFormat(EDataFlow data_flow,
111 ERole role,
112 WAVEFORMATPCMEX* format);
113
107 // Returns true if the specified |client| supports the format in |format| 114 // Returns true if the specified |client| supports the format in |format|
108 // for the given |share_mode| (shared or exclusive). 115 // for the given |share_mode| (shared or exclusive).
109 static bool IsFormatSupported(IAudioClient* client, 116 static bool IsFormatSupported(IAudioClient* client,
110 AUDCLNT_SHAREMODE share_mode, 117 AUDCLNT_SHAREMODE share_mode,
111 const WAVEFORMATPCMEX* format); 118 const WAVEFORMATPCMEX* format);
112 119
113 // For a shared-mode stream, the audio engine periodically processes the 120 // For a shared-mode stream, the audio engine periodically processes the
114 // data in the endpoint buffer at the period obtained in |device_period|. 121 // data in the endpoint buffer at the period obtained in |device_period|.
115 // For an exclusive mode stream, |device_period| corresponds to the minimum 122 // For an exclusive mode stream, |device_period| corresponds to the minimum
116 // time interval between successive processing by the endpoint device. 123 // time interval between successive processing by the endpoint device.
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 // output data to a rendering endpoint buffer. 156 // output data to a rendering endpoint buffer.
150 static ScopedComPtr<IAudioRenderClient> CreateRenderClient( 157 static ScopedComPtr<IAudioRenderClient> CreateRenderClient(
151 IAudioClient* client); 158 IAudioClient* client);
152 159
153 // Create an IAudioCaptureClient client for an existing IAudioClient given by 160 // Create an IAudioCaptureClient client for an existing IAudioClient given by
154 // |client|. The IAudioCaptureClient interface enables a client to read 161 // |client|. The IAudioCaptureClient interface enables a client to read
155 // input data from a capture endpoint buffer. 162 // input data from a capture endpoint buffer.
156 static ScopedComPtr<IAudioCaptureClient> CreateCaptureClient( 163 static ScopedComPtr<IAudioCaptureClient> CreateCaptureClient(
157 IAudioClient* client); 164 IAudioClient* client);
158 165
166 // Fills up the endpoint rendering buffer with silence for an existing
167 // IAudioClient given by |client| and a corresponding IAudioRenderClient
168 // given by |render_client|.
169 static bool FillRenderEndpointBufferWithSilence(
170 IAudioClient* client, IAudioRenderClient* render_client);
171
159 private: 172 private:
160 CoreAudioUtil() {} 173 CoreAudioUtil() {}
161 ~CoreAudioUtil() {} 174 ~CoreAudioUtil() {}
162 DISALLOW_COPY_AND_ASSIGN(CoreAudioUtil); 175 DISALLOW_COPY_AND_ASSIGN(CoreAudioUtil);
163 }; 176 };
164 177
165 } // namespace media 178 } // namespace media
166 179
167 #endif // MEDIA_AUDIO_WIN_CORE_AUDIO_UTIL_WIN_H_ 180 #endif // MEDIA_AUDIO_WIN_CORE_AUDIO_UTIL_WIN_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698