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

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

Issue 10636036: Enable renderer side mixing behind a flag. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove new mixer address != old mixer address test. Created 8 years, 5 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
« no previous file with comments | « content/public/common/content_switches.cc ('k') | content/renderer/media/audio_renderer_mixer_manager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
new file mode 100644
index 0000000000000000000000000000000000000000..ab713f96a078f0df88c85807fa09fb4dabe5fed8
--- /dev/null
+++ b/content/renderer/media/audio_renderer_mixer_manager.h
@@ -0,0 +1,79 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_RENDERER_MEDIA_AUDIO_RENDERER_MIXER_MANAGER_H_
+#define CONTENT_RENDERER_MEDIA_AUDIO_RENDERER_MIXER_MANAGER_H_
+
+#include <map>
+
+#include "base/synchronization/lock.h"
+#include "content/common/content_export.h"
+#include "media/audio/audio_parameters.h"
+
+namespace media {
+class AudioRendererMixer;
+class AudioRendererMixerInput;
+}
+
+namespace content {
+
+// Manages sharing of an AudioRendererMixer among AudioRendererMixerInputs based
+// on their AudioParameters configuration. Inputs with the same AudioParameters
+// configuration will share a mixer while a new AudioRendererMixer will be
+// lazily created if one with the exact AudioParameters does not exist.
+//
+// There should only be one instance of AudioRendererMixerManager per render
+// thread.
+//
+// TODO(dalecurtis): Right now we require AudioParameters to be an exact match
+// when we should be able to ignore bits per channel since we're only dealing
+// with floats. However, bits per channel is currently used to interleave the
+// audio data by AudioDevice::AudioThreadCallback::Process for consumption via
+// the shared memory. See http://crbug.com/114700.
+class CONTENT_EXPORT AudioRendererMixerManager {
+ public:
+ // Construct an instance using the given audio hardware configuration.
+ AudioRendererMixerManager(int hardware_sample_rate, int hardware_buffer_size);
+ ~AudioRendererMixerManager();
+
+ // Creates an AudioRendererMixerInput with the proper callbacks necessary to
+ // retrieve an AudioRendererMixer instance from AudioRendererMixerManager.
+ // Caller must ensure AudioRendererMixerManager outlives the returned input.
+ media::AudioRendererMixerInput* CreateInput();
+
+ private:
+ friend class AudioRendererMixerManagerTest;
+
+ // Returns a mixer instance based on AudioParameters; an existing one if one
+ // with the provided AudioParameters exists or a new one if not.
+ media::AudioRendererMixer* GetMixer(const media::AudioParameters& params);
+
+ // Remove a mixer instance given a mixer if the only other reference is held
+ // by AudioRendererMixerManager. Every AudioRendererMixer owner must call
+ // this method when it's done with a mixer.
+ void RemoveMixer(const media::AudioParameters& params);
+
+ // Map of AudioParameters to <AudioRendererMixer, Count>. Count allows
+ // AudioRendererMixerManager to keep track explicitly (v.s. RefCounted which
+ // is implicit) of the number of outstanding AudioRendererMixers.
+ struct AudioRendererMixerReference {
+ media::AudioRendererMixer* mixer;
+ int ref_count;
+ };
+ typedef std::map<media::AudioParameters, AudioRendererMixerReference,
+ media::AudioParameters::Compare> AudioRendererMixerMap;
+ AudioRendererMixerMap mixers_;
+ base::Lock mixers_lock_;
+
+ // Audio hardware configuration. Used to construct output AudioParameters for
+ // each AudioRendererMixer instance.
+ int hardware_sample_rate_;
+ int hardware_buffer_size_;
+
+ DISALLOW_COPY_AND_ASSIGN(AudioRendererMixerManager);
+};
+
+} // namespace content
+
+#endif // CONTENT_RENDERER_MEDIA_AUDIO_RENDERER_MIXER_MANAGER_H_
« no previous file with comments | « content/public/common/content_switches.cc ('k') | content/renderer/media/audio_renderer_mixer_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698