audio_manager_mac.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef MEDIA_AUDIO_MAC_AUDIO_MANAGER_MAC_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MEDIA_AUDIO_MAC_AUDIO_MANAGER_MAC_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/message_loop_proxy.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/audio/audio_manager_base.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/audio/mac/audio_device_listener_mac.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace media {
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Mac OS X implementation of the AudioManager singleton. This class is internal
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// to the audio output and only internal users can call methods not exposed by
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the AudioManager class.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MEDIA_EXPORT AudioManagerMac : public AudioManagerBase {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AudioManagerMac();
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Implementation of AudioManager.
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool HasAudioOutputDevices() OVERRIDE;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool HasAudioInputDevices() OVERRIDE;
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void GetAudioInputDeviceNames(media::AudioDeviceNames* device_names)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      OVERRIDE;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual AudioParameters GetInputStreamParameters(
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::string& device_id) OVERRIDE;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Implementation of AudioManagerBase.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual AudioOutputStream* MakeLinearOutputStream(
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const AudioParameters& params) OVERRIDE;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual AudioOutputStream* MakeLowLatencyOutputStream(
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const AudioParameters& params) OVERRIDE;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual AudioInputStream* MakeLinearInputStream(
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const AudioParameters& params, const std::string& device_id) OVERRIDE;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual AudioInputStream* MakeLowLatencyInputStream(
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const AudioParameters& params, const std::string& device_id) OVERRIDE;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool GetDefaultOutputDevice(AudioDeviceID* device);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool GetDefaultOutputChannels(int* channels,
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       int* channels_per_frame);
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool GetDeviceChannels(AudioDeviceID device,
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                AudioObjectPropertyScope scope,
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                int* channels,
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                int* channels_per_frame);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~AudioManagerMac();
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual AudioParameters GetPreferredOutputStreamParameters(
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const AudioParameters& input_params) OVERRIDE;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Helper methods for constructing AudioDeviceListenerMac on the audio thread.
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CreateDeviceListener();
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void DestroyDeviceListener();
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void DelayedDeviceChange();
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<AudioDeviceListenerMac> output_device_listener_;
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AudioManagerMac);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace media
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // MEDIA_AUDIO_MAC_AUDIO_MANAGER_MAC_H_
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)