AudioPolicyService.h revision 65ab47156e1c7dfcd8cc4266253a5ff30219e7f0
165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian/*
265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Copyright (C) 2009 The Android Open Source Project
365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian *
465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License");
565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * you may not use this file except in compliance with the License.
665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * You may obtain a copy of the License at
765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian *
865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian *      http://www.apache.org/licenses/LICENSE-2.0
965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian *
1065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * Unless required by applicable law or agreed to in writing, software
1165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS,
1265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * See the License for the specific language governing permissions and
1465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian * limitations under the License.
1565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian */
1665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
1765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#ifndef ANDROID_AUDIOPOLICYSERVICE_H
1865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#define ANDROID_AUDIOPOLICYSERVICE_H
1965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
2065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#include <media/IAudioPolicyService.h>
2165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#include <hardware_legacy/AudioPolicyInterface.h>
2265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#include <media/ToneGenerator.h>
2365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#include <utils/Vector.h>
2465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
2565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopiannamespace android {
2665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
2765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopianclass String8;
2865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
2965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian// ----------------------------------------------------------------------------
3065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
3165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopianclass AudioPolicyService: public BnAudioPolicyService, public AudioPolicyClientInterface, public IBinder::DeathRecipient
3265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian{
3365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
3465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopianpublic:
3565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    static  void        instantiate();
3665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
3765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t    dump(int fd, const Vector<String16>& args);
3865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
3965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    //
4065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    // BnAudioPolicyService (see AudioPolicyInterface for method descriptions)
4165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    //
4265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
4365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t setDeviceConnectionState(AudioSystem::audio_devices device,
4465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                              AudioSystem::device_connection_state state,
4565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                              const char *device_address);
4665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual AudioSystem::device_connection_state getDeviceConnectionState(AudioSystem::audio_devices device,
4765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                                                          const char *device_address);
4865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t setPhoneState(int state);
4965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t setRingerMode(uint32_t mode, uint32_t mask);
5065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t setForceUse(AudioSystem::force_use usage, AudioSystem::forced_config config);
5165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual AudioSystem::forced_config getForceUse(AudioSystem::force_use usage);
5265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual audio_io_handle_t getOutput(AudioSystem::stream_type stream,
5365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                        uint32_t samplingRate = 0,
5465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                        uint32_t format = AudioSystem::FORMAT_DEFAULT,
5565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                        uint32_t channels = 0,
5665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                        AudioSystem::output_flags flags = AudioSystem::OUTPUT_FLAG_INDIRECT);
5765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t startOutput(audio_io_handle_t output, AudioSystem::stream_type stream);
5865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t stopOutput(audio_io_handle_t output, AudioSystem::stream_type stream);
5965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual void releaseOutput(audio_io_handle_t output);
6065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual audio_io_handle_t getInput(int inputSource,
6165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                    uint32_t samplingRate = 0,
6265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                    uint32_t format = AudioSystem::FORMAT_DEFAULT,
6365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                    uint32_t channels = 0,
6465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                    AudioSystem::audio_in_acoustics acoustics = (AudioSystem::audio_in_acoustics)0);
6565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t startInput(audio_io_handle_t input);
6665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t stopInput(audio_io_handle_t input);
6765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual void releaseInput(audio_io_handle_t input);
6865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t initStreamVolume(AudioSystem::stream_type stream,
6965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                      int indexMin,
7065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                      int indexMax);
7165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t setStreamVolumeIndex(AudioSystem::stream_type stream, int index);
7265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t getStreamVolumeIndex(AudioSystem::stream_type stream, int *index);
7365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
7465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual     status_t    onTransact(
7565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                uint32_t code,
7665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                const Parcel& data,
7765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                Parcel* reply,
7865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                uint32_t flags);
7965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
8065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    // IBinder::DeathRecipient
8165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual     void        binderDied(const wp<IBinder>& who);
8265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
8365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    //
8465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    // AudioPolicyClientInterface
8565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    //
8665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual audio_io_handle_t openOutput(uint32_t *pDevices,
8765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                    uint32_t *pSamplingRate,
8865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                    uint32_t *pFormat,
8965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                    uint32_t *pChannels,
9065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                    uint32_t *pLatencyMs,
9165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                    AudioSystem::output_flags flags);
9265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual audio_io_handle_t openDuplicateOutput(audio_io_handle_t output1, audio_io_handle_t output2);
9365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t closeOutput(audio_io_handle_t output);
9465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t suspendOutput(audio_io_handle_t output);
9565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t restoreOutput(audio_io_handle_t output);
9665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual audio_io_handle_t openInput(uint32_t *pDevices,
9765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                    uint32_t *pSamplingRate,
9865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                    uint32_t *pFormat,
9965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                    uint32_t *pChannels,
10065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                                    uint32_t acoustics);
10165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t closeInput(audio_io_handle_t input);
10265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t setStreamVolume(AudioSystem::stream_type stream, float volume, audio_io_handle_t output, int delayMs = 0);
10365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t setStreamOutput(AudioSystem::stream_type stream, audio_io_handle_t output);
10465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual void setParameters(audio_io_handle_t ioHandle, const String8& keyValuePairs, int delayMs = 0);
10565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual String8 getParameters(audio_io_handle_t ioHandle, const String8& keys);
10665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t startTone(ToneGenerator::tone_type tone, AudioSystem::stream_type stream);
10765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t stopTone();
10865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual status_t setVoiceVolume(float volume, int delayMs = 0);
10965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
11065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopianprivate:
11165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                        AudioPolicyService();
11265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    virtual             ~AudioPolicyService();
11365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
11465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            status_t dumpInternals(int fd);
11565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
11665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    // Thread used for tone playback and to send audio config commands to audio flinger
11765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    // For tone playback, using a separate thread is necessary to avoid deadlock with mLock because startTone()
11865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    // and stopTone() are normally called with mLock locked and requesting a tone start or stop will cause
11965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    // calls to AudioPolicyService and an attempt to lock mLock.
12065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    // For audio config commands, it is necessary because audio flinger requires that the calling process (user)
12165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    // has permission to modify audio settings.
12265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    class AudioCommandThread : public Thread {
12365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        class AudioCommand;
12465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    public:
12565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
12665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        // commands for tone AudioCommand
12765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        enum {
12865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            START_TONE,
12965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            STOP_TONE,
13065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            SET_VOLUME,
13165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            SET_PARAMETERS,
13265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            SET_VOICE_VOLUME
13365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        };
13465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
13565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        AudioCommandThread (String8 name);
13665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        virtual             ~AudioCommandThread();
13765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
13865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                    status_t    dump(int fd);
13965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
14065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        // Thread virtuals
14165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        virtual     void        onFirstRef();
14265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        virtual     bool        threadLoop();
14365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
14465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                    void        exit();
14565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                    void        startToneCommand(int type = 0, int stream = 0);
14665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                    void        stopToneCommand();
14765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                    status_t    volumeCommand(int stream, float volume, int output, int delayMs = 0);
14865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                    status_t    parametersCommand(int ioHandle, const String8& keyValuePairs, int delayMs = 0);
14965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                    status_t    voiceVolumeCommand(float volume, int delayMs = 0);
15065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                    void        insertCommand_l(AudioCommand *command, int delayMs = 0);
15165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
15265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    private:
15365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        // descriptor for requested tone playback event
15465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        class AudioCommand {
15565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
15665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        public:
15765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            AudioCommand()
15865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            : mCommand(-1) {}
15965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
16065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            void dump(char* buffer, size_t size);
16165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
16265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            int mCommand;   // START_TONE, STOP_TONE ...
16365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            nsecs_t mTime;  // time stamp
16465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            Condition mCond; // condition for status return
16565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            status_t mStatus; // command status
16665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            bool mWaitStatus; // true if caller is waiting for status
16765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            void *mParam;     // command parameter (ToneData, VolumeData, ParametersData)
16865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        };
16965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
17065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        class ToneData {
17165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        public:
17265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            int mType;      // tone type (START_TONE only)
17365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            int mStream;    // stream type (START_TONE only)
17465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        };
17565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
17665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        class VolumeData {
17765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        public:
17865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            int mStream;
17965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            float mVolume;
18065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            int mIO;
18165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        };
18265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
18365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        class ParametersData {
18465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        public:
18565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            int mIO;
18665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            String8 mKeyValuePairs;
18765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        };
18865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
18965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        class VoiceVolumeData {
19065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        public:
19165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian            float mVolume;
19265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        };
19365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
19465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        Mutex   mLock;
19565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        Condition mWaitWorkCV;
19665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        Vector <AudioCommand *> mAudioCommands; // list of pending commands
19765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        ToneGenerator *mpToneGenerator;     // the tone generator
19865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        AudioCommand mLastCommand;          // last processed command (used by dump)
19965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian        String8 mName;                      // string used by wake lock fo delayed commands
20065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    };
20165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
20265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    // Internal dump utilities.
20365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    status_t dumpPermissionDenial(int fd);
20465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
20565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
20665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    Mutex   mLock;      // prevents concurrent access to AudioPolicy manager functions changing device
20765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian                        // connection stated our routing
20865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    AudioPolicyInterface* mpPolicyManager;          // the platform specific policy manager
20965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    sp <AudioCommandThread> mAudioCommandThread;    // audio commands thread
21065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian    sp <AudioCommandThread> mTonePlaybackThread;     // tone playback thread
21165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian};
21265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
21365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian}; // namespace android
21465ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
21565ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian#endif // ANDROID_AUDIOPOLICYSERVICE_H
21665ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
21765ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
21865ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
21965ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
22065ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
22165ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
22265ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
22365ab47156e1c7dfcd8cc4266253a5ff30219e7f0Mathias Agopian
224