1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*
2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *
4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Use of this source code is governed by a BSD-style license
5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  that can be found in the LICENSE file in the root of the source
6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  tree. An additional intellectual property rights grant can be found
7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  in the file PATENTS.  All contributing project authors may
8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */
10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_AUDIO_DEVICE_AUDIO_MIXER_MANAGER_MAC_H
12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_AUDIO_DEVICE_AUDIO_MIXER_MANAGER_MAC_H
13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
14bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/modules/audio_device/include/audio_device.h"
15bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
16bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/typedefs.h"
17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <CoreAudio/CoreAudio.h>
19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc {
21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass AudioMixerManagerMac
23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic:
2564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t OpenSpeaker(AudioDeviceID deviceID);
2664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t OpenMicrophone(AudioDeviceID deviceID);
2764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t SetSpeakerVolume(uint32_t volume);
2864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t SpeakerVolume(uint32_t& volume) const;
2964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t MaxSpeakerVolume(uint32_t& maxVolume) const;
3064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t MinSpeakerVolume(uint32_t& minVolume) const;
3164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t SpeakerVolumeStepSize(uint16_t& stepSize) const;
3264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t SpeakerVolumeIsAvailable(bool& available);
3364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t SpeakerMuteIsAvailable(bool& available);
3464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t SetSpeakerMute(bool enable);
3564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t SpeakerMute(bool& enabled) const;
3664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t StereoPlayoutIsAvailable(bool& available);
3764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t StereoRecordingIsAvailable(bool& available);
3864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t MicrophoneMuteIsAvailable(bool& available);
3964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t SetMicrophoneMute(bool enable);
4064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t MicrophoneMute(bool& enabled) const;
4164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t MicrophoneBoostIsAvailable(bool& available);
4264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t SetMicrophoneBoost(bool enable);
4364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t MicrophoneBoost(bool& enabled) const;
4464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t MicrophoneVolumeIsAvailable(bool& available);
4564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t SetMicrophoneVolume(uint32_t volume);
4664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t MicrophoneVolume(uint32_t& volume) const;
4764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t MaxMicrophoneVolume(uint32_t& maxVolume) const;
4864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t MinMicrophoneVolume(uint32_t& minVolume) const;
4964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t MicrophoneVolumeStepSize(uint16_t& stepSize) const;
5064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t Close();
5164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t CloseSpeaker();
5264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t CloseMicrophone();
53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    bool SpeakerIsInitialized() const;
54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    bool MicrophoneIsInitialized() const;
55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic:
5764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    AudioMixerManagerMac(const int32_t id);
58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ~AudioMixerManagerMac();
59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate:
61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    static void logCAMsg(const TraceLevel level,
62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                         const TraceModule module,
6364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org                         const int32_t id, const char *msg,
64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                         const char *err);
65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate:
67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    CriticalSectionWrapper& _critSect;
6864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    int32_t _id;
69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    AudioDeviceID _inputDeviceID;
71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    AudioDeviceID _outputDeviceID;
72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
7364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    uint16_t _noInputChannels;
7464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org    uint16_t _noOutputChannels;
75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
783b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org}  // namespace webrtc
79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif  // AUDIO_MIXER_MAC_H
81