108ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project// Copyright (c) 2012 The Chromium Authors. All rights reserved. 208ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project// Use of this source code is governed by a BSD-style license that can be 308ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project// found in the LICENSE file. 408ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project 508ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project#ifndef MEDIA_AUDIO_MAC_AUDIO_DEVICE_LISTENER_MAC_H_ 608ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project#define MEDIA_AUDIO_MAC_AUDIO_DEVICE_LISTENER_MAC_H_ 708ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project 808ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project#include <CoreAudio/AudioHardware.h> 908ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project 1008ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project#include "base/basictypes.h" 1108ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project#include "base/callback.h" 1208ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project#include "base/threading/thread_checker.h" 1308ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project#include "media/base/media_export.h" 1408ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project 1508ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Projectnamespace media { 1608ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project 1708ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project// AudioDeviceListenerMac facilitates execution of device listener callbacks 18860d2707ce126ef8f66e3eac7ceeab6d24218cd8Kenny Root// issued via CoreAudio. 1908ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Projectclass MEDIA_EXPORT AudioDeviceListenerMac { 2001cce891dd313a0fb9d4694283f2a13fb5c43afeAlex Klyubin public: 213c072fb087eaa1a363fc673c60f5ef65390e356fKenny Root // |listener_cb| will be called when a device change occurs; it's a permanent 2201cce891dd313a0fb9d4694283f2a13fb5c43afeAlex Klyubin // callback and must outlive AudioDeviceListenerMac. Note that |listener_cb| 233c072fb087eaa1a363fc673c60f5ef65390e356fKenny Root // might not be executed on the same thread as construction. 2408ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project explicit AudioDeviceListenerMac(const base::Closure& listener_cb); 2508ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project ~AudioDeviceListenerMac(); 2608ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project 2708ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project private: 283c072fb087eaa1a363fc673c60f5ef65390e356fKenny Root friend class AudioDeviceListenerMacTest; 2908ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project static const AudioObjectPropertyAddress kDeviceChangePropertyAddress; 3008ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project 313c072fb087eaa1a363fc673c60f5ef65390e356fKenny Root static OSStatus OnDefaultDeviceChanged( 323c072fb087eaa1a363fc673c60f5ef65390e356fKenny Root AudioObjectID object, UInt32 num_addresses, 333b1ef2640bbf3a58125b03883759de5b654106a5Brian Carlstrom const AudioObjectPropertyAddress addresses[], void* context); 343c072fb087eaa1a363fc673c60f5ef65390e356fKenny Root 353c072fb087eaa1a363fc673c60f5ef65390e356fKenny Root base::Closure listener_cb_; 3601cce891dd313a0fb9d4694283f2a13fb5c43afeAlex Klyubin 3708ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project // AudioDeviceListenerMac must be constructed and destructed on the same 3808ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project // thread. 393c072fb087eaa1a363fc673c60f5ef65390e356fKenny Root base::ThreadChecker thread_checker_; 403c072fb087eaa1a363fc673c60f5ef65390e356fKenny Root 4108ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project DISALLOW_COPY_AND_ASSIGN(AudioDeviceListenerMac); 4208ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project}; 433c072fb087eaa1a363fc673c60f5ef65390e356fKenny Root 4408ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project} // namespace media 4508ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project 463c072fb087eaa1a363fc673c60f5ef65390e356fKenny Root#endif // MEDIA_AUDIO_MAC_AUDIO_DEVICE_LISTENER_MAC_H_ 4708ecc8c0f00f1a7f2258c569187e36606ed73045The Android Open Source Project