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..853732fd674c2b989d04c9d77a5a2ef772cf48d9 100644 |
| --- a/content/renderer/media/audio_renderer_mixer_manager.h |
| +++ b/content/renderer/media/audio_renderer_mixer_manager.h |
| @@ -13,6 +13,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 +62,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 +95,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; |
| }; |
| @@ -124,14 +126,27 @@ class CONTENT_EXPORT AudioRendererMixerManager |
| // Both device IDs represent the same default device => do not compare |
| // them; the default device is always authorized => ignoring security |
| // origin. |
| - return false; |
| + return CompareLatency(a, b); |
|
chcunningham
2016/06/22 02:13:56
Can you CompareLatency just once above this if and
o1ka
2016/06/23 16:36:15
It's me who's missed something :)
Done.
|
| } |
| if (a.device_id != b.device_id) |
| return a.device_id < b.device_id; |
| + if (a.security_origin == b.security_origin) |
| + return CompareLatency(a, b); |
| + |
| return a.security_origin < b.security_origin; |
| } |
| + |
| + bool CompareLatency(const MixerKey& a, const MixerKey& b) const { |
| + // LATENCY_EXACT_MS can be mixed only with the same latency type and the |
| + // same required buffer duration. |
| + if ((a.latency == media::AudioLatency::LATENCY_EXACT_MS) && |
| + (b.latency == media::AudioLatency::LATENCY_EXACT_MS)) |
| + return a.params.GetBufferDuration() < b.params.GetBufferDuration(); |
| + |
| + return a.latency < b.latency; |
| + } |
| }; |
| // Map of MixerKey to <AudioRendererMixer, Count>. Count allows |