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

Unified Diff: content/renderer/media/audio_renderer_mixer_manager.h

Issue 2067863003: Mixing audio with different latency requirements (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: mixing inputs of the same latency Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698