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

Unified Diff: chromeos/audio/cras_audio_handler.h

Issue 14314002: Implement new audio handler which talks to the new audio dbus apis. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix browser_tests compiling issue. Created 7 years, 8 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: chromeos/audio/cras_audio_handler.h
diff --git a/chromeos/audio/cras_audio_handler.h b/chromeos/audio/cras_audio_handler.h
new file mode 100644
index 0000000000000000000000000000000000000000..7e5f47a44d96bd9d9f2e2255ccd656861bb23f7d
--- /dev/null
+++ b/chromeos/audio/cras_audio_handler.h
@@ -0,0 +1,160 @@
+// Copyright (c) 2013 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 CHROMEOS_AUDIO_CRAS_AUDIO_HANDLER_H_
+#define CHROMEOS_AUDIO_CRAS_AUDIO_HANDLER_H_
+
+#include "base/basictypes.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/weak_ptr.h"
+#include "base/observer_list.h"
+#include "chromeos/audio/audio_pref_observer.h"
+#include "chromeos/dbus/audio_node.h"
+#include "chromeos/dbus/cras_audio_client.h"
+#include "chromeos/dbus/volume_state.h"
+
+class PrefRegistrySimple;
+class PrefService;
+
+namespace chromeos {
+
+class AudioPrefHandler;
+
+class CHROMEOS_EXPORT CrasAudioHandler : public CrasAudioClient::Observer,
+ public AudioPrefObserver {
+ public:
+ class AudioObserver {
+ public:
+ // Called when output volume changed.
+ virtual void OnOutputVolumeChanged();
+
+ // Called when output mute state changed.
+ virtual void OnOutputMuteChanged();
+
+ // Called when input mute state changed.
+ virtual void OnInputMuteChanged();
+
+ // Called when audio nodes changed.
+ virtual void OnAudioNodesChanged();
+
+ // Called when active audio node changed.
+ virtual void OnActiveOutputNodeChanged();
+
+ // Called when active audio input node changed.
+ virtual void OnActiveInputNodeChanged();
+
+ protected:
+ AudioObserver();
+ virtual ~AudioObserver();
+ DISALLOW_COPY_AND_ASSIGN(AudioObserver);
+ };
+
+ // Sets the global instance. Must be called before any calls to Get().
+ static void Initialize(scoped_refptr<AudioPrefHandler> audio_pref_handler);
+
+ // Destroys the global instance.
+ static void Shutdown();
+
+ // Returns true if the global instance is initialized.
+ static bool IsInitialized();
+
+ // Gets the global instance. Initialize must be called first.
+ static CrasAudioHandler* Get();
+
+ // Adds an audio observer.
+ void AddAudioObserver(AudioObserver* observer);
+
+ // Removes an audio observer.
+ void RemoveAudioObserver(AudioObserver* observer);
+
+ // Returns true if audio output is muted.
+ bool IsOutputMuted();
+
+ // Returns true if audio input is muted.
+ bool IsInputMuted();
+
+ // Gets volume level in 0-100% range, 0 being pure silence.
+ int GetOutputVolumePercent();
+
+ // Returns node_id of the active output node.
+ uint64 GetActiveOutputNode() const;
+
+ // Returns the node_id of the active input node.
+ uint64 GetActiveInputNode() const;
+
+ // Sets volume level from 0-100%. If less than kMuteThresholdPercent, then
+ // mutes the sound. If it was muted, and |volume_percent| is larger than
+ // the threshold, then the sound is unmuted.
+ void SetOutputVolumePercent(int volume_percent);
+
+ // Adjusts volume up (positive percentage) or down (negative percentage).
+ void AdjustOutputVolumeByPercent(int adjust_by_percent);
+
+ // Mutes or unmutes audio output device.
+ void SetOutputMute(bool mute_on);
+
+ // Mutes or unmutes audio input device.
+ void SetInputMute(bool mute_on);
+
+ // Sets the active audio output node to the node with |node_id|.
+ void SetActiveOutputNode(uint64 node_id);
+
+ // Sets the active audio input node to the node with |node_id|.
+ void SetActiveInputNode(uint64 node_id);
+
+ private:
+ explicit CrasAudioHandler(scoped_refptr<AudioPrefHandler> audio_pref_handler);
+ virtual ~CrasAudioHandler();
+
+ // Overriden from CrasAudioHandler::Observer.
+ virtual void AudioClientRestarted() OVERRIDE;
+ virtual void OutputVolumeChanged(int volume) OVERRIDE;
+ virtual void OutputMuteChanged(bool mute_on) OVERRIDE;
+ virtual void InputMuteChanged(bool mute_on) OVERRIDE;
+ virtual void NodesChanged() OVERRIDE;
+ virtual void ActiveOutputNodeChanged(uint64 node_id) OVERRIDE;
+ virtual void ActiveInputNodeChanged(uint64 node_id) OVERRIDE;
+
+ // Overriden from AudioPrefObserver.
+ virtual void OnAudioPolicyPrefChanged() OVERRIDE;
+
+ // Sets up the initial audio device state based on audio policy and
+ // audio settings saved in prefs.
+ void SetupInitialAudioState();
+
+ // Applies the audio muting policies whenever the user logs in or policy
+ // change notification is received.
+ void ApplyAudioPolicy();
+
+ // Sets output volume to specified value and notifies observers.
+ void SetOutputVolumeInternal(int volume);
+
+ // Calling dbus to get nodes data.
+ void GetNodes();
+
+ // Handles dbus callback for GetNodes.
+ void HandleGetNodes(const chromeos::AudioNodeList& node_list, bool success);
+
+ scoped_refptr<AudioPrefHandler> audio_pref_handler_;
+ base::WeakPtrFactory<CrasAudioHandler> weak_ptr_factory_;
+ ObserverList<AudioObserver> observers_;
+
+ // Audio data and state.
+ AudioNodeList audio_nodes_;
+ VolumeState volume_state_;
+ bool output_mute_on_;
+ bool input_mute_on_;
+ int output_volume_;
+ uint64 active_output_node_id_;
+ uint64 active_input_node_id_;
+
+ bool output_mute_locked_;
+ bool input_mute_locked_;
+
+ DISALLOW_COPY_AND_ASSIGN(CrasAudioHandler);
+};
+
+} // namespace chromeos
+
+#endif // CHROMEOS_AUDIO_CRAS_AUDIO_HANDLER_H_

Powered by Google App Engine
This is Rietveld 408576698