Chromium Code Reviews| 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 5a93351fde6174afac4804c4d64cc533018c6f57..73d6d868af746277a240eb6ce289185a47e41abd 100644 |
| --- a/content/renderer/media/audio_renderer_mixer_manager.h |
| +++ b/content/renderer/media/audio_renderer_mixer_manager.h |
| @@ -5,6 +5,7 @@ |
| #ifndef CONTENT_RENDERER_MEDIA_AUDIO_RENDERER_MIXER_MANAGER_H_ |
| #define CONTENT_RENDERER_MEDIA_AUDIO_RENDERER_MIXER_MANAGER_H_ |
| +#include <bitset> |
| #include <map> |
| #include <memory> |
| #include <string> |
| @@ -13,6 +14,7 @@ |
| #include "base/synchronization/lock.h" |
| #include "content/common/content_export.h" |
| #include "media/audio/audio_device_description.h" |
| +#include "media/base/audio_latency.h" |
| #include "media/base/audio_parameters.h" |
| #include "media/base/audio_renderer_mixer_pool.h" |
| #include "media/base/output_device_info.h" |
| @@ -61,21 +63,20 @@ class CONTENT_EXPORT AudioRendererMixerManager |
| int source_render_frame_id, |
| int session_id, |
| const std::string& device_id, |
| - const url::Origin& security_origin); |
| + const url::Origin& security_origin, |
| + media::AudioLatency::LatencyType latency); |
| // AudioRendererMixerPool implementation. |
| media::AudioRendererMixer* GetMixer( |
| int source_render_frame_id, |
| - const media::AudioParameters& params, |
| + const media::AudioParameters& input_params, |
| + media::AudioLatency::LatencyType latency, |
| const std::string& device_id, |
| const url::Origin& security_origin, |
| media::OutputDeviceStatus* device_status) final; |
| - void ReturnMixer(int source_render_frame_id, |
| - const media::AudioParameters& params, |
| - const std::string& device_id, |
| - const url::Origin& security_origin) final; |
| + void ReturnMixer(const media::AudioRendererMixer* mixer) final; |
| media::OutputDeviceInfo GetOutputDeviceInfo( |
| int source_render_frame_id, |
| @@ -95,11 +96,13 @@ class CONTENT_EXPORT AudioRendererMixerManager |
| struct MixerKey { |
| MixerKey(int source_render_frame_id, |
| const media::AudioParameters& params, |
| + media::AudioLatency::LatencyType latency, |
| const std::string& device_id, |
| const url::Origin& security_origin); |
| MixerKey(const MixerKey& other); |
| int source_render_frame_id; |
| media::AudioParameters params; |
| + media::AudioLatency::LatencyType latency; |
| std::string device_id; |
| url::Origin security_origin; |
| }; |
| @@ -113,6 +116,14 @@ class CONTENT_EXPORT AudioRendererMixerManager |
| if (a.params.channels() != b.params.channels()) |
| return a.params.channels() < b.params.channels(); |
| + if (a.latency != b.latency) { |
|
tommi (sloooow) - chröme
2016/06/28 14:14:54
nit: no {}
o1ka
2016/06/29 10:11:26
Done.
|
| + return a.latency < b.latency; |
| + } |
| + |
| + // TODO(olka) add buffer duration comparison for LATENCY_EXACT_MS when |
| + // adding support for it. |
| + DCHECK_NE(media::AudioLatency::LATENCY_EXACT_MS, a.latency); |
| + |
| // 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. |
| @@ -154,6 +165,9 @@ class CONTENT_EXPORT AudioRendererMixerManager |
| // Mixer sink cache. |
| const std::unique_ptr<AudioRendererSinkCache> sink_cache_; |
| + // Map of the output latencies encountered throughout mixer manager lifetime. |
| + std::bitset<media::AudioLatency::LATENCY_LAST + 1> latency_map_; |
|
tommi (sloooow) - chröme
2016/06/28 14:14:54
this assumes the first enum value is 0 and the las
o1ka
2016/06/29 10:11:26
Yes, this is nice, thanks. I did not like that lin
|
| + |
| DISALLOW_COPY_AND_ASSIGN(AudioRendererMixerManager); |
| }; |