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 |