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)