Index: content/renderer/media/audio_renderer_mixer_manager.h |
diff --git a/content/renderer/media/audio_renderer_mixer_manager.h b/content/renderer/media/audio_renderer_mixer_manager.h |
index 0a76b5dc3941b2bd8eb34109cdafe3b5f054b18b..ef3978937a90c4b65ac3a8c02e31602a382cdc13 100644 |
--- a/content/renderer/media/audio_renderer_mixer_manager.h |
+++ b/content/renderer/media/audio_renderer_mixer_manager.h |
@@ -71,6 +71,24 @@ class CONTENT_EXPORT AudioRendererMixerManager { |
// RenderView and with the same AudioParameters can be mixed together. |
typedef std::pair<int, media::AudioParameters> MixerKey; |
xhwang
2014/09/23 21:14:04
nit: comment that the "int" is for render view ID.
DaleCurtis
2014/09/23 21:17:45
Done.
|
+ // Custom compare operator for the AudioRendererMixerMap. Allows reuse of |
+ // mixers where irrelevant keys mismatch (i.e., effects, bits per sample). |
xhwang
2014/09/23 21:14:04
s/where/where only/
DaleCurtis
2014/09/23 21:17:45
Done.
|
+ struct MixerKeyCompare { |
+ bool operator()(const MixerKey& a, const MixerKey& b) const { |
+ if (a.first != b.first) |
+ return a.first < b.first; |
+ if (a.second.sample_rate() != b.second.sample_rate()) |
+ return a.second.sample_rate() < b.second.sample_rate(); |
+ if (a.second.channels() != b.second.channels()) |
+ return a.second.channels() < b.second.channels(); |
+ |
+ // Ignore effects(), bits_per_sample(), format(), and frames_per_buffer(), |
+ // these parameters do not affect mixer reuse. All AudioRendererMixer |
+ // units disable FIFO, so frames_per_buffer() can be safely ignored. |
+ return a.second.channel_layout() < b.second.channel_layout(); |
+ } |
+ }; |
+ |
// Map of MixerKey to <AudioRendererMixer, Count>. Count allows |
// AudioRendererMixerManager to keep track explicitly (v.s. RefCounted which |
// is implicit) of the number of outstanding AudioRendererMixers. |
@@ -78,7 +96,8 @@ class CONTENT_EXPORT AudioRendererMixerManager { |
media::AudioRendererMixer* mixer; |
int ref_count; |
}; |
- typedef std::map<MixerKey, AudioRendererMixerReference> AudioRendererMixerMap; |
+ typedef std::map<MixerKey, AudioRendererMixerReference, MixerKeyCompare> |
+ AudioRendererMixerMap; |
// Overrides the AudioRendererSink implementation for unit testing. |
void SetAudioRendererSinkForTesting(media::AudioRendererSink* sink); |